network/fundamentals/
duration.rs

1#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
2#[repr(transparent)]
3pub struct Duration(u64);
4
5impl Duration {
6    pub const MINIMUM: Self = Self(u64::MIN);
7    pub const MAXIMUM: Self = Self(u64::MAX);
8
9    pub const fn from_seconds(seconds: u64) -> Self {
10        Self(embassy_time::Duration::from_secs(seconds).as_ticks())
11    }
12
13    pub const fn from_milliseconds(milliseconds: u64) -> Self {
14        Self(embassy_time::Duration::from_millis(milliseconds).as_ticks())
15    }
16
17    pub const fn from_microseconds(microseconds: u64) -> Self {
18        Self(embassy_time::Duration::from_micros(microseconds).as_ticks())
19    }
20
21    pub const fn from_nanoseconds(nanoseconds: u64) -> Self {
22        Self(embassy_time::Duration::from_nanos(nanoseconds).as_ticks())
23    }
24
25    pub const fn as_ticks(&self) -> u64 {
26        self.0
27    }
28
29    pub const fn as_seconds(&self) -> u64 {
30        embassy_time::Duration::from_ticks(self.0).as_secs()
31    }
32
33    pub const fn as_milliseconds(&self) -> u64 {
34        embassy_time::Duration::from_ticks(self.0).as_millis()
35    }
36
37    pub const fn as_microseconds(&self) -> u64 {
38        embassy_time::Duration::from_ticks(self.0).as_micros()
39    }
40
41    pub const fn into_smoltcp(self) -> smoltcp::time::Duration {
42        smoltcp::time::Duration::from_micros(self.as_microseconds())
43    }
44
45    pub const fn into_embassy(self) -> embassy_time::Duration {
46        embassy_time::Duration::from_ticks(self.0)
47    }
48
49    pub const fn from_embassy(value: embassy_time::Duration) -> Self {
50        Self(value.as_ticks())
51    }
52
53    pub const fn from_smoltcp(value: smoltcp::time::Duration) -> Self {
54        Self::from_microseconds(value.micros())
55    }
56}
57
58impl From<embassy_time::Duration> for Duration {
59    fn from(value: embassy_time::Duration) -> Self {
60        Self::from_embassy(value)
61    }
62}
63
64impl From<Duration> for embassy_time::Duration {
65    fn from(value: Duration) -> Self {
66        value.into_embassy()
67    }
68}
69
70impl From<core::time::Duration> for Duration {
71    fn from(value: core::time::Duration) -> Self {
72        Self::from_microseconds(value.as_micros() as u64)
73    }
74}
75
76impl From<Duration> for core::time::Duration {
77    fn from(value: Duration) -> Self {
78        core::time::Duration::from_micros(value.as_microseconds())
79    }
80}