1use axhal::time::TimeValue;
2use linux_raw_sys::general::{
3 __kernel_old_timespec, __kernel_old_timeval, __kernel_sock_timeval, __kernel_timespec,
4 timespec, timeval,
5};
6
7pub trait TimeValueLike {
9 fn from_time_value(tv: TimeValue) -> Self;
11
12 fn to_time_value(self) -> TimeValue;
14}
15
16impl TimeValueLike for TimeValue {
17 fn from_time_value(tv: TimeValue) -> Self {
18 tv
19 }
20
21 fn to_time_value(self) -> TimeValue {
22 self
23 }
24}
25
26impl TimeValueLike for timespec {
27 fn from_time_value(tv: TimeValue) -> Self {
28 Self {
29 tv_sec: tv.as_secs() as _,
30 tv_nsec: tv.subsec_nanos() as _,
31 }
32 }
33
34 fn to_time_value(self) -> TimeValue {
35 TimeValue::new(self.tv_sec as u64, self.tv_nsec as u32)
36 }
37}
38
39impl TimeValueLike for __kernel_timespec {
40 fn from_time_value(tv: TimeValue) -> Self {
41 Self {
42 tv_sec: tv.as_secs() as _,
43 tv_nsec: tv.subsec_nanos() as _,
44 }
45 }
46
47 fn to_time_value(self) -> TimeValue {
48 TimeValue::new(self.tv_sec as u64, self.tv_nsec as u32)
49 }
50}
51
52impl TimeValueLike for __kernel_old_timespec {
53 fn from_time_value(tv: TimeValue) -> Self {
54 Self {
55 tv_sec: tv.as_secs() as _,
56 tv_nsec: tv.subsec_nanos() as _,
57 }
58 }
59
60 fn to_time_value(self) -> TimeValue {
61 TimeValue::new(self.tv_sec as u64, self.tv_nsec as u32)
62 }
63}
64
65impl TimeValueLike for timeval {
66 fn from_time_value(tv: TimeValue) -> Self {
67 Self {
68 tv_sec: tv.as_secs() as _,
69 tv_usec: tv.subsec_micros() as _,
70 }
71 }
72
73 fn to_time_value(self) -> TimeValue {
74 TimeValue::new(self.tv_sec as u64, self.tv_usec as u32 * 1000)
75 }
76}
77
78impl TimeValueLike for __kernel_old_timeval {
79 fn from_time_value(tv: TimeValue) -> Self {
80 Self {
81 tv_sec: tv.as_secs() as _,
82 tv_usec: tv.subsec_micros() as _,
83 }
84 }
85
86 fn to_time_value(self) -> TimeValue {
87 TimeValue::new(self.tv_sec as u64, self.tv_usec as u32 * 1000)
88 }
89}
90
91impl TimeValueLike for __kernel_sock_timeval {
92 fn from_time_value(tv: TimeValue) -> Self {
93 Self {
94 tv_sec: tv.as_secs() as _,
95 tv_usec: tv.subsec_micros() as _,
96 }
97 }
98
99 fn to_time_value(self) -> TimeValue {
100 TimeValue::new(self.tv_sec as u64, self.tv_usec as u32 * 1000)
101 }
102}