fidl_fuchsia_hardware_google_nanohub__common/
fidl_fuchsia_hardware_google_nanohub__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 type FirmwareName = String;
12
13pub const MAX_ID_NAME: u32 = 100;
14
15/// Maximum sized message that is supported
16pub const MAX_MESSAGE_SIZE: u32 = 4096;
17
18/// Signal that will be active on event handle if the Read() method
19/// will return data.
20pub const SIGNAL_READABLE: u32 = 16777216;
21
22/// Signal that will be asserted when SIGNAL_READABLE is set and remains
23/// asserted until a driver-defined timeout passes after the call to Read
24/// This is primarily intended for integration with Starnix
25pub const SIGNAL_WAKELOCK: u32 = 67108864;
26
27/// Signal that will be active on event handle if the Write() method
28/// will accept data.
29pub const SIGNAL_WRITABLE: u32 = 33554432;
30
31/// Represents the various modes the MCU display can be in.
32#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
33pub enum DisplayMode {
34    /// The display is not in a known state.
35    None,
36    /// The MCU stack is driving the display initializing.
37    Init,
38    /// The display is off.
39    Off,
40    /// The display is in an idle, low-power state.
41    Idle,
42    /// The display is on.
43    On,
44    /// The display is in a high-brightness mode.
45    HighBrightness,
46    #[doc(hidden)]
47    __SourceBreaking { unknown_ordinal: u8 },
48}
49
50/// Pattern that matches an unknown `DisplayMode` member.
51#[macro_export]
52macro_rules! DisplayModeUnknown {
53    () => {
54        _
55    };
56}
57
58impl DisplayMode {
59    #[inline]
60    pub fn from_primitive(prim: u8) -> Option<Self> {
61        match prim {
62            0 => Some(Self::None),
63            1 => Some(Self::Init),
64            2 => Some(Self::Off),
65            3 => Some(Self::Idle),
66            4 => Some(Self::On),
67            5 => Some(Self::HighBrightness),
68            _ => None,
69        }
70    }
71
72    #[inline]
73    pub fn from_primitive_allow_unknown(prim: u8) -> Self {
74        match prim {
75            0 => Self::None,
76            1 => Self::Init,
77            2 => Self::Off,
78            3 => Self::Idle,
79            4 => Self::On,
80            5 => Self::HighBrightness,
81            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
82        }
83    }
84
85    #[inline]
86    pub fn unknown() -> Self {
87        Self::__SourceBreaking { unknown_ordinal: 0xff }
88    }
89
90    #[inline]
91    pub const fn into_primitive(self) -> u8 {
92        match self {
93            Self::None => 0,
94            Self::Init => 1,
95            Self::Off => 2,
96            Self::Idle => 3,
97            Self::On => 4,
98            Self::HighBrightness => 5,
99            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
100        }
101    }
102
103    #[inline]
104    pub fn is_unknown(&self) -> bool {
105        match self {
106            Self::__SourceBreaking { unknown_ordinal: _ } => true,
107            _ => false,
108        }
109    }
110}
111
112/// Selects which processor has ownership of the display.
113#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
114pub enum DisplaySelect {
115    /// The MCU (Microcontroller Unit) has control of the display. This
116    /// corresponds to a low signal on the display select GPIO pin.
117    Low,
118    /// The AP (Application Processor) has control of the display. This
119    /// corresponds to a high signal on the display select GPIO pin.
120    High,
121    #[doc(hidden)]
122    __SourceBreaking { unknown_ordinal: i64 },
123}
124
125/// Pattern that matches an unknown `DisplaySelect` member.
126#[macro_export]
127macro_rules! DisplaySelectUnknown {
128    () => {
129        _
130    };
131}
132
133impl DisplaySelect {
134    #[inline]
135    pub fn from_primitive(prim: i64) -> Option<Self> {
136        match prim {
137            0 => Some(Self::Low),
138            1 => Some(Self::High),
139            _ => None,
140        }
141    }
142
143    #[inline]
144    pub fn from_primitive_allow_unknown(prim: i64) -> Self {
145        match prim {
146            0 => Self::Low,
147            1 => Self::High,
148            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
149        }
150    }
151
152    #[inline]
153    pub fn unknown() -> Self {
154        Self::__SourceBreaking { unknown_ordinal: 0x7fffffffffffffff }
155    }
156
157    #[inline]
158    pub const fn into_primitive(self) -> i64 {
159        match self {
160            Self::Low => 0,
161            Self::High => 1,
162            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
163        }
164    }
165
166    #[inline]
167    pub fn is_unknown(&self) -> bool {
168        match self {
169            Self::__SourceBreaking { unknown_ordinal: _ } => true,
170            _ => false,
171        }
172    }
173}
174
175/// Events related to the lifecycle of the MCU.
176#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
177pub enum LifecycleEvent {
178    /// Indicates the MCU is not currently configured.
179    Unconfigured,
180    /// Indicates the MCU is starting up.
181    Start,
182    /// Indicates the MCU is ready to accept commands and data.
183    Ready,
184    /// Indicates the MCU is shutting down.
185    Shutdown,
186    #[doc(hidden)]
187    __SourceBreaking { unknown_ordinal: u32 },
188}
189
190/// Pattern that matches an unknown `LifecycleEvent` member.
191#[macro_export]
192macro_rules! LifecycleEventUnknown {
193    () => {
194        _
195    };
196}
197
198impl LifecycleEvent {
199    #[inline]
200    pub fn from_primitive(prim: u32) -> Option<Self> {
201        match prim {
202            0 => Some(Self::Unconfigured),
203            1 => Some(Self::Start),
204            2 => Some(Self::Ready),
205            3 => Some(Self::Shutdown),
206            _ => None,
207        }
208    }
209
210    #[inline]
211    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
212        match prim {
213            0 => Self::Unconfigured,
214            1 => Self::Start,
215            2 => Self::Ready,
216            3 => Self::Shutdown,
217            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
218        }
219    }
220
221    #[inline]
222    pub fn unknown() -> Self {
223        Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
224    }
225
226    #[inline]
227    pub const fn into_primitive(self) -> u32 {
228        match self {
229            Self::Unconfigured => 0,
230            Self::Start => 1,
231            Self::Ready => 2,
232            Self::Shutdown => 3,
233            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
234        }
235    }
236
237    #[inline]
238    pub fn is_unknown(&self) -> bool {
239        match self {
240            Self::__SourceBreaking { unknown_ordinal: _ } => true,
241            _ => false,
242        }
243    }
244}
245
246#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
247#[repr(u8)]
248pub enum McuWakeLockValue {
249    Release = 0,
250    Acquire = 1,
251}
252
253impl McuWakeLockValue {
254    #[inline]
255    pub fn from_primitive(prim: u8) -> Option<Self> {
256        match prim {
257            0 => Some(Self::Release),
258            1 => Some(Self::Acquire),
259            _ => None,
260        }
261    }
262
263    #[inline]
264    pub const fn into_primitive(self) -> u8 {
265        self as u8
266    }
267}
268
269#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
270#[repr(u32)]
271pub enum PinState {
272    Low = 0,
273    High = 1,
274}
275
276impl PinState {
277    #[inline]
278    pub fn from_primitive(prim: u32) -> Option<Self> {
279        match prim {
280            0 => Some(Self::Low),
281            1 => Some(Self::High),
282            _ => None,
283        }
284    }
285
286    #[inline]
287    pub const fn into_primitive(self) -> u32 {
288        self as u32
289    }
290}
291
292#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
293pub struct DeviceGetFirmwareNameResponse {
294    pub firmware_name: String,
295}
296
297impl fidl::Persistable for DeviceGetFirmwareNameResponse {}
298
299#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
300#[repr(C)]
301pub struct DeviceGetFirmwareVersionResponse {
302    pub version_info: McuVersionInfo,
303}
304
305impl fidl::Persistable for DeviceGetFirmwareVersionResponse {}
306
307#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
308pub struct DeviceSetWakeLockRequest {
309    pub value: McuWakeLockValue,
310}
311
312impl fidl::Persistable for DeviceSetWakeLockRequest {}
313
314#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
315#[repr(C)]
316pub struct DeviceSetWakeUpEventDurationRequest {
317    pub duration: i64,
318}
319
320impl fidl::Persistable for DeviceSetWakeUpEventDurationRequest {}
321
322#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
323#[repr(C)]
324pub struct DeviceGetWakeUpEventDurationResponse {
325    pub duration: i64,
326}
327
328impl fidl::Persistable for DeviceGetWakeUpEventDurationResponse {}
329
330#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
331pub struct HardwareResetPinStates {
332    pub isp_pin_0: PinState,
333    pub isp_pin_1: PinState,
334    pub isp_pin_2: PinState,
335}
336
337impl fidl::Persistable for HardwareResetPinStates {}
338
339#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
340pub struct LifecycleObserverOnLifecycleChangeRequest {
341    pub event: LifecycleEvent,
342}
343
344impl fidl::Persistable for LifecycleObserverOnLifecycleChangeRequest {}
345
346#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
347#[repr(C)]
348pub struct McuVersionInfo {
349    pub hardware_type: u16,
350    pub hardware_version: u16,
351    pub bootloader_version: u16,
352    pub os_version: u16,
353    pub variant_version: u32,
354}
355
356impl fidl::Persistable for McuVersionInfo {}
357
358#[derive(Clone, Debug, Default, PartialEq)]
359pub struct DataChannelReadRequest {
360    /// If specified and set to false, then the call will return immediately
361    /// if there is no data to read with ZX_ERR_SHOULD_WAIT. Otherwise the
362    /// call has hanging get semantics and will return once data is available.
363    pub blocking: Option<bool>,
364    #[doc(hidden)]
365    pub __source_breaking: fidl::marker::SourceBreaking,
366}
367
368impl fidl::Persistable for DataChannelReadRequest {}
369
370#[derive(Clone, Debug, Default, PartialEq)]
371pub struct DataChannelWriteRequest {
372    pub data: Option<Vec<u8>>,
373    #[doc(hidden)]
374    pub __source_breaking: fidl::marker::SourceBreaking,
375}
376
377impl fidl::Persistable for DataChannelWriteRequest {}
378
379#[derive(Clone, Debug, Default, PartialEq)]
380pub struct DataChannelGetIdentifierResponse {
381    pub name: Option<String>,
382    #[doc(hidden)]
383    pub __source_breaking: fidl::marker::SourceBreaking,
384}
385
386impl fidl::Persistable for DataChannelGetIdentifierResponse {}
387
388#[derive(Clone, Debug, Default, PartialEq)]
389pub struct DisplayDeviceSetDisplaySelectRequest {
390    pub display_select: Option<DisplaySelect>,
391    #[doc(hidden)]
392    pub __source_breaking: fidl::marker::SourceBreaking,
393}
394
395impl fidl::Persistable for DisplayDeviceSetDisplaySelectRequest {}
396
397#[derive(Clone, Debug, Default, PartialEq)]
398pub struct DisplayDeviceGetDisplaySelectResponse {
399    pub display_select: Option<DisplaySelect>,
400    #[doc(hidden)]
401    pub __source_breaking: fidl::marker::SourceBreaking,
402}
403
404impl fidl::Persistable for DisplayDeviceGetDisplaySelectResponse {}
405
406/// Represents the current state of the MCU display.
407#[derive(Clone, Debug, Default, PartialEq)]
408pub struct DisplayState {
409    /// The current mode of the display.
410    pub mode: Option<DisplayMode>,
411    #[doc(hidden)]
412    pub __source_breaking: fidl::marker::SourceBreaking,
413}
414
415impl fidl::Persistable for DisplayState {}
416
417/// Contains synchronization information for the MCU display.
418#[derive(Clone, Debug, Default, PartialEq)]
419pub struct DisplaySyncInfo {
420    /// The current mode of the display.
421    pub display_mode: Option<DisplayMode>,
422    /// The current panel mode.
423    pub panel_mode: Option<u8>,
424    /// The normal brightness mode brightness level.
425    pub normal_brightness: Option<u16>,
426    /// The always-on-display brightness level.
427    pub always_on_display_brightness: Option<u16>,
428    #[doc(hidden)]
429    pub __source_breaking: fidl::marker::SourceBreaking,
430}
431
432impl fidl::Persistable for DisplaySyncInfo {}
433
434#[derive(Clone, Debug, Default, PartialEq)]
435pub struct McuTimeSyncInfo {
436    pub ap_boot_time: Option<i64>,
437    pub mcu_boot_time: Option<i64>,
438    #[doc(hidden)]
439    pub __source_breaking: fidl::marker::SourceBreaking,
440}
441
442impl fidl::Persistable for McuTimeSyncInfo {}
443
444pub mod data_channel_ordinals {
445    pub const REGISTER: u64 = 0x1778251ad75157b6;
446    pub const GET_IDENTIFIER: u64 = 0x4bf148d0ddbd4f69;
447    pub const READ: u64 = 0x12ab08cf21533d26;
448    pub const WRITE: u64 = 0xf2e12121698789b;
449}
450
451pub mod device_ordinals {
452    pub const DOWNLOAD_FIRMWARE: u64 = 0x7bba8137e24661e5;
453    pub const GET_FIRMWARE_NAME: u64 = 0x1649434b5e5bcb8d;
454    pub const GET_FIRMWARE_VERSION: u64 = 0x4f0599abcc95736b;
455    pub const GET_TIME_SYNC: u64 = 0x4406991222e3975d;
456    pub const SET_WAKE_LOCK: u64 = 0x9f83f614affa1dc;
457    pub const GET_WAKE_UP_EVENT_DURATION: u64 = 0x45c79749f65e7176;
458    pub const SET_WAKE_UP_EVENT_DURATION: u64 = 0x1fa1771ffa5f570;
459    pub const HARDWARE_RESET: u64 = 0x78e3d2ded2f929f;
460}
461
462pub mod display_device_ordinals {
463    pub const GET_DISPLAY_STATE: u64 = 0x1648924f6e003444;
464    pub const GET_DISPLAY_INFO: u64 = 0x311c8e4cb6b1b4d1;
465    pub const GET_DISPLAY_SELECT: u64 = 0x6191c86cffd6323;
466    pub const SET_DISPLAY_SELECT: u64 = 0x2b07f6ba12e7a412;
467}
468
469pub mod lifecycle_observer_ordinals {
470    pub const ON_LIFECYCLE_CHANGE: u64 = 0x7034eb94979bd8de;
471}
472
473mod internal {
474    use super::*;
475    unsafe impl fidl::encoding::TypeMarker for DisplayMode {
476        type Owned = Self;
477
478        #[inline(always)]
479        fn inline_align(_context: fidl::encoding::Context) -> usize {
480            std::mem::align_of::<u8>()
481        }
482
483        #[inline(always)]
484        fn inline_size(_context: fidl::encoding::Context) -> usize {
485            std::mem::size_of::<u8>()
486        }
487
488        #[inline(always)]
489        fn encode_is_copy() -> bool {
490            false
491        }
492
493        #[inline(always)]
494        fn decode_is_copy() -> bool {
495            false
496        }
497    }
498
499    impl fidl::encoding::ValueTypeMarker for DisplayMode {
500        type Borrowed<'a> = Self;
501        #[inline(always)]
502        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
503            *value
504        }
505    }
506
507    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for DisplayMode {
508        #[inline]
509        unsafe fn encode(
510            self,
511            encoder: &mut fidl::encoding::Encoder<'_, D>,
512            offset: usize,
513            _depth: fidl::encoding::Depth,
514        ) -> fidl::Result<()> {
515            encoder.debug_check_bounds::<Self>(offset);
516            encoder.write_num(self.into_primitive(), offset);
517            Ok(())
518        }
519    }
520
521    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DisplayMode {
522        #[inline(always)]
523        fn new_empty() -> Self {
524            Self::unknown()
525        }
526
527        #[inline]
528        unsafe fn decode(
529            &mut self,
530            decoder: &mut fidl::encoding::Decoder<'_, D>,
531            offset: usize,
532            _depth: fidl::encoding::Depth,
533        ) -> fidl::Result<()> {
534            decoder.debug_check_bounds::<Self>(offset);
535            let prim = decoder.read_num::<u8>(offset);
536
537            *self = Self::from_primitive_allow_unknown(prim);
538            Ok(())
539        }
540    }
541    unsafe impl fidl::encoding::TypeMarker for DisplaySelect {
542        type Owned = Self;
543
544        #[inline(always)]
545        fn inline_align(_context: fidl::encoding::Context) -> usize {
546            std::mem::align_of::<i64>()
547        }
548
549        #[inline(always)]
550        fn inline_size(_context: fidl::encoding::Context) -> usize {
551            std::mem::size_of::<i64>()
552        }
553
554        #[inline(always)]
555        fn encode_is_copy() -> bool {
556            false
557        }
558
559        #[inline(always)]
560        fn decode_is_copy() -> bool {
561            false
562        }
563    }
564
565    impl fidl::encoding::ValueTypeMarker for DisplaySelect {
566        type Borrowed<'a> = Self;
567        #[inline(always)]
568        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
569            *value
570        }
571    }
572
573    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for DisplaySelect {
574        #[inline]
575        unsafe fn encode(
576            self,
577            encoder: &mut fidl::encoding::Encoder<'_, D>,
578            offset: usize,
579            _depth: fidl::encoding::Depth,
580        ) -> fidl::Result<()> {
581            encoder.debug_check_bounds::<Self>(offset);
582            encoder.write_num(self.into_primitive(), offset);
583            Ok(())
584        }
585    }
586
587    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DisplaySelect {
588        #[inline(always)]
589        fn new_empty() -> Self {
590            Self::unknown()
591        }
592
593        #[inline]
594        unsafe fn decode(
595            &mut self,
596            decoder: &mut fidl::encoding::Decoder<'_, D>,
597            offset: usize,
598            _depth: fidl::encoding::Depth,
599        ) -> fidl::Result<()> {
600            decoder.debug_check_bounds::<Self>(offset);
601            let prim = decoder.read_num::<i64>(offset);
602
603            *self = Self::from_primitive_allow_unknown(prim);
604            Ok(())
605        }
606    }
607    unsafe impl fidl::encoding::TypeMarker for LifecycleEvent {
608        type Owned = Self;
609
610        #[inline(always)]
611        fn inline_align(_context: fidl::encoding::Context) -> usize {
612            std::mem::align_of::<u32>()
613        }
614
615        #[inline(always)]
616        fn inline_size(_context: fidl::encoding::Context) -> usize {
617            std::mem::size_of::<u32>()
618        }
619
620        #[inline(always)]
621        fn encode_is_copy() -> bool {
622            false
623        }
624
625        #[inline(always)]
626        fn decode_is_copy() -> bool {
627            false
628        }
629    }
630
631    impl fidl::encoding::ValueTypeMarker for LifecycleEvent {
632        type Borrowed<'a> = Self;
633        #[inline(always)]
634        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
635            *value
636        }
637    }
638
639    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for LifecycleEvent {
640        #[inline]
641        unsafe fn encode(
642            self,
643            encoder: &mut fidl::encoding::Encoder<'_, D>,
644            offset: usize,
645            _depth: fidl::encoding::Depth,
646        ) -> fidl::Result<()> {
647            encoder.debug_check_bounds::<Self>(offset);
648            encoder.write_num(self.into_primitive(), offset);
649            Ok(())
650        }
651    }
652
653    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for LifecycleEvent {
654        #[inline(always)]
655        fn new_empty() -> Self {
656            Self::unknown()
657        }
658
659        #[inline]
660        unsafe fn decode(
661            &mut self,
662            decoder: &mut fidl::encoding::Decoder<'_, D>,
663            offset: usize,
664            _depth: fidl::encoding::Depth,
665        ) -> fidl::Result<()> {
666            decoder.debug_check_bounds::<Self>(offset);
667            let prim = decoder.read_num::<u32>(offset);
668
669            *self = Self::from_primitive_allow_unknown(prim);
670            Ok(())
671        }
672    }
673    unsafe impl fidl::encoding::TypeMarker for McuWakeLockValue {
674        type Owned = Self;
675
676        #[inline(always)]
677        fn inline_align(_context: fidl::encoding::Context) -> usize {
678            std::mem::align_of::<u8>()
679        }
680
681        #[inline(always)]
682        fn inline_size(_context: fidl::encoding::Context) -> usize {
683            std::mem::size_of::<u8>()
684        }
685
686        #[inline(always)]
687        fn encode_is_copy() -> bool {
688            true
689        }
690
691        #[inline(always)]
692        fn decode_is_copy() -> bool {
693            false
694        }
695    }
696
697    impl fidl::encoding::ValueTypeMarker for McuWakeLockValue {
698        type Borrowed<'a> = Self;
699        #[inline(always)]
700        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
701            *value
702        }
703    }
704
705    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
706        for McuWakeLockValue
707    {
708        #[inline]
709        unsafe fn encode(
710            self,
711            encoder: &mut fidl::encoding::Encoder<'_, D>,
712            offset: usize,
713            _depth: fidl::encoding::Depth,
714        ) -> fidl::Result<()> {
715            encoder.debug_check_bounds::<Self>(offset);
716            encoder.write_num(self.into_primitive(), offset);
717            Ok(())
718        }
719    }
720
721    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for McuWakeLockValue {
722        #[inline(always)]
723        fn new_empty() -> Self {
724            Self::Release
725        }
726
727        #[inline]
728        unsafe fn decode(
729            &mut self,
730            decoder: &mut fidl::encoding::Decoder<'_, D>,
731            offset: usize,
732            _depth: fidl::encoding::Depth,
733        ) -> fidl::Result<()> {
734            decoder.debug_check_bounds::<Self>(offset);
735            let prim = decoder.read_num::<u8>(offset);
736
737            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
738            Ok(())
739        }
740    }
741    unsafe impl fidl::encoding::TypeMarker for PinState {
742        type Owned = Self;
743
744        #[inline(always)]
745        fn inline_align(_context: fidl::encoding::Context) -> usize {
746            std::mem::align_of::<u32>()
747        }
748
749        #[inline(always)]
750        fn inline_size(_context: fidl::encoding::Context) -> usize {
751            std::mem::size_of::<u32>()
752        }
753
754        #[inline(always)]
755        fn encode_is_copy() -> bool {
756            true
757        }
758
759        #[inline(always)]
760        fn decode_is_copy() -> bool {
761            false
762        }
763    }
764
765    impl fidl::encoding::ValueTypeMarker for PinState {
766        type Borrowed<'a> = Self;
767        #[inline(always)]
768        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
769            *value
770        }
771    }
772
773    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for PinState {
774        #[inline]
775        unsafe fn encode(
776            self,
777            encoder: &mut fidl::encoding::Encoder<'_, D>,
778            offset: usize,
779            _depth: fidl::encoding::Depth,
780        ) -> fidl::Result<()> {
781            encoder.debug_check_bounds::<Self>(offset);
782            encoder.write_num(self.into_primitive(), offset);
783            Ok(())
784        }
785    }
786
787    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for PinState {
788        #[inline(always)]
789        fn new_empty() -> Self {
790            Self::Low
791        }
792
793        #[inline]
794        unsafe fn decode(
795            &mut self,
796            decoder: &mut fidl::encoding::Decoder<'_, D>,
797            offset: usize,
798            _depth: fidl::encoding::Depth,
799        ) -> fidl::Result<()> {
800            decoder.debug_check_bounds::<Self>(offset);
801            let prim = decoder.read_num::<u32>(offset);
802
803            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
804            Ok(())
805        }
806    }
807
808    impl fidl::encoding::ValueTypeMarker for DeviceGetFirmwareNameResponse {
809        type Borrowed<'a> = &'a Self;
810        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
811            value
812        }
813    }
814
815    unsafe impl fidl::encoding::TypeMarker for DeviceGetFirmwareNameResponse {
816        type Owned = Self;
817
818        #[inline(always)]
819        fn inline_align(_context: fidl::encoding::Context) -> usize {
820            8
821        }
822
823        #[inline(always)]
824        fn inline_size(_context: fidl::encoding::Context) -> usize {
825            16
826        }
827    }
828
829    unsafe impl<D: fidl::encoding::ResourceDialect>
830        fidl::encoding::Encode<DeviceGetFirmwareNameResponse, D>
831        for &DeviceGetFirmwareNameResponse
832    {
833        #[inline]
834        unsafe fn encode(
835            self,
836            encoder: &mut fidl::encoding::Encoder<'_, D>,
837            offset: usize,
838            _depth: fidl::encoding::Depth,
839        ) -> fidl::Result<()> {
840            encoder.debug_check_bounds::<DeviceGetFirmwareNameResponse>(offset);
841            // Delegate to tuple encoding.
842            fidl::encoding::Encode::<DeviceGetFirmwareNameResponse, D>::encode(
843                (<fidl::encoding::BoundedString<64> as fidl::encoding::ValueTypeMarker>::borrow(
844                    &self.firmware_name,
845                ),),
846                encoder,
847                offset,
848                _depth,
849            )
850        }
851    }
852    unsafe impl<
853        D: fidl::encoding::ResourceDialect,
854        T0: fidl::encoding::Encode<fidl::encoding::BoundedString<64>, D>,
855    > fidl::encoding::Encode<DeviceGetFirmwareNameResponse, D> for (T0,)
856    {
857        #[inline]
858        unsafe fn encode(
859            self,
860            encoder: &mut fidl::encoding::Encoder<'_, D>,
861            offset: usize,
862            depth: fidl::encoding::Depth,
863        ) -> fidl::Result<()> {
864            encoder.debug_check_bounds::<DeviceGetFirmwareNameResponse>(offset);
865            // Zero out padding regions. There's no need to apply masks
866            // because the unmasked parts will be overwritten by fields.
867            // Write the fields.
868            self.0.encode(encoder, offset + 0, depth)?;
869            Ok(())
870        }
871    }
872
873    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
874        for DeviceGetFirmwareNameResponse
875    {
876        #[inline(always)]
877        fn new_empty() -> Self {
878            Self { firmware_name: fidl::new_empty!(fidl::encoding::BoundedString<64>, D) }
879        }
880
881        #[inline]
882        unsafe fn decode(
883            &mut self,
884            decoder: &mut fidl::encoding::Decoder<'_, D>,
885            offset: usize,
886            _depth: fidl::encoding::Depth,
887        ) -> fidl::Result<()> {
888            decoder.debug_check_bounds::<Self>(offset);
889            // Verify that padding bytes are zero.
890            fidl::decode!(
891                fidl::encoding::BoundedString<64>,
892                D,
893                &mut self.firmware_name,
894                decoder,
895                offset + 0,
896                _depth
897            )?;
898            Ok(())
899        }
900    }
901
902    impl fidl::encoding::ValueTypeMarker for DeviceGetFirmwareVersionResponse {
903        type Borrowed<'a> = &'a Self;
904        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
905            value
906        }
907    }
908
909    unsafe impl fidl::encoding::TypeMarker for DeviceGetFirmwareVersionResponse {
910        type Owned = Self;
911
912        #[inline(always)]
913        fn inline_align(_context: fidl::encoding::Context) -> usize {
914            4
915        }
916
917        #[inline(always)]
918        fn inline_size(_context: fidl::encoding::Context) -> usize {
919            12
920        }
921        #[inline(always)]
922        fn encode_is_copy() -> bool {
923            true
924        }
925
926        #[inline(always)]
927        fn decode_is_copy() -> bool {
928            true
929        }
930    }
931
932    unsafe impl<D: fidl::encoding::ResourceDialect>
933        fidl::encoding::Encode<DeviceGetFirmwareVersionResponse, D>
934        for &DeviceGetFirmwareVersionResponse
935    {
936        #[inline]
937        unsafe fn encode(
938            self,
939            encoder: &mut fidl::encoding::Encoder<'_, D>,
940            offset: usize,
941            _depth: fidl::encoding::Depth,
942        ) -> fidl::Result<()> {
943            encoder.debug_check_bounds::<DeviceGetFirmwareVersionResponse>(offset);
944            unsafe {
945                // Copy the object into the buffer.
946                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
947                (buf_ptr as *mut DeviceGetFirmwareVersionResponse)
948                    .write_unaligned((self as *const DeviceGetFirmwareVersionResponse).read());
949                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
950                // done second because the memcpy will write garbage to these bytes.
951            }
952            Ok(())
953        }
954    }
955    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<McuVersionInfo, D>>
956        fidl::encoding::Encode<DeviceGetFirmwareVersionResponse, D> for (T0,)
957    {
958        #[inline]
959        unsafe fn encode(
960            self,
961            encoder: &mut fidl::encoding::Encoder<'_, D>,
962            offset: usize,
963            depth: fidl::encoding::Depth,
964        ) -> fidl::Result<()> {
965            encoder.debug_check_bounds::<DeviceGetFirmwareVersionResponse>(offset);
966            // Zero out padding regions. There's no need to apply masks
967            // because the unmasked parts will be overwritten by fields.
968            // Write the fields.
969            self.0.encode(encoder, offset + 0, depth)?;
970            Ok(())
971        }
972    }
973
974    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
975        for DeviceGetFirmwareVersionResponse
976    {
977        #[inline(always)]
978        fn new_empty() -> Self {
979            Self { version_info: fidl::new_empty!(McuVersionInfo, D) }
980        }
981
982        #[inline]
983        unsafe fn decode(
984            &mut self,
985            decoder: &mut fidl::encoding::Decoder<'_, D>,
986            offset: usize,
987            _depth: fidl::encoding::Depth,
988        ) -> fidl::Result<()> {
989            decoder.debug_check_bounds::<Self>(offset);
990            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
991            // Verify that padding bytes are zero.
992            // Copy from the buffer into the object.
993            unsafe {
994                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 12);
995            }
996            Ok(())
997        }
998    }
999
1000    impl fidl::encoding::ValueTypeMarker for DeviceSetWakeLockRequest {
1001        type Borrowed<'a> = &'a Self;
1002        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1003            value
1004        }
1005    }
1006
1007    unsafe impl fidl::encoding::TypeMarker for DeviceSetWakeLockRequest {
1008        type Owned = Self;
1009
1010        #[inline(always)]
1011        fn inline_align(_context: fidl::encoding::Context) -> usize {
1012            1
1013        }
1014
1015        #[inline(always)]
1016        fn inline_size(_context: fidl::encoding::Context) -> usize {
1017            1
1018        }
1019    }
1020
1021    unsafe impl<D: fidl::encoding::ResourceDialect>
1022        fidl::encoding::Encode<DeviceSetWakeLockRequest, D> for &DeviceSetWakeLockRequest
1023    {
1024        #[inline]
1025        unsafe fn encode(
1026            self,
1027            encoder: &mut fidl::encoding::Encoder<'_, D>,
1028            offset: usize,
1029            _depth: fidl::encoding::Depth,
1030        ) -> fidl::Result<()> {
1031            encoder.debug_check_bounds::<DeviceSetWakeLockRequest>(offset);
1032            // Delegate to tuple encoding.
1033            fidl::encoding::Encode::<DeviceSetWakeLockRequest, D>::encode(
1034                (<McuWakeLockValue as fidl::encoding::ValueTypeMarker>::borrow(&self.value),),
1035                encoder,
1036                offset,
1037                _depth,
1038            )
1039        }
1040    }
1041    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<McuWakeLockValue, D>>
1042        fidl::encoding::Encode<DeviceSetWakeLockRequest, D> for (T0,)
1043    {
1044        #[inline]
1045        unsafe fn encode(
1046            self,
1047            encoder: &mut fidl::encoding::Encoder<'_, D>,
1048            offset: usize,
1049            depth: fidl::encoding::Depth,
1050        ) -> fidl::Result<()> {
1051            encoder.debug_check_bounds::<DeviceSetWakeLockRequest>(offset);
1052            // Zero out padding regions. There's no need to apply masks
1053            // because the unmasked parts will be overwritten by fields.
1054            // Write the fields.
1055            self.0.encode(encoder, offset + 0, depth)?;
1056            Ok(())
1057        }
1058    }
1059
1060    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1061        for DeviceSetWakeLockRequest
1062    {
1063        #[inline(always)]
1064        fn new_empty() -> Self {
1065            Self { value: fidl::new_empty!(McuWakeLockValue, D) }
1066        }
1067
1068        #[inline]
1069        unsafe fn decode(
1070            &mut self,
1071            decoder: &mut fidl::encoding::Decoder<'_, D>,
1072            offset: usize,
1073            _depth: fidl::encoding::Depth,
1074        ) -> fidl::Result<()> {
1075            decoder.debug_check_bounds::<Self>(offset);
1076            // Verify that padding bytes are zero.
1077            fidl::decode!(McuWakeLockValue, D, &mut self.value, decoder, offset + 0, _depth)?;
1078            Ok(())
1079        }
1080    }
1081
1082    impl fidl::encoding::ValueTypeMarker for DeviceSetWakeUpEventDurationRequest {
1083        type Borrowed<'a> = &'a Self;
1084        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1085            value
1086        }
1087    }
1088
1089    unsafe impl fidl::encoding::TypeMarker for DeviceSetWakeUpEventDurationRequest {
1090        type Owned = Self;
1091
1092        #[inline(always)]
1093        fn inline_align(_context: fidl::encoding::Context) -> usize {
1094            8
1095        }
1096
1097        #[inline(always)]
1098        fn inline_size(_context: fidl::encoding::Context) -> usize {
1099            8
1100        }
1101        #[inline(always)]
1102        fn encode_is_copy() -> bool {
1103            true
1104        }
1105
1106        #[inline(always)]
1107        fn decode_is_copy() -> bool {
1108            true
1109        }
1110    }
1111
1112    unsafe impl<D: fidl::encoding::ResourceDialect>
1113        fidl::encoding::Encode<DeviceSetWakeUpEventDurationRequest, D>
1114        for &DeviceSetWakeUpEventDurationRequest
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::<DeviceSetWakeUpEventDurationRequest>(offset);
1124            unsafe {
1125                // Copy the object into the buffer.
1126                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
1127                (buf_ptr as *mut DeviceSetWakeUpEventDurationRequest)
1128                    .write_unaligned((self as *const DeviceSetWakeUpEventDurationRequest).read());
1129                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
1130                // done second because the memcpy will write garbage to these bytes.
1131            }
1132            Ok(())
1133        }
1134    }
1135    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<i64, D>>
1136        fidl::encoding::Encode<DeviceSetWakeUpEventDurationRequest, D> for (T0,)
1137    {
1138        #[inline]
1139        unsafe fn encode(
1140            self,
1141            encoder: &mut fidl::encoding::Encoder<'_, D>,
1142            offset: usize,
1143            depth: fidl::encoding::Depth,
1144        ) -> fidl::Result<()> {
1145            encoder.debug_check_bounds::<DeviceSetWakeUpEventDurationRequest>(offset);
1146            // Zero out padding regions. There's no need to apply masks
1147            // because the unmasked parts will be overwritten by fields.
1148            // Write the fields.
1149            self.0.encode(encoder, offset + 0, depth)?;
1150            Ok(())
1151        }
1152    }
1153
1154    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1155        for DeviceSetWakeUpEventDurationRequest
1156    {
1157        #[inline(always)]
1158        fn new_empty() -> Self {
1159            Self { duration: fidl::new_empty!(i64, D) }
1160        }
1161
1162        #[inline]
1163        unsafe fn decode(
1164            &mut self,
1165            decoder: &mut fidl::encoding::Decoder<'_, D>,
1166            offset: usize,
1167            _depth: fidl::encoding::Depth,
1168        ) -> fidl::Result<()> {
1169            decoder.debug_check_bounds::<Self>(offset);
1170            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
1171            // Verify that padding bytes are zero.
1172            // Copy from the buffer into the object.
1173            unsafe {
1174                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 8);
1175            }
1176            Ok(())
1177        }
1178    }
1179
1180    impl fidl::encoding::ValueTypeMarker for DeviceGetWakeUpEventDurationResponse {
1181        type Borrowed<'a> = &'a Self;
1182        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1183            value
1184        }
1185    }
1186
1187    unsafe impl fidl::encoding::TypeMarker for DeviceGetWakeUpEventDurationResponse {
1188        type Owned = Self;
1189
1190        #[inline(always)]
1191        fn inline_align(_context: fidl::encoding::Context) -> usize {
1192            8
1193        }
1194
1195        #[inline(always)]
1196        fn inline_size(_context: fidl::encoding::Context) -> usize {
1197            8
1198        }
1199        #[inline(always)]
1200        fn encode_is_copy() -> bool {
1201            true
1202        }
1203
1204        #[inline(always)]
1205        fn decode_is_copy() -> bool {
1206            true
1207        }
1208    }
1209
1210    unsafe impl<D: fidl::encoding::ResourceDialect>
1211        fidl::encoding::Encode<DeviceGetWakeUpEventDurationResponse, D>
1212        for &DeviceGetWakeUpEventDurationResponse
1213    {
1214        #[inline]
1215        unsafe fn encode(
1216            self,
1217            encoder: &mut fidl::encoding::Encoder<'_, D>,
1218            offset: usize,
1219            _depth: fidl::encoding::Depth,
1220        ) -> fidl::Result<()> {
1221            encoder.debug_check_bounds::<DeviceGetWakeUpEventDurationResponse>(offset);
1222            unsafe {
1223                // Copy the object into the buffer.
1224                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
1225                (buf_ptr as *mut DeviceGetWakeUpEventDurationResponse)
1226                    .write_unaligned((self as *const DeviceGetWakeUpEventDurationResponse).read());
1227                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
1228                // done second because the memcpy will write garbage to these bytes.
1229            }
1230            Ok(())
1231        }
1232    }
1233    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<i64, D>>
1234        fidl::encoding::Encode<DeviceGetWakeUpEventDurationResponse, D> for (T0,)
1235    {
1236        #[inline]
1237        unsafe fn encode(
1238            self,
1239            encoder: &mut fidl::encoding::Encoder<'_, D>,
1240            offset: usize,
1241            depth: fidl::encoding::Depth,
1242        ) -> fidl::Result<()> {
1243            encoder.debug_check_bounds::<DeviceGetWakeUpEventDurationResponse>(offset);
1244            // Zero out padding regions. There's no need to apply masks
1245            // because the unmasked parts will be overwritten by fields.
1246            // Write the fields.
1247            self.0.encode(encoder, offset + 0, depth)?;
1248            Ok(())
1249        }
1250    }
1251
1252    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1253        for DeviceGetWakeUpEventDurationResponse
1254    {
1255        #[inline(always)]
1256        fn new_empty() -> Self {
1257            Self { duration: fidl::new_empty!(i64, D) }
1258        }
1259
1260        #[inline]
1261        unsafe fn decode(
1262            &mut self,
1263            decoder: &mut fidl::encoding::Decoder<'_, D>,
1264            offset: usize,
1265            _depth: fidl::encoding::Depth,
1266        ) -> fidl::Result<()> {
1267            decoder.debug_check_bounds::<Self>(offset);
1268            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
1269            // Verify that padding bytes are zero.
1270            // Copy from the buffer into the object.
1271            unsafe {
1272                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 8);
1273            }
1274            Ok(())
1275        }
1276    }
1277
1278    impl fidl::encoding::ValueTypeMarker for HardwareResetPinStates {
1279        type Borrowed<'a> = &'a Self;
1280        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1281            value
1282        }
1283    }
1284
1285    unsafe impl fidl::encoding::TypeMarker for HardwareResetPinStates {
1286        type Owned = Self;
1287
1288        #[inline(always)]
1289        fn inline_align(_context: fidl::encoding::Context) -> usize {
1290            4
1291        }
1292
1293        #[inline(always)]
1294        fn inline_size(_context: fidl::encoding::Context) -> usize {
1295            12
1296        }
1297    }
1298
1299    unsafe impl<D: fidl::encoding::ResourceDialect>
1300        fidl::encoding::Encode<HardwareResetPinStates, D> for &HardwareResetPinStates
1301    {
1302        #[inline]
1303        unsafe fn encode(
1304            self,
1305            encoder: &mut fidl::encoding::Encoder<'_, D>,
1306            offset: usize,
1307            _depth: fidl::encoding::Depth,
1308        ) -> fidl::Result<()> {
1309            encoder.debug_check_bounds::<HardwareResetPinStates>(offset);
1310            // Delegate to tuple encoding.
1311            fidl::encoding::Encode::<HardwareResetPinStates, D>::encode(
1312                (
1313                    <PinState as fidl::encoding::ValueTypeMarker>::borrow(&self.isp_pin_0),
1314                    <PinState as fidl::encoding::ValueTypeMarker>::borrow(&self.isp_pin_1),
1315                    <PinState as fidl::encoding::ValueTypeMarker>::borrow(&self.isp_pin_2),
1316                ),
1317                encoder,
1318                offset,
1319                _depth,
1320            )
1321        }
1322    }
1323    unsafe impl<
1324        D: fidl::encoding::ResourceDialect,
1325        T0: fidl::encoding::Encode<PinState, D>,
1326        T1: fidl::encoding::Encode<PinState, D>,
1327        T2: fidl::encoding::Encode<PinState, D>,
1328    > fidl::encoding::Encode<HardwareResetPinStates, D> for (T0, T1, T2)
1329    {
1330        #[inline]
1331        unsafe fn encode(
1332            self,
1333            encoder: &mut fidl::encoding::Encoder<'_, D>,
1334            offset: usize,
1335            depth: fidl::encoding::Depth,
1336        ) -> fidl::Result<()> {
1337            encoder.debug_check_bounds::<HardwareResetPinStates>(offset);
1338            // Zero out padding regions. There's no need to apply masks
1339            // because the unmasked parts will be overwritten by fields.
1340            // Write the fields.
1341            self.0.encode(encoder, offset + 0, depth)?;
1342            self.1.encode(encoder, offset + 4, depth)?;
1343            self.2.encode(encoder, offset + 8, depth)?;
1344            Ok(())
1345        }
1346    }
1347
1348    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1349        for HardwareResetPinStates
1350    {
1351        #[inline(always)]
1352        fn new_empty() -> Self {
1353            Self {
1354                isp_pin_0: fidl::new_empty!(PinState, D),
1355                isp_pin_1: fidl::new_empty!(PinState, D),
1356                isp_pin_2: fidl::new_empty!(PinState, D),
1357            }
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!(PinState, D, &mut self.isp_pin_0, decoder, offset + 0, _depth)?;
1370            fidl::decode!(PinState, D, &mut self.isp_pin_1, decoder, offset + 4, _depth)?;
1371            fidl::decode!(PinState, D, &mut self.isp_pin_2, decoder, offset + 8, _depth)?;
1372            Ok(())
1373        }
1374    }
1375
1376    impl fidl::encoding::ValueTypeMarker for LifecycleObserverOnLifecycleChangeRequest {
1377        type Borrowed<'a> = &'a Self;
1378        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1379            value
1380        }
1381    }
1382
1383    unsafe impl fidl::encoding::TypeMarker for LifecycleObserverOnLifecycleChangeRequest {
1384        type Owned = Self;
1385
1386        #[inline(always)]
1387        fn inline_align(_context: fidl::encoding::Context) -> usize {
1388            4
1389        }
1390
1391        #[inline(always)]
1392        fn inline_size(_context: fidl::encoding::Context) -> usize {
1393            4
1394        }
1395    }
1396
1397    unsafe impl<D: fidl::encoding::ResourceDialect>
1398        fidl::encoding::Encode<LifecycleObserverOnLifecycleChangeRequest, D>
1399        for &LifecycleObserverOnLifecycleChangeRequest
1400    {
1401        #[inline]
1402        unsafe fn encode(
1403            self,
1404            encoder: &mut fidl::encoding::Encoder<'_, D>,
1405            offset: usize,
1406            _depth: fidl::encoding::Depth,
1407        ) -> fidl::Result<()> {
1408            encoder.debug_check_bounds::<LifecycleObserverOnLifecycleChangeRequest>(offset);
1409            // Delegate to tuple encoding.
1410            fidl::encoding::Encode::<LifecycleObserverOnLifecycleChangeRequest, D>::encode(
1411                (<LifecycleEvent as fidl::encoding::ValueTypeMarker>::borrow(&self.event),),
1412                encoder,
1413                offset,
1414                _depth,
1415            )
1416        }
1417    }
1418    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<LifecycleEvent, D>>
1419        fidl::encoding::Encode<LifecycleObserverOnLifecycleChangeRequest, D> for (T0,)
1420    {
1421        #[inline]
1422        unsafe fn encode(
1423            self,
1424            encoder: &mut fidl::encoding::Encoder<'_, D>,
1425            offset: usize,
1426            depth: fidl::encoding::Depth,
1427        ) -> fidl::Result<()> {
1428            encoder.debug_check_bounds::<LifecycleObserverOnLifecycleChangeRequest>(offset);
1429            // Zero out padding regions. There's no need to apply masks
1430            // because the unmasked parts will be overwritten by fields.
1431            // Write the fields.
1432            self.0.encode(encoder, offset + 0, depth)?;
1433            Ok(())
1434        }
1435    }
1436
1437    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1438        for LifecycleObserverOnLifecycleChangeRequest
1439    {
1440        #[inline(always)]
1441        fn new_empty() -> Self {
1442            Self { event: fidl::new_empty!(LifecycleEvent, D) }
1443        }
1444
1445        #[inline]
1446        unsafe fn decode(
1447            &mut self,
1448            decoder: &mut fidl::encoding::Decoder<'_, D>,
1449            offset: usize,
1450            _depth: fidl::encoding::Depth,
1451        ) -> fidl::Result<()> {
1452            decoder.debug_check_bounds::<Self>(offset);
1453            // Verify that padding bytes are zero.
1454            fidl::decode!(LifecycleEvent, D, &mut self.event, decoder, offset + 0, _depth)?;
1455            Ok(())
1456        }
1457    }
1458
1459    impl fidl::encoding::ValueTypeMarker for McuVersionInfo {
1460        type Borrowed<'a> = &'a Self;
1461        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1462            value
1463        }
1464    }
1465
1466    unsafe impl fidl::encoding::TypeMarker for McuVersionInfo {
1467        type Owned = Self;
1468
1469        #[inline(always)]
1470        fn inline_align(_context: fidl::encoding::Context) -> usize {
1471            4
1472        }
1473
1474        #[inline(always)]
1475        fn inline_size(_context: fidl::encoding::Context) -> usize {
1476            12
1477        }
1478        #[inline(always)]
1479        fn encode_is_copy() -> bool {
1480            true
1481        }
1482
1483        #[inline(always)]
1484        fn decode_is_copy() -> bool {
1485            true
1486        }
1487    }
1488
1489    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<McuVersionInfo, D>
1490        for &McuVersionInfo
1491    {
1492        #[inline]
1493        unsafe fn encode(
1494            self,
1495            encoder: &mut fidl::encoding::Encoder<'_, D>,
1496            offset: usize,
1497            _depth: fidl::encoding::Depth,
1498        ) -> fidl::Result<()> {
1499            encoder.debug_check_bounds::<McuVersionInfo>(offset);
1500            unsafe {
1501                // Copy the object into the buffer.
1502                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
1503                (buf_ptr as *mut McuVersionInfo)
1504                    .write_unaligned((self as *const McuVersionInfo).read());
1505                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
1506                // done second because the memcpy will write garbage to these bytes.
1507            }
1508            Ok(())
1509        }
1510    }
1511    unsafe impl<
1512        D: fidl::encoding::ResourceDialect,
1513        T0: fidl::encoding::Encode<u16, D>,
1514        T1: fidl::encoding::Encode<u16, D>,
1515        T2: fidl::encoding::Encode<u16, D>,
1516        T3: fidl::encoding::Encode<u16, D>,
1517        T4: fidl::encoding::Encode<u32, D>,
1518    > fidl::encoding::Encode<McuVersionInfo, D> for (T0, T1, T2, T3, T4)
1519    {
1520        #[inline]
1521        unsafe fn encode(
1522            self,
1523            encoder: &mut fidl::encoding::Encoder<'_, D>,
1524            offset: usize,
1525            depth: fidl::encoding::Depth,
1526        ) -> fidl::Result<()> {
1527            encoder.debug_check_bounds::<McuVersionInfo>(offset);
1528            // Zero out padding regions. There's no need to apply masks
1529            // because the unmasked parts will be overwritten by fields.
1530            // Write the fields.
1531            self.0.encode(encoder, offset + 0, depth)?;
1532            self.1.encode(encoder, offset + 2, depth)?;
1533            self.2.encode(encoder, offset + 4, depth)?;
1534            self.3.encode(encoder, offset + 6, depth)?;
1535            self.4.encode(encoder, offset + 8, depth)?;
1536            Ok(())
1537        }
1538    }
1539
1540    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for McuVersionInfo {
1541        #[inline(always)]
1542        fn new_empty() -> Self {
1543            Self {
1544                hardware_type: fidl::new_empty!(u16, D),
1545                hardware_version: fidl::new_empty!(u16, D),
1546                bootloader_version: fidl::new_empty!(u16, D),
1547                os_version: fidl::new_empty!(u16, D),
1548                variant_version: fidl::new_empty!(u32, D),
1549            }
1550        }
1551
1552        #[inline]
1553        unsafe fn decode(
1554            &mut self,
1555            decoder: &mut fidl::encoding::Decoder<'_, D>,
1556            offset: usize,
1557            _depth: fidl::encoding::Depth,
1558        ) -> fidl::Result<()> {
1559            decoder.debug_check_bounds::<Self>(offset);
1560            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
1561            // Verify that padding bytes are zero.
1562            // Copy from the buffer into the object.
1563            unsafe {
1564                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 12);
1565            }
1566            Ok(())
1567        }
1568    }
1569
1570    impl DataChannelReadRequest {
1571        #[inline(always)]
1572        fn max_ordinal_present(&self) -> u64 {
1573            if let Some(_) = self.blocking {
1574                return 1;
1575            }
1576            0
1577        }
1578    }
1579
1580    impl fidl::encoding::ValueTypeMarker for DataChannelReadRequest {
1581        type Borrowed<'a> = &'a Self;
1582        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1583            value
1584        }
1585    }
1586
1587    unsafe impl fidl::encoding::TypeMarker for DataChannelReadRequest {
1588        type Owned = Self;
1589
1590        #[inline(always)]
1591        fn inline_align(_context: fidl::encoding::Context) -> usize {
1592            8
1593        }
1594
1595        #[inline(always)]
1596        fn inline_size(_context: fidl::encoding::Context) -> usize {
1597            16
1598        }
1599    }
1600
1601    unsafe impl<D: fidl::encoding::ResourceDialect>
1602        fidl::encoding::Encode<DataChannelReadRequest, D> for &DataChannelReadRequest
1603    {
1604        unsafe fn encode(
1605            self,
1606            encoder: &mut fidl::encoding::Encoder<'_, D>,
1607            offset: usize,
1608            mut depth: fidl::encoding::Depth,
1609        ) -> fidl::Result<()> {
1610            encoder.debug_check_bounds::<DataChannelReadRequest>(offset);
1611            // Vector header
1612            let max_ordinal: u64 = self.max_ordinal_present();
1613            encoder.write_num(max_ordinal, offset);
1614            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
1615            // Calling encoder.out_of_line_offset(0) is not allowed.
1616            if max_ordinal == 0 {
1617                return Ok(());
1618            }
1619            depth.increment()?;
1620            let envelope_size = 8;
1621            let bytes_len = max_ordinal as usize * envelope_size;
1622            #[allow(unused_variables)]
1623            let offset = encoder.out_of_line_offset(bytes_len);
1624            let mut _prev_end_offset: usize = 0;
1625            if 1 > max_ordinal {
1626                return Ok(());
1627            }
1628
1629            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1630            // are envelope_size bytes.
1631            let cur_offset: usize = (1 - 1) * envelope_size;
1632
1633            // Zero reserved fields.
1634            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1635
1636            // Safety:
1637            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1638            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1639            //   envelope_size bytes, there is always sufficient room.
1640            fidl::encoding::encode_in_envelope_optional::<bool, D>(
1641                self.blocking.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
1642                encoder,
1643                offset + cur_offset,
1644                depth,
1645            )?;
1646
1647            _prev_end_offset = cur_offset + envelope_size;
1648
1649            Ok(())
1650        }
1651    }
1652
1653    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1654        for DataChannelReadRequest
1655    {
1656        #[inline(always)]
1657        fn new_empty() -> Self {
1658            Self::default()
1659        }
1660
1661        unsafe fn decode(
1662            &mut self,
1663            decoder: &mut fidl::encoding::Decoder<'_, D>,
1664            offset: usize,
1665            mut depth: fidl::encoding::Depth,
1666        ) -> fidl::Result<()> {
1667            decoder.debug_check_bounds::<Self>(offset);
1668            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
1669                None => return Err(fidl::Error::NotNullable),
1670                Some(len) => len,
1671            };
1672            // Calling decoder.out_of_line_offset(0) is not allowed.
1673            if len == 0 {
1674                return Ok(());
1675            };
1676            depth.increment()?;
1677            let envelope_size = 8;
1678            let bytes_len = len * envelope_size;
1679            let offset = decoder.out_of_line_offset(bytes_len)?;
1680            // Decode the envelope for each type.
1681            let mut _next_ordinal_to_read = 0;
1682            let mut next_offset = offset;
1683            let end_offset = offset + bytes_len;
1684            _next_ordinal_to_read += 1;
1685            if next_offset >= end_offset {
1686                return Ok(());
1687            }
1688
1689            // Decode unknown envelopes for gaps in ordinals.
1690            while _next_ordinal_to_read < 1 {
1691                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1692                _next_ordinal_to_read += 1;
1693                next_offset += envelope_size;
1694            }
1695
1696            let next_out_of_line = decoder.next_out_of_line();
1697            let handles_before = decoder.remaining_handles();
1698            if let Some((inlined, num_bytes, num_handles)) =
1699                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1700            {
1701                let member_inline_size =
1702                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1703                if inlined != (member_inline_size <= 4) {
1704                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1705                }
1706                let inner_offset;
1707                let mut inner_depth = depth.clone();
1708                if inlined {
1709                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1710                    inner_offset = next_offset;
1711                } else {
1712                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1713                    inner_depth.increment()?;
1714                }
1715                let val_ref = self.blocking.get_or_insert_with(|| fidl::new_empty!(bool, D));
1716                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
1717                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1718                {
1719                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1720                }
1721                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1722                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1723                }
1724            }
1725
1726            next_offset += envelope_size;
1727
1728            // Decode the remaining unknown envelopes.
1729            while next_offset < end_offset {
1730                _next_ordinal_to_read += 1;
1731                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1732                next_offset += envelope_size;
1733            }
1734
1735            Ok(())
1736        }
1737    }
1738
1739    impl DataChannelWriteRequest {
1740        #[inline(always)]
1741        fn max_ordinal_present(&self) -> u64 {
1742            if let Some(_) = self.data {
1743                return 1;
1744            }
1745            0
1746        }
1747    }
1748
1749    impl fidl::encoding::ValueTypeMarker for DataChannelWriteRequest {
1750        type Borrowed<'a> = &'a Self;
1751        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1752            value
1753        }
1754    }
1755
1756    unsafe impl fidl::encoding::TypeMarker for DataChannelWriteRequest {
1757        type Owned = Self;
1758
1759        #[inline(always)]
1760        fn inline_align(_context: fidl::encoding::Context) -> usize {
1761            8
1762        }
1763
1764        #[inline(always)]
1765        fn inline_size(_context: fidl::encoding::Context) -> usize {
1766            16
1767        }
1768    }
1769
1770    unsafe impl<D: fidl::encoding::ResourceDialect>
1771        fidl::encoding::Encode<DataChannelWriteRequest, D> for &DataChannelWriteRequest
1772    {
1773        unsafe fn encode(
1774            self,
1775            encoder: &mut fidl::encoding::Encoder<'_, D>,
1776            offset: usize,
1777            mut depth: fidl::encoding::Depth,
1778        ) -> fidl::Result<()> {
1779            encoder.debug_check_bounds::<DataChannelWriteRequest>(offset);
1780            // Vector header
1781            let max_ordinal: u64 = self.max_ordinal_present();
1782            encoder.write_num(max_ordinal, offset);
1783            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
1784            // Calling encoder.out_of_line_offset(0) is not allowed.
1785            if max_ordinal == 0 {
1786                return Ok(());
1787            }
1788            depth.increment()?;
1789            let envelope_size = 8;
1790            let bytes_len = max_ordinal as usize * envelope_size;
1791            #[allow(unused_variables)]
1792            let offset = encoder.out_of_line_offset(bytes_len);
1793            let mut _prev_end_offset: usize = 0;
1794            if 1 > max_ordinal {
1795                return Ok(());
1796            }
1797
1798            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1799            // are envelope_size bytes.
1800            let cur_offset: usize = (1 - 1) * envelope_size;
1801
1802            // Zero reserved fields.
1803            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1804
1805            // Safety:
1806            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1807            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1808            //   envelope_size bytes, there is always sufficient room.
1809            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u8, 4096>, D>(
1810                self.data.as_ref().map(
1811                    <fidl::encoding::Vector<u8, 4096> as fidl::encoding::ValueTypeMarker>::borrow,
1812                ),
1813                encoder,
1814                offset + cur_offset,
1815                depth,
1816            )?;
1817
1818            _prev_end_offset = cur_offset + envelope_size;
1819
1820            Ok(())
1821        }
1822    }
1823
1824    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1825        for DataChannelWriteRequest
1826    {
1827        #[inline(always)]
1828        fn new_empty() -> Self {
1829            Self::default()
1830        }
1831
1832        unsafe fn decode(
1833            &mut self,
1834            decoder: &mut fidl::encoding::Decoder<'_, D>,
1835            offset: usize,
1836            mut depth: fidl::encoding::Depth,
1837        ) -> fidl::Result<()> {
1838            decoder.debug_check_bounds::<Self>(offset);
1839            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
1840                None => return Err(fidl::Error::NotNullable),
1841                Some(len) => len,
1842            };
1843            // Calling decoder.out_of_line_offset(0) is not allowed.
1844            if len == 0 {
1845                return Ok(());
1846            };
1847            depth.increment()?;
1848            let envelope_size = 8;
1849            let bytes_len = len * envelope_size;
1850            let offset = decoder.out_of_line_offset(bytes_len)?;
1851            // Decode the envelope for each type.
1852            let mut _next_ordinal_to_read = 0;
1853            let mut next_offset = offset;
1854            let end_offset = offset + bytes_len;
1855            _next_ordinal_to_read += 1;
1856            if next_offset >= end_offset {
1857                return Ok(());
1858            }
1859
1860            // Decode unknown envelopes for gaps in ordinals.
1861            while _next_ordinal_to_read < 1 {
1862                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1863                _next_ordinal_to_read += 1;
1864                next_offset += envelope_size;
1865            }
1866
1867            let next_out_of_line = decoder.next_out_of_line();
1868            let handles_before = decoder.remaining_handles();
1869            if let Some((inlined, num_bytes, num_handles)) =
1870                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1871            {
1872                let member_inline_size =
1873                    <fidl::encoding::Vector<u8, 4096> as fidl::encoding::TypeMarker>::inline_size(
1874                        decoder.context,
1875                    );
1876                if inlined != (member_inline_size <= 4) {
1877                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1878                }
1879                let inner_offset;
1880                let mut inner_depth = depth.clone();
1881                if inlined {
1882                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1883                    inner_offset = next_offset;
1884                } else {
1885                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1886                    inner_depth.increment()?;
1887                }
1888                let val_ref = self
1889                    .data
1890                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u8, 4096>, D));
1891                fidl::decode!(fidl::encoding::Vector<u8, 4096>, D, val_ref, decoder, inner_offset, inner_depth)?;
1892                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1893                {
1894                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1895                }
1896                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1897                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1898                }
1899            }
1900
1901            next_offset += envelope_size;
1902
1903            // Decode the remaining unknown envelopes.
1904            while next_offset < end_offset {
1905                _next_ordinal_to_read += 1;
1906                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1907                next_offset += envelope_size;
1908            }
1909
1910            Ok(())
1911        }
1912    }
1913
1914    impl DataChannelGetIdentifierResponse {
1915        #[inline(always)]
1916        fn max_ordinal_present(&self) -> u64 {
1917            if let Some(_) = self.name {
1918                return 1;
1919            }
1920            0
1921        }
1922    }
1923
1924    impl fidl::encoding::ValueTypeMarker for DataChannelGetIdentifierResponse {
1925        type Borrowed<'a> = &'a Self;
1926        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1927            value
1928        }
1929    }
1930
1931    unsafe impl fidl::encoding::TypeMarker for DataChannelGetIdentifierResponse {
1932        type Owned = Self;
1933
1934        #[inline(always)]
1935        fn inline_align(_context: fidl::encoding::Context) -> usize {
1936            8
1937        }
1938
1939        #[inline(always)]
1940        fn inline_size(_context: fidl::encoding::Context) -> usize {
1941            16
1942        }
1943    }
1944
1945    unsafe impl<D: fidl::encoding::ResourceDialect>
1946        fidl::encoding::Encode<DataChannelGetIdentifierResponse, D>
1947        for &DataChannelGetIdentifierResponse
1948    {
1949        unsafe fn encode(
1950            self,
1951            encoder: &mut fidl::encoding::Encoder<'_, D>,
1952            offset: usize,
1953            mut depth: fidl::encoding::Depth,
1954        ) -> fidl::Result<()> {
1955            encoder.debug_check_bounds::<DataChannelGetIdentifierResponse>(offset);
1956            // Vector header
1957            let max_ordinal: u64 = self.max_ordinal_present();
1958            encoder.write_num(max_ordinal, offset);
1959            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
1960            // Calling encoder.out_of_line_offset(0) is not allowed.
1961            if max_ordinal == 0 {
1962                return Ok(());
1963            }
1964            depth.increment()?;
1965            let envelope_size = 8;
1966            let bytes_len = max_ordinal as usize * envelope_size;
1967            #[allow(unused_variables)]
1968            let offset = encoder.out_of_line_offset(bytes_len);
1969            let mut _prev_end_offset: usize = 0;
1970            if 1 > max_ordinal {
1971                return Ok(());
1972            }
1973
1974            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1975            // are envelope_size bytes.
1976            let cur_offset: usize = (1 - 1) * envelope_size;
1977
1978            // Zero reserved fields.
1979            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1980
1981            // Safety:
1982            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1983            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1984            //   envelope_size bytes, there is always sufficient room.
1985            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<100>, D>(
1986                self.name.as_ref().map(
1987                    <fidl::encoding::BoundedString<100> as fidl::encoding::ValueTypeMarker>::borrow,
1988                ),
1989                encoder,
1990                offset + cur_offset,
1991                depth,
1992            )?;
1993
1994            _prev_end_offset = cur_offset + envelope_size;
1995
1996            Ok(())
1997        }
1998    }
1999
2000    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2001        for DataChannelGetIdentifierResponse
2002    {
2003        #[inline(always)]
2004        fn new_empty() -> Self {
2005            Self::default()
2006        }
2007
2008        unsafe fn decode(
2009            &mut self,
2010            decoder: &mut fidl::encoding::Decoder<'_, D>,
2011            offset: usize,
2012            mut depth: fidl::encoding::Depth,
2013        ) -> fidl::Result<()> {
2014            decoder.debug_check_bounds::<Self>(offset);
2015            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
2016                None => return Err(fidl::Error::NotNullable),
2017                Some(len) => len,
2018            };
2019            // Calling decoder.out_of_line_offset(0) is not allowed.
2020            if len == 0 {
2021                return Ok(());
2022            };
2023            depth.increment()?;
2024            let envelope_size = 8;
2025            let bytes_len = len * envelope_size;
2026            let offset = decoder.out_of_line_offset(bytes_len)?;
2027            // Decode the envelope for each type.
2028            let mut _next_ordinal_to_read = 0;
2029            let mut next_offset = offset;
2030            let end_offset = offset + bytes_len;
2031            _next_ordinal_to_read += 1;
2032            if next_offset >= end_offset {
2033                return Ok(());
2034            }
2035
2036            // Decode unknown envelopes for gaps in ordinals.
2037            while _next_ordinal_to_read < 1 {
2038                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2039                _next_ordinal_to_read += 1;
2040                next_offset += envelope_size;
2041            }
2042
2043            let next_out_of_line = decoder.next_out_of_line();
2044            let handles_before = decoder.remaining_handles();
2045            if let Some((inlined, num_bytes, num_handles)) =
2046                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2047            {
2048                let member_inline_size =
2049                    <fidl::encoding::BoundedString<100> as fidl::encoding::TypeMarker>::inline_size(
2050                        decoder.context,
2051                    );
2052                if inlined != (member_inline_size <= 4) {
2053                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2054                }
2055                let inner_offset;
2056                let mut inner_depth = depth.clone();
2057                if inlined {
2058                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2059                    inner_offset = next_offset;
2060                } else {
2061                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2062                    inner_depth.increment()?;
2063                }
2064                let val_ref = self
2065                    .name
2066                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<100>, D));
2067                fidl::decode!(
2068                    fidl::encoding::BoundedString<100>,
2069                    D,
2070                    val_ref,
2071                    decoder,
2072                    inner_offset,
2073                    inner_depth
2074                )?;
2075                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2076                {
2077                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2078                }
2079                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2080                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2081                }
2082            }
2083
2084            next_offset += envelope_size;
2085
2086            // Decode the remaining unknown envelopes.
2087            while next_offset < end_offset {
2088                _next_ordinal_to_read += 1;
2089                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2090                next_offset += envelope_size;
2091            }
2092
2093            Ok(())
2094        }
2095    }
2096
2097    impl DisplayDeviceSetDisplaySelectRequest {
2098        #[inline(always)]
2099        fn max_ordinal_present(&self) -> u64 {
2100            if let Some(_) = self.display_select {
2101                return 1;
2102            }
2103            0
2104        }
2105    }
2106
2107    impl fidl::encoding::ValueTypeMarker for DisplayDeviceSetDisplaySelectRequest {
2108        type Borrowed<'a> = &'a Self;
2109        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2110            value
2111        }
2112    }
2113
2114    unsafe impl fidl::encoding::TypeMarker for DisplayDeviceSetDisplaySelectRequest {
2115        type Owned = Self;
2116
2117        #[inline(always)]
2118        fn inline_align(_context: fidl::encoding::Context) -> usize {
2119            8
2120        }
2121
2122        #[inline(always)]
2123        fn inline_size(_context: fidl::encoding::Context) -> usize {
2124            16
2125        }
2126    }
2127
2128    unsafe impl<D: fidl::encoding::ResourceDialect>
2129        fidl::encoding::Encode<DisplayDeviceSetDisplaySelectRequest, D>
2130        for &DisplayDeviceSetDisplaySelectRequest
2131    {
2132        unsafe fn encode(
2133            self,
2134            encoder: &mut fidl::encoding::Encoder<'_, D>,
2135            offset: usize,
2136            mut depth: fidl::encoding::Depth,
2137        ) -> fidl::Result<()> {
2138            encoder.debug_check_bounds::<DisplayDeviceSetDisplaySelectRequest>(offset);
2139            // Vector header
2140            let max_ordinal: u64 = self.max_ordinal_present();
2141            encoder.write_num(max_ordinal, offset);
2142            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
2143            // Calling encoder.out_of_line_offset(0) is not allowed.
2144            if max_ordinal == 0 {
2145                return Ok(());
2146            }
2147            depth.increment()?;
2148            let envelope_size = 8;
2149            let bytes_len = max_ordinal as usize * envelope_size;
2150            #[allow(unused_variables)]
2151            let offset = encoder.out_of_line_offset(bytes_len);
2152            let mut _prev_end_offset: usize = 0;
2153            if 1 > max_ordinal {
2154                return Ok(());
2155            }
2156
2157            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2158            // are envelope_size bytes.
2159            let cur_offset: usize = (1 - 1) * envelope_size;
2160
2161            // Zero reserved fields.
2162            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2163
2164            // Safety:
2165            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2166            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2167            //   envelope_size bytes, there is always sufficient room.
2168            fidl::encoding::encode_in_envelope_optional::<DisplaySelect, D>(
2169                self.display_select
2170                    .as_ref()
2171                    .map(<DisplaySelect as fidl::encoding::ValueTypeMarker>::borrow),
2172                encoder,
2173                offset + cur_offset,
2174                depth,
2175            )?;
2176
2177            _prev_end_offset = cur_offset + envelope_size;
2178
2179            Ok(())
2180        }
2181    }
2182
2183    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2184        for DisplayDeviceSetDisplaySelectRequest
2185    {
2186        #[inline(always)]
2187        fn new_empty() -> Self {
2188            Self::default()
2189        }
2190
2191        unsafe fn decode(
2192            &mut self,
2193            decoder: &mut fidl::encoding::Decoder<'_, D>,
2194            offset: usize,
2195            mut depth: fidl::encoding::Depth,
2196        ) -> fidl::Result<()> {
2197            decoder.debug_check_bounds::<Self>(offset);
2198            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
2199                None => return Err(fidl::Error::NotNullable),
2200                Some(len) => len,
2201            };
2202            // Calling decoder.out_of_line_offset(0) is not allowed.
2203            if len == 0 {
2204                return Ok(());
2205            };
2206            depth.increment()?;
2207            let envelope_size = 8;
2208            let bytes_len = len * envelope_size;
2209            let offset = decoder.out_of_line_offset(bytes_len)?;
2210            // Decode the envelope for each type.
2211            let mut _next_ordinal_to_read = 0;
2212            let mut next_offset = offset;
2213            let end_offset = offset + bytes_len;
2214            _next_ordinal_to_read += 1;
2215            if next_offset >= end_offset {
2216                return Ok(());
2217            }
2218
2219            // Decode unknown envelopes for gaps in ordinals.
2220            while _next_ordinal_to_read < 1 {
2221                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2222                _next_ordinal_to_read += 1;
2223                next_offset += envelope_size;
2224            }
2225
2226            let next_out_of_line = decoder.next_out_of_line();
2227            let handles_before = decoder.remaining_handles();
2228            if let Some((inlined, num_bytes, num_handles)) =
2229                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2230            {
2231                let member_inline_size =
2232                    <DisplaySelect as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2233                if inlined != (member_inline_size <= 4) {
2234                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2235                }
2236                let inner_offset;
2237                let mut inner_depth = depth.clone();
2238                if inlined {
2239                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2240                    inner_offset = next_offset;
2241                } else {
2242                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2243                    inner_depth.increment()?;
2244                }
2245                let val_ref =
2246                    self.display_select.get_or_insert_with(|| fidl::new_empty!(DisplaySelect, D));
2247                fidl::decode!(DisplaySelect, D, val_ref, decoder, inner_offset, inner_depth)?;
2248                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2249                {
2250                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2251                }
2252                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2253                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2254                }
2255            }
2256
2257            next_offset += envelope_size;
2258
2259            // Decode the remaining unknown envelopes.
2260            while next_offset < end_offset {
2261                _next_ordinal_to_read += 1;
2262                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2263                next_offset += envelope_size;
2264            }
2265
2266            Ok(())
2267        }
2268    }
2269
2270    impl DisplayDeviceGetDisplaySelectResponse {
2271        #[inline(always)]
2272        fn max_ordinal_present(&self) -> u64 {
2273            if let Some(_) = self.display_select {
2274                return 1;
2275            }
2276            0
2277        }
2278    }
2279
2280    impl fidl::encoding::ValueTypeMarker for DisplayDeviceGetDisplaySelectResponse {
2281        type Borrowed<'a> = &'a Self;
2282        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2283            value
2284        }
2285    }
2286
2287    unsafe impl fidl::encoding::TypeMarker for DisplayDeviceGetDisplaySelectResponse {
2288        type Owned = Self;
2289
2290        #[inline(always)]
2291        fn inline_align(_context: fidl::encoding::Context) -> usize {
2292            8
2293        }
2294
2295        #[inline(always)]
2296        fn inline_size(_context: fidl::encoding::Context) -> usize {
2297            16
2298        }
2299    }
2300
2301    unsafe impl<D: fidl::encoding::ResourceDialect>
2302        fidl::encoding::Encode<DisplayDeviceGetDisplaySelectResponse, D>
2303        for &DisplayDeviceGetDisplaySelectResponse
2304    {
2305        unsafe fn encode(
2306            self,
2307            encoder: &mut fidl::encoding::Encoder<'_, D>,
2308            offset: usize,
2309            mut depth: fidl::encoding::Depth,
2310        ) -> fidl::Result<()> {
2311            encoder.debug_check_bounds::<DisplayDeviceGetDisplaySelectResponse>(offset);
2312            // Vector header
2313            let max_ordinal: u64 = self.max_ordinal_present();
2314            encoder.write_num(max_ordinal, offset);
2315            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
2316            // Calling encoder.out_of_line_offset(0) is not allowed.
2317            if max_ordinal == 0 {
2318                return Ok(());
2319            }
2320            depth.increment()?;
2321            let envelope_size = 8;
2322            let bytes_len = max_ordinal as usize * envelope_size;
2323            #[allow(unused_variables)]
2324            let offset = encoder.out_of_line_offset(bytes_len);
2325            let mut _prev_end_offset: usize = 0;
2326            if 1 > max_ordinal {
2327                return Ok(());
2328            }
2329
2330            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2331            // are envelope_size bytes.
2332            let cur_offset: usize = (1 - 1) * envelope_size;
2333
2334            // Zero reserved fields.
2335            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2336
2337            // Safety:
2338            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2339            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2340            //   envelope_size bytes, there is always sufficient room.
2341            fidl::encoding::encode_in_envelope_optional::<DisplaySelect, D>(
2342                self.display_select
2343                    .as_ref()
2344                    .map(<DisplaySelect as fidl::encoding::ValueTypeMarker>::borrow),
2345                encoder,
2346                offset + cur_offset,
2347                depth,
2348            )?;
2349
2350            _prev_end_offset = cur_offset + envelope_size;
2351
2352            Ok(())
2353        }
2354    }
2355
2356    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2357        for DisplayDeviceGetDisplaySelectResponse
2358    {
2359        #[inline(always)]
2360        fn new_empty() -> Self {
2361            Self::default()
2362        }
2363
2364        unsafe fn decode(
2365            &mut self,
2366            decoder: &mut fidl::encoding::Decoder<'_, D>,
2367            offset: usize,
2368            mut depth: fidl::encoding::Depth,
2369        ) -> fidl::Result<()> {
2370            decoder.debug_check_bounds::<Self>(offset);
2371            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
2372                None => return Err(fidl::Error::NotNullable),
2373                Some(len) => len,
2374            };
2375            // Calling decoder.out_of_line_offset(0) is not allowed.
2376            if len == 0 {
2377                return Ok(());
2378            };
2379            depth.increment()?;
2380            let envelope_size = 8;
2381            let bytes_len = len * envelope_size;
2382            let offset = decoder.out_of_line_offset(bytes_len)?;
2383            // Decode the envelope for each type.
2384            let mut _next_ordinal_to_read = 0;
2385            let mut next_offset = offset;
2386            let end_offset = offset + bytes_len;
2387            _next_ordinal_to_read += 1;
2388            if next_offset >= end_offset {
2389                return Ok(());
2390            }
2391
2392            // Decode unknown envelopes for gaps in ordinals.
2393            while _next_ordinal_to_read < 1 {
2394                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2395                _next_ordinal_to_read += 1;
2396                next_offset += envelope_size;
2397            }
2398
2399            let next_out_of_line = decoder.next_out_of_line();
2400            let handles_before = decoder.remaining_handles();
2401            if let Some((inlined, num_bytes, num_handles)) =
2402                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2403            {
2404                let member_inline_size =
2405                    <DisplaySelect as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2406                if inlined != (member_inline_size <= 4) {
2407                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2408                }
2409                let inner_offset;
2410                let mut inner_depth = depth.clone();
2411                if inlined {
2412                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2413                    inner_offset = next_offset;
2414                } else {
2415                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2416                    inner_depth.increment()?;
2417                }
2418                let val_ref =
2419                    self.display_select.get_or_insert_with(|| fidl::new_empty!(DisplaySelect, D));
2420                fidl::decode!(DisplaySelect, D, val_ref, decoder, inner_offset, inner_depth)?;
2421                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2422                {
2423                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2424                }
2425                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2426                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2427                }
2428            }
2429
2430            next_offset += envelope_size;
2431
2432            // Decode the remaining unknown envelopes.
2433            while next_offset < end_offset {
2434                _next_ordinal_to_read += 1;
2435                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2436                next_offset += envelope_size;
2437            }
2438
2439            Ok(())
2440        }
2441    }
2442
2443    impl DisplayState {
2444        #[inline(always)]
2445        fn max_ordinal_present(&self) -> u64 {
2446            if let Some(_) = self.mode {
2447                return 1;
2448            }
2449            0
2450        }
2451    }
2452
2453    impl fidl::encoding::ValueTypeMarker for DisplayState {
2454        type Borrowed<'a> = &'a Self;
2455        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2456            value
2457        }
2458    }
2459
2460    unsafe impl fidl::encoding::TypeMarker for DisplayState {
2461        type Owned = Self;
2462
2463        #[inline(always)]
2464        fn inline_align(_context: fidl::encoding::Context) -> usize {
2465            8
2466        }
2467
2468        #[inline(always)]
2469        fn inline_size(_context: fidl::encoding::Context) -> usize {
2470            16
2471        }
2472    }
2473
2474    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<DisplayState, D>
2475        for &DisplayState
2476    {
2477        unsafe fn encode(
2478            self,
2479            encoder: &mut fidl::encoding::Encoder<'_, D>,
2480            offset: usize,
2481            mut depth: fidl::encoding::Depth,
2482        ) -> fidl::Result<()> {
2483            encoder.debug_check_bounds::<DisplayState>(offset);
2484            // Vector header
2485            let max_ordinal: u64 = self.max_ordinal_present();
2486            encoder.write_num(max_ordinal, offset);
2487            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
2488            // Calling encoder.out_of_line_offset(0) is not allowed.
2489            if max_ordinal == 0 {
2490                return Ok(());
2491            }
2492            depth.increment()?;
2493            let envelope_size = 8;
2494            let bytes_len = max_ordinal as usize * envelope_size;
2495            #[allow(unused_variables)]
2496            let offset = encoder.out_of_line_offset(bytes_len);
2497            let mut _prev_end_offset: usize = 0;
2498            if 1 > max_ordinal {
2499                return Ok(());
2500            }
2501
2502            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2503            // are envelope_size bytes.
2504            let cur_offset: usize = (1 - 1) * envelope_size;
2505
2506            // Zero reserved fields.
2507            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2508
2509            // Safety:
2510            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2511            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2512            //   envelope_size bytes, there is always sufficient room.
2513            fidl::encoding::encode_in_envelope_optional::<DisplayMode, D>(
2514                self.mode.as_ref().map(<DisplayMode as fidl::encoding::ValueTypeMarker>::borrow),
2515                encoder,
2516                offset + cur_offset,
2517                depth,
2518            )?;
2519
2520            _prev_end_offset = cur_offset + envelope_size;
2521
2522            Ok(())
2523        }
2524    }
2525
2526    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DisplayState {
2527        #[inline(always)]
2528        fn new_empty() -> Self {
2529            Self::default()
2530        }
2531
2532        unsafe fn decode(
2533            &mut self,
2534            decoder: &mut fidl::encoding::Decoder<'_, D>,
2535            offset: usize,
2536            mut depth: fidl::encoding::Depth,
2537        ) -> fidl::Result<()> {
2538            decoder.debug_check_bounds::<Self>(offset);
2539            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
2540                None => return Err(fidl::Error::NotNullable),
2541                Some(len) => len,
2542            };
2543            // Calling decoder.out_of_line_offset(0) is not allowed.
2544            if len == 0 {
2545                return Ok(());
2546            };
2547            depth.increment()?;
2548            let envelope_size = 8;
2549            let bytes_len = len * envelope_size;
2550            let offset = decoder.out_of_line_offset(bytes_len)?;
2551            // Decode the envelope for each type.
2552            let mut _next_ordinal_to_read = 0;
2553            let mut next_offset = offset;
2554            let end_offset = offset + bytes_len;
2555            _next_ordinal_to_read += 1;
2556            if next_offset >= end_offset {
2557                return Ok(());
2558            }
2559
2560            // Decode unknown envelopes for gaps in ordinals.
2561            while _next_ordinal_to_read < 1 {
2562                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2563                _next_ordinal_to_read += 1;
2564                next_offset += envelope_size;
2565            }
2566
2567            let next_out_of_line = decoder.next_out_of_line();
2568            let handles_before = decoder.remaining_handles();
2569            if let Some((inlined, num_bytes, num_handles)) =
2570                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2571            {
2572                let member_inline_size =
2573                    <DisplayMode as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2574                if inlined != (member_inline_size <= 4) {
2575                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2576                }
2577                let inner_offset;
2578                let mut inner_depth = depth.clone();
2579                if inlined {
2580                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2581                    inner_offset = next_offset;
2582                } else {
2583                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2584                    inner_depth.increment()?;
2585                }
2586                let val_ref = self.mode.get_or_insert_with(|| fidl::new_empty!(DisplayMode, D));
2587                fidl::decode!(DisplayMode, D, val_ref, decoder, inner_offset, inner_depth)?;
2588                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2589                {
2590                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2591                }
2592                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2593                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2594                }
2595            }
2596
2597            next_offset += envelope_size;
2598
2599            // Decode the remaining unknown envelopes.
2600            while next_offset < end_offset {
2601                _next_ordinal_to_read += 1;
2602                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2603                next_offset += envelope_size;
2604            }
2605
2606            Ok(())
2607        }
2608    }
2609
2610    impl DisplaySyncInfo {
2611        #[inline(always)]
2612        fn max_ordinal_present(&self) -> u64 {
2613            if let Some(_) = self.always_on_display_brightness {
2614                return 4;
2615            }
2616            if let Some(_) = self.normal_brightness {
2617                return 3;
2618            }
2619            if let Some(_) = self.panel_mode {
2620                return 2;
2621            }
2622            if let Some(_) = self.display_mode {
2623                return 1;
2624            }
2625            0
2626        }
2627    }
2628
2629    impl fidl::encoding::ValueTypeMarker for DisplaySyncInfo {
2630        type Borrowed<'a> = &'a Self;
2631        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2632            value
2633        }
2634    }
2635
2636    unsafe impl fidl::encoding::TypeMarker for DisplaySyncInfo {
2637        type Owned = Self;
2638
2639        #[inline(always)]
2640        fn inline_align(_context: fidl::encoding::Context) -> usize {
2641            8
2642        }
2643
2644        #[inline(always)]
2645        fn inline_size(_context: fidl::encoding::Context) -> usize {
2646            16
2647        }
2648    }
2649
2650    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<DisplaySyncInfo, D>
2651        for &DisplaySyncInfo
2652    {
2653        unsafe fn encode(
2654            self,
2655            encoder: &mut fidl::encoding::Encoder<'_, D>,
2656            offset: usize,
2657            mut depth: fidl::encoding::Depth,
2658        ) -> fidl::Result<()> {
2659            encoder.debug_check_bounds::<DisplaySyncInfo>(offset);
2660            // Vector header
2661            let max_ordinal: u64 = self.max_ordinal_present();
2662            encoder.write_num(max_ordinal, offset);
2663            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
2664            // Calling encoder.out_of_line_offset(0) is not allowed.
2665            if max_ordinal == 0 {
2666                return Ok(());
2667            }
2668            depth.increment()?;
2669            let envelope_size = 8;
2670            let bytes_len = max_ordinal as usize * envelope_size;
2671            #[allow(unused_variables)]
2672            let offset = encoder.out_of_line_offset(bytes_len);
2673            let mut _prev_end_offset: usize = 0;
2674            if 1 > max_ordinal {
2675                return Ok(());
2676            }
2677
2678            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2679            // are envelope_size bytes.
2680            let cur_offset: usize = (1 - 1) * envelope_size;
2681
2682            // Zero reserved fields.
2683            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2684
2685            // Safety:
2686            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2687            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2688            //   envelope_size bytes, there is always sufficient room.
2689            fidl::encoding::encode_in_envelope_optional::<DisplayMode, D>(
2690                self.display_mode
2691                    .as_ref()
2692                    .map(<DisplayMode as fidl::encoding::ValueTypeMarker>::borrow),
2693                encoder,
2694                offset + cur_offset,
2695                depth,
2696            )?;
2697
2698            _prev_end_offset = cur_offset + envelope_size;
2699            if 2 > max_ordinal {
2700                return Ok(());
2701            }
2702
2703            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2704            // are envelope_size bytes.
2705            let cur_offset: usize = (2 - 1) * envelope_size;
2706
2707            // Zero reserved fields.
2708            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2709
2710            // Safety:
2711            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2712            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2713            //   envelope_size bytes, there is always sufficient room.
2714            fidl::encoding::encode_in_envelope_optional::<u8, D>(
2715                self.panel_mode.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
2716                encoder,
2717                offset + cur_offset,
2718                depth,
2719            )?;
2720
2721            _prev_end_offset = cur_offset + envelope_size;
2722            if 3 > max_ordinal {
2723                return Ok(());
2724            }
2725
2726            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2727            // are envelope_size bytes.
2728            let cur_offset: usize = (3 - 1) * envelope_size;
2729
2730            // Zero reserved fields.
2731            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2732
2733            // Safety:
2734            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2735            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2736            //   envelope_size bytes, there is always sufficient room.
2737            fidl::encoding::encode_in_envelope_optional::<u16, D>(
2738                self.normal_brightness
2739                    .as_ref()
2740                    .map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
2741                encoder,
2742                offset + cur_offset,
2743                depth,
2744            )?;
2745
2746            _prev_end_offset = cur_offset + envelope_size;
2747            if 4 > max_ordinal {
2748                return Ok(());
2749            }
2750
2751            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2752            // are envelope_size bytes.
2753            let cur_offset: usize = (4 - 1) * envelope_size;
2754
2755            // Zero reserved fields.
2756            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2757
2758            // Safety:
2759            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2760            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2761            //   envelope_size bytes, there is always sufficient room.
2762            fidl::encoding::encode_in_envelope_optional::<u16, D>(
2763                self.always_on_display_brightness
2764                    .as_ref()
2765                    .map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
2766                encoder,
2767                offset + cur_offset,
2768                depth,
2769            )?;
2770
2771            _prev_end_offset = cur_offset + envelope_size;
2772
2773            Ok(())
2774        }
2775    }
2776
2777    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DisplaySyncInfo {
2778        #[inline(always)]
2779        fn new_empty() -> Self {
2780            Self::default()
2781        }
2782
2783        unsafe fn decode(
2784            &mut self,
2785            decoder: &mut fidl::encoding::Decoder<'_, D>,
2786            offset: usize,
2787            mut depth: fidl::encoding::Depth,
2788        ) -> fidl::Result<()> {
2789            decoder.debug_check_bounds::<Self>(offset);
2790            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
2791                None => return Err(fidl::Error::NotNullable),
2792                Some(len) => len,
2793            };
2794            // Calling decoder.out_of_line_offset(0) is not allowed.
2795            if len == 0 {
2796                return Ok(());
2797            };
2798            depth.increment()?;
2799            let envelope_size = 8;
2800            let bytes_len = len * envelope_size;
2801            let offset = decoder.out_of_line_offset(bytes_len)?;
2802            // Decode the envelope for each type.
2803            let mut _next_ordinal_to_read = 0;
2804            let mut next_offset = offset;
2805            let end_offset = offset + bytes_len;
2806            _next_ordinal_to_read += 1;
2807            if next_offset >= end_offset {
2808                return Ok(());
2809            }
2810
2811            // Decode unknown envelopes for gaps in ordinals.
2812            while _next_ordinal_to_read < 1 {
2813                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2814                _next_ordinal_to_read += 1;
2815                next_offset += envelope_size;
2816            }
2817
2818            let next_out_of_line = decoder.next_out_of_line();
2819            let handles_before = decoder.remaining_handles();
2820            if let Some((inlined, num_bytes, num_handles)) =
2821                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2822            {
2823                let member_inline_size =
2824                    <DisplayMode as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2825                if inlined != (member_inline_size <= 4) {
2826                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2827                }
2828                let inner_offset;
2829                let mut inner_depth = depth.clone();
2830                if inlined {
2831                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2832                    inner_offset = next_offset;
2833                } else {
2834                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2835                    inner_depth.increment()?;
2836                }
2837                let val_ref =
2838                    self.display_mode.get_or_insert_with(|| fidl::new_empty!(DisplayMode, D));
2839                fidl::decode!(DisplayMode, D, val_ref, decoder, inner_offset, inner_depth)?;
2840                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2841                {
2842                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2843                }
2844                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2845                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2846                }
2847            }
2848
2849            next_offset += envelope_size;
2850            _next_ordinal_to_read += 1;
2851            if next_offset >= end_offset {
2852                return Ok(());
2853            }
2854
2855            // Decode unknown envelopes for gaps in ordinals.
2856            while _next_ordinal_to_read < 2 {
2857                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2858                _next_ordinal_to_read += 1;
2859                next_offset += envelope_size;
2860            }
2861
2862            let next_out_of_line = decoder.next_out_of_line();
2863            let handles_before = decoder.remaining_handles();
2864            if let Some((inlined, num_bytes, num_handles)) =
2865                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2866            {
2867                let member_inline_size =
2868                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2869                if inlined != (member_inline_size <= 4) {
2870                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2871                }
2872                let inner_offset;
2873                let mut inner_depth = depth.clone();
2874                if inlined {
2875                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2876                    inner_offset = next_offset;
2877                } else {
2878                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2879                    inner_depth.increment()?;
2880                }
2881                let val_ref = self.panel_mode.get_or_insert_with(|| fidl::new_empty!(u8, D));
2882                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
2883                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2884                {
2885                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2886                }
2887                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2888                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2889                }
2890            }
2891
2892            next_offset += envelope_size;
2893            _next_ordinal_to_read += 1;
2894            if next_offset >= end_offset {
2895                return Ok(());
2896            }
2897
2898            // Decode unknown envelopes for gaps in ordinals.
2899            while _next_ordinal_to_read < 3 {
2900                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2901                _next_ordinal_to_read += 1;
2902                next_offset += envelope_size;
2903            }
2904
2905            let next_out_of_line = decoder.next_out_of_line();
2906            let handles_before = decoder.remaining_handles();
2907            if let Some((inlined, num_bytes, num_handles)) =
2908                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2909            {
2910                let member_inline_size =
2911                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2912                if inlined != (member_inline_size <= 4) {
2913                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2914                }
2915                let inner_offset;
2916                let mut inner_depth = depth.clone();
2917                if inlined {
2918                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2919                    inner_offset = next_offset;
2920                } else {
2921                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2922                    inner_depth.increment()?;
2923                }
2924                let val_ref =
2925                    self.normal_brightness.get_or_insert_with(|| fidl::new_empty!(u16, D));
2926                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
2927                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2928                {
2929                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2930                }
2931                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2932                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2933                }
2934            }
2935
2936            next_offset += envelope_size;
2937            _next_ordinal_to_read += 1;
2938            if next_offset >= end_offset {
2939                return Ok(());
2940            }
2941
2942            // Decode unknown envelopes for gaps in ordinals.
2943            while _next_ordinal_to_read < 4 {
2944                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2945                _next_ordinal_to_read += 1;
2946                next_offset += envelope_size;
2947            }
2948
2949            let next_out_of_line = decoder.next_out_of_line();
2950            let handles_before = decoder.remaining_handles();
2951            if let Some((inlined, num_bytes, num_handles)) =
2952                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2953            {
2954                let member_inline_size =
2955                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2956                if inlined != (member_inline_size <= 4) {
2957                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2958                }
2959                let inner_offset;
2960                let mut inner_depth = depth.clone();
2961                if inlined {
2962                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2963                    inner_offset = next_offset;
2964                } else {
2965                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2966                    inner_depth.increment()?;
2967                }
2968                let val_ref = self
2969                    .always_on_display_brightness
2970                    .get_or_insert_with(|| fidl::new_empty!(u16, D));
2971                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
2972                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2973                {
2974                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2975                }
2976                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2977                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2978                }
2979            }
2980
2981            next_offset += envelope_size;
2982
2983            // Decode the remaining unknown envelopes.
2984            while next_offset < end_offset {
2985                _next_ordinal_to_read += 1;
2986                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2987                next_offset += envelope_size;
2988            }
2989
2990            Ok(())
2991        }
2992    }
2993
2994    impl McuTimeSyncInfo {
2995        #[inline(always)]
2996        fn max_ordinal_present(&self) -> u64 {
2997            if let Some(_) = self.mcu_boot_time {
2998                return 2;
2999            }
3000            if let Some(_) = self.ap_boot_time {
3001                return 1;
3002            }
3003            0
3004        }
3005    }
3006
3007    impl fidl::encoding::ValueTypeMarker for McuTimeSyncInfo {
3008        type Borrowed<'a> = &'a Self;
3009        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3010            value
3011        }
3012    }
3013
3014    unsafe impl fidl::encoding::TypeMarker for McuTimeSyncInfo {
3015        type Owned = Self;
3016
3017        #[inline(always)]
3018        fn inline_align(_context: fidl::encoding::Context) -> usize {
3019            8
3020        }
3021
3022        #[inline(always)]
3023        fn inline_size(_context: fidl::encoding::Context) -> usize {
3024            16
3025        }
3026    }
3027
3028    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<McuTimeSyncInfo, D>
3029        for &McuTimeSyncInfo
3030    {
3031        unsafe fn encode(
3032            self,
3033            encoder: &mut fidl::encoding::Encoder<'_, D>,
3034            offset: usize,
3035            mut depth: fidl::encoding::Depth,
3036        ) -> fidl::Result<()> {
3037            encoder.debug_check_bounds::<McuTimeSyncInfo>(offset);
3038            // Vector header
3039            let max_ordinal: u64 = self.max_ordinal_present();
3040            encoder.write_num(max_ordinal, offset);
3041            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
3042            // Calling encoder.out_of_line_offset(0) is not allowed.
3043            if max_ordinal == 0 {
3044                return Ok(());
3045            }
3046            depth.increment()?;
3047            let envelope_size = 8;
3048            let bytes_len = max_ordinal as usize * envelope_size;
3049            #[allow(unused_variables)]
3050            let offset = encoder.out_of_line_offset(bytes_len);
3051            let mut _prev_end_offset: usize = 0;
3052            if 1 > max_ordinal {
3053                return Ok(());
3054            }
3055
3056            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3057            // are envelope_size bytes.
3058            let cur_offset: usize = (1 - 1) * envelope_size;
3059
3060            // Zero reserved fields.
3061            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3062
3063            // Safety:
3064            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3065            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3066            //   envelope_size bytes, there is always sufficient room.
3067            fidl::encoding::encode_in_envelope_optional::<i64, D>(
3068                self.ap_boot_time.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
3069                encoder,
3070                offset + cur_offset,
3071                depth,
3072            )?;
3073
3074            _prev_end_offset = cur_offset + envelope_size;
3075            if 2 > max_ordinal {
3076                return Ok(());
3077            }
3078
3079            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3080            // are envelope_size bytes.
3081            let cur_offset: usize = (2 - 1) * envelope_size;
3082
3083            // Zero reserved fields.
3084            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3085
3086            // Safety:
3087            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3088            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3089            //   envelope_size bytes, there is always sufficient room.
3090            fidl::encoding::encode_in_envelope_optional::<i64, D>(
3091                self.mcu_boot_time.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
3092                encoder,
3093                offset + cur_offset,
3094                depth,
3095            )?;
3096
3097            _prev_end_offset = cur_offset + envelope_size;
3098
3099            Ok(())
3100        }
3101    }
3102
3103    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for McuTimeSyncInfo {
3104        #[inline(always)]
3105        fn new_empty() -> Self {
3106            Self::default()
3107        }
3108
3109        unsafe fn decode(
3110            &mut self,
3111            decoder: &mut fidl::encoding::Decoder<'_, D>,
3112            offset: usize,
3113            mut depth: fidl::encoding::Depth,
3114        ) -> fidl::Result<()> {
3115            decoder.debug_check_bounds::<Self>(offset);
3116            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
3117                None => return Err(fidl::Error::NotNullable),
3118                Some(len) => len,
3119            };
3120            // Calling decoder.out_of_line_offset(0) is not allowed.
3121            if len == 0 {
3122                return Ok(());
3123            };
3124            depth.increment()?;
3125            let envelope_size = 8;
3126            let bytes_len = len * envelope_size;
3127            let offset = decoder.out_of_line_offset(bytes_len)?;
3128            // Decode the envelope for each type.
3129            let mut _next_ordinal_to_read = 0;
3130            let mut next_offset = offset;
3131            let end_offset = offset + bytes_len;
3132            _next_ordinal_to_read += 1;
3133            if next_offset >= end_offset {
3134                return Ok(());
3135            }
3136
3137            // Decode unknown envelopes for gaps in ordinals.
3138            while _next_ordinal_to_read < 1 {
3139                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3140                _next_ordinal_to_read += 1;
3141                next_offset += envelope_size;
3142            }
3143
3144            let next_out_of_line = decoder.next_out_of_line();
3145            let handles_before = decoder.remaining_handles();
3146            if let Some((inlined, num_bytes, num_handles)) =
3147                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3148            {
3149                let member_inline_size =
3150                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3151                if inlined != (member_inline_size <= 4) {
3152                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3153                }
3154                let inner_offset;
3155                let mut inner_depth = depth.clone();
3156                if inlined {
3157                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3158                    inner_offset = next_offset;
3159                } else {
3160                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3161                    inner_depth.increment()?;
3162                }
3163                let val_ref = self.ap_boot_time.get_or_insert_with(|| fidl::new_empty!(i64, D));
3164                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
3165                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3166                {
3167                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3168                }
3169                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3170                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3171                }
3172            }
3173
3174            next_offset += envelope_size;
3175            _next_ordinal_to_read += 1;
3176            if next_offset >= end_offset {
3177                return Ok(());
3178            }
3179
3180            // Decode unknown envelopes for gaps in ordinals.
3181            while _next_ordinal_to_read < 2 {
3182                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3183                _next_ordinal_to_read += 1;
3184                next_offset += envelope_size;
3185            }
3186
3187            let next_out_of_line = decoder.next_out_of_line();
3188            let handles_before = decoder.remaining_handles();
3189            if let Some((inlined, num_bytes, num_handles)) =
3190                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3191            {
3192                let member_inline_size =
3193                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3194                if inlined != (member_inline_size <= 4) {
3195                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3196                }
3197                let inner_offset;
3198                let mut inner_depth = depth.clone();
3199                if inlined {
3200                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3201                    inner_offset = next_offset;
3202                } else {
3203                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3204                    inner_depth.increment()?;
3205                }
3206                let val_ref = self.mcu_boot_time.get_or_insert_with(|| fidl::new_empty!(i64, D));
3207                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
3208                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3209                {
3210                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3211                }
3212                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3213                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3214                }
3215            }
3216
3217            next_offset += envelope_size;
3218
3219            // Decode the remaining unknown envelopes.
3220            while next_offset < end_offset {
3221                _next_ordinal_to_read += 1;
3222                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3223                next_offset += envelope_size;
3224            }
3225
3226            Ok(())
3227        }
3228    }
3229}