1#![cfg_attr(docsrs, feature(doc_cfg))]
8#![allow(clippy::derive_partial_eq_without_eq)]
13#![warn(
14    missing_docs,
15    rustdoc::missing_crate_level_docs,
16    missing_debug_implementations,
17    rust_2018_idioms,
18    unreachable_pub
19)]
20
21use std::fmt;
22
23pub mod sign;
24
25mod date_time;
26
27#[cfg(feature = "sign-eventstream")]
28pub mod event_stream;
29
30#[cfg(feature = "sign-http")]
31pub mod http_request;
32
33#[derive(Debug, Eq, PartialEq, Copy, Clone)]
35#[non_exhaustive]
36pub enum SignatureVersion {
37    V4,
39    V4a,
41}
42
43impl fmt::Display for SignatureVersion {
44    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
45        match self {
46            SignatureVersion::V4 => write!(f, "SigV4"),
47            SignatureVersion::V4a => write!(f, "SigV4a"),
48        }
49    }
50}
51
52#[derive(Debug)]
58pub struct SigningOutput<T> {
59    output: T,
60    signature: String,
61}
62
63impl<T> SigningOutput<T> {
64    pub fn new(output: T, signature: String) -> Self {
66        Self { output, signature }
67    }
68
69    pub fn output(&self) -> &T {
71        &self.output
72    }
73
74    pub fn signature(&self) -> &str {
76        &self.signature
77    }
78
79    pub fn into_parts(self) -> (T, String) {
81        (self.output, self.signature)
82    }
83}