fidl_fuchsia_net_power__common/
fidl_fuchsia_net_power__common.rs

1// WARNING: This file is machine generated by fidlgen.
2
3#![warn(clippy::all)]
4#![allow(unused_parens, unused_mut, unused_imports, nonstandard_style)]
5
6use bitflags::bitflags;
7use fidl::encoding::{MessageBufFor, ProxyChannelBox, ResourceDialect};
8use futures::future::{self, MaybeDone, TryFutureExt};
9use zx_status;
10
11pub const MAX_NAME_LEN: u8 = 255;
12
13#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
14pub struct Empty;
15
16impl fidl::Persistable for Empty {}
17
18#[derive(Clone, Debug, Default, PartialEq)]
19pub struct WakeGroupOptions {
20    /// A name to identify the wake group for the purposes of debugging.
21    ///
22    /// Optional. If absent, the netstack chooses a debug name.
23    pub debug_name: Option<String>,
24    #[doc(hidden)]
25    pub __source_breaking: fidl::marker::SourceBreaking,
26}
27
28impl fidl::Persistable for WakeGroupOptions {}
29
30pub mod wake_group_ordinals {
31    pub const WAIT_FOR_DATA: u64 = 0x1b9ea0f8e92c2e79;
32    pub const ARM: u64 = 0x4339c3052501e712;
33}
34
35pub mod wake_group_provider_ordinals {
36    pub const CREATE_WAKE_GROUP: u64 = 0x3c6a15f6c6b1447f;
37}
38
39mod internal {
40    use super::*;
41
42    impl fidl::encoding::ValueTypeMarker for Empty {
43        type Borrowed<'a> = &'a Self;
44        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
45            value
46        }
47    }
48
49    unsafe impl fidl::encoding::TypeMarker for Empty {
50        type Owned = Self;
51
52        #[inline(always)]
53        fn inline_align(_context: fidl::encoding::Context) -> usize {
54            1
55        }
56
57        #[inline(always)]
58        fn inline_size(_context: fidl::encoding::Context) -> usize {
59            1
60        }
61    }
62
63    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Empty, D> for &Empty {
64        #[inline]
65        unsafe fn encode(
66            self,
67            encoder: &mut fidl::encoding::Encoder<'_, D>,
68            offset: usize,
69            _depth: fidl::encoding::Depth,
70        ) -> fidl::Result<()> {
71            encoder.debug_check_bounds::<Empty>(offset);
72            encoder.write_num(0u8, offset);
73            Ok(())
74        }
75    }
76
77    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Empty {
78        #[inline(always)]
79        fn new_empty() -> Self {
80            Self
81        }
82
83        #[inline]
84        unsafe fn decode(
85            &mut self,
86            decoder: &mut fidl::encoding::Decoder<'_, D>,
87            offset: usize,
88            _depth: fidl::encoding::Depth,
89        ) -> fidl::Result<()> {
90            decoder.debug_check_bounds::<Self>(offset);
91            match decoder.read_num::<u8>(offset) {
92                0 => Ok(()),
93                _ => Err(fidl::Error::Invalid),
94            }
95        }
96    }
97
98    impl WakeGroupOptions {
99        #[inline(always)]
100        fn max_ordinal_present(&self) -> u64 {
101            if let Some(_) = self.debug_name {
102                return 1;
103            }
104            0
105        }
106    }
107
108    impl fidl::encoding::ValueTypeMarker for WakeGroupOptions {
109        type Borrowed<'a> = &'a Self;
110        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
111            value
112        }
113    }
114
115    unsafe impl fidl::encoding::TypeMarker for WakeGroupOptions {
116        type Owned = Self;
117
118        #[inline(always)]
119        fn inline_align(_context: fidl::encoding::Context) -> usize {
120            8
121        }
122
123        #[inline(always)]
124        fn inline_size(_context: fidl::encoding::Context) -> usize {
125            16
126        }
127    }
128
129    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<WakeGroupOptions, D>
130        for &WakeGroupOptions
131    {
132        unsafe fn encode(
133            self,
134            encoder: &mut fidl::encoding::Encoder<'_, D>,
135            offset: usize,
136            mut depth: fidl::encoding::Depth,
137        ) -> fidl::Result<()> {
138            encoder.debug_check_bounds::<WakeGroupOptions>(offset);
139            // Vector header
140            let max_ordinal: u64 = self.max_ordinal_present();
141            encoder.write_num(max_ordinal, offset);
142            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
143            // Calling encoder.out_of_line_offset(0) is not allowed.
144            if max_ordinal == 0 {
145                return Ok(());
146            }
147            depth.increment()?;
148            let envelope_size = 8;
149            let bytes_len = max_ordinal as usize * envelope_size;
150            #[allow(unused_variables)]
151            let offset = encoder.out_of_line_offset(bytes_len);
152            let mut _prev_end_offset: usize = 0;
153            if 1 > max_ordinal {
154                return Ok(());
155            }
156
157            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
158            // are envelope_size bytes.
159            let cur_offset: usize = (1 - 1) * envelope_size;
160
161            // Zero reserved fields.
162            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
163
164            // Safety:
165            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
166            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
167            //   envelope_size bytes, there is always sufficient room.
168            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<255>, D>(
169                self.debug_name.as_ref().map(
170                    <fidl::encoding::BoundedString<255> as fidl::encoding::ValueTypeMarker>::borrow,
171                ),
172                encoder,
173                offset + cur_offset,
174                depth,
175            )?;
176
177            _prev_end_offset = cur_offset + envelope_size;
178
179            Ok(())
180        }
181    }
182
183    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for WakeGroupOptions {
184        #[inline(always)]
185        fn new_empty() -> Self {
186            Self::default()
187        }
188
189        unsafe fn decode(
190            &mut self,
191            decoder: &mut fidl::encoding::Decoder<'_, D>,
192            offset: usize,
193            mut depth: fidl::encoding::Depth,
194        ) -> fidl::Result<()> {
195            decoder.debug_check_bounds::<Self>(offset);
196            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
197                None => return Err(fidl::Error::NotNullable),
198                Some(len) => len,
199            };
200            // Calling decoder.out_of_line_offset(0) is not allowed.
201            if len == 0 {
202                return Ok(());
203            };
204            depth.increment()?;
205            let envelope_size = 8;
206            let bytes_len = len * envelope_size;
207            let offset = decoder.out_of_line_offset(bytes_len)?;
208            // Decode the envelope for each type.
209            let mut _next_ordinal_to_read = 0;
210            let mut next_offset = offset;
211            let end_offset = offset + bytes_len;
212            _next_ordinal_to_read += 1;
213            if next_offset >= end_offset {
214                return Ok(());
215            }
216
217            // Decode unknown envelopes for gaps in ordinals.
218            while _next_ordinal_to_read < 1 {
219                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
220                _next_ordinal_to_read += 1;
221                next_offset += envelope_size;
222            }
223
224            let next_out_of_line = decoder.next_out_of_line();
225            let handles_before = decoder.remaining_handles();
226            if let Some((inlined, num_bytes, num_handles)) =
227                fidl::encoding::decode_envelope_header(decoder, next_offset)?
228            {
229                let member_inline_size =
230                    <fidl::encoding::BoundedString<255> as fidl::encoding::TypeMarker>::inline_size(
231                        decoder.context,
232                    );
233                if inlined != (member_inline_size <= 4) {
234                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
235                }
236                let inner_offset;
237                let mut inner_depth = depth.clone();
238                if inlined {
239                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
240                    inner_offset = next_offset;
241                } else {
242                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
243                    inner_depth.increment()?;
244                }
245                let val_ref = self
246                    .debug_name
247                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<255>, D));
248                fidl::decode!(
249                    fidl::encoding::BoundedString<255>,
250                    D,
251                    val_ref,
252                    decoder,
253                    inner_offset,
254                    inner_depth
255                )?;
256                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
257                {
258                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
259                }
260                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
261                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
262                }
263            }
264
265            next_offset += envelope_size;
266
267            // Decode the remaining unknown envelopes.
268            while next_offset < end_offset {
269                _next_ordinal_to_read += 1;
270                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
271                next_offset += envelope_size;
272            }
273
274            Ok(())
275        }
276    }
277}