diff options
author | stuebinm | 2022-02-01 19:40:12 +0100 |
---|---|---|
committer | stuebinm | 2022-02-01 19:40:12 +0100 |
commit | d6c0c640e64fceba6c280d76ee64d44831e9afef (patch) | |
tree | 199582ce5622c5a7593666a0e1799cdb68e96968 /src/serde.rs | |
parent | 80a4af9f0a6f7e3bd2d8254f8bc8475ca73b8980 (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 '')
-rw-r--r-- | src/serde.rs | 21 |
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) } } |