Skip to main content

fidl_fuchsia_hardware_spi_businfo_common/
fidl_fuchsia_hardware_spi_businfo_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_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/// Pattern that matches an unknown `SpiClockPhase` member.
24#[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/// Passed to the spi driver in platform device metadata.
74#[derive(Clone, Debug, Default, PartialEq)]
75pub struct SpiBusMetadata {
76    pub channels: Option<Vec<SpiChannel>>,
77    /// ID of the bus that these devices are on. Set as a bind property on the
78    /// nodes added by the SPI core driver.
79    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/// Represents a single device on a SPI bus.
90#[derive(Clone, Debug, Default, PartialEq)]
91pub struct SpiChannel {
92    /// Chip select number for the device.
93    pub cs: Option<u32>,
94    /// Vendor ID. Used when binding via platform bus device IDs.
95    pub vid: Option<u32>,
96    /// Product ID. Used when binding via platform bus device IDs.
97    pub pid: Option<u32>,
98    /// Device ID. Used when binding via platform bus device IDs.
99    pub did: Option<u32>,
100    /// Chip select polarity: true == high, false == low.
101    pub cs_polarity_high: Option<bool>,
102    /// Size in bits of a single word on the SPI bus.
103    pub word_length_bits: Option<u8>,
104    /// Are we in charge of the bus?
105    pub is_bus_controller: Option<bool>,
106    /// Clock polarity. true == high, false == low.
107    pub clock_polarity_high: Option<bool>,
108    ///  Clock phase.
109    pub clock_phase: Option<SpiClockPhase>,
110    /// Maximum bus frequency in Hz.
111    pub max_frequency_hz: Option<u32>,
112    /// Unique identifier for the SPI channel.
113    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            // Vector header
234            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            // Calling encoder.out_of_line_offset(0) is not allowed.
238            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            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
252            // are envelope_size bytes.
253            let cur_offset: usize = (1 - 1) * envelope_size;
254
255            // Zero reserved fields.
256            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
257
258            // Safety:
259            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
260            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
261            //   envelope_size bytes, there is always sufficient room.
262            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            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
273            // are envelope_size bytes.
274            let cur_offset: usize = (2 - 1) * envelope_size;
275
276            // Zero reserved fields.
277            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
278
279            // Safety:
280            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
281            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
282            //   envelope_size bytes, there is always sufficient room.
283            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            // Calling decoder.out_of_line_offset(0) is not allowed.
314            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            // Decode the envelope for each type.
322            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            // Decode unknown envelopes for gaps in ordinals.
331            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            // Decode unknown envelopes for gaps in ordinals.
375            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            // Decode the remaining unknown envelopes.
414            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            // Vector header
496            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            // Calling encoder.out_of_line_offset(0) is not allowed.
500            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            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
514            // are envelope_size bytes.
515            let cur_offset: usize = (1 - 1) * envelope_size;
516
517            // Zero reserved fields.
518            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
519
520            // Safety:
521            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
522            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
523            //   envelope_size bytes, there is always sufficient room.
524            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            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
537            // are envelope_size bytes.
538            let cur_offset: usize = (2 - 1) * envelope_size;
539
540            // Zero reserved fields.
541            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
542
543            // Safety:
544            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
545            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
546            //   envelope_size bytes, there is always sufficient room.
547            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            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
560            // are envelope_size bytes.
561            let cur_offset: usize = (3 - 1) * envelope_size;
562
563            // Zero reserved fields.
564            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
565
566            // Safety:
567            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
568            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
569            //   envelope_size bytes, there is always sufficient room.
570            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            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
583            // are envelope_size bytes.
584            let cur_offset: usize = (4 - 1) * envelope_size;
585
586            // Zero reserved fields.
587            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
588
589            // Safety:
590            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
591            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
592            //   envelope_size bytes, there is always sufficient room.
593            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            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
606            // are envelope_size bytes.
607            let cur_offset: usize = (5 - 1) * envelope_size;
608
609            // Zero reserved fields.
610            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
611
612            // Safety:
613            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
614            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
615            //   envelope_size bytes, there is always sufficient room.
616            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            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
631            // are envelope_size bytes.
632            let cur_offset: usize = (6 - 1) * envelope_size;
633
634            // Zero reserved fields.
635            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
636
637            // Safety:
638            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
639            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
640            //   envelope_size bytes, there is always sufficient room.
641            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            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
654            // are envelope_size bytes.
655            let cur_offset: usize = (7 - 1) * envelope_size;
656
657            // Zero reserved fields.
658            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
659
660            // Safety:
661            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
662            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
663            //   envelope_size bytes, there is always sufficient room.
664            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            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
679            // are envelope_size bytes.
680            let cur_offset: usize = (8 - 1) * envelope_size;
681
682            // Zero reserved fields.
683            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
684
685            // Safety:
686            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
687            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
688            //   envelope_size bytes, there is always sufficient room.
689            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            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
704            // are envelope_size bytes.
705            let cur_offset: usize = (9 - 1) * envelope_size;
706
707            // Zero reserved fields.
708            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
709
710            // Safety:
711            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
712            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
713            //   envelope_size bytes, there is always sufficient room.
714            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            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
729            // are envelope_size bytes.
730            let cur_offset: usize = (10 - 1) * envelope_size;
731
732            // Zero reserved fields.
733            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
734
735            // Safety:
736            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
737            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
738            //   envelope_size bytes, there is always sufficient room.
739            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            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
754            // are envelope_size bytes.
755            let cur_offset: usize = (11 - 1) * envelope_size;
756
757            // Zero reserved fields.
758            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
759
760            // Safety:
761            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
762            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
763            //   envelope_size bytes, there is always sufficient room.
764            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            // Calling decoder.out_of_line_offset(0) is not allowed.
795            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            // Decode the envelope for each type.
803            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            // Decode unknown envelopes for gaps in ordinals.
812            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            // Decode unknown envelopes for gaps in ordinals.
855            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            // Decode unknown envelopes for gaps in ordinals.
898            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            // Decode unknown envelopes for gaps in ordinals.
941            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            // Decode unknown envelopes for gaps in ordinals.
984            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            // Decode unknown envelopes for gaps in ordinals.
1028            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            // Decode unknown envelopes for gaps in ordinals.
1071            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            // Decode unknown envelopes for gaps in ordinals.
1115            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            // Decode unknown envelopes for gaps in ordinals.
1159            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            // Decode unknown envelopes for gaps in ordinals.
1203            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            // Decode unknown envelopes for gaps in ordinals.
1246            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            // Decode the remaining unknown envelopes.
1285            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}