summaryrefslogtreecommitdiffstats
path: root/src/datetime.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/datetime.rs')
-rw-r--r--src/datetime.rs26
1 files changed, 26 insertions, 0 deletions
diff --git a/src/datetime.rs b/src/datetime.rs
new file mode 100644
index 0000000..4ee388c
--- /dev/null
+++ b/src/datetime.rs
@@ -0,0 +1,26 @@
+use chrono::{DateTime, Utc};
+use serde::Deserialize;
+
+pub(crate) fn datetime_from_unix_timestamp<'de, D>(
+ deserializer: D
+) -> Result<DateTime<Utc>, D::Error>
+where
+ D: serde::Deserializer<'de>,
+{
+ let timestamp = chrono::NaiveDateTime::from_timestamp(i64::deserialize(deserializer)?, 0);
+ Ok(DateTime::<Utc>::from_utc(timestamp, Utc))
+}
+
+pub(crate) fn datetime_from_nano_timestamp<'de, D>(
+ deserializer: D
+) -> Result<DateTime<Utc>, D::Error>
+where
+ D: serde::Deserializer<'de>,
+{
+ let timestamp_nano = u64::deserialize(deserializer)?;
+ let timestamp = chrono::NaiveDateTime::from_timestamp(
+ (timestamp_nano / 1_000_000_000) as i64,
+ (timestamp_nano % 1_000_000_000) as u32,
+ );
+ Ok(DateTime::<Utc>::from_utc(timestamp, Utc))
+}