fidl_next_codec/
compat.rs1pub trait CompatFrom<T> {
7 fn compat_from(value: T) -> Self;
9}
10
11macro_rules! impl_compat_from_for_primitives {
12 ($($ty:ty),* $(,)?) => {
13 $(
14 impl CompatFrom<$ty> for $ty {
15 fn compat_from(value: $ty) -> Self {
16 value
17 }
18 }
19 )*
20 };
21}
22
23impl_compat_from_for_primitives! {
24 i8, i16, i32, i64,
25 u8, u16, u32, u64,
26 f32, f64,
27 bool,
28 (),
29}
30
31impl<T, U: CompatFrom<T>> CompatFrom<Option<T>> for Option<U> {
32 fn compat_from(value: Option<T>) -> Self {
33 value.map(U::compat_from)
34 }
35}
36
37impl<T, U: CompatFrom<T>> CompatFrom<Box<T>> for Box<U> {
38 fn compat_from(value: Box<T>) -> Self {
39 Box::new(U::compat_from(*value))
40 }
41}
42
43impl<T, U: CompatFrom<T>, const N: usize> CompatFrom<[T; N]> for [U; N] {
44 fn compat_from(value: [T; N]) -> Self {
45 value.map(U::compat_from)
46 }
47}
48
49impl<T, U: CompatFrom<T>> CompatFrom<Vec<T>> for Vec<U> {
50 fn compat_from(mut value: Vec<T>) -> Self {
51 value.drain(..).map(U::compat_from).collect()
52 }
53}
54
55impl CompatFrom<String> for String {
56 fn compat_from(value: String) -> Self {
57 value
58 }
59}
60
61#[cfg(feature = "fuchsia")]
62impl CompatFrom<zx::Handle> for zx::Handle {
63 fn compat_from(value: zx::Handle) -> Self {
64 value
65 }
66}
67
68#[cfg(feature = "fuchsia")]
69macro_rules! impl_compat_from_for_handle_types {
70 ($($name:ident),* $(,)?) => {
71 $(
72 #[cfg(feature = "fuchsia")]
73 impl CompatFrom<zx::$name> for zx::$name {
74 fn compat_from(value: zx::$name) -> Self {
75 value
76 }
77 }
78 )*
79 };
80}
81
82#[cfg(feature = "fuchsia")]
83impl_compat_from_for_handle_types! {
84 Process,
85 Thread,
86 Vmo,
87 Channel,
88 Event,
89 Port,
90 Interrupt,
91 Socket,
92 Resource,
93 EventPair,
94 Job,
95 Vmar,
96 Fifo,
97 Guest,
98 Vcpu,
99 Timer,
100 Iommu,
101 Bti,
102 Profile,
103 Pmt,
104 Pager,
105 Exception,
106 Clock,
107 Stream,
108 Iob,
109}
110
111impl<T: fidl::Timeline> CompatFrom<i64> for ::fidl::Instant<T, ::fidl::NsUnit> {
112 fn compat_from(value: i64) -> Self {
113 Self::from_nanos(value)
114 }
115}
116
117impl<T: fidl::Timeline> CompatFrom<::fidl::Instant<T, ::fidl::NsUnit>> for i64 {
118 fn compat_from(value: ::fidl::Instant<T, ::fidl::NsUnit>) -> Self {
119 value.into_nanos()
120 }
121}
122
123impl<T: fidl::Timeline> CompatFrom<i64> for fidl::Instant<T, fidl::TicksUnit> {
124 fn compat_from(value: i64) -> Self {
125 Self::from_raw(value)
126 }
127}
128
129impl<T: fidl::Timeline> CompatFrom<::fidl::Instant<T, ::fidl::TicksUnit>> for i64 {
130 fn compat_from(value: ::fidl::Instant<T, ::fidl::TicksUnit>) -> Self {
131 value.into_raw()
132 }
133}