1#![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_SPI_CHANNEL: u32 = 32;
12
13#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
14pub enum SpiClockPhase {
15 ClockPhaseFirst,
16 ClockPhaseSecond,
17 #[doc(hidden)]
18 __SourceBreaking {
19 unknown_ordinal: u32,
20 },
21}
22
23#[macro_export]
25macro_rules! SpiClockPhaseUnknown {
26 () => {
27 _
28 };
29}
30
31impl SpiClockPhase {
32 #[inline]
33 pub fn from_primitive(prim: u32) -> Option<Self> {
34 match prim {
35 0 => Some(Self::ClockPhaseFirst),
36 1 => Some(Self::ClockPhaseSecond),
37 _ => None,
38 }
39 }
40
41 #[inline]
42 pub fn from_primitive_allow_unknown(prim: u32) -> Self {
43 match prim {
44 0 => Self::ClockPhaseFirst,
45 1 => Self::ClockPhaseSecond,
46 unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
47 }
48 }
49
50 #[inline]
51 pub fn unknown() -> Self {
52 Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
53 }
54
55 #[inline]
56 pub const fn into_primitive(self) -> u32 {
57 match self {
58 Self::ClockPhaseFirst => 0,
59 Self::ClockPhaseSecond => 1,
60 Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
61 }
62 }
63
64 #[inline]
65 pub fn is_unknown(&self) -> bool {
66 match self {
67 Self::__SourceBreaking { unknown_ordinal: _ } => true,
68 _ => false,
69 }
70 }
71}
72
73#[derive(Clone, Debug, Default, PartialEq)]
75pub struct SpiBusMetadata {
76 pub channels: Option<Vec<SpiChannel>>,
77 pub bus_id: Option<u32>,
80 #[doc(hidden)]
81 pub __source_breaking: fidl::marker::SourceBreaking,
82}
83
84impl fidl::Persistable for SpiBusMetadata {}
85impl fidl::Serializable for SpiBusMetadata {
86 const SERIALIZABLE_NAME: &'static str = "fuchsia.hardware.spi.businfo.SpiBusMetadata";
87}
88
89#[derive(Clone, Debug, Default, PartialEq)]
91pub struct SpiChannel {
92 pub cs: Option<u32>,
94 pub vid: Option<u32>,
96 pub pid: Option<u32>,
98 pub did: Option<u32>,
100 pub cs_polarity_high: Option<bool>,
102 pub word_length_bits: Option<u8>,
104 pub is_bus_controller: Option<bool>,
106 pub clock_polarity_high: Option<bool>,
108 pub clock_phase: Option<SpiClockPhase>,
110 pub max_frequency_hz: Option<u32>,
112 pub global_id: Option<u32>,
114 #[doc(hidden)]
115 pub __source_breaking: fidl::marker::SourceBreaking,
116}
117
118impl fidl::Persistable for SpiChannel {}
119
120mod internal {
121 use super::*;
122 unsafe impl fidl::encoding::TypeMarker for SpiClockPhase {
123 type Owned = Self;
124
125 #[inline(always)]
126 fn inline_align(_context: fidl::encoding::Context) -> usize {
127 std::mem::align_of::<u32>()
128 }
129
130 #[inline(always)]
131 fn inline_size(_context: fidl::encoding::Context) -> usize {
132 std::mem::size_of::<u32>()
133 }
134
135 #[inline(always)]
136 fn encode_is_copy() -> bool {
137 false
138 }
139
140 #[inline(always)]
141 fn decode_is_copy() -> bool {
142 false
143 }
144 }
145
146 impl fidl::encoding::ValueTypeMarker for SpiClockPhase {
147 type Borrowed<'a> = Self;
148 #[inline(always)]
149 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
150 *value
151 }
152 }
153
154 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for SpiClockPhase {
155 #[inline]
156 unsafe fn encode(
157 self,
158 encoder: &mut fidl::encoding::Encoder<'_, D>,
159 offset: usize,
160 _depth: fidl::encoding::Depth,
161 ) -> fidl::Result<()> {
162 encoder.debug_check_bounds::<Self>(offset);
163 encoder.write_num(self.into_primitive(), offset);
164 Ok(())
165 }
166 }
167
168 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SpiClockPhase {
169 #[inline(always)]
170 fn new_empty() -> Self {
171 Self::unknown()
172 }
173
174 #[inline]
175 unsafe fn decode(
176 &mut self,
177 decoder: &mut fidl::encoding::Decoder<'_, D>,
178 offset: usize,
179 _depth: fidl::encoding::Depth,
180 ) -> fidl::Result<()> {
181 decoder.debug_check_bounds::<Self>(offset);
182 let prim = decoder.read_num::<u32>(offset);
183
184 *self = Self::from_primitive_allow_unknown(prim);
185 Ok(())
186 }
187 }
188
189 impl SpiBusMetadata {
190 #[inline(always)]
191 fn max_ordinal_present(&self) -> u64 {
192 if let Some(_) = self.bus_id {
193 return 2;
194 }
195 if let Some(_) = self.channels {
196 return 1;
197 }
198 0
199 }
200 }
201
202 impl fidl::encoding::ValueTypeMarker for SpiBusMetadata {
203 type Borrowed<'a> = &'a Self;
204 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
205 value
206 }
207 }
208
209 unsafe impl fidl::encoding::TypeMarker for SpiBusMetadata {
210 type Owned = Self;
211
212 #[inline(always)]
213 fn inline_align(_context: fidl::encoding::Context) -> usize {
214 8
215 }
216
217 #[inline(always)]
218 fn inline_size(_context: fidl::encoding::Context) -> usize {
219 16
220 }
221 }
222
223 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<SpiBusMetadata, D>
224 for &SpiBusMetadata
225 {
226 unsafe fn encode(
227 self,
228 encoder: &mut fidl::encoding::Encoder<'_, D>,
229 offset: usize,
230 mut depth: fidl::encoding::Depth,
231 ) -> fidl::Result<()> {
232 encoder.debug_check_bounds::<SpiBusMetadata>(offset);
233 let max_ordinal: u64 = self.max_ordinal_present();
235 encoder.write_num(max_ordinal, offset);
236 encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
237 if max_ordinal == 0 {
239 return Ok(());
240 }
241 depth.increment()?;
242 let envelope_size = 8;
243 let bytes_len = max_ordinal as usize * envelope_size;
244 #[allow(unused_variables)]
245 let offset = encoder.out_of_line_offset(bytes_len);
246 let mut _prev_end_offset: usize = 0;
247 if 1 > max_ordinal {
248 return Ok(());
249 }
250
251 let cur_offset: usize = (1 - 1) * envelope_size;
254
255 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
257
258 fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<SpiChannel, 32>, D>(
263 self.channels.as_ref().map(<fidl::encoding::Vector<SpiChannel, 32> as fidl::encoding::ValueTypeMarker>::borrow),
264 encoder, offset + cur_offset, depth
265 )?;
266
267 _prev_end_offset = cur_offset + envelope_size;
268 if 2 > max_ordinal {
269 return Ok(());
270 }
271
272 let cur_offset: usize = (2 - 1) * envelope_size;
275
276 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
278
279 fidl::encoding::encode_in_envelope_optional::<u32, D>(
284 self.bus_id.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
285 encoder,
286 offset + cur_offset,
287 depth,
288 )?;
289
290 _prev_end_offset = cur_offset + envelope_size;
291
292 Ok(())
293 }
294 }
295
296 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SpiBusMetadata {
297 #[inline(always)]
298 fn new_empty() -> Self {
299 Self::default()
300 }
301
302 unsafe fn decode(
303 &mut self,
304 decoder: &mut fidl::encoding::Decoder<'_, D>,
305 offset: usize,
306 mut depth: fidl::encoding::Depth,
307 ) -> fidl::Result<()> {
308 decoder.debug_check_bounds::<Self>(offset);
309 let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
310 None => return Err(fidl::Error::NotNullable),
311 Some(len) => len,
312 };
313 if len == 0 {
315 return Ok(());
316 };
317 depth.increment()?;
318 let envelope_size = 8;
319 let bytes_len = len * envelope_size;
320 let offset = decoder.out_of_line_offset(bytes_len)?;
321 let mut _next_ordinal_to_read = 0;
323 let mut next_offset = offset;
324 let end_offset = offset + bytes_len;
325 _next_ordinal_to_read += 1;
326 if next_offset >= end_offset {
327 return Ok(());
328 }
329
330 while _next_ordinal_to_read < 1 {
332 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
333 _next_ordinal_to_read += 1;
334 next_offset += envelope_size;
335 }
336
337 let next_out_of_line = decoder.next_out_of_line();
338 let handles_before = decoder.remaining_handles();
339 if let Some((inlined, num_bytes, num_handles)) =
340 fidl::encoding::decode_envelope_header(decoder, next_offset)?
341 {
342 let member_inline_size = <fidl::encoding::Vector<SpiChannel, 32> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
343 if inlined != (member_inline_size <= 4) {
344 return Err(fidl::Error::InvalidInlineBitInEnvelope);
345 }
346 let inner_offset;
347 let mut inner_depth = depth.clone();
348 if inlined {
349 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
350 inner_offset = next_offset;
351 } else {
352 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
353 inner_depth.increment()?;
354 }
355 let val_ref = self.channels.get_or_insert_with(
356 || fidl::new_empty!(fidl::encoding::Vector<SpiChannel, 32>, D),
357 );
358 fidl::decode!(fidl::encoding::Vector<SpiChannel, 32>, D, val_ref, decoder, inner_offset, inner_depth)?;
359 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
360 {
361 return Err(fidl::Error::InvalidNumBytesInEnvelope);
362 }
363 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
364 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
365 }
366 }
367
368 next_offset += envelope_size;
369 _next_ordinal_to_read += 1;
370 if next_offset >= end_offset {
371 return Ok(());
372 }
373
374 while _next_ordinal_to_read < 2 {
376 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
377 _next_ordinal_to_read += 1;
378 next_offset += envelope_size;
379 }
380
381 let next_out_of_line = decoder.next_out_of_line();
382 let handles_before = decoder.remaining_handles();
383 if let Some((inlined, num_bytes, num_handles)) =
384 fidl::encoding::decode_envelope_header(decoder, next_offset)?
385 {
386 let member_inline_size =
387 <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
388 if inlined != (member_inline_size <= 4) {
389 return Err(fidl::Error::InvalidInlineBitInEnvelope);
390 }
391 let inner_offset;
392 let mut inner_depth = depth.clone();
393 if inlined {
394 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
395 inner_offset = next_offset;
396 } else {
397 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
398 inner_depth.increment()?;
399 }
400 let val_ref = self.bus_id.get_or_insert_with(|| fidl::new_empty!(u32, D));
401 fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
402 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
403 {
404 return Err(fidl::Error::InvalidNumBytesInEnvelope);
405 }
406 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
407 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
408 }
409 }
410
411 next_offset += envelope_size;
412
413 while next_offset < end_offset {
415 _next_ordinal_to_read += 1;
416 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
417 next_offset += envelope_size;
418 }
419
420 Ok(())
421 }
422 }
423
424 impl SpiChannel {
425 #[inline(always)]
426 fn max_ordinal_present(&self) -> u64 {
427 if let Some(_) = self.global_id {
428 return 11;
429 }
430 if let Some(_) = self.max_frequency_hz {
431 return 10;
432 }
433 if let Some(_) = self.clock_phase {
434 return 9;
435 }
436 if let Some(_) = self.clock_polarity_high {
437 return 8;
438 }
439 if let Some(_) = self.is_bus_controller {
440 return 7;
441 }
442 if let Some(_) = self.word_length_bits {
443 return 6;
444 }
445 if let Some(_) = self.cs_polarity_high {
446 return 5;
447 }
448 if let Some(_) = self.did {
449 return 4;
450 }
451 if let Some(_) = self.pid {
452 return 3;
453 }
454 if let Some(_) = self.vid {
455 return 2;
456 }
457 if let Some(_) = self.cs {
458 return 1;
459 }
460 0
461 }
462 }
463
464 impl fidl::encoding::ValueTypeMarker for SpiChannel {
465 type Borrowed<'a> = &'a Self;
466 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
467 value
468 }
469 }
470
471 unsafe impl fidl::encoding::TypeMarker for SpiChannel {
472 type Owned = Self;
473
474 #[inline(always)]
475 fn inline_align(_context: fidl::encoding::Context) -> usize {
476 8
477 }
478
479 #[inline(always)]
480 fn inline_size(_context: fidl::encoding::Context) -> usize {
481 16
482 }
483 }
484
485 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<SpiChannel, D>
486 for &SpiChannel
487 {
488 unsafe fn encode(
489 self,
490 encoder: &mut fidl::encoding::Encoder<'_, D>,
491 offset: usize,
492 mut depth: fidl::encoding::Depth,
493 ) -> fidl::Result<()> {
494 encoder.debug_check_bounds::<SpiChannel>(offset);
495 let max_ordinal: u64 = self.max_ordinal_present();
497 encoder.write_num(max_ordinal, offset);
498 encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
499 if max_ordinal == 0 {
501 return Ok(());
502 }
503 depth.increment()?;
504 let envelope_size = 8;
505 let bytes_len = max_ordinal as usize * envelope_size;
506 #[allow(unused_variables)]
507 let offset = encoder.out_of_line_offset(bytes_len);
508 let mut _prev_end_offset: usize = 0;
509 if 1 > max_ordinal {
510 return Ok(());
511 }
512
513 let cur_offset: usize = (1 - 1) * envelope_size;
516
517 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
519
520 fidl::encoding::encode_in_envelope_optional::<u32, D>(
525 self.cs.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
526 encoder,
527 offset + cur_offset,
528 depth,
529 )?;
530
531 _prev_end_offset = cur_offset + envelope_size;
532 if 2 > max_ordinal {
533 return Ok(());
534 }
535
536 let cur_offset: usize = (2 - 1) * envelope_size;
539
540 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
542
543 fidl::encoding::encode_in_envelope_optional::<u32, D>(
548 self.vid.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
549 encoder,
550 offset + cur_offset,
551 depth,
552 )?;
553
554 _prev_end_offset = cur_offset + envelope_size;
555 if 3 > max_ordinal {
556 return Ok(());
557 }
558
559 let cur_offset: usize = (3 - 1) * envelope_size;
562
563 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
565
566 fidl::encoding::encode_in_envelope_optional::<u32, D>(
571 self.pid.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
572 encoder,
573 offset + cur_offset,
574 depth,
575 )?;
576
577 _prev_end_offset = cur_offset + envelope_size;
578 if 4 > max_ordinal {
579 return Ok(());
580 }
581
582 let cur_offset: usize = (4 - 1) * envelope_size;
585
586 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
588
589 fidl::encoding::encode_in_envelope_optional::<u32, D>(
594 self.did.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
595 encoder,
596 offset + cur_offset,
597 depth,
598 )?;
599
600 _prev_end_offset = cur_offset + envelope_size;
601 if 5 > max_ordinal {
602 return Ok(());
603 }
604
605 let cur_offset: usize = (5 - 1) * envelope_size;
608
609 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
611
612 fidl::encoding::encode_in_envelope_optional::<bool, D>(
617 self.cs_polarity_high
618 .as_ref()
619 .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
620 encoder,
621 offset + cur_offset,
622 depth,
623 )?;
624
625 _prev_end_offset = cur_offset + envelope_size;
626 if 6 > max_ordinal {
627 return Ok(());
628 }
629
630 let cur_offset: usize = (6 - 1) * envelope_size;
633
634 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
636
637 fidl::encoding::encode_in_envelope_optional::<u8, D>(
642 self.word_length_bits.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
643 encoder,
644 offset + cur_offset,
645 depth,
646 )?;
647
648 _prev_end_offset = cur_offset + envelope_size;
649 if 7 > max_ordinal {
650 return Ok(());
651 }
652
653 let cur_offset: usize = (7 - 1) * envelope_size;
656
657 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
659
660 fidl::encoding::encode_in_envelope_optional::<bool, D>(
665 self.is_bus_controller
666 .as_ref()
667 .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
668 encoder,
669 offset + cur_offset,
670 depth,
671 )?;
672
673 _prev_end_offset = cur_offset + envelope_size;
674 if 8 > max_ordinal {
675 return Ok(());
676 }
677
678 let cur_offset: usize = (8 - 1) * envelope_size;
681
682 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
684
685 fidl::encoding::encode_in_envelope_optional::<bool, D>(
690 self.clock_polarity_high
691 .as_ref()
692 .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
693 encoder,
694 offset + cur_offset,
695 depth,
696 )?;
697
698 _prev_end_offset = cur_offset + envelope_size;
699 if 9 > max_ordinal {
700 return Ok(());
701 }
702
703 let cur_offset: usize = (9 - 1) * envelope_size;
706
707 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
709
710 fidl::encoding::encode_in_envelope_optional::<SpiClockPhase, D>(
715 self.clock_phase
716 .as_ref()
717 .map(<SpiClockPhase as fidl::encoding::ValueTypeMarker>::borrow),
718 encoder,
719 offset + cur_offset,
720 depth,
721 )?;
722
723 _prev_end_offset = cur_offset + envelope_size;
724 if 10 > max_ordinal {
725 return Ok(());
726 }
727
728 let cur_offset: usize = (10 - 1) * envelope_size;
731
732 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
734
735 fidl::encoding::encode_in_envelope_optional::<u32, D>(
740 self.max_frequency_hz
741 .as_ref()
742 .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
743 encoder,
744 offset + cur_offset,
745 depth,
746 )?;
747
748 _prev_end_offset = cur_offset + envelope_size;
749 if 11 > max_ordinal {
750 return Ok(());
751 }
752
753 let cur_offset: usize = (11 - 1) * envelope_size;
756
757 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
759
760 fidl::encoding::encode_in_envelope_optional::<u32, D>(
765 self.global_id.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
766 encoder,
767 offset + cur_offset,
768 depth,
769 )?;
770
771 _prev_end_offset = cur_offset + envelope_size;
772
773 Ok(())
774 }
775 }
776
777 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SpiChannel {
778 #[inline(always)]
779 fn new_empty() -> Self {
780 Self::default()
781 }
782
783 unsafe fn decode(
784 &mut self,
785 decoder: &mut fidl::encoding::Decoder<'_, D>,
786 offset: usize,
787 mut depth: fidl::encoding::Depth,
788 ) -> fidl::Result<()> {
789 decoder.debug_check_bounds::<Self>(offset);
790 let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
791 None => return Err(fidl::Error::NotNullable),
792 Some(len) => len,
793 };
794 if len == 0 {
796 return Ok(());
797 };
798 depth.increment()?;
799 let envelope_size = 8;
800 let bytes_len = len * envelope_size;
801 let offset = decoder.out_of_line_offset(bytes_len)?;
802 let mut _next_ordinal_to_read = 0;
804 let mut next_offset = offset;
805 let end_offset = offset + bytes_len;
806 _next_ordinal_to_read += 1;
807 if next_offset >= end_offset {
808 return Ok(());
809 }
810
811 while _next_ordinal_to_read < 1 {
813 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
814 _next_ordinal_to_read += 1;
815 next_offset += envelope_size;
816 }
817
818 let next_out_of_line = decoder.next_out_of_line();
819 let handles_before = decoder.remaining_handles();
820 if let Some((inlined, num_bytes, num_handles)) =
821 fidl::encoding::decode_envelope_header(decoder, next_offset)?
822 {
823 let member_inline_size =
824 <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
825 if inlined != (member_inline_size <= 4) {
826 return Err(fidl::Error::InvalidInlineBitInEnvelope);
827 }
828 let inner_offset;
829 let mut inner_depth = depth.clone();
830 if inlined {
831 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
832 inner_offset = next_offset;
833 } else {
834 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
835 inner_depth.increment()?;
836 }
837 let val_ref = self.cs.get_or_insert_with(|| fidl::new_empty!(u32, D));
838 fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
839 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
840 {
841 return Err(fidl::Error::InvalidNumBytesInEnvelope);
842 }
843 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
844 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
845 }
846 }
847
848 next_offset += envelope_size;
849 _next_ordinal_to_read += 1;
850 if next_offset >= end_offset {
851 return Ok(());
852 }
853
854 while _next_ordinal_to_read < 2 {
856 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
857 _next_ordinal_to_read += 1;
858 next_offset += envelope_size;
859 }
860
861 let next_out_of_line = decoder.next_out_of_line();
862 let handles_before = decoder.remaining_handles();
863 if let Some((inlined, num_bytes, num_handles)) =
864 fidl::encoding::decode_envelope_header(decoder, next_offset)?
865 {
866 let member_inline_size =
867 <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
868 if inlined != (member_inline_size <= 4) {
869 return Err(fidl::Error::InvalidInlineBitInEnvelope);
870 }
871 let inner_offset;
872 let mut inner_depth = depth.clone();
873 if inlined {
874 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
875 inner_offset = next_offset;
876 } else {
877 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
878 inner_depth.increment()?;
879 }
880 let val_ref = self.vid.get_or_insert_with(|| fidl::new_empty!(u32, D));
881 fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
882 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
883 {
884 return Err(fidl::Error::InvalidNumBytesInEnvelope);
885 }
886 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
887 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
888 }
889 }
890
891 next_offset += envelope_size;
892 _next_ordinal_to_read += 1;
893 if next_offset >= end_offset {
894 return Ok(());
895 }
896
897 while _next_ordinal_to_read < 3 {
899 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
900 _next_ordinal_to_read += 1;
901 next_offset += envelope_size;
902 }
903
904 let next_out_of_line = decoder.next_out_of_line();
905 let handles_before = decoder.remaining_handles();
906 if let Some((inlined, num_bytes, num_handles)) =
907 fidl::encoding::decode_envelope_header(decoder, next_offset)?
908 {
909 let member_inline_size =
910 <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
911 if inlined != (member_inline_size <= 4) {
912 return Err(fidl::Error::InvalidInlineBitInEnvelope);
913 }
914 let inner_offset;
915 let mut inner_depth = depth.clone();
916 if inlined {
917 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
918 inner_offset = next_offset;
919 } else {
920 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
921 inner_depth.increment()?;
922 }
923 let val_ref = self.pid.get_or_insert_with(|| fidl::new_empty!(u32, D));
924 fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
925 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
926 {
927 return Err(fidl::Error::InvalidNumBytesInEnvelope);
928 }
929 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
930 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
931 }
932 }
933
934 next_offset += envelope_size;
935 _next_ordinal_to_read += 1;
936 if next_offset >= end_offset {
937 return Ok(());
938 }
939
940 while _next_ordinal_to_read < 4 {
942 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
943 _next_ordinal_to_read += 1;
944 next_offset += envelope_size;
945 }
946
947 let next_out_of_line = decoder.next_out_of_line();
948 let handles_before = decoder.remaining_handles();
949 if let Some((inlined, num_bytes, num_handles)) =
950 fidl::encoding::decode_envelope_header(decoder, next_offset)?
951 {
952 let member_inline_size =
953 <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
954 if inlined != (member_inline_size <= 4) {
955 return Err(fidl::Error::InvalidInlineBitInEnvelope);
956 }
957 let inner_offset;
958 let mut inner_depth = depth.clone();
959 if inlined {
960 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
961 inner_offset = next_offset;
962 } else {
963 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
964 inner_depth.increment()?;
965 }
966 let val_ref = self.did.get_or_insert_with(|| fidl::new_empty!(u32, D));
967 fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
968 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
969 {
970 return Err(fidl::Error::InvalidNumBytesInEnvelope);
971 }
972 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
973 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
974 }
975 }
976
977 next_offset += envelope_size;
978 _next_ordinal_to_read += 1;
979 if next_offset >= end_offset {
980 return Ok(());
981 }
982
983 while _next_ordinal_to_read < 5 {
985 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
986 _next_ordinal_to_read += 1;
987 next_offset += envelope_size;
988 }
989
990 let next_out_of_line = decoder.next_out_of_line();
991 let handles_before = decoder.remaining_handles();
992 if let Some((inlined, num_bytes, num_handles)) =
993 fidl::encoding::decode_envelope_header(decoder, next_offset)?
994 {
995 let member_inline_size =
996 <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
997 if inlined != (member_inline_size <= 4) {
998 return Err(fidl::Error::InvalidInlineBitInEnvelope);
999 }
1000 let inner_offset;
1001 let mut inner_depth = depth.clone();
1002 if inlined {
1003 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1004 inner_offset = next_offset;
1005 } else {
1006 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1007 inner_depth.increment()?;
1008 }
1009 let val_ref =
1010 self.cs_polarity_high.get_or_insert_with(|| fidl::new_empty!(bool, D));
1011 fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
1012 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1013 {
1014 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1015 }
1016 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1017 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1018 }
1019 }
1020
1021 next_offset += envelope_size;
1022 _next_ordinal_to_read += 1;
1023 if next_offset >= end_offset {
1024 return Ok(());
1025 }
1026
1027 while _next_ordinal_to_read < 6 {
1029 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1030 _next_ordinal_to_read += 1;
1031 next_offset += envelope_size;
1032 }
1033
1034 let next_out_of_line = decoder.next_out_of_line();
1035 let handles_before = decoder.remaining_handles();
1036 if let Some((inlined, num_bytes, num_handles)) =
1037 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1038 {
1039 let member_inline_size =
1040 <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1041 if inlined != (member_inline_size <= 4) {
1042 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1043 }
1044 let inner_offset;
1045 let mut inner_depth = depth.clone();
1046 if inlined {
1047 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1048 inner_offset = next_offset;
1049 } else {
1050 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1051 inner_depth.increment()?;
1052 }
1053 let val_ref = self.word_length_bits.get_or_insert_with(|| fidl::new_empty!(u8, D));
1054 fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
1055 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1056 {
1057 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1058 }
1059 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1060 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1061 }
1062 }
1063
1064 next_offset += envelope_size;
1065 _next_ordinal_to_read += 1;
1066 if next_offset >= end_offset {
1067 return Ok(());
1068 }
1069
1070 while _next_ordinal_to_read < 7 {
1072 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1073 _next_ordinal_to_read += 1;
1074 next_offset += envelope_size;
1075 }
1076
1077 let next_out_of_line = decoder.next_out_of_line();
1078 let handles_before = decoder.remaining_handles();
1079 if let Some((inlined, num_bytes, num_handles)) =
1080 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1081 {
1082 let member_inline_size =
1083 <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1084 if inlined != (member_inline_size <= 4) {
1085 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1086 }
1087 let inner_offset;
1088 let mut inner_depth = depth.clone();
1089 if inlined {
1090 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1091 inner_offset = next_offset;
1092 } else {
1093 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1094 inner_depth.increment()?;
1095 }
1096 let val_ref =
1097 self.is_bus_controller.get_or_insert_with(|| fidl::new_empty!(bool, D));
1098 fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
1099 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1100 {
1101 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1102 }
1103 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1104 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1105 }
1106 }
1107
1108 next_offset += envelope_size;
1109 _next_ordinal_to_read += 1;
1110 if next_offset >= end_offset {
1111 return Ok(());
1112 }
1113
1114 while _next_ordinal_to_read < 8 {
1116 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1117 _next_ordinal_to_read += 1;
1118 next_offset += envelope_size;
1119 }
1120
1121 let next_out_of_line = decoder.next_out_of_line();
1122 let handles_before = decoder.remaining_handles();
1123 if let Some((inlined, num_bytes, num_handles)) =
1124 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1125 {
1126 let member_inline_size =
1127 <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1128 if inlined != (member_inline_size <= 4) {
1129 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1130 }
1131 let inner_offset;
1132 let mut inner_depth = depth.clone();
1133 if inlined {
1134 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1135 inner_offset = next_offset;
1136 } else {
1137 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1138 inner_depth.increment()?;
1139 }
1140 let val_ref =
1141 self.clock_polarity_high.get_or_insert_with(|| fidl::new_empty!(bool, D));
1142 fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
1143 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1144 {
1145 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1146 }
1147 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1148 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1149 }
1150 }
1151
1152 next_offset += envelope_size;
1153 _next_ordinal_to_read += 1;
1154 if next_offset >= end_offset {
1155 return Ok(());
1156 }
1157
1158 while _next_ordinal_to_read < 9 {
1160 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1161 _next_ordinal_to_read += 1;
1162 next_offset += envelope_size;
1163 }
1164
1165 let next_out_of_line = decoder.next_out_of_line();
1166 let handles_before = decoder.remaining_handles();
1167 if let Some((inlined, num_bytes, num_handles)) =
1168 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1169 {
1170 let member_inline_size =
1171 <SpiClockPhase as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1172 if inlined != (member_inline_size <= 4) {
1173 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1174 }
1175 let inner_offset;
1176 let mut inner_depth = depth.clone();
1177 if inlined {
1178 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1179 inner_offset = next_offset;
1180 } else {
1181 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1182 inner_depth.increment()?;
1183 }
1184 let val_ref =
1185 self.clock_phase.get_or_insert_with(|| fidl::new_empty!(SpiClockPhase, D));
1186 fidl::decode!(SpiClockPhase, D, val_ref, decoder, inner_offset, inner_depth)?;
1187 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1188 {
1189 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1190 }
1191 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1192 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1193 }
1194 }
1195
1196 next_offset += envelope_size;
1197 _next_ordinal_to_read += 1;
1198 if next_offset >= end_offset {
1199 return Ok(());
1200 }
1201
1202 while _next_ordinal_to_read < 10 {
1204 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1205 _next_ordinal_to_read += 1;
1206 next_offset += envelope_size;
1207 }
1208
1209 let next_out_of_line = decoder.next_out_of_line();
1210 let handles_before = decoder.remaining_handles();
1211 if let Some((inlined, num_bytes, num_handles)) =
1212 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1213 {
1214 let member_inline_size =
1215 <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1216 if inlined != (member_inline_size <= 4) {
1217 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1218 }
1219 let inner_offset;
1220 let mut inner_depth = depth.clone();
1221 if inlined {
1222 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1223 inner_offset = next_offset;
1224 } else {
1225 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1226 inner_depth.increment()?;
1227 }
1228 let val_ref = self.max_frequency_hz.get_or_insert_with(|| fidl::new_empty!(u32, D));
1229 fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
1230 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1231 {
1232 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1233 }
1234 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1235 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1236 }
1237 }
1238
1239 next_offset += envelope_size;
1240 _next_ordinal_to_read += 1;
1241 if next_offset >= end_offset {
1242 return Ok(());
1243 }
1244
1245 while _next_ordinal_to_read < 11 {
1247 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1248 _next_ordinal_to_read += 1;
1249 next_offset += envelope_size;
1250 }
1251
1252 let next_out_of_line = decoder.next_out_of_line();
1253 let handles_before = decoder.remaining_handles();
1254 if let Some((inlined, num_bytes, num_handles)) =
1255 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1256 {
1257 let member_inline_size =
1258 <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1259 if inlined != (member_inline_size <= 4) {
1260 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1261 }
1262 let inner_offset;
1263 let mut inner_depth = depth.clone();
1264 if inlined {
1265 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1266 inner_offset = next_offset;
1267 } else {
1268 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1269 inner_depth.increment()?;
1270 }
1271 let val_ref = self.global_id.get_or_insert_with(|| fidl::new_empty!(u32, D));
1272 fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
1273 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1274 {
1275 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1276 }
1277 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1278 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1279 }
1280 }
1281
1282 next_offset += envelope_size;
1283
1284 while next_offset < end_offset {
1286 _next_ordinal_to_read += 1;
1287 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1288 next_offset += envelope_size;
1289 }
1290
1291 Ok(())
1292 }
1293 }
1294}