autd3capi_driver/
duration.rs

1#[derive(Clone, Copy)]
2#[repr(C)]
3pub struct Duration {
4    pub nanos: u64,
5}
6
7impl From<std::time::Duration> for Duration {
8    fn from(d: std::time::Duration) -> Self {
9        Self {
10            nanos: d.as_nanos() as u64,
11        }
12    }
13}
14
15impl From<Duration> for std::time::Duration {
16    fn from(d: Duration) -> Self {
17        Self::from_nanos(d.nanos)
18    }
19}
20
21#[derive(Clone, Copy)]
22#[repr(C)]
23pub struct OptionDuration {
24    pub has_value: bool,
25    pub value: Duration,
26}
27
28impl OptionDuration {
29    pub const NONE: Self = Self {
30        has_value: false,
31        value: Duration { nanos: 0 },
32    };
33}
34
35impl From<OptionDuration> for Option<std::time::Duration> {
36    fn from(d: OptionDuration) -> Self {
37        if d.has_value {
38            Some(d.value.into())
39        } else {
40            None
41        }
42    }
43}
44
45impl From<Option<std::time::Duration>> for OptionDuration {
46    fn from(d: Option<std::time::Duration>) -> Self {
47        match d {
48            Some(d) => Self {
49                has_value: true,
50                value: d.into(),
51            },
52            None => Self::NONE,
53        }
54    }
55}