k8s_openapi_ext/ext/
time.rs

1use super::*;
2
3pub trait TimeExt: Sized {
4    fn now() -> Self;
5
6    fn to_system_time(&self) -> std::time::SystemTime;
7
8    fn try_from_system_time(time: std::time::SystemTime) -> Result<Self, jiff::Error>;
9
10    #[cfg(feature = "time")]
11    fn to_utc_date_time(&self) -> ::time::UtcDateTime;
12
13    #[cfg(feature = "time")]
14    fn try_from_utc_date_time(time: ::time::UtcDateTime) -> Result<Self, jiff::Error>;
15
16    fn from_zoned(time: jiff::Zoned) -> Self;
17
18    fn try_to_zoned(&self) -> Result<jiff::Zoned, jiff::Error> {
19        let system_time = self.to_system_time();
20        jiff::Zoned::try_from(system_time)
21    }
22}
23
24impl TimeExt for metav1::Time {
25    fn now() -> Self {
26        Self(jiff::Timestamp::now())
27    }
28
29    fn to_system_time(&self) -> std::time::SystemTime {
30        self.0.into()
31    }
32
33    fn try_from_system_time(time: std::time::SystemTime) -> Result<Self, jiff::Error> {
34        time.try_into().map(Self)
35    }
36
37    fn from_zoned(time: jiff::Zoned) -> Self {
38        Self(time.into())
39    }
40
41    #[cfg(feature = "time")]
42    fn to_utc_date_time(&self) -> ::time::UtcDateTime {
43        self.to_system_time().into()
44    }
45
46    #[cfg(feature = "time")]
47    fn try_from_utc_date_time(time: ::time::UtcDateTime) -> Result<Self, jiff::Error> {
48        Self::try_from_system_time(time.into())
49    }
50}