summaryrefslogtreecommitdiff
path: root/src/serde.rs
diff options
context:
space:
mode:
authorstuebinm2022-02-01 19:40:12 +0100
committerstuebinm2022-02-01 19:40:12 +0100
commitd6c0c640e64fceba6c280d76ee64d44831e9afef (patch)
tree199582ce5622c5a7593666a0e1799cdb68e96968 /src/serde.rs
parent80a4af9f0a6f7e3bd2d8254f8bc8475ca73b8980 (diff)
handle (esp. iceportal) timestamps correctly
why use unix time if you can use unix time * 1000 while your margin of error will never be lower than a full minute?
Diffstat (limited to 'src/serde.rs')
-rw-r--r--src/serde.rs21
1 files changed, 16 insertions, 5 deletions
diff --git a/src/serde.rs b/src/serde.rs
index 9049d64..486929a 100644
--- a/src/serde.rs
+++ b/src/serde.rs
@@ -1,22 +1,33 @@
-use chrono::NaiveDateTime;
+use chrono::{DateTime, NaiveDateTime, Utc};
use serde::{Deserialize, Deserializer};
-pub fn naive_read_unixtime<'de, D>(d: D) -> Result<NaiveDateTime, D::Error>
+pub fn naive_read_unixtime<'de, D>(d: D) -> Result<DateTime<Utc>, D::Error>
where
D: Deserializer<'de>,
{
let ts = <i64>::deserialize(d)?;
- Ok(NaiveDateTime::from_timestamp(ts, 0))
+ Ok(DateTime::<Utc>::from_utc(NaiveDateTime::from_timestamp(ts, 0), Utc))
}
-pub fn option_naive_read_unixtime<'de, D>(d: D) -> Result<Option<NaiveDateTime>, D::Error>
+pub fn option_naive_read_unixtime<'de, D>(d: D) -> Result<Option<DateTime<Utc>>, D::Error>
where
D: Deserializer<'de>,
{
match <i64>::deserialize(d) {
Ok(ts) =>
- Ok(Some(NaiveDateTime::from_timestamp(ts, 0))),
+ Ok(Some(DateTime::<Utc>::from_utc(NaiveDateTime::from_timestamp(ts, 0), Utc))),
+ Err(_) => Ok(None)
+ }
+}
+
+pub fn option_naive_read_unixtime_db<'de, D>(d: D) -> Result<Option<DateTime<Utc>>, D::Error>
+where
+ D: Deserializer<'de>,
+{
+ match <i64>::deserialize(d) {
+ Ok(ts) =>
+ Ok(Some(DateTime::<Utc>::from_utc(NaiveDateTime::from_timestamp(ts/1000, 0), Utc))),
Err(_) => Ok(None)
}
}