time/serde/timestamp/
mod.rs1pub mod microseconds;
11pub mod milliseconds;
12pub mod milliseconds_i64;
13pub mod nanoseconds;
14
15use serde::{de, Deserialize, Deserializer, Serialize, Serializer};
16
17use crate::OffsetDateTime;
18
19#[inline]
21pub fn serialize<S: Serializer>(
22 datetime: &OffsetDateTime,
23 serializer: S,
24) -> Result<S::Ok, S::Error> {
25 datetime.unix_timestamp().serialize(serializer)
26}
27
28#[inline]
30pub fn deserialize<'a, D: Deserializer<'a>>(deserializer: D) -> Result<OffsetDateTime, D::Error> {
31 OffsetDateTime::from_unix_timestamp(<_>::deserialize(deserializer)?)
32 .map_err(|err| de::Error::invalid_value(de::Unexpected::Signed(err.value), &err))
33}
34
35pub mod option {
45 use super::*;
46
47 #[inline]
49 pub fn serialize<S: Serializer>(
50 option: &Option<OffsetDateTime>,
51 serializer: S,
52 ) -> Result<S::Ok, S::Error> {
53 option
54 .map(OffsetDateTime::unix_timestamp)
55 .serialize(serializer)
56 }
57
58 #[inline]
60 pub fn deserialize<'a, D: Deserializer<'a>>(
61 deserializer: D,
62 ) -> Result<Option<OffsetDateTime>, D::Error> {
63 Option::deserialize(deserializer)?
64 .map(OffsetDateTime::from_unix_timestamp)
65 .transpose()
66 .map_err(|err| de::Error::invalid_value(de::Unexpected::Signed(err.value), &err))
67 }
68}