k8s_openapi_ext/ext/
time.rs

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