fidl_fuchsia_hwinfo_common/
fidl_fuchsia_hwinfo_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_VALUE_SIZE: u8 = 255;
12
13#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
14pub enum Architecture {
15    X64,
16    Arm64,
17    #[doc(hidden)]
18    __SourceBreaking {
19        unknown_ordinal: u32,
20    },
21}
22
23/// Pattern that matches an unknown `Architecture` member.
24#[macro_export]
25macro_rules! ArchitectureUnknown {
26    () => {
27        _
28    };
29}
30
31impl Architecture {
32    #[inline]
33    pub fn from_primitive(prim: u32) -> Option<Self> {
34        match prim {
35            1 => Some(Self::X64),
36            2 => Some(Self::Arm64),
37            _ => None,
38        }
39    }
40
41    #[inline]
42    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
43        match prim {
44            1 => Self::X64,
45            2 => Self::Arm64,
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::X64 => 1,
59            Self::Arm64 => 2,
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, PartialEq)]
74pub struct BoardGetInfoResponse {
75    pub info: BoardInfo,
76}
77
78impl fidl::Persistable for BoardGetInfoResponse {}
79
80#[derive(Clone, Debug, PartialEq)]
81pub struct DeviceGetInfoResponse {
82    pub info: DeviceInfo,
83}
84
85impl fidl::Persistable for DeviceGetInfoResponse {}
86
87#[derive(Clone, Debug, PartialEq)]
88pub struct ProductGetInfoResponse {
89    pub info: ProductInfo,
90}
91
92impl fidl::Persistable for ProductGetInfoResponse {}
93
94/// Collection of properties that are common among a set of devices based on
95/// hardware type
96#[derive(Clone, Debug, Default, PartialEq)]
97pub struct BoardInfo {
98    pub name: Option<String>,
99    pub revision: Option<String>,
100    pub cpu_architecture: Option<Architecture>,
101    #[doc(hidden)]
102    pub __source_breaking: fidl::marker::SourceBreaking,
103}
104
105impl fidl::Persistable for BoardInfo {}
106
107/// Collection of properties that is unique per device.
108#[derive(Clone, Debug, Default, PartialEq)]
109pub struct DeviceInfo {
110    pub serial_number: Option<String>,
111    pub is_retail_demo: Option<bool>,
112    pub retail_sku: Option<String>,
113    #[doc(hidden)]
114    pub __source_breaking: fidl::marker::SourceBreaking,
115}
116
117impl fidl::Persistable for DeviceInfo {}
118
119/// Collection of properties that is shared with other devices within the same
120/// product line.
121#[derive(Clone, Debug, Default, PartialEq)]
122pub struct ProductInfo {
123    pub sku: Option<String>,
124    pub language: Option<String>,
125    pub regulatory_domain: Option<fidl_fuchsia_intl::RegulatoryDomain>,
126    pub locale_list: Option<Vec<fidl_fuchsia_intl::LocaleId>>,
127    pub name: Option<String>,
128    pub model: Option<String>,
129    pub manufacturer: Option<String>,
130    pub build_date: Option<String>,
131    pub build_name: Option<String>,
132    pub colorway: Option<String>,
133    pub display: Option<String>,
134    pub memory: Option<String>,
135    pub nand_storage: Option<String>,
136    pub emmc_storage: Option<String>,
137    pub microphone: Option<String>,
138    pub audio_amplifier: Option<String>,
139    #[doc(hidden)]
140    pub __source_breaking: fidl::marker::SourceBreaking,
141}
142
143impl fidl::Persistable for ProductInfo {}
144
145mod internal {
146    use super::*;
147    unsafe impl fidl::encoding::TypeMarker for Architecture {
148        type Owned = Self;
149
150        #[inline(always)]
151        fn inline_align(_context: fidl::encoding::Context) -> usize {
152            std::mem::align_of::<u32>()
153        }
154
155        #[inline(always)]
156        fn inline_size(_context: fidl::encoding::Context) -> usize {
157            std::mem::size_of::<u32>()
158        }
159
160        #[inline(always)]
161        fn encode_is_copy() -> bool {
162            false
163        }
164
165        #[inline(always)]
166        fn decode_is_copy() -> bool {
167            false
168        }
169    }
170
171    impl fidl::encoding::ValueTypeMarker for Architecture {
172        type Borrowed<'a> = Self;
173        #[inline(always)]
174        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
175            *value
176        }
177    }
178
179    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for Architecture {
180        #[inline]
181        unsafe fn encode(
182            self,
183            encoder: &mut fidl::encoding::Encoder<'_, D>,
184            offset: usize,
185            _depth: fidl::encoding::Depth,
186        ) -> fidl::Result<()> {
187            encoder.debug_check_bounds::<Self>(offset);
188            encoder.write_num(self.into_primitive(), offset);
189            Ok(())
190        }
191    }
192
193    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Architecture {
194        #[inline(always)]
195        fn new_empty() -> Self {
196            Self::unknown()
197        }
198
199        #[inline]
200        unsafe fn decode(
201            &mut self,
202            decoder: &mut fidl::encoding::Decoder<'_, D>,
203            offset: usize,
204            _depth: fidl::encoding::Depth,
205        ) -> fidl::Result<()> {
206            decoder.debug_check_bounds::<Self>(offset);
207            let prim = decoder.read_num::<u32>(offset);
208
209            *self = Self::from_primitive_allow_unknown(prim);
210            Ok(())
211        }
212    }
213
214    impl fidl::encoding::ValueTypeMarker for BoardGetInfoResponse {
215        type Borrowed<'a> = &'a Self;
216        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
217            value
218        }
219    }
220
221    unsafe impl fidl::encoding::TypeMarker for BoardGetInfoResponse {
222        type Owned = Self;
223
224        #[inline(always)]
225        fn inline_align(_context: fidl::encoding::Context) -> usize {
226            8
227        }
228
229        #[inline(always)]
230        fn inline_size(_context: fidl::encoding::Context) -> usize {
231            16
232        }
233    }
234
235    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<BoardGetInfoResponse, D>
236        for &BoardGetInfoResponse
237    {
238        #[inline]
239        unsafe fn encode(
240            self,
241            encoder: &mut fidl::encoding::Encoder<'_, D>,
242            offset: usize,
243            _depth: fidl::encoding::Depth,
244        ) -> fidl::Result<()> {
245            encoder.debug_check_bounds::<BoardGetInfoResponse>(offset);
246            // Delegate to tuple encoding.
247            fidl::encoding::Encode::<BoardGetInfoResponse, D>::encode(
248                (<BoardInfo as fidl::encoding::ValueTypeMarker>::borrow(&self.info),),
249                encoder,
250                offset,
251                _depth,
252            )
253        }
254    }
255    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<BoardInfo, D>>
256        fidl::encoding::Encode<BoardGetInfoResponse, D> for (T0,)
257    {
258        #[inline]
259        unsafe fn encode(
260            self,
261            encoder: &mut fidl::encoding::Encoder<'_, D>,
262            offset: usize,
263            depth: fidl::encoding::Depth,
264        ) -> fidl::Result<()> {
265            encoder.debug_check_bounds::<BoardGetInfoResponse>(offset);
266            // Zero out padding regions. There's no need to apply masks
267            // because the unmasked parts will be overwritten by fields.
268            // Write the fields.
269            self.0.encode(encoder, offset + 0, depth)?;
270            Ok(())
271        }
272    }
273
274    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for BoardGetInfoResponse {
275        #[inline(always)]
276        fn new_empty() -> Self {
277            Self { info: fidl::new_empty!(BoardInfo, D) }
278        }
279
280        #[inline]
281        unsafe fn decode(
282            &mut self,
283            decoder: &mut fidl::encoding::Decoder<'_, D>,
284            offset: usize,
285            _depth: fidl::encoding::Depth,
286        ) -> fidl::Result<()> {
287            decoder.debug_check_bounds::<Self>(offset);
288            // Verify that padding bytes are zero.
289            fidl::decode!(BoardInfo, D, &mut self.info, decoder, offset + 0, _depth)?;
290            Ok(())
291        }
292    }
293
294    impl fidl::encoding::ValueTypeMarker for DeviceGetInfoResponse {
295        type Borrowed<'a> = &'a Self;
296        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
297            value
298        }
299    }
300
301    unsafe impl fidl::encoding::TypeMarker for DeviceGetInfoResponse {
302        type Owned = Self;
303
304        #[inline(always)]
305        fn inline_align(_context: fidl::encoding::Context) -> usize {
306            8
307        }
308
309        #[inline(always)]
310        fn inline_size(_context: fidl::encoding::Context) -> usize {
311            16
312        }
313    }
314
315    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<DeviceGetInfoResponse, D>
316        for &DeviceGetInfoResponse
317    {
318        #[inline]
319        unsafe fn encode(
320            self,
321            encoder: &mut fidl::encoding::Encoder<'_, D>,
322            offset: usize,
323            _depth: fidl::encoding::Depth,
324        ) -> fidl::Result<()> {
325            encoder.debug_check_bounds::<DeviceGetInfoResponse>(offset);
326            // Delegate to tuple encoding.
327            fidl::encoding::Encode::<DeviceGetInfoResponse, D>::encode(
328                (<DeviceInfo as fidl::encoding::ValueTypeMarker>::borrow(&self.info),),
329                encoder,
330                offset,
331                _depth,
332            )
333        }
334    }
335    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<DeviceInfo, D>>
336        fidl::encoding::Encode<DeviceGetInfoResponse, D> for (T0,)
337    {
338        #[inline]
339        unsafe fn encode(
340            self,
341            encoder: &mut fidl::encoding::Encoder<'_, D>,
342            offset: usize,
343            depth: fidl::encoding::Depth,
344        ) -> fidl::Result<()> {
345            encoder.debug_check_bounds::<DeviceGetInfoResponse>(offset);
346            // Zero out padding regions. There's no need to apply masks
347            // because the unmasked parts will be overwritten by fields.
348            // Write the fields.
349            self.0.encode(encoder, offset + 0, depth)?;
350            Ok(())
351        }
352    }
353
354    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DeviceGetInfoResponse {
355        #[inline(always)]
356        fn new_empty() -> Self {
357            Self { info: fidl::new_empty!(DeviceInfo, D) }
358        }
359
360        #[inline]
361        unsafe fn decode(
362            &mut self,
363            decoder: &mut fidl::encoding::Decoder<'_, D>,
364            offset: usize,
365            _depth: fidl::encoding::Depth,
366        ) -> fidl::Result<()> {
367            decoder.debug_check_bounds::<Self>(offset);
368            // Verify that padding bytes are zero.
369            fidl::decode!(DeviceInfo, D, &mut self.info, decoder, offset + 0, _depth)?;
370            Ok(())
371        }
372    }
373
374    impl fidl::encoding::ValueTypeMarker for ProductGetInfoResponse {
375        type Borrowed<'a> = &'a Self;
376        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
377            value
378        }
379    }
380
381    unsafe impl fidl::encoding::TypeMarker for ProductGetInfoResponse {
382        type Owned = Self;
383
384        #[inline(always)]
385        fn inline_align(_context: fidl::encoding::Context) -> usize {
386            8
387        }
388
389        #[inline(always)]
390        fn inline_size(_context: fidl::encoding::Context) -> usize {
391            16
392        }
393    }
394
395    unsafe impl<D: fidl::encoding::ResourceDialect>
396        fidl::encoding::Encode<ProductGetInfoResponse, D> for &ProductGetInfoResponse
397    {
398        #[inline]
399        unsafe fn encode(
400            self,
401            encoder: &mut fidl::encoding::Encoder<'_, D>,
402            offset: usize,
403            _depth: fidl::encoding::Depth,
404        ) -> fidl::Result<()> {
405            encoder.debug_check_bounds::<ProductGetInfoResponse>(offset);
406            // Delegate to tuple encoding.
407            fidl::encoding::Encode::<ProductGetInfoResponse, D>::encode(
408                (<ProductInfo as fidl::encoding::ValueTypeMarker>::borrow(&self.info),),
409                encoder,
410                offset,
411                _depth,
412            )
413        }
414    }
415    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<ProductInfo, D>>
416        fidl::encoding::Encode<ProductGetInfoResponse, D> for (T0,)
417    {
418        #[inline]
419        unsafe fn encode(
420            self,
421            encoder: &mut fidl::encoding::Encoder<'_, D>,
422            offset: usize,
423            depth: fidl::encoding::Depth,
424        ) -> fidl::Result<()> {
425            encoder.debug_check_bounds::<ProductGetInfoResponse>(offset);
426            // Zero out padding regions. There's no need to apply masks
427            // because the unmasked parts will be overwritten by fields.
428            // Write the fields.
429            self.0.encode(encoder, offset + 0, depth)?;
430            Ok(())
431        }
432    }
433
434    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
435        for ProductGetInfoResponse
436    {
437        #[inline(always)]
438        fn new_empty() -> Self {
439            Self { info: fidl::new_empty!(ProductInfo, D) }
440        }
441
442        #[inline]
443        unsafe fn decode(
444            &mut self,
445            decoder: &mut fidl::encoding::Decoder<'_, D>,
446            offset: usize,
447            _depth: fidl::encoding::Depth,
448        ) -> fidl::Result<()> {
449            decoder.debug_check_bounds::<Self>(offset);
450            // Verify that padding bytes are zero.
451            fidl::decode!(ProductInfo, D, &mut self.info, decoder, offset + 0, _depth)?;
452            Ok(())
453        }
454    }
455
456    impl BoardInfo {
457        #[inline(always)]
458        fn max_ordinal_present(&self) -> u64 {
459            if let Some(_) = self.cpu_architecture {
460                return 3;
461            }
462            if let Some(_) = self.revision {
463                return 2;
464            }
465            if let Some(_) = self.name {
466                return 1;
467            }
468            0
469        }
470    }
471
472    impl fidl::encoding::ValueTypeMarker for BoardInfo {
473        type Borrowed<'a> = &'a Self;
474        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
475            value
476        }
477    }
478
479    unsafe impl fidl::encoding::TypeMarker for BoardInfo {
480        type Owned = Self;
481
482        #[inline(always)]
483        fn inline_align(_context: fidl::encoding::Context) -> usize {
484            8
485        }
486
487        #[inline(always)]
488        fn inline_size(_context: fidl::encoding::Context) -> usize {
489            16
490        }
491    }
492
493    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<BoardInfo, D>
494        for &BoardInfo
495    {
496        unsafe fn encode(
497            self,
498            encoder: &mut fidl::encoding::Encoder<'_, D>,
499            offset: usize,
500            mut depth: fidl::encoding::Depth,
501        ) -> fidl::Result<()> {
502            encoder.debug_check_bounds::<BoardInfo>(offset);
503            // Vector header
504            let max_ordinal: u64 = self.max_ordinal_present();
505            encoder.write_num(max_ordinal, offset);
506            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
507            // Calling encoder.out_of_line_offset(0) is not allowed.
508            if max_ordinal == 0 {
509                return Ok(());
510            }
511            depth.increment()?;
512            let envelope_size = 8;
513            let bytes_len = max_ordinal as usize * envelope_size;
514            #[allow(unused_variables)]
515            let offset = encoder.out_of_line_offset(bytes_len);
516            let mut _prev_end_offset: usize = 0;
517            if 1 > max_ordinal {
518                return Ok(());
519            }
520
521            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
522            // are envelope_size bytes.
523            let cur_offset: usize = (1 - 1) * envelope_size;
524
525            // Zero reserved fields.
526            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
527
528            // Safety:
529            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
530            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
531            //   envelope_size bytes, there is always sufficient room.
532            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedString, D>(
533                self.name.as_ref().map(
534                    <fidl::encoding::UnboundedString as fidl::encoding::ValueTypeMarker>::borrow,
535                ),
536                encoder,
537                offset + cur_offset,
538                depth,
539            )?;
540
541            _prev_end_offset = cur_offset + envelope_size;
542            if 2 > max_ordinal {
543                return Ok(());
544            }
545
546            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
547            // are envelope_size bytes.
548            let cur_offset: usize = (2 - 1) * envelope_size;
549
550            // Zero reserved fields.
551            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
552
553            // Safety:
554            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
555            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
556            //   envelope_size bytes, there is always sufficient room.
557            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedString, D>(
558                self.revision.as_ref().map(
559                    <fidl::encoding::UnboundedString as fidl::encoding::ValueTypeMarker>::borrow,
560                ),
561                encoder,
562                offset + cur_offset,
563                depth,
564            )?;
565
566            _prev_end_offset = cur_offset + envelope_size;
567            if 3 > max_ordinal {
568                return Ok(());
569            }
570
571            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
572            // are envelope_size bytes.
573            let cur_offset: usize = (3 - 1) * envelope_size;
574
575            // Zero reserved fields.
576            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
577
578            // Safety:
579            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
580            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
581            //   envelope_size bytes, there is always sufficient room.
582            fidl::encoding::encode_in_envelope_optional::<Architecture, D>(
583                self.cpu_architecture
584                    .as_ref()
585                    .map(<Architecture as fidl::encoding::ValueTypeMarker>::borrow),
586                encoder,
587                offset + cur_offset,
588                depth,
589            )?;
590
591            _prev_end_offset = cur_offset + envelope_size;
592
593            Ok(())
594        }
595    }
596
597    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for BoardInfo {
598        #[inline(always)]
599        fn new_empty() -> Self {
600            Self::default()
601        }
602
603        unsafe fn decode(
604            &mut self,
605            decoder: &mut fidl::encoding::Decoder<'_, D>,
606            offset: usize,
607            mut depth: fidl::encoding::Depth,
608        ) -> fidl::Result<()> {
609            decoder.debug_check_bounds::<Self>(offset);
610            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
611                None => return Err(fidl::Error::NotNullable),
612                Some(len) => len,
613            };
614            // Calling decoder.out_of_line_offset(0) is not allowed.
615            if len == 0 {
616                return Ok(());
617            };
618            depth.increment()?;
619            let envelope_size = 8;
620            let bytes_len = len * envelope_size;
621            let offset = decoder.out_of_line_offset(bytes_len)?;
622            // Decode the envelope for each type.
623            let mut _next_ordinal_to_read = 0;
624            let mut next_offset = offset;
625            let end_offset = offset + bytes_len;
626            _next_ordinal_to_read += 1;
627            if next_offset >= end_offset {
628                return Ok(());
629            }
630
631            // Decode unknown envelopes for gaps in ordinals.
632            while _next_ordinal_to_read < 1 {
633                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
634                _next_ordinal_to_read += 1;
635                next_offset += envelope_size;
636            }
637
638            let next_out_of_line = decoder.next_out_of_line();
639            let handles_before = decoder.remaining_handles();
640            if let Some((inlined, num_bytes, num_handles)) =
641                fidl::encoding::decode_envelope_header(decoder, next_offset)?
642            {
643                let member_inline_size =
644                    <fidl::encoding::UnboundedString as fidl::encoding::TypeMarker>::inline_size(
645                        decoder.context,
646                    );
647                if inlined != (member_inline_size <= 4) {
648                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
649                }
650                let inner_offset;
651                let mut inner_depth = depth.clone();
652                if inlined {
653                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
654                    inner_offset = next_offset;
655                } else {
656                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
657                    inner_depth.increment()?;
658                }
659                let val_ref = self
660                    .name
661                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::UnboundedString, D));
662                fidl::decode!(
663                    fidl::encoding::UnboundedString,
664                    D,
665                    val_ref,
666                    decoder,
667                    inner_offset,
668                    inner_depth
669                )?;
670                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
671                {
672                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
673                }
674                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
675                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
676                }
677            }
678
679            next_offset += envelope_size;
680            _next_ordinal_to_read += 1;
681            if next_offset >= end_offset {
682                return Ok(());
683            }
684
685            // Decode unknown envelopes for gaps in ordinals.
686            while _next_ordinal_to_read < 2 {
687                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
688                _next_ordinal_to_read += 1;
689                next_offset += envelope_size;
690            }
691
692            let next_out_of_line = decoder.next_out_of_line();
693            let handles_before = decoder.remaining_handles();
694            if let Some((inlined, num_bytes, num_handles)) =
695                fidl::encoding::decode_envelope_header(decoder, next_offset)?
696            {
697                let member_inline_size =
698                    <fidl::encoding::UnboundedString as fidl::encoding::TypeMarker>::inline_size(
699                        decoder.context,
700                    );
701                if inlined != (member_inline_size <= 4) {
702                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
703                }
704                let inner_offset;
705                let mut inner_depth = depth.clone();
706                if inlined {
707                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
708                    inner_offset = next_offset;
709                } else {
710                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
711                    inner_depth.increment()?;
712                }
713                let val_ref = self
714                    .revision
715                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::UnboundedString, D));
716                fidl::decode!(
717                    fidl::encoding::UnboundedString,
718                    D,
719                    val_ref,
720                    decoder,
721                    inner_offset,
722                    inner_depth
723                )?;
724                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
725                {
726                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
727                }
728                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
729                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
730                }
731            }
732
733            next_offset += envelope_size;
734            _next_ordinal_to_read += 1;
735            if next_offset >= end_offset {
736                return Ok(());
737            }
738
739            // Decode unknown envelopes for gaps in ordinals.
740            while _next_ordinal_to_read < 3 {
741                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
742                _next_ordinal_to_read += 1;
743                next_offset += envelope_size;
744            }
745
746            let next_out_of_line = decoder.next_out_of_line();
747            let handles_before = decoder.remaining_handles();
748            if let Some((inlined, num_bytes, num_handles)) =
749                fidl::encoding::decode_envelope_header(decoder, next_offset)?
750            {
751                let member_inline_size =
752                    <Architecture as fidl::encoding::TypeMarker>::inline_size(decoder.context);
753                if inlined != (member_inline_size <= 4) {
754                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
755                }
756                let inner_offset;
757                let mut inner_depth = depth.clone();
758                if inlined {
759                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
760                    inner_offset = next_offset;
761                } else {
762                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
763                    inner_depth.increment()?;
764                }
765                let val_ref =
766                    self.cpu_architecture.get_or_insert_with(|| fidl::new_empty!(Architecture, D));
767                fidl::decode!(Architecture, D, val_ref, decoder, inner_offset, inner_depth)?;
768                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
769                {
770                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
771                }
772                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
773                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
774                }
775            }
776
777            next_offset += envelope_size;
778
779            // Decode the remaining unknown envelopes.
780            while next_offset < end_offset {
781                _next_ordinal_to_read += 1;
782                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
783                next_offset += envelope_size;
784            }
785
786            Ok(())
787        }
788    }
789
790    impl DeviceInfo {
791        #[inline(always)]
792        fn max_ordinal_present(&self) -> u64 {
793            if let Some(_) = self.retail_sku {
794                return 3;
795            }
796            if let Some(_) = self.is_retail_demo {
797                return 2;
798            }
799            if let Some(_) = self.serial_number {
800                return 1;
801            }
802            0
803        }
804    }
805
806    impl fidl::encoding::ValueTypeMarker for DeviceInfo {
807        type Borrowed<'a> = &'a Self;
808        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
809            value
810        }
811    }
812
813    unsafe impl fidl::encoding::TypeMarker for DeviceInfo {
814        type Owned = Self;
815
816        #[inline(always)]
817        fn inline_align(_context: fidl::encoding::Context) -> usize {
818            8
819        }
820
821        #[inline(always)]
822        fn inline_size(_context: fidl::encoding::Context) -> usize {
823            16
824        }
825    }
826
827    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<DeviceInfo, D>
828        for &DeviceInfo
829    {
830        unsafe fn encode(
831            self,
832            encoder: &mut fidl::encoding::Encoder<'_, D>,
833            offset: usize,
834            mut depth: fidl::encoding::Depth,
835        ) -> fidl::Result<()> {
836            encoder.debug_check_bounds::<DeviceInfo>(offset);
837            // Vector header
838            let max_ordinal: u64 = self.max_ordinal_present();
839            encoder.write_num(max_ordinal, offset);
840            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
841            // Calling encoder.out_of_line_offset(0) is not allowed.
842            if max_ordinal == 0 {
843                return Ok(());
844            }
845            depth.increment()?;
846            let envelope_size = 8;
847            let bytes_len = max_ordinal as usize * envelope_size;
848            #[allow(unused_variables)]
849            let offset = encoder.out_of_line_offset(bytes_len);
850            let mut _prev_end_offset: usize = 0;
851            if 1 > max_ordinal {
852                return Ok(());
853            }
854
855            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
856            // are envelope_size bytes.
857            let cur_offset: usize = (1 - 1) * envelope_size;
858
859            // Zero reserved fields.
860            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
861
862            // Safety:
863            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
864            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
865            //   envelope_size bytes, there is always sufficient room.
866            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<255>, D>(
867                self.serial_number.as_ref().map(
868                    <fidl::encoding::BoundedString<255> as fidl::encoding::ValueTypeMarker>::borrow,
869                ),
870                encoder,
871                offset + cur_offset,
872                depth,
873            )?;
874
875            _prev_end_offset = cur_offset + envelope_size;
876            if 2 > max_ordinal {
877                return Ok(());
878            }
879
880            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
881            // are envelope_size bytes.
882            let cur_offset: usize = (2 - 1) * envelope_size;
883
884            // Zero reserved fields.
885            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
886
887            // Safety:
888            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
889            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
890            //   envelope_size bytes, there is always sufficient room.
891            fidl::encoding::encode_in_envelope_optional::<bool, D>(
892                self.is_retail_demo.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
893                encoder,
894                offset + cur_offset,
895                depth,
896            )?;
897
898            _prev_end_offset = cur_offset + envelope_size;
899            if 3 > max_ordinal {
900                return Ok(());
901            }
902
903            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
904            // are envelope_size bytes.
905            let cur_offset: usize = (3 - 1) * envelope_size;
906
907            // Zero reserved fields.
908            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
909
910            // Safety:
911            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
912            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
913            //   envelope_size bytes, there is always sufficient room.
914            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<255>, D>(
915                self.retail_sku.as_ref().map(
916                    <fidl::encoding::BoundedString<255> as fidl::encoding::ValueTypeMarker>::borrow,
917                ),
918                encoder,
919                offset + cur_offset,
920                depth,
921            )?;
922
923            _prev_end_offset = cur_offset + envelope_size;
924
925            Ok(())
926        }
927    }
928
929    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DeviceInfo {
930        #[inline(always)]
931        fn new_empty() -> Self {
932            Self::default()
933        }
934
935        unsafe fn decode(
936            &mut self,
937            decoder: &mut fidl::encoding::Decoder<'_, D>,
938            offset: usize,
939            mut depth: fidl::encoding::Depth,
940        ) -> fidl::Result<()> {
941            decoder.debug_check_bounds::<Self>(offset);
942            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
943                None => return Err(fidl::Error::NotNullable),
944                Some(len) => len,
945            };
946            // Calling decoder.out_of_line_offset(0) is not allowed.
947            if len == 0 {
948                return Ok(());
949            };
950            depth.increment()?;
951            let envelope_size = 8;
952            let bytes_len = len * envelope_size;
953            let offset = decoder.out_of_line_offset(bytes_len)?;
954            // Decode the envelope for each type.
955            let mut _next_ordinal_to_read = 0;
956            let mut next_offset = offset;
957            let end_offset = offset + bytes_len;
958            _next_ordinal_to_read += 1;
959            if next_offset >= end_offset {
960                return Ok(());
961            }
962
963            // Decode unknown envelopes for gaps in ordinals.
964            while _next_ordinal_to_read < 1 {
965                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
966                _next_ordinal_to_read += 1;
967                next_offset += envelope_size;
968            }
969
970            let next_out_of_line = decoder.next_out_of_line();
971            let handles_before = decoder.remaining_handles();
972            if let Some((inlined, num_bytes, num_handles)) =
973                fidl::encoding::decode_envelope_header(decoder, next_offset)?
974            {
975                let member_inline_size =
976                    <fidl::encoding::BoundedString<255> as fidl::encoding::TypeMarker>::inline_size(
977                        decoder.context,
978                    );
979                if inlined != (member_inline_size <= 4) {
980                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
981                }
982                let inner_offset;
983                let mut inner_depth = depth.clone();
984                if inlined {
985                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
986                    inner_offset = next_offset;
987                } else {
988                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
989                    inner_depth.increment()?;
990                }
991                let val_ref = self
992                    .serial_number
993                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<255>, D));
994                fidl::decode!(
995                    fidl::encoding::BoundedString<255>,
996                    D,
997                    val_ref,
998                    decoder,
999                    inner_offset,
1000                    inner_depth
1001                )?;
1002                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1003                {
1004                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1005                }
1006                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1007                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1008                }
1009            }
1010
1011            next_offset += envelope_size;
1012            _next_ordinal_to_read += 1;
1013            if next_offset >= end_offset {
1014                return Ok(());
1015            }
1016
1017            // Decode unknown envelopes for gaps in ordinals.
1018            while _next_ordinal_to_read < 2 {
1019                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1020                _next_ordinal_to_read += 1;
1021                next_offset += envelope_size;
1022            }
1023
1024            let next_out_of_line = decoder.next_out_of_line();
1025            let handles_before = decoder.remaining_handles();
1026            if let Some((inlined, num_bytes, num_handles)) =
1027                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1028            {
1029                let member_inline_size =
1030                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1031                if inlined != (member_inline_size <= 4) {
1032                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1033                }
1034                let inner_offset;
1035                let mut inner_depth = depth.clone();
1036                if inlined {
1037                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1038                    inner_offset = next_offset;
1039                } else {
1040                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1041                    inner_depth.increment()?;
1042                }
1043                let val_ref = self.is_retail_demo.get_or_insert_with(|| fidl::new_empty!(bool, D));
1044                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
1045                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1046                {
1047                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1048                }
1049                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1050                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1051                }
1052            }
1053
1054            next_offset += envelope_size;
1055            _next_ordinal_to_read += 1;
1056            if next_offset >= end_offset {
1057                return Ok(());
1058            }
1059
1060            // Decode unknown envelopes for gaps in ordinals.
1061            while _next_ordinal_to_read < 3 {
1062                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1063                _next_ordinal_to_read += 1;
1064                next_offset += envelope_size;
1065            }
1066
1067            let next_out_of_line = decoder.next_out_of_line();
1068            let handles_before = decoder.remaining_handles();
1069            if let Some((inlined, num_bytes, num_handles)) =
1070                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1071            {
1072                let member_inline_size =
1073                    <fidl::encoding::BoundedString<255> as fidl::encoding::TypeMarker>::inline_size(
1074                        decoder.context,
1075                    );
1076                if inlined != (member_inline_size <= 4) {
1077                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1078                }
1079                let inner_offset;
1080                let mut inner_depth = depth.clone();
1081                if inlined {
1082                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1083                    inner_offset = next_offset;
1084                } else {
1085                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1086                    inner_depth.increment()?;
1087                }
1088                let val_ref = self
1089                    .retail_sku
1090                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<255>, D));
1091                fidl::decode!(
1092                    fidl::encoding::BoundedString<255>,
1093                    D,
1094                    val_ref,
1095                    decoder,
1096                    inner_offset,
1097                    inner_depth
1098                )?;
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
1110            // Decode the remaining unknown envelopes.
1111            while next_offset < end_offset {
1112                _next_ordinal_to_read += 1;
1113                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1114                next_offset += envelope_size;
1115            }
1116
1117            Ok(())
1118        }
1119    }
1120
1121    impl ProductInfo {
1122        #[inline(always)]
1123        fn max_ordinal_present(&self) -> u64 {
1124            if let Some(_) = self.audio_amplifier {
1125                return 16;
1126            }
1127            if let Some(_) = self.microphone {
1128                return 15;
1129            }
1130            if let Some(_) = self.emmc_storage {
1131                return 14;
1132            }
1133            if let Some(_) = self.nand_storage {
1134                return 13;
1135            }
1136            if let Some(_) = self.memory {
1137                return 12;
1138            }
1139            if let Some(_) = self.display {
1140                return 11;
1141            }
1142            if let Some(_) = self.colorway {
1143                return 10;
1144            }
1145            if let Some(_) = self.build_name {
1146                return 9;
1147            }
1148            if let Some(_) = self.build_date {
1149                return 8;
1150            }
1151            if let Some(_) = self.manufacturer {
1152                return 7;
1153            }
1154            if let Some(_) = self.model {
1155                return 6;
1156            }
1157            if let Some(_) = self.name {
1158                return 5;
1159            }
1160            if let Some(_) = self.locale_list {
1161                return 4;
1162            }
1163            if let Some(_) = self.regulatory_domain {
1164                return 3;
1165            }
1166            if let Some(_) = self.language {
1167                return 2;
1168            }
1169            if let Some(_) = self.sku {
1170                return 1;
1171            }
1172            0
1173        }
1174    }
1175
1176    impl fidl::encoding::ValueTypeMarker for ProductInfo {
1177        type Borrowed<'a> = &'a Self;
1178        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1179            value
1180        }
1181    }
1182
1183    unsafe impl fidl::encoding::TypeMarker for ProductInfo {
1184        type Owned = Self;
1185
1186        #[inline(always)]
1187        fn inline_align(_context: fidl::encoding::Context) -> usize {
1188            8
1189        }
1190
1191        #[inline(always)]
1192        fn inline_size(_context: fidl::encoding::Context) -> usize {
1193            16
1194        }
1195    }
1196
1197    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<ProductInfo, D>
1198        for &ProductInfo
1199    {
1200        unsafe fn encode(
1201            self,
1202            encoder: &mut fidl::encoding::Encoder<'_, D>,
1203            offset: usize,
1204            mut depth: fidl::encoding::Depth,
1205        ) -> fidl::Result<()> {
1206            encoder.debug_check_bounds::<ProductInfo>(offset);
1207            // Vector header
1208            let max_ordinal: u64 = self.max_ordinal_present();
1209            encoder.write_num(max_ordinal, offset);
1210            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
1211            // Calling encoder.out_of_line_offset(0) is not allowed.
1212            if max_ordinal == 0 {
1213                return Ok(());
1214            }
1215            depth.increment()?;
1216            let envelope_size = 8;
1217            let bytes_len = max_ordinal as usize * envelope_size;
1218            #[allow(unused_variables)]
1219            let offset = encoder.out_of_line_offset(bytes_len);
1220            let mut _prev_end_offset: usize = 0;
1221            if 1 > max_ordinal {
1222                return Ok(());
1223            }
1224
1225            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1226            // are envelope_size bytes.
1227            let cur_offset: usize = (1 - 1) * envelope_size;
1228
1229            // Zero reserved fields.
1230            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1231
1232            // Safety:
1233            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1234            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1235            //   envelope_size bytes, there is always sufficient room.
1236            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedString, D>(
1237                self.sku.as_ref().map(
1238                    <fidl::encoding::UnboundedString as fidl::encoding::ValueTypeMarker>::borrow,
1239                ),
1240                encoder,
1241                offset + cur_offset,
1242                depth,
1243            )?;
1244
1245            _prev_end_offset = cur_offset + envelope_size;
1246            if 2 > max_ordinal {
1247                return Ok(());
1248            }
1249
1250            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1251            // are envelope_size bytes.
1252            let cur_offset: usize = (2 - 1) * envelope_size;
1253
1254            // Zero reserved fields.
1255            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1256
1257            // Safety:
1258            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1259            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1260            //   envelope_size bytes, there is always sufficient room.
1261            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedString, D>(
1262                self.language.as_ref().map(
1263                    <fidl::encoding::UnboundedString as fidl::encoding::ValueTypeMarker>::borrow,
1264                ),
1265                encoder,
1266                offset + cur_offset,
1267                depth,
1268            )?;
1269
1270            _prev_end_offset = cur_offset + envelope_size;
1271            if 3 > max_ordinal {
1272                return Ok(());
1273            }
1274
1275            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1276            // are envelope_size bytes.
1277            let cur_offset: usize = (3 - 1) * envelope_size;
1278
1279            // Zero reserved fields.
1280            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1281
1282            // Safety:
1283            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1284            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1285            //   envelope_size bytes, there is always sufficient room.
1286            fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_intl::RegulatoryDomain, D>(
1287            self.regulatory_domain.as_ref().map(<fidl_fuchsia_intl::RegulatoryDomain as fidl::encoding::ValueTypeMarker>::borrow),
1288            encoder, offset + cur_offset, depth
1289        )?;
1290
1291            _prev_end_offset = cur_offset + envelope_size;
1292            if 4 > max_ordinal {
1293                return Ok(());
1294            }
1295
1296            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1297            // are envelope_size bytes.
1298            let cur_offset: usize = (4 - 1) * envelope_size;
1299
1300            // Zero reserved fields.
1301            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1302
1303            // Safety:
1304            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1305            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1306            //   envelope_size bytes, there is always sufficient room.
1307            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<fidl_fuchsia_intl::LocaleId>, D>(
1308            self.locale_list.as_ref().map(<fidl::encoding::UnboundedVector<fidl_fuchsia_intl::LocaleId> as fidl::encoding::ValueTypeMarker>::borrow),
1309            encoder, offset + cur_offset, depth
1310        )?;
1311
1312            _prev_end_offset = cur_offset + envelope_size;
1313            if 5 > max_ordinal {
1314                return Ok(());
1315            }
1316
1317            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1318            // are envelope_size bytes.
1319            let cur_offset: usize = (5 - 1) * envelope_size;
1320
1321            // Zero reserved fields.
1322            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1323
1324            // Safety:
1325            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1326            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1327            //   envelope_size bytes, there is always sufficient room.
1328            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedString, D>(
1329                self.name.as_ref().map(
1330                    <fidl::encoding::UnboundedString as fidl::encoding::ValueTypeMarker>::borrow,
1331                ),
1332                encoder,
1333                offset + cur_offset,
1334                depth,
1335            )?;
1336
1337            _prev_end_offset = cur_offset + envelope_size;
1338            if 6 > max_ordinal {
1339                return Ok(());
1340            }
1341
1342            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1343            // are envelope_size bytes.
1344            let cur_offset: usize = (6 - 1) * envelope_size;
1345
1346            // Zero reserved fields.
1347            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1348
1349            // Safety:
1350            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1351            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1352            //   envelope_size bytes, there is always sufficient room.
1353            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedString, D>(
1354                self.model.as_ref().map(
1355                    <fidl::encoding::UnboundedString as fidl::encoding::ValueTypeMarker>::borrow,
1356                ),
1357                encoder,
1358                offset + cur_offset,
1359                depth,
1360            )?;
1361
1362            _prev_end_offset = cur_offset + envelope_size;
1363            if 7 > max_ordinal {
1364                return Ok(());
1365            }
1366
1367            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1368            // are envelope_size bytes.
1369            let cur_offset: usize = (7 - 1) * envelope_size;
1370
1371            // Zero reserved fields.
1372            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1373
1374            // Safety:
1375            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1376            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1377            //   envelope_size bytes, there is always sufficient room.
1378            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedString, D>(
1379                self.manufacturer.as_ref().map(
1380                    <fidl::encoding::UnboundedString as fidl::encoding::ValueTypeMarker>::borrow,
1381                ),
1382                encoder,
1383                offset + cur_offset,
1384                depth,
1385            )?;
1386
1387            _prev_end_offset = cur_offset + envelope_size;
1388            if 8 > max_ordinal {
1389                return Ok(());
1390            }
1391
1392            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1393            // are envelope_size bytes.
1394            let cur_offset: usize = (8 - 1) * envelope_size;
1395
1396            // Zero reserved fields.
1397            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1398
1399            // Safety:
1400            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1401            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1402            //   envelope_size bytes, there is always sufficient room.
1403            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedString, D>(
1404                self.build_date.as_ref().map(
1405                    <fidl::encoding::UnboundedString as fidl::encoding::ValueTypeMarker>::borrow,
1406                ),
1407                encoder,
1408                offset + cur_offset,
1409                depth,
1410            )?;
1411
1412            _prev_end_offset = cur_offset + envelope_size;
1413            if 9 > max_ordinal {
1414                return Ok(());
1415            }
1416
1417            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1418            // are envelope_size bytes.
1419            let cur_offset: usize = (9 - 1) * envelope_size;
1420
1421            // Zero reserved fields.
1422            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1423
1424            // Safety:
1425            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1426            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1427            //   envelope_size bytes, there is always sufficient room.
1428            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<255>, D>(
1429                self.build_name.as_ref().map(
1430                    <fidl::encoding::BoundedString<255> as fidl::encoding::ValueTypeMarker>::borrow,
1431                ),
1432                encoder,
1433                offset + cur_offset,
1434                depth,
1435            )?;
1436
1437            _prev_end_offset = cur_offset + envelope_size;
1438            if 10 > max_ordinal {
1439                return Ok(());
1440            }
1441
1442            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1443            // are envelope_size bytes.
1444            let cur_offset: usize = (10 - 1) * envelope_size;
1445
1446            // Zero reserved fields.
1447            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1448
1449            // Safety:
1450            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1451            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1452            //   envelope_size bytes, there is always sufficient room.
1453            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<255>, D>(
1454                self.colorway.as_ref().map(
1455                    <fidl::encoding::BoundedString<255> as fidl::encoding::ValueTypeMarker>::borrow,
1456                ),
1457                encoder,
1458                offset + cur_offset,
1459                depth,
1460            )?;
1461
1462            _prev_end_offset = cur_offset + envelope_size;
1463            if 11 > max_ordinal {
1464                return Ok(());
1465            }
1466
1467            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1468            // are envelope_size bytes.
1469            let cur_offset: usize = (11 - 1) * envelope_size;
1470
1471            // Zero reserved fields.
1472            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1473
1474            // Safety:
1475            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1476            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1477            //   envelope_size bytes, there is always sufficient room.
1478            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<255>, D>(
1479                self.display.as_ref().map(
1480                    <fidl::encoding::BoundedString<255> as fidl::encoding::ValueTypeMarker>::borrow,
1481                ),
1482                encoder,
1483                offset + cur_offset,
1484                depth,
1485            )?;
1486
1487            _prev_end_offset = cur_offset + envelope_size;
1488            if 12 > max_ordinal {
1489                return Ok(());
1490            }
1491
1492            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1493            // are envelope_size bytes.
1494            let cur_offset: usize = (12 - 1) * envelope_size;
1495
1496            // Zero reserved fields.
1497            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1498
1499            // Safety:
1500            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1501            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1502            //   envelope_size bytes, there is always sufficient room.
1503            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<255>, D>(
1504                self.memory.as_ref().map(
1505                    <fidl::encoding::BoundedString<255> as fidl::encoding::ValueTypeMarker>::borrow,
1506                ),
1507                encoder,
1508                offset + cur_offset,
1509                depth,
1510            )?;
1511
1512            _prev_end_offset = cur_offset + envelope_size;
1513            if 13 > max_ordinal {
1514                return Ok(());
1515            }
1516
1517            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1518            // are envelope_size bytes.
1519            let cur_offset: usize = (13 - 1) * envelope_size;
1520
1521            // Zero reserved fields.
1522            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1523
1524            // Safety:
1525            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1526            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1527            //   envelope_size bytes, there is always sufficient room.
1528            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<255>, D>(
1529                self.nand_storage.as_ref().map(
1530                    <fidl::encoding::BoundedString<255> as fidl::encoding::ValueTypeMarker>::borrow,
1531                ),
1532                encoder,
1533                offset + cur_offset,
1534                depth,
1535            )?;
1536
1537            _prev_end_offset = cur_offset + envelope_size;
1538            if 14 > max_ordinal {
1539                return Ok(());
1540            }
1541
1542            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1543            // are envelope_size bytes.
1544            let cur_offset: usize = (14 - 1) * envelope_size;
1545
1546            // Zero reserved fields.
1547            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1548
1549            // Safety:
1550            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1551            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1552            //   envelope_size bytes, there is always sufficient room.
1553            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<255>, D>(
1554                self.emmc_storage.as_ref().map(
1555                    <fidl::encoding::BoundedString<255> as fidl::encoding::ValueTypeMarker>::borrow,
1556                ),
1557                encoder,
1558                offset + cur_offset,
1559                depth,
1560            )?;
1561
1562            _prev_end_offset = cur_offset + envelope_size;
1563            if 15 > max_ordinal {
1564                return Ok(());
1565            }
1566
1567            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1568            // are envelope_size bytes.
1569            let cur_offset: usize = (15 - 1) * envelope_size;
1570
1571            // Zero reserved fields.
1572            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1573
1574            // Safety:
1575            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1576            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1577            //   envelope_size bytes, there is always sufficient room.
1578            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<255>, D>(
1579                self.microphone.as_ref().map(
1580                    <fidl::encoding::BoundedString<255> as fidl::encoding::ValueTypeMarker>::borrow,
1581                ),
1582                encoder,
1583                offset + cur_offset,
1584                depth,
1585            )?;
1586
1587            _prev_end_offset = cur_offset + envelope_size;
1588            if 16 > max_ordinal {
1589                return Ok(());
1590            }
1591
1592            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1593            // are envelope_size bytes.
1594            let cur_offset: usize = (16 - 1) * envelope_size;
1595
1596            // Zero reserved fields.
1597            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1598
1599            // Safety:
1600            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1601            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1602            //   envelope_size bytes, there is always sufficient room.
1603            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<255>, D>(
1604                self.audio_amplifier.as_ref().map(
1605                    <fidl::encoding::BoundedString<255> as fidl::encoding::ValueTypeMarker>::borrow,
1606                ),
1607                encoder,
1608                offset + cur_offset,
1609                depth,
1610            )?;
1611
1612            _prev_end_offset = cur_offset + envelope_size;
1613
1614            Ok(())
1615        }
1616    }
1617
1618    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ProductInfo {
1619        #[inline(always)]
1620        fn new_empty() -> Self {
1621            Self::default()
1622        }
1623
1624        unsafe fn decode(
1625            &mut self,
1626            decoder: &mut fidl::encoding::Decoder<'_, D>,
1627            offset: usize,
1628            mut depth: fidl::encoding::Depth,
1629        ) -> fidl::Result<()> {
1630            decoder.debug_check_bounds::<Self>(offset);
1631            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
1632                None => return Err(fidl::Error::NotNullable),
1633                Some(len) => len,
1634            };
1635            // Calling decoder.out_of_line_offset(0) is not allowed.
1636            if len == 0 {
1637                return Ok(());
1638            };
1639            depth.increment()?;
1640            let envelope_size = 8;
1641            let bytes_len = len * envelope_size;
1642            let offset = decoder.out_of_line_offset(bytes_len)?;
1643            // Decode the envelope for each type.
1644            let mut _next_ordinal_to_read = 0;
1645            let mut next_offset = offset;
1646            let end_offset = offset + bytes_len;
1647            _next_ordinal_to_read += 1;
1648            if next_offset >= end_offset {
1649                return Ok(());
1650            }
1651
1652            // Decode unknown envelopes for gaps in ordinals.
1653            while _next_ordinal_to_read < 1 {
1654                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1655                _next_ordinal_to_read += 1;
1656                next_offset += envelope_size;
1657            }
1658
1659            let next_out_of_line = decoder.next_out_of_line();
1660            let handles_before = decoder.remaining_handles();
1661            if let Some((inlined, num_bytes, num_handles)) =
1662                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1663            {
1664                let member_inline_size =
1665                    <fidl::encoding::UnboundedString as fidl::encoding::TypeMarker>::inline_size(
1666                        decoder.context,
1667                    );
1668                if inlined != (member_inline_size <= 4) {
1669                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1670                }
1671                let inner_offset;
1672                let mut inner_depth = depth.clone();
1673                if inlined {
1674                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1675                    inner_offset = next_offset;
1676                } else {
1677                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1678                    inner_depth.increment()?;
1679                }
1680                let val_ref = self
1681                    .sku
1682                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::UnboundedString, D));
1683                fidl::decode!(
1684                    fidl::encoding::UnboundedString,
1685                    D,
1686                    val_ref,
1687                    decoder,
1688                    inner_offset,
1689                    inner_depth
1690                )?;
1691                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1692                {
1693                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1694                }
1695                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1696                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1697                }
1698            }
1699
1700            next_offset += envelope_size;
1701            _next_ordinal_to_read += 1;
1702            if next_offset >= end_offset {
1703                return Ok(());
1704            }
1705
1706            // Decode unknown envelopes for gaps in ordinals.
1707            while _next_ordinal_to_read < 2 {
1708                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1709                _next_ordinal_to_read += 1;
1710                next_offset += envelope_size;
1711            }
1712
1713            let next_out_of_line = decoder.next_out_of_line();
1714            let handles_before = decoder.remaining_handles();
1715            if let Some((inlined, num_bytes, num_handles)) =
1716                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1717            {
1718                let member_inline_size =
1719                    <fidl::encoding::UnboundedString as fidl::encoding::TypeMarker>::inline_size(
1720                        decoder.context,
1721                    );
1722                if inlined != (member_inline_size <= 4) {
1723                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1724                }
1725                let inner_offset;
1726                let mut inner_depth = depth.clone();
1727                if inlined {
1728                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1729                    inner_offset = next_offset;
1730                } else {
1731                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1732                    inner_depth.increment()?;
1733                }
1734                let val_ref = self
1735                    .language
1736                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::UnboundedString, D));
1737                fidl::decode!(
1738                    fidl::encoding::UnboundedString,
1739                    D,
1740                    val_ref,
1741                    decoder,
1742                    inner_offset,
1743                    inner_depth
1744                )?;
1745                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1746                {
1747                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1748                }
1749                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1750                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1751                }
1752            }
1753
1754            next_offset += envelope_size;
1755            _next_ordinal_to_read += 1;
1756            if next_offset >= end_offset {
1757                return Ok(());
1758            }
1759
1760            // Decode unknown envelopes for gaps in ordinals.
1761            while _next_ordinal_to_read < 3 {
1762                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1763                _next_ordinal_to_read += 1;
1764                next_offset += envelope_size;
1765            }
1766
1767            let next_out_of_line = decoder.next_out_of_line();
1768            let handles_before = decoder.remaining_handles();
1769            if let Some((inlined, num_bytes, num_handles)) =
1770                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1771            {
1772                let member_inline_size = <fidl_fuchsia_intl::RegulatoryDomain as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1773                if inlined != (member_inline_size <= 4) {
1774                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1775                }
1776                let inner_offset;
1777                let mut inner_depth = depth.clone();
1778                if inlined {
1779                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1780                    inner_offset = next_offset;
1781                } else {
1782                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1783                    inner_depth.increment()?;
1784                }
1785                let val_ref = self.regulatory_domain.get_or_insert_with(|| {
1786                    fidl::new_empty!(fidl_fuchsia_intl::RegulatoryDomain, D)
1787                });
1788                fidl::decode!(
1789                    fidl_fuchsia_intl::RegulatoryDomain,
1790                    D,
1791                    val_ref,
1792                    decoder,
1793                    inner_offset,
1794                    inner_depth
1795                )?;
1796                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1797                {
1798                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1799                }
1800                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1801                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1802                }
1803            }
1804
1805            next_offset += envelope_size;
1806            _next_ordinal_to_read += 1;
1807            if next_offset >= end_offset {
1808                return Ok(());
1809            }
1810
1811            // Decode unknown envelopes for gaps in ordinals.
1812            while _next_ordinal_to_read < 4 {
1813                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1814                _next_ordinal_to_read += 1;
1815                next_offset += envelope_size;
1816            }
1817
1818            let next_out_of_line = decoder.next_out_of_line();
1819            let handles_before = decoder.remaining_handles();
1820            if let Some((inlined, num_bytes, num_handles)) =
1821                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1822            {
1823                let member_inline_size = <fidl::encoding::UnboundedVector<
1824                    fidl_fuchsia_intl::LocaleId,
1825                > as fidl::encoding::TypeMarker>::inline_size(
1826                    decoder.context
1827                );
1828                if inlined != (member_inline_size <= 4) {
1829                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1830                }
1831                let inner_offset;
1832                let mut inner_depth = depth.clone();
1833                if inlined {
1834                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1835                    inner_offset = next_offset;
1836                } else {
1837                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1838                    inner_depth.increment()?;
1839                }
1840                let val_ref = self.locale_list.get_or_insert_with(|| {
1841                    fidl::new_empty!(
1842                        fidl::encoding::UnboundedVector<fidl_fuchsia_intl::LocaleId>,
1843                        D
1844                    )
1845                });
1846                fidl::decode!(
1847                    fidl::encoding::UnboundedVector<fidl_fuchsia_intl::LocaleId>,
1848                    D,
1849                    val_ref,
1850                    decoder,
1851                    inner_offset,
1852                    inner_depth
1853                )?;
1854                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1855                {
1856                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1857                }
1858                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1859                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1860                }
1861            }
1862
1863            next_offset += envelope_size;
1864            _next_ordinal_to_read += 1;
1865            if next_offset >= end_offset {
1866                return Ok(());
1867            }
1868
1869            // Decode unknown envelopes for gaps in ordinals.
1870            while _next_ordinal_to_read < 5 {
1871                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1872                _next_ordinal_to_read += 1;
1873                next_offset += envelope_size;
1874            }
1875
1876            let next_out_of_line = decoder.next_out_of_line();
1877            let handles_before = decoder.remaining_handles();
1878            if let Some((inlined, num_bytes, num_handles)) =
1879                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1880            {
1881                let member_inline_size =
1882                    <fidl::encoding::UnboundedString as fidl::encoding::TypeMarker>::inline_size(
1883                        decoder.context,
1884                    );
1885                if inlined != (member_inline_size <= 4) {
1886                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1887                }
1888                let inner_offset;
1889                let mut inner_depth = depth.clone();
1890                if inlined {
1891                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1892                    inner_offset = next_offset;
1893                } else {
1894                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1895                    inner_depth.increment()?;
1896                }
1897                let val_ref = self
1898                    .name
1899                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::UnboundedString, D));
1900                fidl::decode!(
1901                    fidl::encoding::UnboundedString,
1902                    D,
1903                    val_ref,
1904                    decoder,
1905                    inner_offset,
1906                    inner_depth
1907                )?;
1908                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1909                {
1910                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1911                }
1912                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1913                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1914                }
1915            }
1916
1917            next_offset += envelope_size;
1918            _next_ordinal_to_read += 1;
1919            if next_offset >= end_offset {
1920                return Ok(());
1921            }
1922
1923            // Decode unknown envelopes for gaps in ordinals.
1924            while _next_ordinal_to_read < 6 {
1925                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1926                _next_ordinal_to_read += 1;
1927                next_offset += envelope_size;
1928            }
1929
1930            let next_out_of_line = decoder.next_out_of_line();
1931            let handles_before = decoder.remaining_handles();
1932            if let Some((inlined, num_bytes, num_handles)) =
1933                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1934            {
1935                let member_inline_size =
1936                    <fidl::encoding::UnboundedString as fidl::encoding::TypeMarker>::inline_size(
1937                        decoder.context,
1938                    );
1939                if inlined != (member_inline_size <= 4) {
1940                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1941                }
1942                let inner_offset;
1943                let mut inner_depth = depth.clone();
1944                if inlined {
1945                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1946                    inner_offset = next_offset;
1947                } else {
1948                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1949                    inner_depth.increment()?;
1950                }
1951                let val_ref = self
1952                    .model
1953                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::UnboundedString, D));
1954                fidl::decode!(
1955                    fidl::encoding::UnboundedString,
1956                    D,
1957                    val_ref,
1958                    decoder,
1959                    inner_offset,
1960                    inner_depth
1961                )?;
1962                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1963                {
1964                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1965                }
1966                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1967                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1968                }
1969            }
1970
1971            next_offset += envelope_size;
1972            _next_ordinal_to_read += 1;
1973            if next_offset >= end_offset {
1974                return Ok(());
1975            }
1976
1977            // Decode unknown envelopes for gaps in ordinals.
1978            while _next_ordinal_to_read < 7 {
1979                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1980                _next_ordinal_to_read += 1;
1981                next_offset += envelope_size;
1982            }
1983
1984            let next_out_of_line = decoder.next_out_of_line();
1985            let handles_before = decoder.remaining_handles();
1986            if let Some((inlined, num_bytes, num_handles)) =
1987                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1988            {
1989                let member_inline_size =
1990                    <fidl::encoding::UnboundedString as fidl::encoding::TypeMarker>::inline_size(
1991                        decoder.context,
1992                    );
1993                if inlined != (member_inline_size <= 4) {
1994                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1995                }
1996                let inner_offset;
1997                let mut inner_depth = depth.clone();
1998                if inlined {
1999                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2000                    inner_offset = next_offset;
2001                } else {
2002                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2003                    inner_depth.increment()?;
2004                }
2005                let val_ref = self
2006                    .manufacturer
2007                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::UnboundedString, D));
2008                fidl::decode!(
2009                    fidl::encoding::UnboundedString,
2010                    D,
2011                    val_ref,
2012                    decoder,
2013                    inner_offset,
2014                    inner_depth
2015                )?;
2016                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2017                {
2018                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2019                }
2020                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2021                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2022                }
2023            }
2024
2025            next_offset += envelope_size;
2026            _next_ordinal_to_read += 1;
2027            if next_offset >= end_offset {
2028                return Ok(());
2029            }
2030
2031            // Decode unknown envelopes for gaps in ordinals.
2032            while _next_ordinal_to_read < 8 {
2033                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2034                _next_ordinal_to_read += 1;
2035                next_offset += envelope_size;
2036            }
2037
2038            let next_out_of_line = decoder.next_out_of_line();
2039            let handles_before = decoder.remaining_handles();
2040            if let Some((inlined, num_bytes, num_handles)) =
2041                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2042            {
2043                let member_inline_size =
2044                    <fidl::encoding::UnboundedString as fidl::encoding::TypeMarker>::inline_size(
2045                        decoder.context,
2046                    );
2047                if inlined != (member_inline_size <= 4) {
2048                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2049                }
2050                let inner_offset;
2051                let mut inner_depth = depth.clone();
2052                if inlined {
2053                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2054                    inner_offset = next_offset;
2055                } else {
2056                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2057                    inner_depth.increment()?;
2058                }
2059                let val_ref = self
2060                    .build_date
2061                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::UnboundedString, D));
2062                fidl::decode!(
2063                    fidl::encoding::UnboundedString,
2064                    D,
2065                    val_ref,
2066                    decoder,
2067                    inner_offset,
2068                    inner_depth
2069                )?;
2070                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2071                {
2072                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2073                }
2074                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2075                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2076                }
2077            }
2078
2079            next_offset += envelope_size;
2080            _next_ordinal_to_read += 1;
2081            if next_offset >= end_offset {
2082                return Ok(());
2083            }
2084
2085            // Decode unknown envelopes for gaps in ordinals.
2086            while _next_ordinal_to_read < 9 {
2087                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2088                _next_ordinal_to_read += 1;
2089                next_offset += envelope_size;
2090            }
2091
2092            let next_out_of_line = decoder.next_out_of_line();
2093            let handles_before = decoder.remaining_handles();
2094            if let Some((inlined, num_bytes, num_handles)) =
2095                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2096            {
2097                let member_inline_size =
2098                    <fidl::encoding::BoundedString<255> as fidl::encoding::TypeMarker>::inline_size(
2099                        decoder.context,
2100                    );
2101                if inlined != (member_inline_size <= 4) {
2102                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2103                }
2104                let inner_offset;
2105                let mut inner_depth = depth.clone();
2106                if inlined {
2107                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2108                    inner_offset = next_offset;
2109                } else {
2110                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2111                    inner_depth.increment()?;
2112                }
2113                let val_ref = self
2114                    .build_name
2115                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<255>, D));
2116                fidl::decode!(
2117                    fidl::encoding::BoundedString<255>,
2118                    D,
2119                    val_ref,
2120                    decoder,
2121                    inner_offset,
2122                    inner_depth
2123                )?;
2124                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2125                {
2126                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2127                }
2128                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2129                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2130                }
2131            }
2132
2133            next_offset += envelope_size;
2134            _next_ordinal_to_read += 1;
2135            if next_offset >= end_offset {
2136                return Ok(());
2137            }
2138
2139            // Decode unknown envelopes for gaps in ordinals.
2140            while _next_ordinal_to_read < 10 {
2141                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2142                _next_ordinal_to_read += 1;
2143                next_offset += envelope_size;
2144            }
2145
2146            let next_out_of_line = decoder.next_out_of_line();
2147            let handles_before = decoder.remaining_handles();
2148            if let Some((inlined, num_bytes, num_handles)) =
2149                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2150            {
2151                let member_inline_size =
2152                    <fidl::encoding::BoundedString<255> as fidl::encoding::TypeMarker>::inline_size(
2153                        decoder.context,
2154                    );
2155                if inlined != (member_inline_size <= 4) {
2156                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2157                }
2158                let inner_offset;
2159                let mut inner_depth = depth.clone();
2160                if inlined {
2161                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2162                    inner_offset = next_offset;
2163                } else {
2164                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2165                    inner_depth.increment()?;
2166                }
2167                let val_ref = self
2168                    .colorway
2169                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<255>, D));
2170                fidl::decode!(
2171                    fidl::encoding::BoundedString<255>,
2172                    D,
2173                    val_ref,
2174                    decoder,
2175                    inner_offset,
2176                    inner_depth
2177                )?;
2178                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2179                {
2180                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2181                }
2182                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2183                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2184                }
2185            }
2186
2187            next_offset += envelope_size;
2188            _next_ordinal_to_read += 1;
2189            if next_offset >= end_offset {
2190                return Ok(());
2191            }
2192
2193            // Decode unknown envelopes for gaps in ordinals.
2194            while _next_ordinal_to_read < 11 {
2195                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2196                _next_ordinal_to_read += 1;
2197                next_offset += envelope_size;
2198            }
2199
2200            let next_out_of_line = decoder.next_out_of_line();
2201            let handles_before = decoder.remaining_handles();
2202            if let Some((inlined, num_bytes, num_handles)) =
2203                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2204            {
2205                let member_inline_size =
2206                    <fidl::encoding::BoundedString<255> as fidl::encoding::TypeMarker>::inline_size(
2207                        decoder.context,
2208                    );
2209                if inlined != (member_inline_size <= 4) {
2210                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2211                }
2212                let inner_offset;
2213                let mut inner_depth = depth.clone();
2214                if inlined {
2215                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2216                    inner_offset = next_offset;
2217                } else {
2218                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2219                    inner_depth.increment()?;
2220                }
2221                let val_ref = self
2222                    .display
2223                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<255>, D));
2224                fidl::decode!(
2225                    fidl::encoding::BoundedString<255>,
2226                    D,
2227                    val_ref,
2228                    decoder,
2229                    inner_offset,
2230                    inner_depth
2231                )?;
2232                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2233                {
2234                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2235                }
2236                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2237                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2238                }
2239            }
2240
2241            next_offset += envelope_size;
2242            _next_ordinal_to_read += 1;
2243            if next_offset >= end_offset {
2244                return Ok(());
2245            }
2246
2247            // Decode unknown envelopes for gaps in ordinals.
2248            while _next_ordinal_to_read < 12 {
2249                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2250                _next_ordinal_to_read += 1;
2251                next_offset += envelope_size;
2252            }
2253
2254            let next_out_of_line = decoder.next_out_of_line();
2255            let handles_before = decoder.remaining_handles();
2256            if let Some((inlined, num_bytes, num_handles)) =
2257                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2258            {
2259                let member_inline_size =
2260                    <fidl::encoding::BoundedString<255> as fidl::encoding::TypeMarker>::inline_size(
2261                        decoder.context,
2262                    );
2263                if inlined != (member_inline_size <= 4) {
2264                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2265                }
2266                let inner_offset;
2267                let mut inner_depth = depth.clone();
2268                if inlined {
2269                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2270                    inner_offset = next_offset;
2271                } else {
2272                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2273                    inner_depth.increment()?;
2274                }
2275                let val_ref = self
2276                    .memory
2277                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<255>, D));
2278                fidl::decode!(
2279                    fidl::encoding::BoundedString<255>,
2280                    D,
2281                    val_ref,
2282                    decoder,
2283                    inner_offset,
2284                    inner_depth
2285                )?;
2286                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2287                {
2288                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2289                }
2290                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2291                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2292                }
2293            }
2294
2295            next_offset += envelope_size;
2296            _next_ordinal_to_read += 1;
2297            if next_offset >= end_offset {
2298                return Ok(());
2299            }
2300
2301            // Decode unknown envelopes for gaps in ordinals.
2302            while _next_ordinal_to_read < 13 {
2303                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2304                _next_ordinal_to_read += 1;
2305                next_offset += envelope_size;
2306            }
2307
2308            let next_out_of_line = decoder.next_out_of_line();
2309            let handles_before = decoder.remaining_handles();
2310            if let Some((inlined, num_bytes, num_handles)) =
2311                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2312            {
2313                let member_inline_size =
2314                    <fidl::encoding::BoundedString<255> as fidl::encoding::TypeMarker>::inline_size(
2315                        decoder.context,
2316                    );
2317                if inlined != (member_inline_size <= 4) {
2318                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2319                }
2320                let inner_offset;
2321                let mut inner_depth = depth.clone();
2322                if inlined {
2323                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2324                    inner_offset = next_offset;
2325                } else {
2326                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2327                    inner_depth.increment()?;
2328                }
2329                let val_ref = self
2330                    .nand_storage
2331                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<255>, D));
2332                fidl::decode!(
2333                    fidl::encoding::BoundedString<255>,
2334                    D,
2335                    val_ref,
2336                    decoder,
2337                    inner_offset,
2338                    inner_depth
2339                )?;
2340                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2341                {
2342                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2343                }
2344                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2345                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2346                }
2347            }
2348
2349            next_offset += envelope_size;
2350            _next_ordinal_to_read += 1;
2351            if next_offset >= end_offset {
2352                return Ok(());
2353            }
2354
2355            // Decode unknown envelopes for gaps in ordinals.
2356            while _next_ordinal_to_read < 14 {
2357                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2358                _next_ordinal_to_read += 1;
2359                next_offset += envelope_size;
2360            }
2361
2362            let next_out_of_line = decoder.next_out_of_line();
2363            let handles_before = decoder.remaining_handles();
2364            if let Some((inlined, num_bytes, num_handles)) =
2365                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2366            {
2367                let member_inline_size =
2368                    <fidl::encoding::BoundedString<255> as fidl::encoding::TypeMarker>::inline_size(
2369                        decoder.context,
2370                    );
2371                if inlined != (member_inline_size <= 4) {
2372                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2373                }
2374                let inner_offset;
2375                let mut inner_depth = depth.clone();
2376                if inlined {
2377                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2378                    inner_offset = next_offset;
2379                } else {
2380                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2381                    inner_depth.increment()?;
2382                }
2383                let val_ref = self
2384                    .emmc_storage
2385                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<255>, D));
2386                fidl::decode!(
2387                    fidl::encoding::BoundedString<255>,
2388                    D,
2389                    val_ref,
2390                    decoder,
2391                    inner_offset,
2392                    inner_depth
2393                )?;
2394                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2395                {
2396                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2397                }
2398                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2399                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2400                }
2401            }
2402
2403            next_offset += envelope_size;
2404            _next_ordinal_to_read += 1;
2405            if next_offset >= end_offset {
2406                return Ok(());
2407            }
2408
2409            // Decode unknown envelopes for gaps in ordinals.
2410            while _next_ordinal_to_read < 15 {
2411                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2412                _next_ordinal_to_read += 1;
2413                next_offset += envelope_size;
2414            }
2415
2416            let next_out_of_line = decoder.next_out_of_line();
2417            let handles_before = decoder.remaining_handles();
2418            if let Some((inlined, num_bytes, num_handles)) =
2419                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2420            {
2421                let member_inline_size =
2422                    <fidl::encoding::BoundedString<255> as fidl::encoding::TypeMarker>::inline_size(
2423                        decoder.context,
2424                    );
2425                if inlined != (member_inline_size <= 4) {
2426                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2427                }
2428                let inner_offset;
2429                let mut inner_depth = depth.clone();
2430                if inlined {
2431                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2432                    inner_offset = next_offset;
2433                } else {
2434                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2435                    inner_depth.increment()?;
2436                }
2437                let val_ref = self
2438                    .microphone
2439                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<255>, D));
2440                fidl::decode!(
2441                    fidl::encoding::BoundedString<255>,
2442                    D,
2443                    val_ref,
2444                    decoder,
2445                    inner_offset,
2446                    inner_depth
2447                )?;
2448                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2449                {
2450                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2451                }
2452                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2453                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2454                }
2455            }
2456
2457            next_offset += envelope_size;
2458            _next_ordinal_to_read += 1;
2459            if next_offset >= end_offset {
2460                return Ok(());
2461            }
2462
2463            // Decode unknown envelopes for gaps in ordinals.
2464            while _next_ordinal_to_read < 16 {
2465                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2466                _next_ordinal_to_read += 1;
2467                next_offset += envelope_size;
2468            }
2469
2470            let next_out_of_line = decoder.next_out_of_line();
2471            let handles_before = decoder.remaining_handles();
2472            if let Some((inlined, num_bytes, num_handles)) =
2473                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2474            {
2475                let member_inline_size =
2476                    <fidl::encoding::BoundedString<255> as fidl::encoding::TypeMarker>::inline_size(
2477                        decoder.context,
2478                    );
2479                if inlined != (member_inline_size <= 4) {
2480                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2481                }
2482                let inner_offset;
2483                let mut inner_depth = depth.clone();
2484                if inlined {
2485                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2486                    inner_offset = next_offset;
2487                } else {
2488                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2489                    inner_depth.increment()?;
2490                }
2491                let val_ref = self
2492                    .audio_amplifier
2493                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<255>, D));
2494                fidl::decode!(
2495                    fidl::encoding::BoundedString<255>,
2496                    D,
2497                    val_ref,
2498                    decoder,
2499                    inner_offset,
2500                    inner_depth
2501                )?;
2502                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2503                {
2504                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2505                }
2506                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2507                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2508                }
2509            }
2510
2511            next_offset += envelope_size;
2512
2513            // Decode the remaining unknown envelopes.
2514            while next_offset < end_offset {
2515                _next_ordinal_to_read += 1;
2516                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2517                next_offset += envelope_size;
2518            }
2519
2520            Ok(())
2521        }
2522    }
2523}