network/fundamentals/
duration.rs1#[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}