fidl_fuchsia_hardware_usb_policy__common/
fidl_fuchsia_hardware_usb_policy__common.rs1#![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
11#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
13pub enum DeviceState {
14 NotAttached,
15 Attached,
16 Powered,
17 Default,
20 Address,
21 Configured,
22 Suspended,
23 #[doc(hidden)]
24 __SourceBreaking {
25 unknown_ordinal: u32,
26 },
27}
28
29#[macro_export]
31macro_rules! DeviceStateUnknown {
32 () => {
33 _
34 };
35}
36
37impl DeviceState {
38 #[inline]
39 pub fn from_primitive(prim: u32) -> Option<Self> {
40 match prim {
41 0 => Some(Self::NotAttached),
42 1 => Some(Self::Attached),
43 2 => Some(Self::Powered),
44 5 => Some(Self::Default),
45 6 => Some(Self::Address),
46 7 => Some(Self::Configured),
47 8 => Some(Self::Suspended),
48 _ => None,
49 }
50 }
51
52 #[inline]
53 pub fn from_primitive_allow_unknown(prim: u32) -> Self {
54 match prim {
55 0 => Self::NotAttached,
56 1 => Self::Attached,
57 2 => Self::Powered,
58 5 => Self::Default,
59 6 => Self::Address,
60 7 => Self::Configured,
61 8 => Self::Suspended,
62 unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
63 }
64 }
65
66 #[inline]
67 pub fn unknown() -> Self {
68 Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
69 }
70
71 #[inline]
72 pub const fn into_primitive(self) -> u32 {
73 match self {
74 Self::NotAttached => 0,
75 Self::Attached => 1,
76 Self::Powered => 2,
77 Self::Default => 5,
78 Self::Address => 6,
79 Self::Configured => 7,
80 Self::Suspended => 8,
81 Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
82 }
83 }
84
85 #[inline]
86 pub fn is_unknown(&self) -> bool {
87 match self {
88 Self::__SourceBreaking { unknown_ordinal: _ } => true,
89 _ => false,
90 }
91 }
92}
93
94#[derive(Clone, Debug, Default, PartialEq)]
96pub struct DeviceStateUpdate {
97 pub state: Option<DeviceState>,
99 pub address: Option<u8>,
101 #[doc(hidden)]
102 pub __source_breaking: fidl::marker::SourceBreaking,
103}
104
105impl fidl::Persistable for DeviceStateUpdate {}
106
107pub mod controller_ordinals {
108 pub const WATCH_DEVICE_STATE: u64 = 0x44628a2275753738;
109}
110
111pub mod device_state_watcher_ordinals {
112 pub const WATCH_DEVICE_STATE: u64 = 0x44628a2275753738;
113}
114
115mod internal {
116 use super::*;
117 unsafe impl fidl::encoding::TypeMarker for DeviceState {
118 type Owned = Self;
119
120 #[inline(always)]
121 fn inline_align(_context: fidl::encoding::Context) -> usize {
122 std::mem::align_of::<u32>()
123 }
124
125 #[inline(always)]
126 fn inline_size(_context: fidl::encoding::Context) -> usize {
127 std::mem::size_of::<u32>()
128 }
129
130 #[inline(always)]
131 fn encode_is_copy() -> bool {
132 false
133 }
134
135 #[inline(always)]
136 fn decode_is_copy() -> bool {
137 false
138 }
139 }
140
141 impl fidl::encoding::ValueTypeMarker for DeviceState {
142 type Borrowed<'a> = Self;
143 #[inline(always)]
144 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
145 *value
146 }
147 }
148
149 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for DeviceState {
150 #[inline]
151 unsafe fn encode(
152 self,
153 encoder: &mut fidl::encoding::Encoder<'_, D>,
154 offset: usize,
155 _depth: fidl::encoding::Depth,
156 ) -> fidl::Result<()> {
157 encoder.debug_check_bounds::<Self>(offset);
158 encoder.write_num(self.into_primitive(), offset);
159 Ok(())
160 }
161 }
162
163 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DeviceState {
164 #[inline(always)]
165 fn new_empty() -> Self {
166 Self::unknown()
167 }
168
169 #[inline]
170 unsafe fn decode(
171 &mut self,
172 decoder: &mut fidl::encoding::Decoder<'_, D>,
173 offset: usize,
174 _depth: fidl::encoding::Depth,
175 ) -> fidl::Result<()> {
176 decoder.debug_check_bounds::<Self>(offset);
177 let prim = decoder.read_num::<u32>(offset);
178
179 *self = Self::from_primitive_allow_unknown(prim);
180 Ok(())
181 }
182 }
183
184 impl DeviceStateUpdate {
185 #[inline(always)]
186 fn max_ordinal_present(&self) -> u64 {
187 if let Some(_) = self.address {
188 return 2;
189 }
190 if let Some(_) = self.state {
191 return 1;
192 }
193 0
194 }
195 }
196
197 impl fidl::encoding::ValueTypeMarker for DeviceStateUpdate {
198 type Borrowed<'a> = &'a Self;
199 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
200 value
201 }
202 }
203
204 unsafe impl fidl::encoding::TypeMarker for DeviceStateUpdate {
205 type Owned = Self;
206
207 #[inline(always)]
208 fn inline_align(_context: fidl::encoding::Context) -> usize {
209 8
210 }
211
212 #[inline(always)]
213 fn inline_size(_context: fidl::encoding::Context) -> usize {
214 16
215 }
216 }
217
218 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<DeviceStateUpdate, D>
219 for &DeviceStateUpdate
220 {
221 unsafe fn encode(
222 self,
223 encoder: &mut fidl::encoding::Encoder<'_, D>,
224 offset: usize,
225 mut depth: fidl::encoding::Depth,
226 ) -> fidl::Result<()> {
227 encoder.debug_check_bounds::<DeviceStateUpdate>(offset);
228 let max_ordinal: u64 = self.max_ordinal_present();
230 encoder.write_num(max_ordinal, offset);
231 encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
232 if max_ordinal == 0 {
234 return Ok(());
235 }
236 depth.increment()?;
237 let envelope_size = 8;
238 let bytes_len = max_ordinal as usize * envelope_size;
239 #[allow(unused_variables)]
240 let offset = encoder.out_of_line_offset(bytes_len);
241 let mut _prev_end_offset: usize = 0;
242 if 1 > max_ordinal {
243 return Ok(());
244 }
245
246 let cur_offset: usize = (1 - 1) * envelope_size;
249
250 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
252
253 fidl::encoding::encode_in_envelope_optional::<DeviceState, D>(
258 self.state.as_ref().map(<DeviceState as fidl::encoding::ValueTypeMarker>::borrow),
259 encoder,
260 offset + cur_offset,
261 depth,
262 )?;
263
264 _prev_end_offset = cur_offset + envelope_size;
265 if 2 > max_ordinal {
266 return Ok(());
267 }
268
269 let cur_offset: usize = (2 - 1) * envelope_size;
272
273 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
275
276 fidl::encoding::encode_in_envelope_optional::<u8, D>(
281 self.address.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
282 encoder,
283 offset + cur_offset,
284 depth,
285 )?;
286
287 _prev_end_offset = cur_offset + envelope_size;
288
289 Ok(())
290 }
291 }
292
293 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DeviceStateUpdate {
294 #[inline(always)]
295 fn new_empty() -> Self {
296 Self::default()
297 }
298
299 unsafe fn decode(
300 &mut self,
301 decoder: &mut fidl::encoding::Decoder<'_, D>,
302 offset: usize,
303 mut depth: fidl::encoding::Depth,
304 ) -> fidl::Result<()> {
305 decoder.debug_check_bounds::<Self>(offset);
306 let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
307 None => return Err(fidl::Error::NotNullable),
308 Some(len) => len,
309 };
310 if len == 0 {
312 return Ok(());
313 };
314 depth.increment()?;
315 let envelope_size = 8;
316 let bytes_len = len * envelope_size;
317 let offset = decoder.out_of_line_offset(bytes_len)?;
318 let mut _next_ordinal_to_read = 0;
320 let mut next_offset = offset;
321 let end_offset = offset + bytes_len;
322 _next_ordinal_to_read += 1;
323 if next_offset >= end_offset {
324 return Ok(());
325 }
326
327 while _next_ordinal_to_read < 1 {
329 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
330 _next_ordinal_to_read += 1;
331 next_offset += envelope_size;
332 }
333
334 let next_out_of_line = decoder.next_out_of_line();
335 let handles_before = decoder.remaining_handles();
336 if let Some((inlined, num_bytes, num_handles)) =
337 fidl::encoding::decode_envelope_header(decoder, next_offset)?
338 {
339 let member_inline_size =
340 <DeviceState as fidl::encoding::TypeMarker>::inline_size(decoder.context);
341 if inlined != (member_inline_size <= 4) {
342 return Err(fidl::Error::InvalidInlineBitInEnvelope);
343 }
344 let inner_offset;
345 let mut inner_depth = depth.clone();
346 if inlined {
347 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
348 inner_offset = next_offset;
349 } else {
350 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
351 inner_depth.increment()?;
352 }
353 let val_ref = self.state.get_or_insert_with(|| fidl::new_empty!(DeviceState, D));
354 fidl::decode!(DeviceState, D, val_ref, decoder, inner_offset, inner_depth)?;
355 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
356 {
357 return Err(fidl::Error::InvalidNumBytesInEnvelope);
358 }
359 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
360 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
361 }
362 }
363
364 next_offset += envelope_size;
365 _next_ordinal_to_read += 1;
366 if next_offset >= end_offset {
367 return Ok(());
368 }
369
370 while _next_ordinal_to_read < 2 {
372 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
373 _next_ordinal_to_read += 1;
374 next_offset += envelope_size;
375 }
376
377 let next_out_of_line = decoder.next_out_of_line();
378 let handles_before = decoder.remaining_handles();
379 if let Some((inlined, num_bytes, num_handles)) =
380 fidl::encoding::decode_envelope_header(decoder, next_offset)?
381 {
382 let member_inline_size =
383 <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
384 if inlined != (member_inline_size <= 4) {
385 return Err(fidl::Error::InvalidInlineBitInEnvelope);
386 }
387 let inner_offset;
388 let mut inner_depth = depth.clone();
389 if inlined {
390 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
391 inner_offset = next_offset;
392 } else {
393 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
394 inner_depth.increment()?;
395 }
396 let val_ref = self.address.get_or_insert_with(|| fidl::new_empty!(u8, D));
397 fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
398 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
399 {
400 return Err(fidl::Error::InvalidNumBytesInEnvelope);
401 }
402 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
403 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
404 }
405 }
406
407 next_offset += envelope_size;
408
409 while next_offset < end_offset {
411 _next_ordinal_to_read += 1;
412 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
413 next_offset += envelope_size;
414 }
415
416 Ok(())
417 }
418 }
419}