Skip to main content

fidl_fuchsia_developer_remotecontrol_common/
fidl_fuchsia_developer_remotecontrol_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_CONNECT_MATCHES: u16 = 5;
12
13pub const MAX_NUM_MATCHES: u16 = 250;
14
15pub const NODE_NAME_MAX: u32 = 255;
16
17/// State of the compatibility between the host tools and the target.
18#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
19pub enum CompatibilityState {
20    /// An error was encountered determining the compatibility status.
21    Error,
22    /// The compatibility information is not present.
23    Absent,
24    /// ABI revision is supported
25    Supported,
26    ///  ABI revision was not recognized.
27    Unknown,
28    ///  ABI revision it presented is not supported.
29    Unsupported,
30    #[doc(hidden)]
31    __SourceBreaking { unknown_ordinal: u32 },
32}
33
34/// Pattern that matches an unknown `CompatibilityState` member.
35#[macro_export]
36macro_rules! CompatibilityStateUnknown {
37    () => {
38        _
39    };
40}
41
42impl CompatibilityState {
43    #[inline]
44    pub fn from_primitive(prim: u32) -> Option<Self> {
45        match prim {
46            0 => Some(Self::Error),
47            1 => Some(Self::Absent),
48            2 => Some(Self::Supported),
49            3 => Some(Self::Unknown),
50            4 => Some(Self::Unsupported),
51            _ => None,
52        }
53    }
54
55    #[inline]
56    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
57        match prim {
58            0 => Self::Error,
59            1 => Self::Absent,
60            2 => Self::Supported,
61            3 => Self::Unknown,
62            4 => Self::Unsupported,
63            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
64        }
65    }
66
67    #[inline]
68    pub fn unknown() -> Self {
69        Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
70    }
71
72    #[inline]
73    pub const fn into_primitive(self) -> u32 {
74        match self {
75            Self::Error => 0,
76            Self::Absent => 1,
77            Self::Supported => 2,
78            Self::Unknown => 3,
79            Self::Unsupported => 4,
80            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
81        }
82    }
83
84    #[inline]
85    pub fn is_unknown(&self) -> bool {
86        match self {
87            Self::__SourceBreaking { unknown_ordinal: _ } => true,
88            _ => false,
89        }
90    }
91}
92
93#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
94pub enum ConnectCapabilityError {
95    InvalidMoniker,
96    NoMatchingCapabilities,
97    NoMatchingComponent,
98    CapabilityConnectFailed,
99    #[doc(hidden)]
100    __SourceBreaking {
101        unknown_ordinal: u32,
102    },
103}
104
105/// Pattern that matches an unknown `ConnectCapabilityError` member.
106#[macro_export]
107macro_rules! ConnectCapabilityErrorUnknown {
108    () => {
109        _
110    };
111}
112
113impl ConnectCapabilityError {
114    #[inline]
115    pub fn from_primitive(prim: u32) -> Option<Self> {
116        match prim {
117            1 => Some(Self::InvalidMoniker),
118            2 => Some(Self::NoMatchingCapabilities),
119            3 => Some(Self::NoMatchingComponent),
120            4 => Some(Self::CapabilityConnectFailed),
121            _ => None,
122        }
123    }
124
125    #[inline]
126    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
127        match prim {
128            1 => Self::InvalidMoniker,
129            2 => Self::NoMatchingCapabilities,
130            3 => Self::NoMatchingComponent,
131            4 => Self::CapabilityConnectFailed,
132            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
133        }
134    }
135
136    #[inline]
137    pub fn unknown() -> Self {
138        Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
139    }
140
141    #[inline]
142    pub const fn into_primitive(self) -> u32 {
143        match self {
144            Self::InvalidMoniker => 1,
145            Self::NoMatchingCapabilities => 2,
146            Self::NoMatchingComponent => 3,
147            Self::CapabilityConnectFailed => 4,
148            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
149        }
150    }
151
152    #[inline]
153    pub fn is_unknown(&self) -> bool {
154        match self {
155            Self::__SourceBreaking { unknown_ordinal: _ } => true,
156            _ => false,
157        }
158    }
159}
160
161#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
162pub enum IdentifyHostError {
163    ListInterfacesFailed,
164    GetDeviceNameFailed,
165    ProxyConnectionFailed,
166    #[doc(hidden)]
167    __SourceBreaking {
168        unknown_ordinal: u32,
169    },
170}
171
172/// Pattern that matches an unknown `IdentifyHostError` member.
173#[macro_export]
174macro_rules! IdentifyHostErrorUnknown {
175    () => {
176        _
177    };
178}
179
180impl IdentifyHostError {
181    #[inline]
182    pub fn from_primitive(prim: u32) -> Option<Self> {
183        match prim {
184            1 => Some(Self::ListInterfacesFailed),
185            2 => Some(Self::GetDeviceNameFailed),
186            3 => Some(Self::ProxyConnectionFailed),
187            _ => None,
188        }
189    }
190
191    #[inline]
192    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
193        match prim {
194            1 => Self::ListInterfacesFailed,
195            2 => Self::GetDeviceNameFailed,
196            3 => Self::ProxyConnectionFailed,
197            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
198        }
199    }
200
201    #[inline]
202    pub fn unknown() -> Self {
203        Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
204    }
205
206    #[inline]
207    pub const fn into_primitive(self) -> u32 {
208        match self {
209            Self::ListInterfacesFailed => 1,
210            Self::GetDeviceNameFailed => 2,
211            Self::ProxyConnectionFailed => 3,
212            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
213        }
214    }
215
216    #[inline]
217    pub fn is_unknown(&self) -> bool {
218        match self {
219            Self::__SourceBreaking { unknown_ordinal: _ } => true,
220            _ => false,
221        }
222    }
223}
224
225#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
226pub enum TunnelError {
227    ConnectFailed,
228    SocketFailed,
229    CallbackError,
230    #[doc(hidden)]
231    __SourceBreaking {
232        unknown_ordinal: u32,
233    },
234}
235
236/// Pattern that matches an unknown `TunnelError` member.
237#[macro_export]
238macro_rules! TunnelErrorUnknown {
239    () => {
240        _
241    };
242}
243
244impl TunnelError {
245    #[inline]
246    pub fn from_primitive(prim: u32) -> Option<Self> {
247        match prim {
248            1 => Some(Self::ConnectFailed),
249            2 => Some(Self::SocketFailed),
250            3 => Some(Self::CallbackError),
251            _ => None,
252        }
253    }
254
255    #[inline]
256    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
257        match prim {
258            1 => Self::ConnectFailed,
259            2 => Self::SocketFailed,
260            3 => Self::CallbackError,
261            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
262        }
263    }
264
265    #[inline]
266    pub fn unknown() -> Self {
267        Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
268    }
269
270    #[inline]
271    pub const fn into_primitive(self) -> u32 {
272        match self {
273            Self::ConnectFailed => 1,
274            Self::SocketFailed => 2,
275            Self::CallbackError => 3,
276            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
277        }
278    }
279
280    #[inline]
281    pub fn is_unknown(&self) -> bool {
282        match self {
283            Self::__SourceBreaking { unknown_ordinal: _ } => true,
284            _ => false,
285        }
286    }
287}
288
289/// Compatibility information about the target
290#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
291pub struct CompatibilityInfo {
292    /// The state of the compatibity between the host tools and the target.
293    pub state: CompatibilityState,
294    /// The ABI revision of the target platform.
295    pub platform_abi: u64,
296    /// A status message string suitable for displaying to english reading users.
297    pub message: String,
298}
299
300impl fidl::Persistable for CompatibilityInfo {}
301
302#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
303pub struct RemoteControlEchoStringRequest {
304    pub value: String,
305}
306
307impl fidl::Persistable for RemoteControlEchoStringRequest {}
308
309#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
310pub struct RemoteControlEchoStringResponse {
311    pub response: String,
312}
313
314impl fidl::Persistable for RemoteControlEchoStringResponse {}
315
316#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
317#[repr(C)]
318pub struct RemoteControlGetBootTimeResponse {
319    pub time: fidl::BootInstant,
320}
321
322impl fidl::Persistable for RemoteControlGetBootTimeResponse {}
323
324#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
325#[repr(C)]
326pub struct RemoteControlGetTimeResponse {
327    pub time: fidl::MonotonicInstant,
328}
329
330impl fidl::Persistable for RemoteControlGetTimeResponse {}
331
332#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
333pub struct RemoteControlLogMessageRequest {
334    pub tag: String,
335    pub message: String,
336    pub severity: fidl_fuchsia_diagnostics_types_common::Severity,
337}
338
339impl fidl::Persistable for RemoteControlLogMessageRequest {}
340
341#[derive(Clone, Debug, PartialEq)]
342pub struct RemoteControlIdentifyHostResponse {
343    pub response: IdentifyHostResponse,
344}
345
346impl fidl::Persistable for RemoteControlIdentifyHostResponse {}
347
348#[derive(Clone, Debug, Default, PartialEq)]
349pub struct IdentifyHostResponse {
350    pub nodename: Option<String>,
351    pub boot_timestamp_nanos: Option<u64>,
352    pub serial_number: Option<String>,
353    pub ids: Option<Vec<u64>>,
354    pub product_config: Option<String>,
355    pub board_config: Option<String>,
356    /// Network addresses currently assigned to the target's interfaces, from
357    /// the target's perspective. These are informational and intended for
358    /// target identification rather than establishing host-to-target
359    /// connections.
360    pub addresses: Option<Vec<fidl_fuchsia_net_common::Subnet>>,
361    pub boot_id: Option<u64>,
362    pub f_release: Option<u32>,
363    #[doc(hidden)]
364    pub __source_breaking: fidl::marker::SourceBreaking,
365}
366
367impl fidl::Persistable for IdentifyHostResponse {}
368
369pub mod remote_control_ordinals {
370    pub const ECHO_STRING: u64 = 0x2bbec7ca8a72e82b;
371    pub const LOG_MESSAGE: u64 = 0x3da84acd5bbf3926;
372    pub const IDENTIFY_HOST: u64 = 0x6035e1ab368deee1;
373    pub const CONNECT_CAPABILITY: u64 = 0x3ae7a7c874dceceb;
374    pub const GET_TIME: u64 = 0x3588f31e9067748d;
375    pub const GET_BOOT_TIME: u64 = 0x55706f013cd79ebd;
376}
377
378mod internal {
379    use super::*;
380    unsafe impl fidl::encoding::TypeMarker for CompatibilityState {
381        type Owned = Self;
382
383        #[inline(always)]
384        fn inline_align(_context: fidl::encoding::Context) -> usize {
385            std::mem::align_of::<u32>()
386        }
387
388        #[inline(always)]
389        fn inline_size(_context: fidl::encoding::Context) -> usize {
390            std::mem::size_of::<u32>()
391        }
392
393        #[inline(always)]
394        fn encode_is_copy() -> bool {
395            false
396        }
397
398        #[inline(always)]
399        fn decode_is_copy() -> bool {
400            false
401        }
402    }
403
404    impl fidl::encoding::ValueTypeMarker for CompatibilityState {
405        type Borrowed<'a> = Self;
406        #[inline(always)]
407        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
408            *value
409        }
410    }
411
412    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
413        for CompatibilityState
414    {
415        #[inline]
416        unsafe fn encode(
417            self,
418            encoder: &mut fidl::encoding::Encoder<'_, D>,
419            offset: usize,
420            _depth: fidl::encoding::Depth,
421        ) -> fidl::Result<()> {
422            encoder.debug_check_bounds::<Self>(offset);
423            encoder.write_num(self.into_primitive(), offset);
424            Ok(())
425        }
426    }
427
428    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for CompatibilityState {
429        #[inline(always)]
430        fn new_empty() -> Self {
431            Self::unknown()
432        }
433
434        #[inline]
435        unsafe fn decode(
436            &mut self,
437            decoder: &mut fidl::encoding::Decoder<'_, D>,
438            offset: usize,
439            _depth: fidl::encoding::Depth,
440        ) -> fidl::Result<()> {
441            decoder.debug_check_bounds::<Self>(offset);
442            let prim = decoder.read_num::<u32>(offset);
443
444            *self = Self::from_primitive_allow_unknown(prim);
445            Ok(())
446        }
447    }
448    unsafe impl fidl::encoding::TypeMarker for ConnectCapabilityError {
449        type Owned = Self;
450
451        #[inline(always)]
452        fn inline_align(_context: fidl::encoding::Context) -> usize {
453            std::mem::align_of::<u32>()
454        }
455
456        #[inline(always)]
457        fn inline_size(_context: fidl::encoding::Context) -> usize {
458            std::mem::size_of::<u32>()
459        }
460
461        #[inline(always)]
462        fn encode_is_copy() -> bool {
463            false
464        }
465
466        #[inline(always)]
467        fn decode_is_copy() -> bool {
468            false
469        }
470    }
471
472    impl fidl::encoding::ValueTypeMarker for ConnectCapabilityError {
473        type Borrowed<'a> = Self;
474        #[inline(always)]
475        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
476            *value
477        }
478    }
479
480    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
481        for ConnectCapabilityError
482    {
483        #[inline]
484        unsafe fn encode(
485            self,
486            encoder: &mut fidl::encoding::Encoder<'_, D>,
487            offset: usize,
488            _depth: fidl::encoding::Depth,
489        ) -> fidl::Result<()> {
490            encoder.debug_check_bounds::<Self>(offset);
491            encoder.write_num(self.into_primitive(), offset);
492            Ok(())
493        }
494    }
495
496    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
497        for ConnectCapabilityError
498    {
499        #[inline(always)]
500        fn new_empty() -> Self {
501            Self::unknown()
502        }
503
504        #[inline]
505        unsafe fn decode(
506            &mut self,
507            decoder: &mut fidl::encoding::Decoder<'_, D>,
508            offset: usize,
509            _depth: fidl::encoding::Depth,
510        ) -> fidl::Result<()> {
511            decoder.debug_check_bounds::<Self>(offset);
512            let prim = decoder.read_num::<u32>(offset);
513
514            *self = Self::from_primitive_allow_unknown(prim);
515            Ok(())
516        }
517    }
518    unsafe impl fidl::encoding::TypeMarker for IdentifyHostError {
519        type Owned = Self;
520
521        #[inline(always)]
522        fn inline_align(_context: fidl::encoding::Context) -> usize {
523            std::mem::align_of::<u32>()
524        }
525
526        #[inline(always)]
527        fn inline_size(_context: fidl::encoding::Context) -> usize {
528            std::mem::size_of::<u32>()
529        }
530
531        #[inline(always)]
532        fn encode_is_copy() -> bool {
533            false
534        }
535
536        #[inline(always)]
537        fn decode_is_copy() -> bool {
538            false
539        }
540    }
541
542    impl fidl::encoding::ValueTypeMarker for IdentifyHostError {
543        type Borrowed<'a> = Self;
544        #[inline(always)]
545        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
546            *value
547        }
548    }
549
550    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
551        for IdentifyHostError
552    {
553        #[inline]
554        unsafe fn encode(
555            self,
556            encoder: &mut fidl::encoding::Encoder<'_, D>,
557            offset: usize,
558            _depth: fidl::encoding::Depth,
559        ) -> fidl::Result<()> {
560            encoder.debug_check_bounds::<Self>(offset);
561            encoder.write_num(self.into_primitive(), offset);
562            Ok(())
563        }
564    }
565
566    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for IdentifyHostError {
567        #[inline(always)]
568        fn new_empty() -> Self {
569            Self::unknown()
570        }
571
572        #[inline]
573        unsafe fn decode(
574            &mut self,
575            decoder: &mut fidl::encoding::Decoder<'_, D>,
576            offset: usize,
577            _depth: fidl::encoding::Depth,
578        ) -> fidl::Result<()> {
579            decoder.debug_check_bounds::<Self>(offset);
580            let prim = decoder.read_num::<u32>(offset);
581
582            *self = Self::from_primitive_allow_unknown(prim);
583            Ok(())
584        }
585    }
586    unsafe impl fidl::encoding::TypeMarker for TunnelError {
587        type Owned = Self;
588
589        #[inline(always)]
590        fn inline_align(_context: fidl::encoding::Context) -> usize {
591            std::mem::align_of::<u32>()
592        }
593
594        #[inline(always)]
595        fn inline_size(_context: fidl::encoding::Context) -> usize {
596            std::mem::size_of::<u32>()
597        }
598
599        #[inline(always)]
600        fn encode_is_copy() -> bool {
601            false
602        }
603
604        #[inline(always)]
605        fn decode_is_copy() -> bool {
606            false
607        }
608    }
609
610    impl fidl::encoding::ValueTypeMarker for TunnelError {
611        type Borrowed<'a> = Self;
612        #[inline(always)]
613        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
614            *value
615        }
616    }
617
618    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for TunnelError {
619        #[inline]
620        unsafe fn encode(
621            self,
622            encoder: &mut fidl::encoding::Encoder<'_, D>,
623            offset: usize,
624            _depth: fidl::encoding::Depth,
625        ) -> fidl::Result<()> {
626            encoder.debug_check_bounds::<Self>(offset);
627            encoder.write_num(self.into_primitive(), offset);
628            Ok(())
629        }
630    }
631
632    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for TunnelError {
633        #[inline(always)]
634        fn new_empty() -> Self {
635            Self::unknown()
636        }
637
638        #[inline]
639        unsafe fn decode(
640            &mut self,
641            decoder: &mut fidl::encoding::Decoder<'_, D>,
642            offset: usize,
643            _depth: fidl::encoding::Depth,
644        ) -> fidl::Result<()> {
645            decoder.debug_check_bounds::<Self>(offset);
646            let prim = decoder.read_num::<u32>(offset);
647
648            *self = Self::from_primitive_allow_unknown(prim);
649            Ok(())
650        }
651    }
652
653    impl fidl::encoding::ValueTypeMarker for CompatibilityInfo {
654        type Borrowed<'a> = &'a Self;
655        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
656            value
657        }
658    }
659
660    unsafe impl fidl::encoding::TypeMarker for CompatibilityInfo {
661        type Owned = Self;
662
663        #[inline(always)]
664        fn inline_align(_context: fidl::encoding::Context) -> usize {
665            8
666        }
667
668        #[inline(always)]
669        fn inline_size(_context: fidl::encoding::Context) -> usize {
670            32
671        }
672    }
673
674    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<CompatibilityInfo, D>
675        for &CompatibilityInfo
676    {
677        #[inline]
678        unsafe fn encode(
679            self,
680            encoder: &mut fidl::encoding::Encoder<'_, D>,
681            offset: usize,
682            _depth: fidl::encoding::Depth,
683        ) -> fidl::Result<()> {
684            encoder.debug_check_bounds::<CompatibilityInfo>(offset);
685            // Delegate to tuple encoding.
686            fidl::encoding::Encode::<CompatibilityInfo, D>::encode(
687                (
688                    <CompatibilityState as fidl::encoding::ValueTypeMarker>::borrow(&self.state),
689                    <u64 as fidl::encoding::ValueTypeMarker>::borrow(&self.platform_abi),
690                    <fidl::encoding::UnboundedString as fidl::encoding::ValueTypeMarker>::borrow(
691                        &self.message,
692                    ),
693                ),
694                encoder,
695                offset,
696                _depth,
697            )
698        }
699    }
700    unsafe impl<
701        D: fidl::encoding::ResourceDialect,
702        T0: fidl::encoding::Encode<CompatibilityState, D>,
703        T1: fidl::encoding::Encode<u64, D>,
704        T2: fidl::encoding::Encode<fidl::encoding::UnboundedString, D>,
705    > fidl::encoding::Encode<CompatibilityInfo, D> for (T0, T1, T2)
706    {
707        #[inline]
708        unsafe fn encode(
709            self,
710            encoder: &mut fidl::encoding::Encoder<'_, D>,
711            offset: usize,
712            depth: fidl::encoding::Depth,
713        ) -> fidl::Result<()> {
714            encoder.debug_check_bounds::<CompatibilityInfo>(offset);
715            // Zero out padding regions. There's no need to apply masks
716            // because the unmasked parts will be overwritten by fields.
717            unsafe {
718                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(0);
719                (ptr as *mut u64).write_unaligned(0);
720            }
721            // Write the fields.
722            self.0.encode(encoder, offset + 0, depth)?;
723            self.1.encode(encoder, offset + 8, depth)?;
724            self.2.encode(encoder, offset + 16, depth)?;
725            Ok(())
726        }
727    }
728
729    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for CompatibilityInfo {
730        #[inline(always)]
731        fn new_empty() -> Self {
732            Self {
733                state: fidl::new_empty!(CompatibilityState, D),
734                platform_abi: fidl::new_empty!(u64, D),
735                message: fidl::new_empty!(fidl::encoding::UnboundedString, D),
736            }
737        }
738
739        #[inline]
740        unsafe fn decode(
741            &mut self,
742            decoder: &mut fidl::encoding::Decoder<'_, D>,
743            offset: usize,
744            _depth: fidl::encoding::Depth,
745        ) -> fidl::Result<()> {
746            decoder.debug_check_bounds::<Self>(offset);
747            // Verify that padding bytes are zero.
748            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(0) };
749            let padval = unsafe { (ptr as *const u64).read_unaligned() };
750            let mask = 0xffffffff00000000u64;
751            let maskedval = padval & mask;
752            if maskedval != 0 {
753                return Err(fidl::Error::NonZeroPadding {
754                    padding_start: offset + 0 + ((mask as u64).trailing_zeros() / 8) as usize,
755                });
756            }
757            fidl::decode!(CompatibilityState, D, &mut self.state, decoder, offset + 0, _depth)?;
758            fidl::decode!(u64, D, &mut self.platform_abi, decoder, offset + 8, _depth)?;
759            fidl::decode!(
760                fidl::encoding::UnboundedString,
761                D,
762                &mut self.message,
763                decoder,
764                offset + 16,
765                _depth
766            )?;
767            Ok(())
768        }
769    }
770
771    impl fidl::encoding::ValueTypeMarker for RemoteControlEchoStringRequest {
772        type Borrowed<'a> = &'a Self;
773        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
774            value
775        }
776    }
777
778    unsafe impl fidl::encoding::TypeMarker for RemoteControlEchoStringRequest {
779        type Owned = Self;
780
781        #[inline(always)]
782        fn inline_align(_context: fidl::encoding::Context) -> usize {
783            8
784        }
785
786        #[inline(always)]
787        fn inline_size(_context: fidl::encoding::Context) -> usize {
788            16
789        }
790    }
791
792    unsafe impl<D: fidl::encoding::ResourceDialect>
793        fidl::encoding::Encode<RemoteControlEchoStringRequest, D>
794        for &RemoteControlEchoStringRequest
795    {
796        #[inline]
797        unsafe fn encode(
798            self,
799            encoder: &mut fidl::encoding::Encoder<'_, D>,
800            offset: usize,
801            _depth: fidl::encoding::Depth,
802        ) -> fidl::Result<()> {
803            encoder.debug_check_bounds::<RemoteControlEchoStringRequest>(offset);
804            // Delegate to tuple encoding.
805            fidl::encoding::Encode::<RemoteControlEchoStringRequest, D>::encode(
806                (<fidl::encoding::BoundedString<255> as fidl::encoding::ValueTypeMarker>::borrow(
807                    &self.value,
808                ),),
809                encoder,
810                offset,
811                _depth,
812            )
813        }
814    }
815    unsafe impl<
816        D: fidl::encoding::ResourceDialect,
817        T0: fidl::encoding::Encode<fidl::encoding::BoundedString<255>, D>,
818    > fidl::encoding::Encode<RemoteControlEchoStringRequest, D> for (T0,)
819    {
820        #[inline]
821        unsafe fn encode(
822            self,
823            encoder: &mut fidl::encoding::Encoder<'_, D>,
824            offset: usize,
825            depth: fidl::encoding::Depth,
826        ) -> fidl::Result<()> {
827            encoder.debug_check_bounds::<RemoteControlEchoStringRequest>(offset);
828            // Zero out padding regions. There's no need to apply masks
829            // because the unmasked parts will be overwritten by fields.
830            // Write the fields.
831            self.0.encode(encoder, offset + 0, depth)?;
832            Ok(())
833        }
834    }
835
836    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
837        for RemoteControlEchoStringRequest
838    {
839        #[inline(always)]
840        fn new_empty() -> Self {
841            Self { value: fidl::new_empty!(fidl::encoding::BoundedString<255>, D) }
842        }
843
844        #[inline]
845        unsafe fn decode(
846            &mut self,
847            decoder: &mut fidl::encoding::Decoder<'_, D>,
848            offset: usize,
849            _depth: fidl::encoding::Depth,
850        ) -> fidl::Result<()> {
851            decoder.debug_check_bounds::<Self>(offset);
852            // Verify that padding bytes are zero.
853            fidl::decode!(
854                fidl::encoding::BoundedString<255>,
855                D,
856                &mut self.value,
857                decoder,
858                offset + 0,
859                _depth
860            )?;
861            Ok(())
862        }
863    }
864
865    impl fidl::encoding::ValueTypeMarker for RemoteControlEchoStringResponse {
866        type Borrowed<'a> = &'a Self;
867        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
868            value
869        }
870    }
871
872    unsafe impl fidl::encoding::TypeMarker for RemoteControlEchoStringResponse {
873        type Owned = Self;
874
875        #[inline(always)]
876        fn inline_align(_context: fidl::encoding::Context) -> usize {
877            8
878        }
879
880        #[inline(always)]
881        fn inline_size(_context: fidl::encoding::Context) -> usize {
882            16
883        }
884    }
885
886    unsafe impl<D: fidl::encoding::ResourceDialect>
887        fidl::encoding::Encode<RemoteControlEchoStringResponse, D>
888        for &RemoteControlEchoStringResponse
889    {
890        #[inline]
891        unsafe fn encode(
892            self,
893            encoder: &mut fidl::encoding::Encoder<'_, D>,
894            offset: usize,
895            _depth: fidl::encoding::Depth,
896        ) -> fidl::Result<()> {
897            encoder.debug_check_bounds::<RemoteControlEchoStringResponse>(offset);
898            // Delegate to tuple encoding.
899            fidl::encoding::Encode::<RemoteControlEchoStringResponse, D>::encode(
900                (<fidl::encoding::BoundedString<255> as fidl::encoding::ValueTypeMarker>::borrow(
901                    &self.response,
902                ),),
903                encoder,
904                offset,
905                _depth,
906            )
907        }
908    }
909    unsafe impl<
910        D: fidl::encoding::ResourceDialect,
911        T0: fidl::encoding::Encode<fidl::encoding::BoundedString<255>, D>,
912    > fidl::encoding::Encode<RemoteControlEchoStringResponse, D> for (T0,)
913    {
914        #[inline]
915        unsafe fn encode(
916            self,
917            encoder: &mut fidl::encoding::Encoder<'_, D>,
918            offset: usize,
919            depth: fidl::encoding::Depth,
920        ) -> fidl::Result<()> {
921            encoder.debug_check_bounds::<RemoteControlEchoStringResponse>(offset);
922            // Zero out padding regions. There's no need to apply masks
923            // because the unmasked parts will be overwritten by fields.
924            // Write the fields.
925            self.0.encode(encoder, offset + 0, depth)?;
926            Ok(())
927        }
928    }
929
930    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
931        for RemoteControlEchoStringResponse
932    {
933        #[inline(always)]
934        fn new_empty() -> Self {
935            Self { response: fidl::new_empty!(fidl::encoding::BoundedString<255>, D) }
936        }
937
938        #[inline]
939        unsafe fn decode(
940            &mut self,
941            decoder: &mut fidl::encoding::Decoder<'_, D>,
942            offset: usize,
943            _depth: fidl::encoding::Depth,
944        ) -> fidl::Result<()> {
945            decoder.debug_check_bounds::<Self>(offset);
946            // Verify that padding bytes are zero.
947            fidl::decode!(
948                fidl::encoding::BoundedString<255>,
949                D,
950                &mut self.response,
951                decoder,
952                offset + 0,
953                _depth
954            )?;
955            Ok(())
956        }
957    }
958
959    impl fidl::encoding::ValueTypeMarker for RemoteControlGetBootTimeResponse {
960        type Borrowed<'a> = &'a Self;
961        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
962            value
963        }
964    }
965
966    unsafe impl fidl::encoding::TypeMarker for RemoteControlGetBootTimeResponse {
967        type Owned = Self;
968
969        #[inline(always)]
970        fn inline_align(_context: fidl::encoding::Context) -> usize {
971            8
972        }
973
974        #[inline(always)]
975        fn inline_size(_context: fidl::encoding::Context) -> usize {
976            8
977        }
978        #[inline(always)]
979        fn encode_is_copy() -> bool {
980            true
981        }
982
983        #[inline(always)]
984        fn decode_is_copy() -> bool {
985            true
986        }
987    }
988
989    unsafe impl<D: fidl::encoding::ResourceDialect>
990        fidl::encoding::Encode<RemoteControlGetBootTimeResponse, D>
991        for &RemoteControlGetBootTimeResponse
992    {
993        #[inline]
994        unsafe fn encode(
995            self,
996            encoder: &mut fidl::encoding::Encoder<'_, D>,
997            offset: usize,
998            _depth: fidl::encoding::Depth,
999        ) -> fidl::Result<()> {
1000            encoder.debug_check_bounds::<RemoteControlGetBootTimeResponse>(offset);
1001            unsafe {
1002                // Copy the object into the buffer.
1003                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
1004                (buf_ptr as *mut RemoteControlGetBootTimeResponse)
1005                    .write_unaligned((self as *const RemoteControlGetBootTimeResponse).read());
1006                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
1007                // done second because the memcpy will write garbage to these bytes.
1008            }
1009            Ok(())
1010        }
1011    }
1012    unsafe impl<
1013        D: fidl::encoding::ResourceDialect,
1014        T0: fidl::encoding::Encode<fidl::BootInstant, D>,
1015    > fidl::encoding::Encode<RemoteControlGetBootTimeResponse, D> for (T0,)
1016    {
1017        #[inline]
1018        unsafe fn encode(
1019            self,
1020            encoder: &mut fidl::encoding::Encoder<'_, D>,
1021            offset: usize,
1022            depth: fidl::encoding::Depth,
1023        ) -> fidl::Result<()> {
1024            encoder.debug_check_bounds::<RemoteControlGetBootTimeResponse>(offset);
1025            // Zero out padding regions. There's no need to apply masks
1026            // because the unmasked parts will be overwritten by fields.
1027            // Write the fields.
1028            self.0.encode(encoder, offset + 0, depth)?;
1029            Ok(())
1030        }
1031    }
1032
1033    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1034        for RemoteControlGetBootTimeResponse
1035    {
1036        #[inline(always)]
1037        fn new_empty() -> Self {
1038            Self { time: fidl::new_empty!(fidl::BootInstant, D) }
1039        }
1040
1041        #[inline]
1042        unsafe fn decode(
1043            &mut self,
1044            decoder: &mut fidl::encoding::Decoder<'_, D>,
1045            offset: usize,
1046            _depth: fidl::encoding::Depth,
1047        ) -> fidl::Result<()> {
1048            decoder.debug_check_bounds::<Self>(offset);
1049            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
1050            // Verify that padding bytes are zero.
1051            // Copy from the buffer into the object.
1052            unsafe {
1053                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 8);
1054            }
1055            Ok(())
1056        }
1057    }
1058
1059    impl fidl::encoding::ValueTypeMarker for RemoteControlGetTimeResponse {
1060        type Borrowed<'a> = &'a Self;
1061        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1062            value
1063        }
1064    }
1065
1066    unsafe impl fidl::encoding::TypeMarker for RemoteControlGetTimeResponse {
1067        type Owned = Self;
1068
1069        #[inline(always)]
1070        fn inline_align(_context: fidl::encoding::Context) -> usize {
1071            8
1072        }
1073
1074        #[inline(always)]
1075        fn inline_size(_context: fidl::encoding::Context) -> usize {
1076            8
1077        }
1078        #[inline(always)]
1079        fn encode_is_copy() -> bool {
1080            true
1081        }
1082
1083        #[inline(always)]
1084        fn decode_is_copy() -> bool {
1085            true
1086        }
1087    }
1088
1089    unsafe impl<D: fidl::encoding::ResourceDialect>
1090        fidl::encoding::Encode<RemoteControlGetTimeResponse, D> for &RemoteControlGetTimeResponse
1091    {
1092        #[inline]
1093        unsafe fn encode(
1094            self,
1095            encoder: &mut fidl::encoding::Encoder<'_, D>,
1096            offset: usize,
1097            _depth: fidl::encoding::Depth,
1098        ) -> fidl::Result<()> {
1099            encoder.debug_check_bounds::<RemoteControlGetTimeResponse>(offset);
1100            unsafe {
1101                // Copy the object into the buffer.
1102                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
1103                (buf_ptr as *mut RemoteControlGetTimeResponse)
1104                    .write_unaligned((self as *const RemoteControlGetTimeResponse).read());
1105                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
1106                // done second because the memcpy will write garbage to these bytes.
1107            }
1108            Ok(())
1109        }
1110    }
1111    unsafe impl<
1112        D: fidl::encoding::ResourceDialect,
1113        T0: fidl::encoding::Encode<fidl::MonotonicInstant, D>,
1114    > fidl::encoding::Encode<RemoteControlGetTimeResponse, D> for (T0,)
1115    {
1116        #[inline]
1117        unsafe fn encode(
1118            self,
1119            encoder: &mut fidl::encoding::Encoder<'_, D>,
1120            offset: usize,
1121            depth: fidl::encoding::Depth,
1122        ) -> fidl::Result<()> {
1123            encoder.debug_check_bounds::<RemoteControlGetTimeResponse>(offset);
1124            // Zero out padding regions. There's no need to apply masks
1125            // because the unmasked parts will be overwritten by fields.
1126            // Write the fields.
1127            self.0.encode(encoder, offset + 0, depth)?;
1128            Ok(())
1129        }
1130    }
1131
1132    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1133        for RemoteControlGetTimeResponse
1134    {
1135        #[inline(always)]
1136        fn new_empty() -> Self {
1137            Self { time: fidl::new_empty!(fidl::MonotonicInstant, D) }
1138        }
1139
1140        #[inline]
1141        unsafe fn decode(
1142            &mut self,
1143            decoder: &mut fidl::encoding::Decoder<'_, D>,
1144            offset: usize,
1145            _depth: fidl::encoding::Depth,
1146        ) -> fidl::Result<()> {
1147            decoder.debug_check_bounds::<Self>(offset);
1148            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
1149            // Verify that padding bytes are zero.
1150            // Copy from the buffer into the object.
1151            unsafe {
1152                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 8);
1153            }
1154            Ok(())
1155        }
1156    }
1157
1158    impl fidl::encoding::ValueTypeMarker for RemoteControlLogMessageRequest {
1159        type Borrowed<'a> = &'a Self;
1160        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1161            value
1162        }
1163    }
1164
1165    unsafe impl fidl::encoding::TypeMarker for RemoteControlLogMessageRequest {
1166        type Owned = Self;
1167
1168        #[inline(always)]
1169        fn inline_align(_context: fidl::encoding::Context) -> usize {
1170            8
1171        }
1172
1173        #[inline(always)]
1174        fn inline_size(_context: fidl::encoding::Context) -> usize {
1175            40
1176        }
1177    }
1178
1179    unsafe impl<D: fidl::encoding::ResourceDialect>
1180        fidl::encoding::Encode<RemoteControlLogMessageRequest, D>
1181        for &RemoteControlLogMessageRequest
1182    {
1183        #[inline]
1184        unsafe fn encode(
1185            self,
1186            encoder: &mut fidl::encoding::Encoder<'_, D>,
1187            offset: usize,
1188            _depth: fidl::encoding::Depth,
1189        ) -> fidl::Result<()> {
1190            encoder.debug_check_bounds::<RemoteControlLogMessageRequest>(offset);
1191            // Delegate to tuple encoding.
1192            fidl::encoding::Encode::<RemoteControlLogMessageRequest, D>::encode(
1193                (
1194                    <fidl::encoding::UnboundedString as fidl::encoding::ValueTypeMarker>::borrow(&self.tag),
1195                    <fidl::encoding::UnboundedString as fidl::encoding::ValueTypeMarker>::borrow(&self.message),
1196                    <fidl_fuchsia_diagnostics_types_common::Severity as fidl::encoding::ValueTypeMarker>::borrow(&self.severity),
1197                ),
1198                encoder, offset, _depth
1199            )
1200        }
1201    }
1202    unsafe impl<
1203        D: fidl::encoding::ResourceDialect,
1204        T0: fidl::encoding::Encode<fidl::encoding::UnboundedString, D>,
1205        T1: fidl::encoding::Encode<fidl::encoding::UnboundedString, D>,
1206        T2: fidl::encoding::Encode<fidl_fuchsia_diagnostics_types_common::Severity, D>,
1207    > fidl::encoding::Encode<RemoteControlLogMessageRequest, D> for (T0, T1, T2)
1208    {
1209        #[inline]
1210        unsafe fn encode(
1211            self,
1212            encoder: &mut fidl::encoding::Encoder<'_, D>,
1213            offset: usize,
1214            depth: fidl::encoding::Depth,
1215        ) -> fidl::Result<()> {
1216            encoder.debug_check_bounds::<RemoteControlLogMessageRequest>(offset);
1217            // Zero out padding regions. There's no need to apply masks
1218            // because the unmasked parts will be overwritten by fields.
1219            unsafe {
1220                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(32);
1221                (ptr as *mut u64).write_unaligned(0);
1222            }
1223            // Write the fields.
1224            self.0.encode(encoder, offset + 0, depth)?;
1225            self.1.encode(encoder, offset + 16, depth)?;
1226            self.2.encode(encoder, offset + 32, depth)?;
1227            Ok(())
1228        }
1229    }
1230
1231    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1232        for RemoteControlLogMessageRequest
1233    {
1234        #[inline(always)]
1235        fn new_empty() -> Self {
1236            Self {
1237                tag: fidl::new_empty!(fidl::encoding::UnboundedString, D),
1238                message: fidl::new_empty!(fidl::encoding::UnboundedString, D),
1239                severity: fidl::new_empty!(fidl_fuchsia_diagnostics_types_common::Severity, D),
1240            }
1241        }
1242
1243        #[inline]
1244        unsafe fn decode(
1245            &mut self,
1246            decoder: &mut fidl::encoding::Decoder<'_, D>,
1247            offset: usize,
1248            _depth: fidl::encoding::Depth,
1249        ) -> fidl::Result<()> {
1250            decoder.debug_check_bounds::<Self>(offset);
1251            // Verify that padding bytes are zero.
1252            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(32) };
1253            let padval = unsafe { (ptr as *const u64).read_unaligned() };
1254            let mask = 0xffffffffffffff00u64;
1255            let maskedval = padval & mask;
1256            if maskedval != 0 {
1257                return Err(fidl::Error::NonZeroPadding {
1258                    padding_start: offset + 32 + ((mask as u64).trailing_zeros() / 8) as usize,
1259                });
1260            }
1261            fidl::decode!(
1262                fidl::encoding::UnboundedString,
1263                D,
1264                &mut self.tag,
1265                decoder,
1266                offset + 0,
1267                _depth
1268            )?;
1269            fidl::decode!(
1270                fidl::encoding::UnboundedString,
1271                D,
1272                &mut self.message,
1273                decoder,
1274                offset + 16,
1275                _depth
1276            )?;
1277            fidl::decode!(
1278                fidl_fuchsia_diagnostics_types_common::Severity,
1279                D,
1280                &mut self.severity,
1281                decoder,
1282                offset + 32,
1283                _depth
1284            )?;
1285            Ok(())
1286        }
1287    }
1288
1289    impl fidl::encoding::ValueTypeMarker for RemoteControlIdentifyHostResponse {
1290        type Borrowed<'a> = &'a Self;
1291        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1292            value
1293        }
1294    }
1295
1296    unsafe impl fidl::encoding::TypeMarker for RemoteControlIdentifyHostResponse {
1297        type Owned = Self;
1298
1299        #[inline(always)]
1300        fn inline_align(_context: fidl::encoding::Context) -> usize {
1301            8
1302        }
1303
1304        #[inline(always)]
1305        fn inline_size(_context: fidl::encoding::Context) -> usize {
1306            16
1307        }
1308    }
1309
1310    unsafe impl<D: fidl::encoding::ResourceDialect>
1311        fidl::encoding::Encode<RemoteControlIdentifyHostResponse, D>
1312        for &RemoteControlIdentifyHostResponse
1313    {
1314        #[inline]
1315        unsafe fn encode(
1316            self,
1317            encoder: &mut fidl::encoding::Encoder<'_, D>,
1318            offset: usize,
1319            _depth: fidl::encoding::Depth,
1320        ) -> fidl::Result<()> {
1321            encoder.debug_check_bounds::<RemoteControlIdentifyHostResponse>(offset);
1322            // Delegate to tuple encoding.
1323            fidl::encoding::Encode::<RemoteControlIdentifyHostResponse, D>::encode(
1324                (<IdentifyHostResponse as fidl::encoding::ValueTypeMarker>::borrow(&self.response),),
1325                encoder,
1326                offset,
1327                _depth,
1328            )
1329        }
1330    }
1331    unsafe impl<
1332        D: fidl::encoding::ResourceDialect,
1333        T0: fidl::encoding::Encode<IdentifyHostResponse, D>,
1334    > fidl::encoding::Encode<RemoteControlIdentifyHostResponse, D> for (T0,)
1335    {
1336        #[inline]
1337        unsafe fn encode(
1338            self,
1339            encoder: &mut fidl::encoding::Encoder<'_, D>,
1340            offset: usize,
1341            depth: fidl::encoding::Depth,
1342        ) -> fidl::Result<()> {
1343            encoder.debug_check_bounds::<RemoteControlIdentifyHostResponse>(offset);
1344            // Zero out padding regions. There's no need to apply masks
1345            // because the unmasked parts will be overwritten by fields.
1346            // Write the fields.
1347            self.0.encode(encoder, offset + 0, depth)?;
1348            Ok(())
1349        }
1350    }
1351
1352    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1353        for RemoteControlIdentifyHostResponse
1354    {
1355        #[inline(always)]
1356        fn new_empty() -> Self {
1357            Self { response: fidl::new_empty!(IdentifyHostResponse, D) }
1358        }
1359
1360        #[inline]
1361        unsafe fn decode(
1362            &mut self,
1363            decoder: &mut fidl::encoding::Decoder<'_, D>,
1364            offset: usize,
1365            _depth: fidl::encoding::Depth,
1366        ) -> fidl::Result<()> {
1367            decoder.debug_check_bounds::<Self>(offset);
1368            // Verify that padding bytes are zero.
1369            fidl::decode!(
1370                IdentifyHostResponse,
1371                D,
1372                &mut self.response,
1373                decoder,
1374                offset + 0,
1375                _depth
1376            )?;
1377            Ok(())
1378        }
1379    }
1380
1381    impl IdentifyHostResponse {
1382        #[inline(always)]
1383        fn max_ordinal_present(&self) -> u64 {
1384            if let Some(_) = self.f_release {
1385                return 10;
1386            }
1387            if let Some(_) = self.boot_id {
1388                return 9;
1389            }
1390            if let Some(_) = self.addresses {
1391                return 8;
1392            }
1393            if let Some(_) = self.board_config {
1394                return 7;
1395            }
1396            if let Some(_) = self.product_config {
1397                return 6;
1398            }
1399            if let Some(_) = self.ids {
1400                return 5;
1401            }
1402            if let Some(_) = self.serial_number {
1403                return 4;
1404            }
1405            if let Some(_) = self.boot_timestamp_nanos {
1406                return 3;
1407            }
1408            if let Some(_) = self.nodename {
1409                return 2;
1410            }
1411            0
1412        }
1413    }
1414
1415    impl fidl::encoding::ValueTypeMarker for IdentifyHostResponse {
1416        type Borrowed<'a> = &'a Self;
1417        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1418            value
1419        }
1420    }
1421
1422    unsafe impl fidl::encoding::TypeMarker for IdentifyHostResponse {
1423        type Owned = Self;
1424
1425        #[inline(always)]
1426        fn inline_align(_context: fidl::encoding::Context) -> usize {
1427            8
1428        }
1429
1430        #[inline(always)]
1431        fn inline_size(_context: fidl::encoding::Context) -> usize {
1432            16
1433        }
1434    }
1435
1436    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<IdentifyHostResponse, D>
1437        for &IdentifyHostResponse
1438    {
1439        unsafe fn encode(
1440            self,
1441            encoder: &mut fidl::encoding::Encoder<'_, D>,
1442            offset: usize,
1443            mut depth: fidl::encoding::Depth,
1444        ) -> fidl::Result<()> {
1445            encoder.debug_check_bounds::<IdentifyHostResponse>(offset);
1446            // Vector header
1447            let max_ordinal: u64 = self.max_ordinal_present();
1448            encoder.write_num(max_ordinal, offset);
1449            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
1450            // Calling encoder.out_of_line_offset(0) is not allowed.
1451            if max_ordinal == 0 {
1452                return Ok(());
1453            }
1454            depth.increment()?;
1455            let envelope_size = 8;
1456            let bytes_len = max_ordinal as usize * envelope_size;
1457            #[allow(unused_variables)]
1458            let offset = encoder.out_of_line_offset(bytes_len);
1459            let mut _prev_end_offset: usize = 0;
1460            if 2 > max_ordinal {
1461                return Ok(());
1462            }
1463
1464            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1465            // are envelope_size bytes.
1466            let cur_offset: usize = (2 - 1) * envelope_size;
1467
1468            // Zero reserved fields.
1469            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1470
1471            // Safety:
1472            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1473            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1474            //   envelope_size bytes, there is always sufficient room.
1475            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<255>, D>(
1476                self.nodename.as_ref().map(
1477                    <fidl::encoding::BoundedString<255> as fidl::encoding::ValueTypeMarker>::borrow,
1478                ),
1479                encoder,
1480                offset + cur_offset,
1481                depth,
1482            )?;
1483
1484            _prev_end_offset = cur_offset + envelope_size;
1485            if 3 > max_ordinal {
1486                return Ok(());
1487            }
1488
1489            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1490            // are envelope_size bytes.
1491            let cur_offset: usize = (3 - 1) * envelope_size;
1492
1493            // Zero reserved fields.
1494            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1495
1496            // Safety:
1497            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1498            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1499            //   envelope_size bytes, there is always sufficient room.
1500            fidl::encoding::encode_in_envelope_optional::<u64, D>(
1501                self.boot_timestamp_nanos
1502                    .as_ref()
1503                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
1504                encoder,
1505                offset + cur_offset,
1506                depth,
1507            )?;
1508
1509            _prev_end_offset = cur_offset + envelope_size;
1510            if 4 > max_ordinal {
1511                return Ok(());
1512            }
1513
1514            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1515            // are envelope_size bytes.
1516            let cur_offset: usize = (4 - 1) * envelope_size;
1517
1518            // Zero reserved fields.
1519            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1520
1521            // Safety:
1522            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1523            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1524            //   envelope_size bytes, there is always sufficient room.
1525            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<255>, D>(
1526                self.serial_number.as_ref().map(
1527                    <fidl::encoding::BoundedString<255> as fidl::encoding::ValueTypeMarker>::borrow,
1528                ),
1529                encoder,
1530                offset + cur_offset,
1531                depth,
1532            )?;
1533
1534            _prev_end_offset = cur_offset + envelope_size;
1535            if 5 > max_ordinal {
1536                return Ok(());
1537            }
1538
1539            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1540            // are envelope_size bytes.
1541            let cur_offset: usize = (5 - 1) * envelope_size;
1542
1543            // Zero reserved fields.
1544            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1545
1546            // Safety:
1547            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1548            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1549            //   envelope_size bytes, there is always sufficient room.
1550            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<u64>, D>(
1551            self.ids.as_ref().map(<fidl::encoding::UnboundedVector<u64> as fidl::encoding::ValueTypeMarker>::borrow),
1552            encoder, offset + cur_offset, depth
1553        )?;
1554
1555            _prev_end_offset = cur_offset + envelope_size;
1556            if 6 > max_ordinal {
1557                return Ok(());
1558            }
1559
1560            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1561            // are envelope_size bytes.
1562            let cur_offset: usize = (6 - 1) * envelope_size;
1563
1564            // Zero reserved fields.
1565            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1566
1567            // Safety:
1568            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1569            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1570            //   envelope_size bytes, there is always sufficient room.
1571            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<100>, D>(
1572                self.product_config.as_ref().map(
1573                    <fidl::encoding::BoundedString<100> as fidl::encoding::ValueTypeMarker>::borrow,
1574                ),
1575                encoder,
1576                offset + cur_offset,
1577                depth,
1578            )?;
1579
1580            _prev_end_offset = cur_offset + envelope_size;
1581            if 7 > max_ordinal {
1582                return Ok(());
1583            }
1584
1585            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1586            // are envelope_size bytes.
1587            let cur_offset: usize = (7 - 1) * envelope_size;
1588
1589            // Zero reserved fields.
1590            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1591
1592            // Safety:
1593            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1594            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1595            //   envelope_size bytes, there is always sufficient room.
1596            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<100>, D>(
1597                self.board_config.as_ref().map(
1598                    <fidl::encoding::BoundedString<100> as fidl::encoding::ValueTypeMarker>::borrow,
1599                ),
1600                encoder,
1601                offset + cur_offset,
1602                depth,
1603            )?;
1604
1605            _prev_end_offset = cur_offset + envelope_size;
1606            if 8 > max_ordinal {
1607                return Ok(());
1608            }
1609
1610            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1611            // are envelope_size bytes.
1612            let cur_offset: usize = (8 - 1) * envelope_size;
1613
1614            // Zero reserved fields.
1615            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1616
1617            // Safety:
1618            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1619            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1620            //   envelope_size bytes, there is always sufficient room.
1621            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<fidl_fuchsia_net_common::Subnet>, D>(
1622            self.addresses.as_ref().map(<fidl::encoding::UnboundedVector<fidl_fuchsia_net_common::Subnet> as fidl::encoding::ValueTypeMarker>::borrow),
1623            encoder, offset + cur_offset, depth
1624        )?;
1625
1626            _prev_end_offset = cur_offset + envelope_size;
1627            if 9 > max_ordinal {
1628                return Ok(());
1629            }
1630
1631            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1632            // are envelope_size bytes.
1633            let cur_offset: usize = (9 - 1) * envelope_size;
1634
1635            // Zero reserved fields.
1636            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1637
1638            // Safety:
1639            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1640            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1641            //   envelope_size bytes, there is always sufficient room.
1642            fidl::encoding::encode_in_envelope_optional::<u64, D>(
1643                self.boot_id.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
1644                encoder,
1645                offset + cur_offset,
1646                depth,
1647            )?;
1648
1649            _prev_end_offset = cur_offset + envelope_size;
1650            if 10 > max_ordinal {
1651                return Ok(());
1652            }
1653
1654            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1655            // are envelope_size bytes.
1656            let cur_offset: usize = (10 - 1) * envelope_size;
1657
1658            // Zero reserved fields.
1659            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1660
1661            // Safety:
1662            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1663            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1664            //   envelope_size bytes, there is always sufficient room.
1665            fidl::encoding::encode_in_envelope_optional::<u32, D>(
1666                self.f_release.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
1667                encoder,
1668                offset + cur_offset,
1669                depth,
1670            )?;
1671
1672            _prev_end_offset = cur_offset + envelope_size;
1673
1674            Ok(())
1675        }
1676    }
1677
1678    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for IdentifyHostResponse {
1679        #[inline(always)]
1680        fn new_empty() -> Self {
1681            Self::default()
1682        }
1683
1684        unsafe fn decode(
1685            &mut self,
1686            decoder: &mut fidl::encoding::Decoder<'_, D>,
1687            offset: usize,
1688            mut depth: fidl::encoding::Depth,
1689        ) -> fidl::Result<()> {
1690            decoder.debug_check_bounds::<Self>(offset);
1691            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
1692                None => return Err(fidl::Error::NotNullable),
1693                Some(len) => len,
1694            };
1695            // Calling decoder.out_of_line_offset(0) is not allowed.
1696            if len == 0 {
1697                return Ok(());
1698            };
1699            depth.increment()?;
1700            let envelope_size = 8;
1701            let bytes_len = len * envelope_size;
1702            let offset = decoder.out_of_line_offset(bytes_len)?;
1703            // Decode the envelope for each type.
1704            let mut _next_ordinal_to_read = 0;
1705            let mut next_offset = offset;
1706            let end_offset = offset + bytes_len;
1707            _next_ordinal_to_read += 1;
1708            if next_offset >= end_offset {
1709                return Ok(());
1710            }
1711
1712            // Decode unknown envelopes for gaps in ordinals.
1713            while _next_ordinal_to_read < 2 {
1714                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1715                _next_ordinal_to_read += 1;
1716                next_offset += envelope_size;
1717            }
1718
1719            let next_out_of_line = decoder.next_out_of_line();
1720            let handles_before = decoder.remaining_handles();
1721            if let Some((inlined, num_bytes, num_handles)) =
1722                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1723            {
1724                let member_inline_size =
1725                    <fidl::encoding::BoundedString<255> as fidl::encoding::TypeMarker>::inline_size(
1726                        decoder.context,
1727                    );
1728                if inlined != (member_inline_size <= 4) {
1729                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1730                }
1731                let inner_offset;
1732                let mut inner_depth = depth.clone();
1733                if inlined {
1734                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1735                    inner_offset = next_offset;
1736                } else {
1737                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1738                    inner_depth.increment()?;
1739                }
1740                let val_ref = self
1741                    .nodename
1742                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<255>, D));
1743                fidl::decode!(
1744                    fidl::encoding::BoundedString<255>,
1745                    D,
1746                    val_ref,
1747                    decoder,
1748                    inner_offset,
1749                    inner_depth
1750                )?;
1751                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1752                {
1753                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1754                }
1755                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1756                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1757                }
1758            }
1759
1760            next_offset += envelope_size;
1761            _next_ordinal_to_read += 1;
1762            if next_offset >= end_offset {
1763                return Ok(());
1764            }
1765
1766            // Decode unknown envelopes for gaps in ordinals.
1767            while _next_ordinal_to_read < 3 {
1768                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1769                _next_ordinal_to_read += 1;
1770                next_offset += envelope_size;
1771            }
1772
1773            let next_out_of_line = decoder.next_out_of_line();
1774            let handles_before = decoder.remaining_handles();
1775            if let Some((inlined, num_bytes, num_handles)) =
1776                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1777            {
1778                let member_inline_size =
1779                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1780                if inlined != (member_inline_size <= 4) {
1781                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1782                }
1783                let inner_offset;
1784                let mut inner_depth = depth.clone();
1785                if inlined {
1786                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1787                    inner_offset = next_offset;
1788                } else {
1789                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1790                    inner_depth.increment()?;
1791                }
1792                let val_ref =
1793                    self.boot_timestamp_nanos.get_or_insert_with(|| fidl::new_empty!(u64, D));
1794                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
1795                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1796                {
1797                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1798                }
1799                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1800                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1801                }
1802            }
1803
1804            next_offset += envelope_size;
1805            _next_ordinal_to_read += 1;
1806            if next_offset >= end_offset {
1807                return Ok(());
1808            }
1809
1810            // Decode unknown envelopes for gaps in ordinals.
1811            while _next_ordinal_to_read < 4 {
1812                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1813                _next_ordinal_to_read += 1;
1814                next_offset += envelope_size;
1815            }
1816
1817            let next_out_of_line = decoder.next_out_of_line();
1818            let handles_before = decoder.remaining_handles();
1819            if let Some((inlined, num_bytes, num_handles)) =
1820                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1821            {
1822                let member_inline_size =
1823                    <fidl::encoding::BoundedString<255> as fidl::encoding::TypeMarker>::inline_size(
1824                        decoder.context,
1825                    );
1826                if inlined != (member_inline_size <= 4) {
1827                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1828                }
1829                let inner_offset;
1830                let mut inner_depth = depth.clone();
1831                if inlined {
1832                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1833                    inner_offset = next_offset;
1834                } else {
1835                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1836                    inner_depth.increment()?;
1837                }
1838                let val_ref = self
1839                    .serial_number
1840                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<255>, D));
1841                fidl::decode!(
1842                    fidl::encoding::BoundedString<255>,
1843                    D,
1844                    val_ref,
1845                    decoder,
1846                    inner_offset,
1847                    inner_depth
1848                )?;
1849                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1850                {
1851                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1852                }
1853                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1854                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1855                }
1856            }
1857
1858            next_offset += envelope_size;
1859            _next_ordinal_to_read += 1;
1860            if next_offset >= end_offset {
1861                return Ok(());
1862            }
1863
1864            // Decode unknown envelopes for gaps in ordinals.
1865            while _next_ordinal_to_read < 5 {
1866                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1867                _next_ordinal_to_read += 1;
1868                next_offset += envelope_size;
1869            }
1870
1871            let next_out_of_line = decoder.next_out_of_line();
1872            let handles_before = decoder.remaining_handles();
1873            if let Some((inlined, num_bytes, num_handles)) =
1874                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1875            {
1876                let member_inline_size = <fidl::encoding::UnboundedVector<u64> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1877                if inlined != (member_inline_size <= 4) {
1878                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1879                }
1880                let inner_offset;
1881                let mut inner_depth = depth.clone();
1882                if inlined {
1883                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1884                    inner_offset = next_offset;
1885                } else {
1886                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1887                    inner_depth.increment()?;
1888                }
1889                let val_ref = self.ids.get_or_insert_with(|| {
1890                    fidl::new_empty!(fidl::encoding::UnboundedVector<u64>, D)
1891                });
1892                fidl::decode!(
1893                    fidl::encoding::UnboundedVector<u64>,
1894                    D,
1895                    val_ref,
1896                    decoder,
1897                    inner_offset,
1898                    inner_depth
1899                )?;
1900                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1901                {
1902                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1903                }
1904                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1905                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1906                }
1907            }
1908
1909            next_offset += envelope_size;
1910            _next_ordinal_to_read += 1;
1911            if next_offset >= end_offset {
1912                return Ok(());
1913            }
1914
1915            // Decode unknown envelopes for gaps in ordinals.
1916            while _next_ordinal_to_read < 6 {
1917                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1918                _next_ordinal_to_read += 1;
1919                next_offset += envelope_size;
1920            }
1921
1922            let next_out_of_line = decoder.next_out_of_line();
1923            let handles_before = decoder.remaining_handles();
1924            if let Some((inlined, num_bytes, num_handles)) =
1925                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1926            {
1927                let member_inline_size =
1928                    <fidl::encoding::BoundedString<100> as fidl::encoding::TypeMarker>::inline_size(
1929                        decoder.context,
1930                    );
1931                if inlined != (member_inline_size <= 4) {
1932                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1933                }
1934                let inner_offset;
1935                let mut inner_depth = depth.clone();
1936                if inlined {
1937                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1938                    inner_offset = next_offset;
1939                } else {
1940                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1941                    inner_depth.increment()?;
1942                }
1943                let val_ref = self
1944                    .product_config
1945                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<100>, D));
1946                fidl::decode!(
1947                    fidl::encoding::BoundedString<100>,
1948                    D,
1949                    val_ref,
1950                    decoder,
1951                    inner_offset,
1952                    inner_depth
1953                )?;
1954                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1955                {
1956                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1957                }
1958                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1959                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1960                }
1961            }
1962
1963            next_offset += envelope_size;
1964            _next_ordinal_to_read += 1;
1965            if next_offset >= end_offset {
1966                return Ok(());
1967            }
1968
1969            // Decode unknown envelopes for gaps in ordinals.
1970            while _next_ordinal_to_read < 7 {
1971                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1972                _next_ordinal_to_read += 1;
1973                next_offset += envelope_size;
1974            }
1975
1976            let next_out_of_line = decoder.next_out_of_line();
1977            let handles_before = decoder.remaining_handles();
1978            if let Some((inlined, num_bytes, num_handles)) =
1979                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1980            {
1981                let member_inline_size =
1982                    <fidl::encoding::BoundedString<100> as fidl::encoding::TypeMarker>::inline_size(
1983                        decoder.context,
1984                    );
1985                if inlined != (member_inline_size <= 4) {
1986                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1987                }
1988                let inner_offset;
1989                let mut inner_depth = depth.clone();
1990                if inlined {
1991                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1992                    inner_offset = next_offset;
1993                } else {
1994                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1995                    inner_depth.increment()?;
1996                }
1997                let val_ref = self
1998                    .board_config
1999                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<100>, D));
2000                fidl::decode!(
2001                    fidl::encoding::BoundedString<100>,
2002                    D,
2003                    val_ref,
2004                    decoder,
2005                    inner_offset,
2006                    inner_depth
2007                )?;
2008                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2009                {
2010                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2011                }
2012                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2013                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2014                }
2015            }
2016
2017            next_offset += envelope_size;
2018            _next_ordinal_to_read += 1;
2019            if next_offset >= end_offset {
2020                return Ok(());
2021            }
2022
2023            // Decode unknown envelopes for gaps in ordinals.
2024            while _next_ordinal_to_read < 8 {
2025                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2026                _next_ordinal_to_read += 1;
2027                next_offset += envelope_size;
2028            }
2029
2030            let next_out_of_line = decoder.next_out_of_line();
2031            let handles_before = decoder.remaining_handles();
2032            if let Some((inlined, num_bytes, num_handles)) =
2033                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2034            {
2035                let member_inline_size = <fidl::encoding::UnboundedVector<
2036                    fidl_fuchsia_net_common::Subnet,
2037                > as fidl::encoding::TypeMarker>::inline_size(
2038                    decoder.context
2039                );
2040                if inlined != (member_inline_size <= 4) {
2041                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2042                }
2043                let inner_offset;
2044                let mut inner_depth = depth.clone();
2045                if inlined {
2046                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2047                    inner_offset = next_offset;
2048                } else {
2049                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2050                    inner_depth.increment()?;
2051                }
2052                let val_ref = self.addresses.get_or_insert_with(|| {
2053                    fidl::new_empty!(
2054                        fidl::encoding::UnboundedVector<fidl_fuchsia_net_common::Subnet>,
2055                        D
2056                    )
2057                });
2058                fidl::decode!(
2059                    fidl::encoding::UnboundedVector<fidl_fuchsia_net_common::Subnet>,
2060                    D,
2061                    val_ref,
2062                    decoder,
2063                    inner_offset,
2064                    inner_depth
2065                )?;
2066                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2067                {
2068                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2069                }
2070                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2071                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2072                }
2073            }
2074
2075            next_offset += envelope_size;
2076            _next_ordinal_to_read += 1;
2077            if next_offset >= end_offset {
2078                return Ok(());
2079            }
2080
2081            // Decode unknown envelopes for gaps in ordinals.
2082            while _next_ordinal_to_read < 9 {
2083                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2084                _next_ordinal_to_read += 1;
2085                next_offset += envelope_size;
2086            }
2087
2088            let next_out_of_line = decoder.next_out_of_line();
2089            let handles_before = decoder.remaining_handles();
2090            if let Some((inlined, num_bytes, num_handles)) =
2091                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2092            {
2093                let member_inline_size =
2094                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2095                if inlined != (member_inline_size <= 4) {
2096                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2097                }
2098                let inner_offset;
2099                let mut inner_depth = depth.clone();
2100                if inlined {
2101                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2102                    inner_offset = next_offset;
2103                } else {
2104                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2105                    inner_depth.increment()?;
2106                }
2107                let val_ref = self.boot_id.get_or_insert_with(|| fidl::new_empty!(u64, D));
2108                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
2109                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2110                {
2111                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2112                }
2113                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2114                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2115                }
2116            }
2117
2118            next_offset += envelope_size;
2119            _next_ordinal_to_read += 1;
2120            if next_offset >= end_offset {
2121                return Ok(());
2122            }
2123
2124            // Decode unknown envelopes for gaps in ordinals.
2125            while _next_ordinal_to_read < 10 {
2126                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2127                _next_ordinal_to_read += 1;
2128                next_offset += envelope_size;
2129            }
2130
2131            let next_out_of_line = decoder.next_out_of_line();
2132            let handles_before = decoder.remaining_handles();
2133            if let Some((inlined, num_bytes, num_handles)) =
2134                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2135            {
2136                let member_inline_size =
2137                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2138                if inlined != (member_inline_size <= 4) {
2139                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2140                }
2141                let inner_offset;
2142                let mut inner_depth = depth.clone();
2143                if inlined {
2144                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2145                    inner_offset = next_offset;
2146                } else {
2147                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2148                    inner_depth.increment()?;
2149                }
2150                let val_ref = self.f_release.get_or_insert_with(|| fidl::new_empty!(u32, D));
2151                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
2152                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2153                {
2154                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2155                }
2156                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2157                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2158                }
2159            }
2160
2161            next_offset += envelope_size;
2162
2163            // Decode the remaining unknown envelopes.
2164            while next_offset < end_offset {
2165                _next_ordinal_to_read += 1;
2166                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2167                next_offset += envelope_size;
2168            }
2169
2170            Ok(())
2171        }
2172    }
2173}