diff --git a/src/lib.rs b/src/lib.rs index 8f9dfe9..169ca10 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -219,6 +219,7 @@ mod executor; #[cfg(feature = "builder")] #[cfg_attr(docsrs, doc(cfg(feature = "builder")))] pub mod message; +mod time; pub mod transport; use std::error::Error as StdError; diff --git a/src/message/dkim.rs b/src/message/dkim.rs index 4ee56c2..5154cb1 100644 --- a/src/message/dkim.rs +++ b/src/message/dkim.rs @@ -347,11 +347,7 @@ fn dkim_canonicalize_headers<'a>( /// `dkim_config` pub fn dkim_sign(message: &mut Message, dkim_config: &DkimConfig) { #[cfg(feature = "web")] - dkim_sign_fixed_time( - message, - dkim_config, - crate::message::to_std_systemtime(web_time::SystemTime::now()), - ); + dkim_sign_fixed_time(message, dkim_config, crate::time::now()); #[cfg(not(feature = "web"))] dkim_sign_fixed_time(message, dkim_config, SystemTime::now()); } diff --git a/src/message/header/date.rs b/src/message/header/date.rs index 36b8185..7ce8b19 100644 --- a/src/message/header/date.rs +++ b/src/message/header/date.rs @@ -21,12 +21,7 @@ impl Date { /// /// Shortcut for `Date::new(SystemTime::now())` pub fn now() -> Self { - #[cfg(not(feature = "web"))] - return Self::new(SystemTime::now()); - #[cfg(feature = "web")] - return Self::new(crate::message::to_std_systemtime( - web_time::SystemTime::now(), - )); + Self::new(crate::time::now()) } } diff --git a/src/message/mod.rs b/src/message/mod.rs index 3650862..9e37114 100644 --- a/src/message/mod.rs +++ b/src/message/mod.rs @@ -277,10 +277,7 @@ impl MessageBuilder { /// Shortcut for `self.date(SystemTime::now())`, it is automatically inserted /// if no date has been provided. pub fn date_now(self) -> Self { - #[cfg(not(feature = "web"))] - return self.date(SystemTime::now()); - #[cfg(feature = "web")] - return self.date(to_std_systemtime(web_time::SystemTime::now())); + self.date(crate::time::now()) } /// Set or add mailbox to `ReplyTo` header @@ -626,17 +623,8 @@ fn make_message_id() -> String { iter::repeat_with(fastrand::alphanumeric).take(36).collect() } -#[cfg(feature = "web")] -pub(crate) fn to_std_systemtime(time: web_time::SystemTime) -> std::time::SystemTime { - let duration = time - .duration_since(web_time::SystemTime::UNIX_EPOCH) - .unwrap(); - std::time::SystemTime::UNIX_EPOCH + duration -} - #[cfg(test)] mod test { - use std::time::{Duration, SystemTime}; use pretty_assertions::assert_eq; diff --git a/src/time.rs b/src/time.rs new file mode 100644 index 0000000..0fc47f2 --- /dev/null +++ b/src/time.rs @@ -0,0 +1,18 @@ +use std::time::SystemTime; + +#[cfg(feature = "web")] +pub(crate) fn now() -> SystemTime { + fn to_std_systemtime(time: web_time::SystemTime) -> std::time::SystemTime { + let duration = time + .duration_since(web_time::SystemTime::UNIX_EPOCH) + .unwrap(); + SystemTime::UNIX_EPOCH + duration + } + + to_std_systemtime(web_time::SystemTime::now()) +} + +#[cfg(not(feature = "web"))] +pub(crate) fn now() -> SystemTime { + SystemTime::now() +}