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_SIZE: u32 = 100;
14
15/// Maximum sized message that is supported
16pub const MAX_MESSAGE_SIZE: u32 = 255;
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.
116    Mcu,
117    /// The AP (Application Processor) has control of the display.
118    Ap,
119    #[doc(hidden)]
120    __SourceBreaking { unknown_ordinal: i64 },
121}
122
123/// Pattern that matches an unknown `DisplaySelect` member.
124#[macro_export]
125macro_rules! DisplaySelectUnknown {
126    () => {
127        _
128    };
129}
130
131impl DisplaySelect {
132    #[inline]
133    pub fn from_primitive(prim: i64) -> Option<Self> {
134        match prim {
135            0 => Some(Self::Mcu),
136            1 => Some(Self::Ap),
137            _ => None,
138        }
139    }
140
141    #[inline]
142    pub fn from_primitive_allow_unknown(prim: i64) -> Self {
143        match prim {
144            0 => Self::Mcu,
145            1 => Self::Ap,
146            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
147        }
148    }
149
150    #[inline]
151    pub fn unknown() -> Self {
152        Self::__SourceBreaking { unknown_ordinal: 0x7fffffffffffffff }
153    }
154
155    #[inline]
156    pub const fn into_primitive(self) -> i64 {
157        match self {
158            Self::Mcu => 0,
159            Self::Ap => 1,
160            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
161        }
162    }
163
164    #[inline]
165    pub fn is_unknown(&self) -> bool {
166        match self {
167            Self::__SourceBreaking { unknown_ordinal: _ } => true,
168            _ => false,
169        }
170    }
171}
172
173/// Events related to the lifecycle of the MCU.
174#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
175pub enum LifecycleEvent {
176    /// Indicates the MCU is not currently configured.
177    Unconfigured,
178    /// Indicates the MCU is starting up.
179    Start,
180    /// Indicates the MCU is ready to accept commands and data.
181    Ready,
182    /// Indicates the MCU is shutting down.
183    Shutdown,
184    #[doc(hidden)]
185    __SourceBreaking { unknown_ordinal: u32 },
186}
187
188/// Pattern that matches an unknown `LifecycleEvent` member.
189#[macro_export]
190macro_rules! LifecycleEventUnknown {
191    () => {
192        _
193    };
194}
195
196impl LifecycleEvent {
197    #[inline]
198    pub fn from_primitive(prim: u32) -> Option<Self> {
199        match prim {
200            0 => Some(Self::Unconfigured),
201            1 => Some(Self::Start),
202            2 => Some(Self::Ready),
203            3 => Some(Self::Shutdown),
204            _ => None,
205        }
206    }
207
208    #[inline]
209    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
210        match prim {
211            0 => Self::Unconfigured,
212            1 => Self::Start,
213            2 => Self::Ready,
214            3 => Self::Shutdown,
215            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
216        }
217    }
218
219    #[inline]
220    pub fn unknown() -> Self {
221        Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
222    }
223
224    #[inline]
225    pub const fn into_primitive(self) -> u32 {
226        match self {
227            Self::Unconfigured => 0,
228            Self::Start => 1,
229            Self::Ready => 2,
230            Self::Shutdown => 3,
231            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
232        }
233    }
234
235    #[inline]
236    pub fn is_unknown(&self) -> bool {
237        match self {
238            Self::__SourceBreaking { unknown_ordinal: _ } => true,
239            _ => false,
240        }
241    }
242}
243
244#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
245#[repr(u8)]
246pub enum McuWakeLockValue {
247    Release = 0,
248    Acquire = 1,
249}
250
251impl McuWakeLockValue {
252    #[inline]
253    pub fn from_primitive(prim: u8) -> Option<Self> {
254        match prim {
255            0 => Some(Self::Release),
256            1 => Some(Self::Acquire),
257            _ => None,
258        }
259    }
260
261    #[inline]
262    pub const fn into_primitive(self) -> u8 {
263        self as u8
264    }
265}
266
267#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
268#[repr(u32)]
269pub enum PinState {
270    Low = 0,
271    High = 1,
272}
273
274impl PinState {
275    #[inline]
276    pub fn from_primitive(prim: u32) -> Option<Self> {
277        match prim {
278            0 => Some(Self::Low),
279            1 => Some(Self::High),
280            _ => None,
281        }
282    }
283
284    #[inline]
285    pub const fn into_primitive(self) -> u32 {
286        self as u32
287    }
288}
289
290#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
291pub struct DeviceGetFirmwareNameResponse {
292    pub firmware_name: String,
293}
294
295impl fidl::Persistable for DeviceGetFirmwareNameResponse {}
296
297#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
298#[repr(C)]
299pub struct DeviceGetFirmwareVersionResponse {
300    pub version_info: McuVersionInfo,
301}
302
303impl fidl::Persistable for DeviceGetFirmwareVersionResponse {}
304
305#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
306pub struct DeviceSetWakeLockRequest {
307    pub value: McuWakeLockValue,
308}
309
310impl fidl::Persistable for DeviceSetWakeLockRequest {}
311
312#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
313#[repr(C)]
314pub struct DeviceSetWakeUpEventDurationRequest {
315    pub duration: i64,
316}
317
318impl fidl::Persistable for DeviceSetWakeUpEventDurationRequest {}
319
320#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
321#[repr(C)]
322pub struct DeviceGetWakeUpEventDurationResponse {
323    pub duration: i64,
324}
325
326impl fidl::Persistable for DeviceGetWakeUpEventDurationResponse {}
327
328#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
329pub struct HardwareResetPinStates {
330    pub isp_pin_0: PinState,
331    pub isp_pin_1: PinState,
332    pub isp_pin_2: PinState,
333}
334
335impl fidl::Persistable for HardwareResetPinStates {}
336
337#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
338pub struct LifecycleObserverOnLifecycleChangeRequest {
339    pub event: LifecycleEvent,
340}
341
342impl fidl::Persistable for LifecycleObserverOnLifecycleChangeRequest {}
343
344#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
345#[repr(C)]
346pub struct McuVersionInfo {
347    pub hardware_type: u16,
348    pub hardware_version: u16,
349    pub bootloader_version: u16,
350    pub os_version: u16,
351    pub variant_version: u32,
352}
353
354impl fidl::Persistable for McuVersionInfo {}
355
356#[derive(Clone, Debug, Default, PartialEq)]
357pub struct DataChannelReadRequest {
358    /// If specified and set to false, then the call will return immediately
359    /// if there is no data to read with ZX_ERR_SHOULD_WAIT. Otherwise the
360    /// call has hanging get semantics and will return once data is available.
361    pub blocking: Option<bool>,
362    #[doc(hidden)]
363    pub __source_breaking: fidl::marker::SourceBreaking,
364}
365
366impl fidl::Persistable for DataChannelReadRequest {}
367
368#[derive(Clone, Debug, Default, PartialEq)]
369pub struct DataChannelWriteRequest {
370    pub data: Option<Vec<u8>>,
371    #[doc(hidden)]
372    pub __source_breaking: fidl::marker::SourceBreaking,
373}
374
375impl fidl::Persistable for DataChannelWriteRequest {}
376
377#[derive(Clone, Debug, Default, PartialEq)]
378pub struct DataChannelGetIdentifierResponse {
379    pub name: Option<String>,
380    #[doc(hidden)]
381    pub __source_breaking: fidl::marker::SourceBreaking,
382}
383
384impl fidl::Persistable for DataChannelGetIdentifierResponse {}
385
386#[derive(Clone, Debug, Default, PartialEq)]
387pub struct DisplayDeviceSetDisplaySelectRequest {
388    pub display_select: Option<DisplaySelect>,
389    #[doc(hidden)]
390    pub __source_breaking: fidl::marker::SourceBreaking,
391}
392
393impl fidl::Persistable for DisplayDeviceSetDisplaySelectRequest {}
394
395#[derive(Clone, Debug, Default, PartialEq)]
396pub struct DisplayDeviceGetDisplaySelectResponse {
397    pub display_select: Option<DisplaySelect>,
398    #[doc(hidden)]
399    pub __source_breaking: fidl::marker::SourceBreaking,
400}
401
402impl fidl::Persistable for DisplayDeviceGetDisplaySelectResponse {}
403
404/// Represents the current state of the MCU display.
405#[derive(Clone, Debug, Default, PartialEq)]
406pub struct DisplayState {
407    /// The current mode of the display.
408    pub mode: Option<DisplayMode>,
409    #[doc(hidden)]
410    pub __source_breaking: fidl::marker::SourceBreaking,
411}
412
413impl fidl::Persistable for DisplayState {}
414
415/// Contains synchronization information for the MCU display.
416#[derive(Clone, Debug, Default, PartialEq)]
417pub struct DisplaySyncInfo {
418    /// The current mode of the display.
419    pub display_mode: Option<DisplayMode>,
420    /// The current panel mode.
421    pub panel_mode: Option<u8>,
422    /// The normal brightness mode brightness level.
423    pub normal_brightness: Option<u16>,
424    /// The always-on-display brightness level.
425    pub always_on_display_brightness: Option<u16>,
426    #[doc(hidden)]
427    pub __source_breaking: fidl::marker::SourceBreaking,
428}
429
430impl fidl::Persistable for DisplaySyncInfo {}
431
432#[derive(Clone, Debug, Default, PartialEq)]
433pub struct HangingDataChannelWriteRequest {
434    pub data: Option<Vec<u8>>,
435    #[doc(hidden)]
436    pub __source_breaking: fidl::marker::SourceBreaking,
437}
438
439impl fidl::Persistable for HangingDataChannelWriteRequest {}
440
441#[derive(Clone, Debug, Default, PartialEq)]
442pub struct McuTimeSyncInfo {
443    pub ap_boot_time: Option<i64>,
444    pub mcu_boot_time: Option<i64>,
445    #[doc(hidden)]
446    pub __source_breaking: fidl::marker::SourceBreaking,
447}
448
449impl fidl::Persistable for McuTimeSyncInfo {}
450
451#[derive(Clone, Debug, Default, PartialEq)]
452pub struct UnboundHangingDataChannelGetIdentifierResponse {
453    pub name: Option<String>,
454    #[doc(hidden)]
455    pub __source_breaking: fidl::marker::SourceBreaking,
456}
457
458impl fidl::Persistable for UnboundHangingDataChannelGetIdentifierResponse {}
459
460#[derive(Clone, Debug, Default, PartialEq)]
461pub struct UnboundWaitableDataChannelGetIdentifierResponse {
462    pub name: Option<String>,
463    #[doc(hidden)]
464    pub __source_breaking: fidl::marker::SourceBreaking,
465}
466
467impl fidl::Persistable for UnboundWaitableDataChannelGetIdentifierResponse {}
468
469#[derive(Clone, Debug, Default, PartialEq)]
470pub struct WaitableDataChannelWriteRequest {
471    pub data: Option<Vec<u8>>,
472    #[doc(hidden)]
473    pub __source_breaking: fidl::marker::SourceBreaking,
474}
475
476impl fidl::Persistable for WaitableDataChannelWriteRequest {}
477
478pub mod data_channel_ordinals {
479    pub const REGISTER: u64 = 0x1778251ad75157b6;
480    pub const GET_IDENTIFIER: u64 = 0x4bf148d0ddbd4f69;
481    pub const READ: u64 = 0x12ab08cf21533d26;
482    pub const WRITE: u64 = 0xf2e12121698789b;
483}
484
485pub mod device_ordinals {
486    pub const DOWNLOAD_FIRMWARE: u64 = 0x7bba8137e24661e5;
487    pub const GET_FIRMWARE_NAME: u64 = 0x1649434b5e5bcb8d;
488    pub const GET_FIRMWARE_VERSION: u64 = 0x4f0599abcc95736b;
489    pub const GET_TIME_SYNC: u64 = 0x4406991222e3975d;
490    pub const SET_WAKE_LOCK: u64 = 0x9f83f614affa1dc;
491    pub const GET_WAKE_UP_EVENT_DURATION: u64 = 0x45c79749f65e7176;
492    pub const SET_WAKE_UP_EVENT_DURATION: u64 = 0x1fa1771ffa5f570;
493    pub const HARDWARE_RESET: u64 = 0x78e3d2ded2f929f;
494}
495
496pub mod display_device_ordinals {
497    pub const GET_DISPLAY_STATE: u64 = 0x1648924f6e003444;
498    pub const GET_DISPLAY_INFO: u64 = 0x311c8e4cb6b1b4d1;
499    pub const GET_DISPLAY_SELECT: u64 = 0x6191c86cffd6323;
500    pub const SET_DISPLAY_SELECT: u64 = 0x2b07f6ba12e7a412;
501}
502
503pub mod hanging_data_channel_ordinals {
504    pub const READ: u64 = 0x160be10337c2484f;
505    pub const WRITE: u64 = 0x6addfd084eb16746;
506}
507
508pub mod lifecycle_observer_ordinals {
509    pub const ON_LIFECYCLE_CHANGE: u64 = 0x7034eb94979bd8de;
510}
511
512pub mod unbound_hanging_data_channel_ordinals {
513    pub const BIND: u64 = 0x62be1ffca6ea4090;
514    pub const GET_IDENTIFIER: u64 = 0x63d3f258532f3b0;
515}
516
517pub mod unbound_waitable_data_channel_ordinals {
518    pub const BIND: u64 = 0x135713194412491e;
519    pub const GET_IDENTIFIER: u64 = 0x6a36e55ac6beb9d6;
520}
521
522pub mod waitable_data_channel_ordinals {
523    pub const READ: u64 = 0x48f55df455309245;
524    pub const WRITE: u64 = 0x6d9b754b0e3122f2;
525}
526
527mod internal {
528    use super::*;
529    unsafe impl fidl::encoding::TypeMarker for DisplayMode {
530        type Owned = Self;
531
532        #[inline(always)]
533        fn inline_align(_context: fidl::encoding::Context) -> usize {
534            std::mem::align_of::<u8>()
535        }
536
537        #[inline(always)]
538        fn inline_size(_context: fidl::encoding::Context) -> usize {
539            std::mem::size_of::<u8>()
540        }
541
542        #[inline(always)]
543        fn encode_is_copy() -> bool {
544            false
545        }
546
547        #[inline(always)]
548        fn decode_is_copy() -> bool {
549            false
550        }
551    }
552
553    impl fidl::encoding::ValueTypeMarker for DisplayMode {
554        type Borrowed<'a> = Self;
555        #[inline(always)]
556        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
557            *value
558        }
559    }
560
561    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for DisplayMode {
562        #[inline]
563        unsafe fn encode(
564            self,
565            encoder: &mut fidl::encoding::Encoder<'_, D>,
566            offset: usize,
567            _depth: fidl::encoding::Depth,
568        ) -> fidl::Result<()> {
569            encoder.debug_check_bounds::<Self>(offset);
570            encoder.write_num(self.into_primitive(), offset);
571            Ok(())
572        }
573    }
574
575    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DisplayMode {
576        #[inline(always)]
577        fn new_empty() -> Self {
578            Self::unknown()
579        }
580
581        #[inline]
582        unsafe fn decode(
583            &mut self,
584            decoder: &mut fidl::encoding::Decoder<'_, D>,
585            offset: usize,
586            _depth: fidl::encoding::Depth,
587        ) -> fidl::Result<()> {
588            decoder.debug_check_bounds::<Self>(offset);
589            let prim = decoder.read_num::<u8>(offset);
590
591            *self = Self::from_primitive_allow_unknown(prim);
592            Ok(())
593        }
594    }
595    unsafe impl fidl::encoding::TypeMarker for DisplaySelect {
596        type Owned = Self;
597
598        #[inline(always)]
599        fn inline_align(_context: fidl::encoding::Context) -> usize {
600            std::mem::align_of::<i64>()
601        }
602
603        #[inline(always)]
604        fn inline_size(_context: fidl::encoding::Context) -> usize {
605            std::mem::size_of::<i64>()
606        }
607
608        #[inline(always)]
609        fn encode_is_copy() -> bool {
610            false
611        }
612
613        #[inline(always)]
614        fn decode_is_copy() -> bool {
615            false
616        }
617    }
618
619    impl fidl::encoding::ValueTypeMarker for DisplaySelect {
620        type Borrowed<'a> = Self;
621        #[inline(always)]
622        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
623            *value
624        }
625    }
626
627    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for DisplaySelect {
628        #[inline]
629        unsafe fn encode(
630            self,
631            encoder: &mut fidl::encoding::Encoder<'_, D>,
632            offset: usize,
633            _depth: fidl::encoding::Depth,
634        ) -> fidl::Result<()> {
635            encoder.debug_check_bounds::<Self>(offset);
636            encoder.write_num(self.into_primitive(), offset);
637            Ok(())
638        }
639    }
640
641    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DisplaySelect {
642        #[inline(always)]
643        fn new_empty() -> Self {
644            Self::unknown()
645        }
646
647        #[inline]
648        unsafe fn decode(
649            &mut self,
650            decoder: &mut fidl::encoding::Decoder<'_, D>,
651            offset: usize,
652            _depth: fidl::encoding::Depth,
653        ) -> fidl::Result<()> {
654            decoder.debug_check_bounds::<Self>(offset);
655            let prim = decoder.read_num::<i64>(offset);
656
657            *self = Self::from_primitive_allow_unknown(prim);
658            Ok(())
659        }
660    }
661    unsafe impl fidl::encoding::TypeMarker for LifecycleEvent {
662        type Owned = Self;
663
664        #[inline(always)]
665        fn inline_align(_context: fidl::encoding::Context) -> usize {
666            std::mem::align_of::<u32>()
667        }
668
669        #[inline(always)]
670        fn inline_size(_context: fidl::encoding::Context) -> usize {
671            std::mem::size_of::<u32>()
672        }
673
674        #[inline(always)]
675        fn encode_is_copy() -> bool {
676            false
677        }
678
679        #[inline(always)]
680        fn decode_is_copy() -> bool {
681            false
682        }
683    }
684
685    impl fidl::encoding::ValueTypeMarker for LifecycleEvent {
686        type Borrowed<'a> = Self;
687        #[inline(always)]
688        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
689            *value
690        }
691    }
692
693    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for LifecycleEvent {
694        #[inline]
695        unsafe fn encode(
696            self,
697            encoder: &mut fidl::encoding::Encoder<'_, D>,
698            offset: usize,
699            _depth: fidl::encoding::Depth,
700        ) -> fidl::Result<()> {
701            encoder.debug_check_bounds::<Self>(offset);
702            encoder.write_num(self.into_primitive(), offset);
703            Ok(())
704        }
705    }
706
707    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for LifecycleEvent {
708        #[inline(always)]
709        fn new_empty() -> Self {
710            Self::unknown()
711        }
712
713        #[inline]
714        unsafe fn decode(
715            &mut self,
716            decoder: &mut fidl::encoding::Decoder<'_, D>,
717            offset: usize,
718            _depth: fidl::encoding::Depth,
719        ) -> fidl::Result<()> {
720            decoder.debug_check_bounds::<Self>(offset);
721            let prim = decoder.read_num::<u32>(offset);
722
723            *self = Self::from_primitive_allow_unknown(prim);
724            Ok(())
725        }
726    }
727    unsafe impl fidl::encoding::TypeMarker for McuWakeLockValue {
728        type Owned = Self;
729
730        #[inline(always)]
731        fn inline_align(_context: fidl::encoding::Context) -> usize {
732            std::mem::align_of::<u8>()
733        }
734
735        #[inline(always)]
736        fn inline_size(_context: fidl::encoding::Context) -> usize {
737            std::mem::size_of::<u8>()
738        }
739
740        #[inline(always)]
741        fn encode_is_copy() -> bool {
742            true
743        }
744
745        #[inline(always)]
746        fn decode_is_copy() -> bool {
747            false
748        }
749    }
750
751    impl fidl::encoding::ValueTypeMarker for McuWakeLockValue {
752        type Borrowed<'a> = Self;
753        #[inline(always)]
754        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
755            *value
756        }
757    }
758
759    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
760        for McuWakeLockValue
761    {
762        #[inline]
763        unsafe fn encode(
764            self,
765            encoder: &mut fidl::encoding::Encoder<'_, D>,
766            offset: usize,
767            _depth: fidl::encoding::Depth,
768        ) -> fidl::Result<()> {
769            encoder.debug_check_bounds::<Self>(offset);
770            encoder.write_num(self.into_primitive(), offset);
771            Ok(())
772        }
773    }
774
775    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for McuWakeLockValue {
776        #[inline(always)]
777        fn new_empty() -> Self {
778            Self::Release
779        }
780
781        #[inline]
782        unsafe fn decode(
783            &mut self,
784            decoder: &mut fidl::encoding::Decoder<'_, D>,
785            offset: usize,
786            _depth: fidl::encoding::Depth,
787        ) -> fidl::Result<()> {
788            decoder.debug_check_bounds::<Self>(offset);
789            let prim = decoder.read_num::<u8>(offset);
790
791            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
792            Ok(())
793        }
794    }
795    unsafe impl fidl::encoding::TypeMarker for PinState {
796        type Owned = Self;
797
798        #[inline(always)]
799        fn inline_align(_context: fidl::encoding::Context) -> usize {
800            std::mem::align_of::<u32>()
801        }
802
803        #[inline(always)]
804        fn inline_size(_context: fidl::encoding::Context) -> usize {
805            std::mem::size_of::<u32>()
806        }
807
808        #[inline(always)]
809        fn encode_is_copy() -> bool {
810            true
811        }
812
813        #[inline(always)]
814        fn decode_is_copy() -> bool {
815            false
816        }
817    }
818
819    impl fidl::encoding::ValueTypeMarker for PinState {
820        type Borrowed<'a> = Self;
821        #[inline(always)]
822        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
823            *value
824        }
825    }
826
827    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for PinState {
828        #[inline]
829        unsafe fn encode(
830            self,
831            encoder: &mut fidl::encoding::Encoder<'_, D>,
832            offset: usize,
833            _depth: fidl::encoding::Depth,
834        ) -> fidl::Result<()> {
835            encoder.debug_check_bounds::<Self>(offset);
836            encoder.write_num(self.into_primitive(), offset);
837            Ok(())
838        }
839    }
840
841    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for PinState {
842        #[inline(always)]
843        fn new_empty() -> Self {
844            Self::Low
845        }
846
847        #[inline]
848        unsafe fn decode(
849            &mut self,
850            decoder: &mut fidl::encoding::Decoder<'_, D>,
851            offset: usize,
852            _depth: fidl::encoding::Depth,
853        ) -> fidl::Result<()> {
854            decoder.debug_check_bounds::<Self>(offset);
855            let prim = decoder.read_num::<u32>(offset);
856
857            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
858            Ok(())
859        }
860    }
861
862    impl fidl::encoding::ValueTypeMarker for DeviceGetFirmwareNameResponse {
863        type Borrowed<'a> = &'a Self;
864        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
865            value
866        }
867    }
868
869    unsafe impl fidl::encoding::TypeMarker for DeviceGetFirmwareNameResponse {
870        type Owned = Self;
871
872        #[inline(always)]
873        fn inline_align(_context: fidl::encoding::Context) -> usize {
874            8
875        }
876
877        #[inline(always)]
878        fn inline_size(_context: fidl::encoding::Context) -> usize {
879            16
880        }
881    }
882
883    unsafe impl<D: fidl::encoding::ResourceDialect>
884        fidl::encoding::Encode<DeviceGetFirmwareNameResponse, D>
885        for &DeviceGetFirmwareNameResponse
886    {
887        #[inline]
888        unsafe fn encode(
889            self,
890            encoder: &mut fidl::encoding::Encoder<'_, D>,
891            offset: usize,
892            _depth: fidl::encoding::Depth,
893        ) -> fidl::Result<()> {
894            encoder.debug_check_bounds::<DeviceGetFirmwareNameResponse>(offset);
895            // Delegate to tuple encoding.
896            fidl::encoding::Encode::<DeviceGetFirmwareNameResponse, D>::encode(
897                (<fidl::encoding::BoundedString<64> as fidl::encoding::ValueTypeMarker>::borrow(
898                    &self.firmware_name,
899                ),),
900                encoder,
901                offset,
902                _depth,
903            )
904        }
905    }
906    unsafe impl<
907        D: fidl::encoding::ResourceDialect,
908        T0: fidl::encoding::Encode<fidl::encoding::BoundedString<64>, D>,
909    > fidl::encoding::Encode<DeviceGetFirmwareNameResponse, D> for (T0,)
910    {
911        #[inline]
912        unsafe fn encode(
913            self,
914            encoder: &mut fidl::encoding::Encoder<'_, D>,
915            offset: usize,
916            depth: fidl::encoding::Depth,
917        ) -> fidl::Result<()> {
918            encoder.debug_check_bounds::<DeviceGetFirmwareNameResponse>(offset);
919            // Zero out padding regions. There's no need to apply masks
920            // because the unmasked parts will be overwritten by fields.
921            // Write the fields.
922            self.0.encode(encoder, offset + 0, depth)?;
923            Ok(())
924        }
925    }
926
927    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
928        for DeviceGetFirmwareNameResponse
929    {
930        #[inline(always)]
931        fn new_empty() -> Self {
932            Self { firmware_name: fidl::new_empty!(fidl::encoding::BoundedString<64>, D) }
933        }
934
935        #[inline]
936        unsafe fn decode(
937            &mut self,
938            decoder: &mut fidl::encoding::Decoder<'_, D>,
939            offset: usize,
940            _depth: fidl::encoding::Depth,
941        ) -> fidl::Result<()> {
942            decoder.debug_check_bounds::<Self>(offset);
943            // Verify that padding bytes are zero.
944            fidl::decode!(
945                fidl::encoding::BoundedString<64>,
946                D,
947                &mut self.firmware_name,
948                decoder,
949                offset + 0,
950                _depth
951            )?;
952            Ok(())
953        }
954    }
955
956    impl fidl::encoding::ValueTypeMarker for DeviceGetFirmwareVersionResponse {
957        type Borrowed<'a> = &'a Self;
958        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
959            value
960        }
961    }
962
963    unsafe impl fidl::encoding::TypeMarker for DeviceGetFirmwareVersionResponse {
964        type Owned = Self;
965
966        #[inline(always)]
967        fn inline_align(_context: fidl::encoding::Context) -> usize {
968            4
969        }
970
971        #[inline(always)]
972        fn inline_size(_context: fidl::encoding::Context) -> usize {
973            12
974        }
975        #[inline(always)]
976        fn encode_is_copy() -> bool {
977            true
978        }
979
980        #[inline(always)]
981        fn decode_is_copy() -> bool {
982            true
983        }
984    }
985
986    unsafe impl<D: fidl::encoding::ResourceDialect>
987        fidl::encoding::Encode<DeviceGetFirmwareVersionResponse, D>
988        for &DeviceGetFirmwareVersionResponse
989    {
990        #[inline]
991        unsafe fn encode(
992            self,
993            encoder: &mut fidl::encoding::Encoder<'_, D>,
994            offset: usize,
995            _depth: fidl::encoding::Depth,
996        ) -> fidl::Result<()> {
997            encoder.debug_check_bounds::<DeviceGetFirmwareVersionResponse>(offset);
998            unsafe {
999                // Copy the object into the buffer.
1000                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
1001                (buf_ptr as *mut DeviceGetFirmwareVersionResponse)
1002                    .write_unaligned((self as *const DeviceGetFirmwareVersionResponse).read());
1003                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
1004                // done second because the memcpy will write garbage to these bytes.
1005            }
1006            Ok(())
1007        }
1008    }
1009    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<McuVersionInfo, D>>
1010        fidl::encoding::Encode<DeviceGetFirmwareVersionResponse, D> for (T0,)
1011    {
1012        #[inline]
1013        unsafe fn encode(
1014            self,
1015            encoder: &mut fidl::encoding::Encoder<'_, D>,
1016            offset: usize,
1017            depth: fidl::encoding::Depth,
1018        ) -> fidl::Result<()> {
1019            encoder.debug_check_bounds::<DeviceGetFirmwareVersionResponse>(offset);
1020            // Zero out padding regions. There's no need to apply masks
1021            // because the unmasked parts will be overwritten by fields.
1022            // Write the fields.
1023            self.0.encode(encoder, offset + 0, depth)?;
1024            Ok(())
1025        }
1026    }
1027
1028    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1029        for DeviceGetFirmwareVersionResponse
1030    {
1031        #[inline(always)]
1032        fn new_empty() -> Self {
1033            Self { version_info: fidl::new_empty!(McuVersionInfo, D) }
1034        }
1035
1036        #[inline]
1037        unsafe fn decode(
1038            &mut self,
1039            decoder: &mut fidl::encoding::Decoder<'_, D>,
1040            offset: usize,
1041            _depth: fidl::encoding::Depth,
1042        ) -> fidl::Result<()> {
1043            decoder.debug_check_bounds::<Self>(offset);
1044            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
1045            // Verify that padding bytes are zero.
1046            // Copy from the buffer into the object.
1047            unsafe {
1048                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 12);
1049            }
1050            Ok(())
1051        }
1052    }
1053
1054    impl fidl::encoding::ValueTypeMarker for DeviceSetWakeLockRequest {
1055        type Borrowed<'a> = &'a Self;
1056        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1057            value
1058        }
1059    }
1060
1061    unsafe impl fidl::encoding::TypeMarker for DeviceSetWakeLockRequest {
1062        type Owned = Self;
1063
1064        #[inline(always)]
1065        fn inline_align(_context: fidl::encoding::Context) -> usize {
1066            1
1067        }
1068
1069        #[inline(always)]
1070        fn inline_size(_context: fidl::encoding::Context) -> usize {
1071            1
1072        }
1073    }
1074
1075    unsafe impl<D: fidl::encoding::ResourceDialect>
1076        fidl::encoding::Encode<DeviceSetWakeLockRequest, D> for &DeviceSetWakeLockRequest
1077    {
1078        #[inline]
1079        unsafe fn encode(
1080            self,
1081            encoder: &mut fidl::encoding::Encoder<'_, D>,
1082            offset: usize,
1083            _depth: fidl::encoding::Depth,
1084        ) -> fidl::Result<()> {
1085            encoder.debug_check_bounds::<DeviceSetWakeLockRequest>(offset);
1086            // Delegate to tuple encoding.
1087            fidl::encoding::Encode::<DeviceSetWakeLockRequest, D>::encode(
1088                (<McuWakeLockValue as fidl::encoding::ValueTypeMarker>::borrow(&self.value),),
1089                encoder,
1090                offset,
1091                _depth,
1092            )
1093        }
1094    }
1095    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<McuWakeLockValue, D>>
1096        fidl::encoding::Encode<DeviceSetWakeLockRequest, D> for (T0,)
1097    {
1098        #[inline]
1099        unsafe fn encode(
1100            self,
1101            encoder: &mut fidl::encoding::Encoder<'_, D>,
1102            offset: usize,
1103            depth: fidl::encoding::Depth,
1104        ) -> fidl::Result<()> {
1105            encoder.debug_check_bounds::<DeviceSetWakeLockRequest>(offset);
1106            // Zero out padding regions. There's no need to apply masks
1107            // because the unmasked parts will be overwritten by fields.
1108            // Write the fields.
1109            self.0.encode(encoder, offset + 0, depth)?;
1110            Ok(())
1111        }
1112    }
1113
1114    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1115        for DeviceSetWakeLockRequest
1116    {
1117        #[inline(always)]
1118        fn new_empty() -> Self {
1119            Self { value: fidl::new_empty!(McuWakeLockValue, D) }
1120        }
1121
1122        #[inline]
1123        unsafe fn decode(
1124            &mut self,
1125            decoder: &mut fidl::encoding::Decoder<'_, D>,
1126            offset: usize,
1127            _depth: fidl::encoding::Depth,
1128        ) -> fidl::Result<()> {
1129            decoder.debug_check_bounds::<Self>(offset);
1130            // Verify that padding bytes are zero.
1131            fidl::decode!(McuWakeLockValue, D, &mut self.value, decoder, offset + 0, _depth)?;
1132            Ok(())
1133        }
1134    }
1135
1136    impl fidl::encoding::ValueTypeMarker for DeviceSetWakeUpEventDurationRequest {
1137        type Borrowed<'a> = &'a Self;
1138        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1139            value
1140        }
1141    }
1142
1143    unsafe impl fidl::encoding::TypeMarker for DeviceSetWakeUpEventDurationRequest {
1144        type Owned = Self;
1145
1146        #[inline(always)]
1147        fn inline_align(_context: fidl::encoding::Context) -> usize {
1148            8
1149        }
1150
1151        #[inline(always)]
1152        fn inline_size(_context: fidl::encoding::Context) -> usize {
1153            8
1154        }
1155        #[inline(always)]
1156        fn encode_is_copy() -> bool {
1157            true
1158        }
1159
1160        #[inline(always)]
1161        fn decode_is_copy() -> bool {
1162            true
1163        }
1164    }
1165
1166    unsafe impl<D: fidl::encoding::ResourceDialect>
1167        fidl::encoding::Encode<DeviceSetWakeUpEventDurationRequest, D>
1168        for &DeviceSetWakeUpEventDurationRequest
1169    {
1170        #[inline]
1171        unsafe fn encode(
1172            self,
1173            encoder: &mut fidl::encoding::Encoder<'_, D>,
1174            offset: usize,
1175            _depth: fidl::encoding::Depth,
1176        ) -> fidl::Result<()> {
1177            encoder.debug_check_bounds::<DeviceSetWakeUpEventDurationRequest>(offset);
1178            unsafe {
1179                // Copy the object into the buffer.
1180                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
1181                (buf_ptr as *mut DeviceSetWakeUpEventDurationRequest)
1182                    .write_unaligned((self as *const DeviceSetWakeUpEventDurationRequest).read());
1183                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
1184                // done second because the memcpy will write garbage to these bytes.
1185            }
1186            Ok(())
1187        }
1188    }
1189    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<i64, D>>
1190        fidl::encoding::Encode<DeviceSetWakeUpEventDurationRequest, D> for (T0,)
1191    {
1192        #[inline]
1193        unsafe fn encode(
1194            self,
1195            encoder: &mut fidl::encoding::Encoder<'_, D>,
1196            offset: usize,
1197            depth: fidl::encoding::Depth,
1198        ) -> fidl::Result<()> {
1199            encoder.debug_check_bounds::<DeviceSetWakeUpEventDurationRequest>(offset);
1200            // Zero out padding regions. There's no need to apply masks
1201            // because the unmasked parts will be overwritten by fields.
1202            // Write the fields.
1203            self.0.encode(encoder, offset + 0, depth)?;
1204            Ok(())
1205        }
1206    }
1207
1208    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1209        for DeviceSetWakeUpEventDurationRequest
1210    {
1211        #[inline(always)]
1212        fn new_empty() -> Self {
1213            Self { duration: fidl::new_empty!(i64, D) }
1214        }
1215
1216        #[inline]
1217        unsafe fn decode(
1218            &mut self,
1219            decoder: &mut fidl::encoding::Decoder<'_, D>,
1220            offset: usize,
1221            _depth: fidl::encoding::Depth,
1222        ) -> fidl::Result<()> {
1223            decoder.debug_check_bounds::<Self>(offset);
1224            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
1225            // Verify that padding bytes are zero.
1226            // Copy from the buffer into the object.
1227            unsafe {
1228                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 8);
1229            }
1230            Ok(())
1231        }
1232    }
1233
1234    impl fidl::encoding::ValueTypeMarker for DeviceGetWakeUpEventDurationResponse {
1235        type Borrowed<'a> = &'a Self;
1236        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1237            value
1238        }
1239    }
1240
1241    unsafe impl fidl::encoding::TypeMarker for DeviceGetWakeUpEventDurationResponse {
1242        type Owned = Self;
1243
1244        #[inline(always)]
1245        fn inline_align(_context: fidl::encoding::Context) -> usize {
1246            8
1247        }
1248
1249        #[inline(always)]
1250        fn inline_size(_context: fidl::encoding::Context) -> usize {
1251            8
1252        }
1253        #[inline(always)]
1254        fn encode_is_copy() -> bool {
1255            true
1256        }
1257
1258        #[inline(always)]
1259        fn decode_is_copy() -> bool {
1260            true
1261        }
1262    }
1263
1264    unsafe impl<D: fidl::encoding::ResourceDialect>
1265        fidl::encoding::Encode<DeviceGetWakeUpEventDurationResponse, D>
1266        for &DeviceGetWakeUpEventDurationResponse
1267    {
1268        #[inline]
1269        unsafe fn encode(
1270            self,
1271            encoder: &mut fidl::encoding::Encoder<'_, D>,
1272            offset: usize,
1273            _depth: fidl::encoding::Depth,
1274        ) -> fidl::Result<()> {
1275            encoder.debug_check_bounds::<DeviceGetWakeUpEventDurationResponse>(offset);
1276            unsafe {
1277                // Copy the object into the buffer.
1278                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
1279                (buf_ptr as *mut DeviceGetWakeUpEventDurationResponse)
1280                    .write_unaligned((self as *const DeviceGetWakeUpEventDurationResponse).read());
1281                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
1282                // done second because the memcpy will write garbage to these bytes.
1283            }
1284            Ok(())
1285        }
1286    }
1287    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<i64, D>>
1288        fidl::encoding::Encode<DeviceGetWakeUpEventDurationResponse, D> for (T0,)
1289    {
1290        #[inline]
1291        unsafe fn encode(
1292            self,
1293            encoder: &mut fidl::encoding::Encoder<'_, D>,
1294            offset: usize,
1295            depth: fidl::encoding::Depth,
1296        ) -> fidl::Result<()> {
1297            encoder.debug_check_bounds::<DeviceGetWakeUpEventDurationResponse>(offset);
1298            // Zero out padding regions. There's no need to apply masks
1299            // because the unmasked parts will be overwritten by fields.
1300            // Write the fields.
1301            self.0.encode(encoder, offset + 0, depth)?;
1302            Ok(())
1303        }
1304    }
1305
1306    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1307        for DeviceGetWakeUpEventDurationResponse
1308    {
1309        #[inline(always)]
1310        fn new_empty() -> Self {
1311            Self { duration: fidl::new_empty!(i64, D) }
1312        }
1313
1314        #[inline]
1315        unsafe fn decode(
1316            &mut self,
1317            decoder: &mut fidl::encoding::Decoder<'_, D>,
1318            offset: usize,
1319            _depth: fidl::encoding::Depth,
1320        ) -> fidl::Result<()> {
1321            decoder.debug_check_bounds::<Self>(offset);
1322            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
1323            // Verify that padding bytes are zero.
1324            // Copy from the buffer into the object.
1325            unsafe {
1326                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 8);
1327            }
1328            Ok(())
1329        }
1330    }
1331
1332    impl fidl::encoding::ValueTypeMarker for HardwareResetPinStates {
1333        type Borrowed<'a> = &'a Self;
1334        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1335            value
1336        }
1337    }
1338
1339    unsafe impl fidl::encoding::TypeMarker for HardwareResetPinStates {
1340        type Owned = Self;
1341
1342        #[inline(always)]
1343        fn inline_align(_context: fidl::encoding::Context) -> usize {
1344            4
1345        }
1346
1347        #[inline(always)]
1348        fn inline_size(_context: fidl::encoding::Context) -> usize {
1349            12
1350        }
1351    }
1352
1353    unsafe impl<D: fidl::encoding::ResourceDialect>
1354        fidl::encoding::Encode<HardwareResetPinStates, D> for &HardwareResetPinStates
1355    {
1356        #[inline]
1357        unsafe fn encode(
1358            self,
1359            encoder: &mut fidl::encoding::Encoder<'_, D>,
1360            offset: usize,
1361            _depth: fidl::encoding::Depth,
1362        ) -> fidl::Result<()> {
1363            encoder.debug_check_bounds::<HardwareResetPinStates>(offset);
1364            // Delegate to tuple encoding.
1365            fidl::encoding::Encode::<HardwareResetPinStates, D>::encode(
1366                (
1367                    <PinState as fidl::encoding::ValueTypeMarker>::borrow(&self.isp_pin_0),
1368                    <PinState as fidl::encoding::ValueTypeMarker>::borrow(&self.isp_pin_1),
1369                    <PinState as fidl::encoding::ValueTypeMarker>::borrow(&self.isp_pin_2),
1370                ),
1371                encoder,
1372                offset,
1373                _depth,
1374            )
1375        }
1376    }
1377    unsafe impl<
1378        D: fidl::encoding::ResourceDialect,
1379        T0: fidl::encoding::Encode<PinState, D>,
1380        T1: fidl::encoding::Encode<PinState, D>,
1381        T2: fidl::encoding::Encode<PinState, D>,
1382    > fidl::encoding::Encode<HardwareResetPinStates, D> for (T0, T1, T2)
1383    {
1384        #[inline]
1385        unsafe fn encode(
1386            self,
1387            encoder: &mut fidl::encoding::Encoder<'_, D>,
1388            offset: usize,
1389            depth: fidl::encoding::Depth,
1390        ) -> fidl::Result<()> {
1391            encoder.debug_check_bounds::<HardwareResetPinStates>(offset);
1392            // Zero out padding regions. There's no need to apply masks
1393            // because the unmasked parts will be overwritten by fields.
1394            // Write the fields.
1395            self.0.encode(encoder, offset + 0, depth)?;
1396            self.1.encode(encoder, offset + 4, depth)?;
1397            self.2.encode(encoder, offset + 8, depth)?;
1398            Ok(())
1399        }
1400    }
1401
1402    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1403        for HardwareResetPinStates
1404    {
1405        #[inline(always)]
1406        fn new_empty() -> Self {
1407            Self {
1408                isp_pin_0: fidl::new_empty!(PinState, D),
1409                isp_pin_1: fidl::new_empty!(PinState, D),
1410                isp_pin_2: fidl::new_empty!(PinState, D),
1411            }
1412        }
1413
1414        #[inline]
1415        unsafe fn decode(
1416            &mut self,
1417            decoder: &mut fidl::encoding::Decoder<'_, D>,
1418            offset: usize,
1419            _depth: fidl::encoding::Depth,
1420        ) -> fidl::Result<()> {
1421            decoder.debug_check_bounds::<Self>(offset);
1422            // Verify that padding bytes are zero.
1423            fidl::decode!(PinState, D, &mut self.isp_pin_0, decoder, offset + 0, _depth)?;
1424            fidl::decode!(PinState, D, &mut self.isp_pin_1, decoder, offset + 4, _depth)?;
1425            fidl::decode!(PinState, D, &mut self.isp_pin_2, decoder, offset + 8, _depth)?;
1426            Ok(())
1427        }
1428    }
1429
1430    impl fidl::encoding::ValueTypeMarker for LifecycleObserverOnLifecycleChangeRequest {
1431        type Borrowed<'a> = &'a Self;
1432        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1433            value
1434        }
1435    }
1436
1437    unsafe impl fidl::encoding::TypeMarker for LifecycleObserverOnLifecycleChangeRequest {
1438        type Owned = Self;
1439
1440        #[inline(always)]
1441        fn inline_align(_context: fidl::encoding::Context) -> usize {
1442            4
1443        }
1444
1445        #[inline(always)]
1446        fn inline_size(_context: fidl::encoding::Context) -> usize {
1447            4
1448        }
1449    }
1450
1451    unsafe impl<D: fidl::encoding::ResourceDialect>
1452        fidl::encoding::Encode<LifecycleObserverOnLifecycleChangeRequest, D>
1453        for &LifecycleObserverOnLifecycleChangeRequest
1454    {
1455        #[inline]
1456        unsafe fn encode(
1457            self,
1458            encoder: &mut fidl::encoding::Encoder<'_, D>,
1459            offset: usize,
1460            _depth: fidl::encoding::Depth,
1461        ) -> fidl::Result<()> {
1462            encoder.debug_check_bounds::<LifecycleObserverOnLifecycleChangeRequest>(offset);
1463            // Delegate to tuple encoding.
1464            fidl::encoding::Encode::<LifecycleObserverOnLifecycleChangeRequest, D>::encode(
1465                (<LifecycleEvent as fidl::encoding::ValueTypeMarker>::borrow(&self.event),),
1466                encoder,
1467                offset,
1468                _depth,
1469            )
1470        }
1471    }
1472    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<LifecycleEvent, D>>
1473        fidl::encoding::Encode<LifecycleObserverOnLifecycleChangeRequest, D> for (T0,)
1474    {
1475        #[inline]
1476        unsafe fn encode(
1477            self,
1478            encoder: &mut fidl::encoding::Encoder<'_, D>,
1479            offset: usize,
1480            depth: fidl::encoding::Depth,
1481        ) -> fidl::Result<()> {
1482            encoder.debug_check_bounds::<LifecycleObserverOnLifecycleChangeRequest>(offset);
1483            // Zero out padding regions. There's no need to apply masks
1484            // because the unmasked parts will be overwritten by fields.
1485            // Write the fields.
1486            self.0.encode(encoder, offset + 0, depth)?;
1487            Ok(())
1488        }
1489    }
1490
1491    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1492        for LifecycleObserverOnLifecycleChangeRequest
1493    {
1494        #[inline(always)]
1495        fn new_empty() -> Self {
1496            Self { event: fidl::new_empty!(LifecycleEvent, D) }
1497        }
1498
1499        #[inline]
1500        unsafe fn decode(
1501            &mut self,
1502            decoder: &mut fidl::encoding::Decoder<'_, D>,
1503            offset: usize,
1504            _depth: fidl::encoding::Depth,
1505        ) -> fidl::Result<()> {
1506            decoder.debug_check_bounds::<Self>(offset);
1507            // Verify that padding bytes are zero.
1508            fidl::decode!(LifecycleEvent, D, &mut self.event, decoder, offset + 0, _depth)?;
1509            Ok(())
1510        }
1511    }
1512
1513    impl fidl::encoding::ValueTypeMarker for McuVersionInfo {
1514        type Borrowed<'a> = &'a Self;
1515        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1516            value
1517        }
1518    }
1519
1520    unsafe impl fidl::encoding::TypeMarker for McuVersionInfo {
1521        type Owned = Self;
1522
1523        #[inline(always)]
1524        fn inline_align(_context: fidl::encoding::Context) -> usize {
1525            4
1526        }
1527
1528        #[inline(always)]
1529        fn inline_size(_context: fidl::encoding::Context) -> usize {
1530            12
1531        }
1532        #[inline(always)]
1533        fn encode_is_copy() -> bool {
1534            true
1535        }
1536
1537        #[inline(always)]
1538        fn decode_is_copy() -> bool {
1539            true
1540        }
1541    }
1542
1543    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<McuVersionInfo, D>
1544        for &McuVersionInfo
1545    {
1546        #[inline]
1547        unsafe fn encode(
1548            self,
1549            encoder: &mut fidl::encoding::Encoder<'_, D>,
1550            offset: usize,
1551            _depth: fidl::encoding::Depth,
1552        ) -> fidl::Result<()> {
1553            encoder.debug_check_bounds::<McuVersionInfo>(offset);
1554            unsafe {
1555                // Copy the object into the buffer.
1556                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
1557                (buf_ptr as *mut McuVersionInfo)
1558                    .write_unaligned((self as *const McuVersionInfo).read());
1559                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
1560                // done second because the memcpy will write garbage to these bytes.
1561            }
1562            Ok(())
1563        }
1564    }
1565    unsafe impl<
1566        D: fidl::encoding::ResourceDialect,
1567        T0: fidl::encoding::Encode<u16, D>,
1568        T1: fidl::encoding::Encode<u16, D>,
1569        T2: fidl::encoding::Encode<u16, D>,
1570        T3: fidl::encoding::Encode<u16, D>,
1571        T4: fidl::encoding::Encode<u32, D>,
1572    > fidl::encoding::Encode<McuVersionInfo, D> for (T0, T1, T2, T3, T4)
1573    {
1574        #[inline]
1575        unsafe fn encode(
1576            self,
1577            encoder: &mut fidl::encoding::Encoder<'_, D>,
1578            offset: usize,
1579            depth: fidl::encoding::Depth,
1580        ) -> fidl::Result<()> {
1581            encoder.debug_check_bounds::<McuVersionInfo>(offset);
1582            // Zero out padding regions. There's no need to apply masks
1583            // because the unmasked parts will be overwritten by fields.
1584            // Write the fields.
1585            self.0.encode(encoder, offset + 0, depth)?;
1586            self.1.encode(encoder, offset + 2, depth)?;
1587            self.2.encode(encoder, offset + 4, depth)?;
1588            self.3.encode(encoder, offset + 6, depth)?;
1589            self.4.encode(encoder, offset + 8, depth)?;
1590            Ok(())
1591        }
1592    }
1593
1594    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for McuVersionInfo {
1595        #[inline(always)]
1596        fn new_empty() -> Self {
1597            Self {
1598                hardware_type: fidl::new_empty!(u16, D),
1599                hardware_version: fidl::new_empty!(u16, D),
1600                bootloader_version: fidl::new_empty!(u16, D),
1601                os_version: fidl::new_empty!(u16, D),
1602                variant_version: fidl::new_empty!(u32, D),
1603            }
1604        }
1605
1606        #[inline]
1607        unsafe fn decode(
1608            &mut self,
1609            decoder: &mut fidl::encoding::Decoder<'_, D>,
1610            offset: usize,
1611            _depth: fidl::encoding::Depth,
1612        ) -> fidl::Result<()> {
1613            decoder.debug_check_bounds::<Self>(offset);
1614            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
1615            // Verify that padding bytes are zero.
1616            // Copy from the buffer into the object.
1617            unsafe {
1618                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 12);
1619            }
1620            Ok(())
1621        }
1622    }
1623
1624    impl DataChannelReadRequest {
1625        #[inline(always)]
1626        fn max_ordinal_present(&self) -> u64 {
1627            if let Some(_) = self.blocking {
1628                return 1;
1629            }
1630            0
1631        }
1632    }
1633
1634    impl fidl::encoding::ValueTypeMarker for DataChannelReadRequest {
1635        type Borrowed<'a> = &'a Self;
1636        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1637            value
1638        }
1639    }
1640
1641    unsafe impl fidl::encoding::TypeMarker for DataChannelReadRequest {
1642        type Owned = Self;
1643
1644        #[inline(always)]
1645        fn inline_align(_context: fidl::encoding::Context) -> usize {
1646            8
1647        }
1648
1649        #[inline(always)]
1650        fn inline_size(_context: fidl::encoding::Context) -> usize {
1651            16
1652        }
1653    }
1654
1655    unsafe impl<D: fidl::encoding::ResourceDialect>
1656        fidl::encoding::Encode<DataChannelReadRequest, D> for &DataChannelReadRequest
1657    {
1658        unsafe fn encode(
1659            self,
1660            encoder: &mut fidl::encoding::Encoder<'_, D>,
1661            offset: usize,
1662            mut depth: fidl::encoding::Depth,
1663        ) -> fidl::Result<()> {
1664            encoder.debug_check_bounds::<DataChannelReadRequest>(offset);
1665            // Vector header
1666            let max_ordinal: u64 = self.max_ordinal_present();
1667            encoder.write_num(max_ordinal, offset);
1668            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
1669            // Calling encoder.out_of_line_offset(0) is not allowed.
1670            if max_ordinal == 0 {
1671                return Ok(());
1672            }
1673            depth.increment()?;
1674            let envelope_size = 8;
1675            let bytes_len = max_ordinal as usize * envelope_size;
1676            #[allow(unused_variables)]
1677            let offset = encoder.out_of_line_offset(bytes_len);
1678            let mut _prev_end_offset: usize = 0;
1679            if 1 > max_ordinal {
1680                return Ok(());
1681            }
1682
1683            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1684            // are envelope_size bytes.
1685            let cur_offset: usize = (1 - 1) * envelope_size;
1686
1687            // Zero reserved fields.
1688            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1689
1690            // Safety:
1691            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1692            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1693            //   envelope_size bytes, there is always sufficient room.
1694            fidl::encoding::encode_in_envelope_optional::<bool, D>(
1695                self.blocking.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
1696                encoder,
1697                offset + cur_offset,
1698                depth,
1699            )?;
1700
1701            _prev_end_offset = cur_offset + envelope_size;
1702
1703            Ok(())
1704        }
1705    }
1706
1707    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1708        for DataChannelReadRequest
1709    {
1710        #[inline(always)]
1711        fn new_empty() -> Self {
1712            Self::default()
1713        }
1714
1715        unsafe fn decode(
1716            &mut self,
1717            decoder: &mut fidl::encoding::Decoder<'_, D>,
1718            offset: usize,
1719            mut depth: fidl::encoding::Depth,
1720        ) -> fidl::Result<()> {
1721            decoder.debug_check_bounds::<Self>(offset);
1722            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
1723                None => return Err(fidl::Error::NotNullable),
1724                Some(len) => len,
1725            };
1726            // Calling decoder.out_of_line_offset(0) is not allowed.
1727            if len == 0 {
1728                return Ok(());
1729            };
1730            depth.increment()?;
1731            let envelope_size = 8;
1732            let bytes_len = len * envelope_size;
1733            let offset = decoder.out_of_line_offset(bytes_len)?;
1734            // Decode the envelope for each type.
1735            let mut _next_ordinal_to_read = 0;
1736            let mut next_offset = offset;
1737            let end_offset = offset + bytes_len;
1738            _next_ordinal_to_read += 1;
1739            if next_offset >= end_offset {
1740                return Ok(());
1741            }
1742
1743            // Decode unknown envelopes for gaps in ordinals.
1744            while _next_ordinal_to_read < 1 {
1745                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1746                _next_ordinal_to_read += 1;
1747                next_offset += envelope_size;
1748            }
1749
1750            let next_out_of_line = decoder.next_out_of_line();
1751            let handles_before = decoder.remaining_handles();
1752            if let Some((inlined, num_bytes, num_handles)) =
1753                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1754            {
1755                let member_inline_size =
1756                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1757                if inlined != (member_inline_size <= 4) {
1758                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1759                }
1760                let inner_offset;
1761                let mut inner_depth = depth.clone();
1762                if inlined {
1763                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1764                    inner_offset = next_offset;
1765                } else {
1766                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1767                    inner_depth.increment()?;
1768                }
1769                let val_ref = self.blocking.get_or_insert_with(|| fidl::new_empty!(bool, D));
1770                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
1771                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1772                {
1773                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1774                }
1775                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1776                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1777                }
1778            }
1779
1780            next_offset += envelope_size;
1781
1782            // Decode the remaining unknown envelopes.
1783            while next_offset < end_offset {
1784                _next_ordinal_to_read += 1;
1785                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1786                next_offset += envelope_size;
1787            }
1788
1789            Ok(())
1790        }
1791    }
1792
1793    impl DataChannelWriteRequest {
1794        #[inline(always)]
1795        fn max_ordinal_present(&self) -> u64 {
1796            if let Some(_) = self.data {
1797                return 1;
1798            }
1799            0
1800        }
1801    }
1802
1803    impl fidl::encoding::ValueTypeMarker for DataChannelWriteRequest {
1804        type Borrowed<'a> = &'a Self;
1805        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1806            value
1807        }
1808    }
1809
1810    unsafe impl fidl::encoding::TypeMarker for DataChannelWriteRequest {
1811        type Owned = Self;
1812
1813        #[inline(always)]
1814        fn inline_align(_context: fidl::encoding::Context) -> usize {
1815            8
1816        }
1817
1818        #[inline(always)]
1819        fn inline_size(_context: fidl::encoding::Context) -> usize {
1820            16
1821        }
1822    }
1823
1824    unsafe impl<D: fidl::encoding::ResourceDialect>
1825        fidl::encoding::Encode<DataChannelWriteRequest, D> for &DataChannelWriteRequest
1826    {
1827        unsafe fn encode(
1828            self,
1829            encoder: &mut fidl::encoding::Encoder<'_, D>,
1830            offset: usize,
1831            mut depth: fidl::encoding::Depth,
1832        ) -> fidl::Result<()> {
1833            encoder.debug_check_bounds::<DataChannelWriteRequest>(offset);
1834            // Vector header
1835            let max_ordinal: u64 = self.max_ordinal_present();
1836            encoder.write_num(max_ordinal, offset);
1837            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
1838            // Calling encoder.out_of_line_offset(0) is not allowed.
1839            if max_ordinal == 0 {
1840                return Ok(());
1841            }
1842            depth.increment()?;
1843            let envelope_size = 8;
1844            let bytes_len = max_ordinal as usize * envelope_size;
1845            #[allow(unused_variables)]
1846            let offset = encoder.out_of_line_offset(bytes_len);
1847            let mut _prev_end_offset: usize = 0;
1848            if 1 > max_ordinal {
1849                return Ok(());
1850            }
1851
1852            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1853            // are envelope_size bytes.
1854            let cur_offset: usize = (1 - 1) * envelope_size;
1855
1856            // Zero reserved fields.
1857            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1858
1859            // Safety:
1860            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1861            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1862            //   envelope_size bytes, there is always sufficient room.
1863            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u8, 255>, D>(
1864                self.data.as_ref().map(
1865                    <fidl::encoding::Vector<u8, 255> as fidl::encoding::ValueTypeMarker>::borrow,
1866                ),
1867                encoder,
1868                offset + cur_offset,
1869                depth,
1870            )?;
1871
1872            _prev_end_offset = cur_offset + envelope_size;
1873
1874            Ok(())
1875        }
1876    }
1877
1878    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1879        for DataChannelWriteRequest
1880    {
1881        #[inline(always)]
1882        fn new_empty() -> Self {
1883            Self::default()
1884        }
1885
1886        unsafe fn decode(
1887            &mut self,
1888            decoder: &mut fidl::encoding::Decoder<'_, D>,
1889            offset: usize,
1890            mut depth: fidl::encoding::Depth,
1891        ) -> fidl::Result<()> {
1892            decoder.debug_check_bounds::<Self>(offset);
1893            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
1894                None => return Err(fidl::Error::NotNullable),
1895                Some(len) => len,
1896            };
1897            // Calling decoder.out_of_line_offset(0) is not allowed.
1898            if len == 0 {
1899                return Ok(());
1900            };
1901            depth.increment()?;
1902            let envelope_size = 8;
1903            let bytes_len = len * envelope_size;
1904            let offset = decoder.out_of_line_offset(bytes_len)?;
1905            // Decode the envelope for each type.
1906            let mut _next_ordinal_to_read = 0;
1907            let mut next_offset = offset;
1908            let end_offset = offset + bytes_len;
1909            _next_ordinal_to_read += 1;
1910            if next_offset >= end_offset {
1911                return Ok(());
1912            }
1913
1914            // Decode unknown envelopes for gaps in ordinals.
1915            while _next_ordinal_to_read < 1 {
1916                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1917                _next_ordinal_to_read += 1;
1918                next_offset += envelope_size;
1919            }
1920
1921            let next_out_of_line = decoder.next_out_of_line();
1922            let handles_before = decoder.remaining_handles();
1923            if let Some((inlined, num_bytes, num_handles)) =
1924                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1925            {
1926                let member_inline_size =
1927                    <fidl::encoding::Vector<u8, 255> as fidl::encoding::TypeMarker>::inline_size(
1928                        decoder.context,
1929                    );
1930                if inlined != (member_inline_size <= 4) {
1931                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1932                }
1933                let inner_offset;
1934                let mut inner_depth = depth.clone();
1935                if inlined {
1936                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1937                    inner_offset = next_offset;
1938                } else {
1939                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1940                    inner_depth.increment()?;
1941                }
1942                let val_ref = self
1943                    .data
1944                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u8, 255>, D));
1945                fidl::decode!(fidl::encoding::Vector<u8, 255>, D, val_ref, decoder, inner_offset, inner_depth)?;
1946                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1947                {
1948                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1949                }
1950                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1951                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1952                }
1953            }
1954
1955            next_offset += envelope_size;
1956
1957            // Decode the remaining unknown envelopes.
1958            while next_offset < end_offset {
1959                _next_ordinal_to_read += 1;
1960                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1961                next_offset += envelope_size;
1962            }
1963
1964            Ok(())
1965        }
1966    }
1967
1968    impl DataChannelGetIdentifierResponse {
1969        #[inline(always)]
1970        fn max_ordinal_present(&self) -> u64 {
1971            if let Some(_) = self.name {
1972                return 1;
1973            }
1974            0
1975        }
1976    }
1977
1978    impl fidl::encoding::ValueTypeMarker for DataChannelGetIdentifierResponse {
1979        type Borrowed<'a> = &'a Self;
1980        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1981            value
1982        }
1983    }
1984
1985    unsafe impl fidl::encoding::TypeMarker for DataChannelGetIdentifierResponse {
1986        type Owned = Self;
1987
1988        #[inline(always)]
1989        fn inline_align(_context: fidl::encoding::Context) -> usize {
1990            8
1991        }
1992
1993        #[inline(always)]
1994        fn inline_size(_context: fidl::encoding::Context) -> usize {
1995            16
1996        }
1997    }
1998
1999    unsafe impl<D: fidl::encoding::ResourceDialect>
2000        fidl::encoding::Encode<DataChannelGetIdentifierResponse, D>
2001        for &DataChannelGetIdentifierResponse
2002    {
2003        unsafe fn encode(
2004            self,
2005            encoder: &mut fidl::encoding::Encoder<'_, D>,
2006            offset: usize,
2007            mut depth: fidl::encoding::Depth,
2008        ) -> fidl::Result<()> {
2009            encoder.debug_check_bounds::<DataChannelGetIdentifierResponse>(offset);
2010            // Vector header
2011            let max_ordinal: u64 = self.max_ordinal_present();
2012            encoder.write_num(max_ordinal, offset);
2013            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
2014            // Calling encoder.out_of_line_offset(0) is not allowed.
2015            if max_ordinal == 0 {
2016                return Ok(());
2017            }
2018            depth.increment()?;
2019            let envelope_size = 8;
2020            let bytes_len = max_ordinal as usize * envelope_size;
2021            #[allow(unused_variables)]
2022            let offset = encoder.out_of_line_offset(bytes_len);
2023            let mut _prev_end_offset: usize = 0;
2024            if 1 > max_ordinal {
2025                return Ok(());
2026            }
2027
2028            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2029            // are envelope_size bytes.
2030            let cur_offset: usize = (1 - 1) * envelope_size;
2031
2032            // Zero reserved fields.
2033            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2034
2035            // Safety:
2036            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2037            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2038            //   envelope_size bytes, there is always sufficient room.
2039            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<100>, D>(
2040                self.name.as_ref().map(
2041                    <fidl::encoding::BoundedString<100> as fidl::encoding::ValueTypeMarker>::borrow,
2042                ),
2043                encoder,
2044                offset + cur_offset,
2045                depth,
2046            )?;
2047
2048            _prev_end_offset = cur_offset + envelope_size;
2049
2050            Ok(())
2051        }
2052    }
2053
2054    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2055        for DataChannelGetIdentifierResponse
2056    {
2057        #[inline(always)]
2058        fn new_empty() -> Self {
2059            Self::default()
2060        }
2061
2062        unsafe fn decode(
2063            &mut self,
2064            decoder: &mut fidl::encoding::Decoder<'_, D>,
2065            offset: usize,
2066            mut depth: fidl::encoding::Depth,
2067        ) -> fidl::Result<()> {
2068            decoder.debug_check_bounds::<Self>(offset);
2069            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
2070                None => return Err(fidl::Error::NotNullable),
2071                Some(len) => len,
2072            };
2073            // Calling decoder.out_of_line_offset(0) is not allowed.
2074            if len == 0 {
2075                return Ok(());
2076            };
2077            depth.increment()?;
2078            let envelope_size = 8;
2079            let bytes_len = len * envelope_size;
2080            let offset = decoder.out_of_line_offset(bytes_len)?;
2081            // Decode the envelope for each type.
2082            let mut _next_ordinal_to_read = 0;
2083            let mut next_offset = offset;
2084            let end_offset = offset + bytes_len;
2085            _next_ordinal_to_read += 1;
2086            if next_offset >= end_offset {
2087                return Ok(());
2088            }
2089
2090            // Decode unknown envelopes for gaps in ordinals.
2091            while _next_ordinal_to_read < 1 {
2092                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2093                _next_ordinal_to_read += 1;
2094                next_offset += envelope_size;
2095            }
2096
2097            let next_out_of_line = decoder.next_out_of_line();
2098            let handles_before = decoder.remaining_handles();
2099            if let Some((inlined, num_bytes, num_handles)) =
2100                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2101            {
2102                let member_inline_size =
2103                    <fidl::encoding::BoundedString<100> as fidl::encoding::TypeMarker>::inline_size(
2104                        decoder.context,
2105                    );
2106                if inlined != (member_inline_size <= 4) {
2107                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2108                }
2109                let inner_offset;
2110                let mut inner_depth = depth.clone();
2111                if inlined {
2112                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2113                    inner_offset = next_offset;
2114                } else {
2115                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2116                    inner_depth.increment()?;
2117                }
2118                let val_ref = self
2119                    .name
2120                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<100>, D));
2121                fidl::decode!(
2122                    fidl::encoding::BoundedString<100>,
2123                    D,
2124                    val_ref,
2125                    decoder,
2126                    inner_offset,
2127                    inner_depth
2128                )?;
2129                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2130                {
2131                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2132                }
2133                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2134                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2135                }
2136            }
2137
2138            next_offset += envelope_size;
2139
2140            // Decode the remaining unknown envelopes.
2141            while next_offset < end_offset {
2142                _next_ordinal_to_read += 1;
2143                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2144                next_offset += envelope_size;
2145            }
2146
2147            Ok(())
2148        }
2149    }
2150
2151    impl DisplayDeviceSetDisplaySelectRequest {
2152        #[inline(always)]
2153        fn max_ordinal_present(&self) -> u64 {
2154            if let Some(_) = self.display_select {
2155                return 1;
2156            }
2157            0
2158        }
2159    }
2160
2161    impl fidl::encoding::ValueTypeMarker for DisplayDeviceSetDisplaySelectRequest {
2162        type Borrowed<'a> = &'a Self;
2163        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2164            value
2165        }
2166    }
2167
2168    unsafe impl fidl::encoding::TypeMarker for DisplayDeviceSetDisplaySelectRequest {
2169        type Owned = Self;
2170
2171        #[inline(always)]
2172        fn inline_align(_context: fidl::encoding::Context) -> usize {
2173            8
2174        }
2175
2176        #[inline(always)]
2177        fn inline_size(_context: fidl::encoding::Context) -> usize {
2178            16
2179        }
2180    }
2181
2182    unsafe impl<D: fidl::encoding::ResourceDialect>
2183        fidl::encoding::Encode<DisplayDeviceSetDisplaySelectRequest, D>
2184        for &DisplayDeviceSetDisplaySelectRequest
2185    {
2186        unsafe fn encode(
2187            self,
2188            encoder: &mut fidl::encoding::Encoder<'_, D>,
2189            offset: usize,
2190            mut depth: fidl::encoding::Depth,
2191        ) -> fidl::Result<()> {
2192            encoder.debug_check_bounds::<DisplayDeviceSetDisplaySelectRequest>(offset);
2193            // Vector header
2194            let max_ordinal: u64 = self.max_ordinal_present();
2195            encoder.write_num(max_ordinal, offset);
2196            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
2197            // Calling encoder.out_of_line_offset(0) is not allowed.
2198            if max_ordinal == 0 {
2199                return Ok(());
2200            }
2201            depth.increment()?;
2202            let envelope_size = 8;
2203            let bytes_len = max_ordinal as usize * envelope_size;
2204            #[allow(unused_variables)]
2205            let offset = encoder.out_of_line_offset(bytes_len);
2206            let mut _prev_end_offset: usize = 0;
2207            if 1 > max_ordinal {
2208                return Ok(());
2209            }
2210
2211            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2212            // are envelope_size bytes.
2213            let cur_offset: usize = (1 - 1) * envelope_size;
2214
2215            // Zero reserved fields.
2216            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2217
2218            // Safety:
2219            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2220            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2221            //   envelope_size bytes, there is always sufficient room.
2222            fidl::encoding::encode_in_envelope_optional::<DisplaySelect, D>(
2223                self.display_select
2224                    .as_ref()
2225                    .map(<DisplaySelect as fidl::encoding::ValueTypeMarker>::borrow),
2226                encoder,
2227                offset + cur_offset,
2228                depth,
2229            )?;
2230
2231            _prev_end_offset = cur_offset + envelope_size;
2232
2233            Ok(())
2234        }
2235    }
2236
2237    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2238        for DisplayDeviceSetDisplaySelectRequest
2239    {
2240        #[inline(always)]
2241        fn new_empty() -> Self {
2242            Self::default()
2243        }
2244
2245        unsafe fn decode(
2246            &mut self,
2247            decoder: &mut fidl::encoding::Decoder<'_, D>,
2248            offset: usize,
2249            mut depth: fidl::encoding::Depth,
2250        ) -> fidl::Result<()> {
2251            decoder.debug_check_bounds::<Self>(offset);
2252            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
2253                None => return Err(fidl::Error::NotNullable),
2254                Some(len) => len,
2255            };
2256            // Calling decoder.out_of_line_offset(0) is not allowed.
2257            if len == 0 {
2258                return Ok(());
2259            };
2260            depth.increment()?;
2261            let envelope_size = 8;
2262            let bytes_len = len * envelope_size;
2263            let offset = decoder.out_of_line_offset(bytes_len)?;
2264            // Decode the envelope for each type.
2265            let mut _next_ordinal_to_read = 0;
2266            let mut next_offset = offset;
2267            let end_offset = offset + bytes_len;
2268            _next_ordinal_to_read += 1;
2269            if next_offset >= end_offset {
2270                return Ok(());
2271            }
2272
2273            // Decode unknown envelopes for gaps in ordinals.
2274            while _next_ordinal_to_read < 1 {
2275                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2276                _next_ordinal_to_read += 1;
2277                next_offset += envelope_size;
2278            }
2279
2280            let next_out_of_line = decoder.next_out_of_line();
2281            let handles_before = decoder.remaining_handles();
2282            if let Some((inlined, num_bytes, num_handles)) =
2283                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2284            {
2285                let member_inline_size =
2286                    <DisplaySelect as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2287                if inlined != (member_inline_size <= 4) {
2288                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2289                }
2290                let inner_offset;
2291                let mut inner_depth = depth.clone();
2292                if inlined {
2293                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2294                    inner_offset = next_offset;
2295                } else {
2296                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2297                    inner_depth.increment()?;
2298                }
2299                let val_ref =
2300                    self.display_select.get_or_insert_with(|| fidl::new_empty!(DisplaySelect, D));
2301                fidl::decode!(DisplaySelect, D, val_ref, decoder, inner_offset, inner_depth)?;
2302                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2303                {
2304                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2305                }
2306                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2307                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2308                }
2309            }
2310
2311            next_offset += envelope_size;
2312
2313            // Decode the remaining unknown envelopes.
2314            while next_offset < end_offset {
2315                _next_ordinal_to_read += 1;
2316                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2317                next_offset += envelope_size;
2318            }
2319
2320            Ok(())
2321        }
2322    }
2323
2324    impl DisplayDeviceGetDisplaySelectResponse {
2325        #[inline(always)]
2326        fn max_ordinal_present(&self) -> u64 {
2327            if let Some(_) = self.display_select {
2328                return 1;
2329            }
2330            0
2331        }
2332    }
2333
2334    impl fidl::encoding::ValueTypeMarker for DisplayDeviceGetDisplaySelectResponse {
2335        type Borrowed<'a> = &'a Self;
2336        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2337            value
2338        }
2339    }
2340
2341    unsafe impl fidl::encoding::TypeMarker for DisplayDeviceGetDisplaySelectResponse {
2342        type Owned = Self;
2343
2344        #[inline(always)]
2345        fn inline_align(_context: fidl::encoding::Context) -> usize {
2346            8
2347        }
2348
2349        #[inline(always)]
2350        fn inline_size(_context: fidl::encoding::Context) -> usize {
2351            16
2352        }
2353    }
2354
2355    unsafe impl<D: fidl::encoding::ResourceDialect>
2356        fidl::encoding::Encode<DisplayDeviceGetDisplaySelectResponse, D>
2357        for &DisplayDeviceGetDisplaySelectResponse
2358    {
2359        unsafe fn encode(
2360            self,
2361            encoder: &mut fidl::encoding::Encoder<'_, D>,
2362            offset: usize,
2363            mut depth: fidl::encoding::Depth,
2364        ) -> fidl::Result<()> {
2365            encoder.debug_check_bounds::<DisplayDeviceGetDisplaySelectResponse>(offset);
2366            // Vector header
2367            let max_ordinal: u64 = self.max_ordinal_present();
2368            encoder.write_num(max_ordinal, offset);
2369            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
2370            // Calling encoder.out_of_line_offset(0) is not allowed.
2371            if max_ordinal == 0 {
2372                return Ok(());
2373            }
2374            depth.increment()?;
2375            let envelope_size = 8;
2376            let bytes_len = max_ordinal as usize * envelope_size;
2377            #[allow(unused_variables)]
2378            let offset = encoder.out_of_line_offset(bytes_len);
2379            let mut _prev_end_offset: usize = 0;
2380            if 1 > max_ordinal {
2381                return Ok(());
2382            }
2383
2384            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2385            // are envelope_size bytes.
2386            let cur_offset: usize = (1 - 1) * envelope_size;
2387
2388            // Zero reserved fields.
2389            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2390
2391            // Safety:
2392            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2393            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2394            //   envelope_size bytes, there is always sufficient room.
2395            fidl::encoding::encode_in_envelope_optional::<DisplaySelect, D>(
2396                self.display_select
2397                    .as_ref()
2398                    .map(<DisplaySelect as fidl::encoding::ValueTypeMarker>::borrow),
2399                encoder,
2400                offset + cur_offset,
2401                depth,
2402            )?;
2403
2404            _prev_end_offset = cur_offset + envelope_size;
2405
2406            Ok(())
2407        }
2408    }
2409
2410    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2411        for DisplayDeviceGetDisplaySelectResponse
2412    {
2413        #[inline(always)]
2414        fn new_empty() -> Self {
2415            Self::default()
2416        }
2417
2418        unsafe fn decode(
2419            &mut self,
2420            decoder: &mut fidl::encoding::Decoder<'_, D>,
2421            offset: usize,
2422            mut depth: fidl::encoding::Depth,
2423        ) -> fidl::Result<()> {
2424            decoder.debug_check_bounds::<Self>(offset);
2425            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
2426                None => return Err(fidl::Error::NotNullable),
2427                Some(len) => len,
2428            };
2429            // Calling decoder.out_of_line_offset(0) is not allowed.
2430            if len == 0 {
2431                return Ok(());
2432            };
2433            depth.increment()?;
2434            let envelope_size = 8;
2435            let bytes_len = len * envelope_size;
2436            let offset = decoder.out_of_line_offset(bytes_len)?;
2437            // Decode the envelope for each type.
2438            let mut _next_ordinal_to_read = 0;
2439            let mut next_offset = offset;
2440            let end_offset = offset + bytes_len;
2441            _next_ordinal_to_read += 1;
2442            if next_offset >= end_offset {
2443                return Ok(());
2444            }
2445
2446            // Decode unknown envelopes for gaps in ordinals.
2447            while _next_ordinal_to_read < 1 {
2448                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2449                _next_ordinal_to_read += 1;
2450                next_offset += envelope_size;
2451            }
2452
2453            let next_out_of_line = decoder.next_out_of_line();
2454            let handles_before = decoder.remaining_handles();
2455            if let Some((inlined, num_bytes, num_handles)) =
2456                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2457            {
2458                let member_inline_size =
2459                    <DisplaySelect as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2460                if inlined != (member_inline_size <= 4) {
2461                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2462                }
2463                let inner_offset;
2464                let mut inner_depth = depth.clone();
2465                if inlined {
2466                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2467                    inner_offset = next_offset;
2468                } else {
2469                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2470                    inner_depth.increment()?;
2471                }
2472                let val_ref =
2473                    self.display_select.get_or_insert_with(|| fidl::new_empty!(DisplaySelect, D));
2474                fidl::decode!(DisplaySelect, D, val_ref, decoder, inner_offset, inner_depth)?;
2475                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2476                {
2477                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2478                }
2479                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2480                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2481                }
2482            }
2483
2484            next_offset += envelope_size;
2485
2486            // Decode the remaining unknown envelopes.
2487            while next_offset < end_offset {
2488                _next_ordinal_to_read += 1;
2489                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2490                next_offset += envelope_size;
2491            }
2492
2493            Ok(())
2494        }
2495    }
2496
2497    impl DisplayState {
2498        #[inline(always)]
2499        fn max_ordinal_present(&self) -> u64 {
2500            if let Some(_) = self.mode {
2501                return 1;
2502            }
2503            0
2504        }
2505    }
2506
2507    impl fidl::encoding::ValueTypeMarker for DisplayState {
2508        type Borrowed<'a> = &'a Self;
2509        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2510            value
2511        }
2512    }
2513
2514    unsafe impl fidl::encoding::TypeMarker for DisplayState {
2515        type Owned = Self;
2516
2517        #[inline(always)]
2518        fn inline_align(_context: fidl::encoding::Context) -> usize {
2519            8
2520        }
2521
2522        #[inline(always)]
2523        fn inline_size(_context: fidl::encoding::Context) -> usize {
2524            16
2525        }
2526    }
2527
2528    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<DisplayState, D>
2529        for &DisplayState
2530    {
2531        unsafe fn encode(
2532            self,
2533            encoder: &mut fidl::encoding::Encoder<'_, D>,
2534            offset: usize,
2535            mut depth: fidl::encoding::Depth,
2536        ) -> fidl::Result<()> {
2537            encoder.debug_check_bounds::<DisplayState>(offset);
2538            // Vector header
2539            let max_ordinal: u64 = self.max_ordinal_present();
2540            encoder.write_num(max_ordinal, offset);
2541            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
2542            // Calling encoder.out_of_line_offset(0) is not allowed.
2543            if max_ordinal == 0 {
2544                return Ok(());
2545            }
2546            depth.increment()?;
2547            let envelope_size = 8;
2548            let bytes_len = max_ordinal as usize * envelope_size;
2549            #[allow(unused_variables)]
2550            let offset = encoder.out_of_line_offset(bytes_len);
2551            let mut _prev_end_offset: usize = 0;
2552            if 1 > max_ordinal {
2553                return Ok(());
2554            }
2555
2556            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2557            // are envelope_size bytes.
2558            let cur_offset: usize = (1 - 1) * envelope_size;
2559
2560            // Zero reserved fields.
2561            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2562
2563            // Safety:
2564            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2565            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2566            //   envelope_size bytes, there is always sufficient room.
2567            fidl::encoding::encode_in_envelope_optional::<DisplayMode, D>(
2568                self.mode.as_ref().map(<DisplayMode as fidl::encoding::ValueTypeMarker>::borrow),
2569                encoder,
2570                offset + cur_offset,
2571                depth,
2572            )?;
2573
2574            _prev_end_offset = cur_offset + envelope_size;
2575
2576            Ok(())
2577        }
2578    }
2579
2580    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DisplayState {
2581        #[inline(always)]
2582        fn new_empty() -> Self {
2583            Self::default()
2584        }
2585
2586        unsafe fn decode(
2587            &mut self,
2588            decoder: &mut fidl::encoding::Decoder<'_, D>,
2589            offset: usize,
2590            mut depth: fidl::encoding::Depth,
2591        ) -> fidl::Result<()> {
2592            decoder.debug_check_bounds::<Self>(offset);
2593            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
2594                None => return Err(fidl::Error::NotNullable),
2595                Some(len) => len,
2596            };
2597            // Calling decoder.out_of_line_offset(0) is not allowed.
2598            if len == 0 {
2599                return Ok(());
2600            };
2601            depth.increment()?;
2602            let envelope_size = 8;
2603            let bytes_len = len * envelope_size;
2604            let offset = decoder.out_of_line_offset(bytes_len)?;
2605            // Decode the envelope for each type.
2606            let mut _next_ordinal_to_read = 0;
2607            let mut next_offset = offset;
2608            let end_offset = offset + bytes_len;
2609            _next_ordinal_to_read += 1;
2610            if next_offset >= end_offset {
2611                return Ok(());
2612            }
2613
2614            // Decode unknown envelopes for gaps in ordinals.
2615            while _next_ordinal_to_read < 1 {
2616                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2617                _next_ordinal_to_read += 1;
2618                next_offset += envelope_size;
2619            }
2620
2621            let next_out_of_line = decoder.next_out_of_line();
2622            let handles_before = decoder.remaining_handles();
2623            if let Some((inlined, num_bytes, num_handles)) =
2624                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2625            {
2626                let member_inline_size =
2627                    <DisplayMode as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2628                if inlined != (member_inline_size <= 4) {
2629                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2630                }
2631                let inner_offset;
2632                let mut inner_depth = depth.clone();
2633                if inlined {
2634                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2635                    inner_offset = next_offset;
2636                } else {
2637                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2638                    inner_depth.increment()?;
2639                }
2640                let val_ref = self.mode.get_or_insert_with(|| fidl::new_empty!(DisplayMode, D));
2641                fidl::decode!(DisplayMode, D, val_ref, decoder, inner_offset, inner_depth)?;
2642                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2643                {
2644                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2645                }
2646                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2647                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2648                }
2649            }
2650
2651            next_offset += envelope_size;
2652
2653            // Decode the remaining unknown envelopes.
2654            while next_offset < end_offset {
2655                _next_ordinal_to_read += 1;
2656                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2657                next_offset += envelope_size;
2658            }
2659
2660            Ok(())
2661        }
2662    }
2663
2664    impl DisplaySyncInfo {
2665        #[inline(always)]
2666        fn max_ordinal_present(&self) -> u64 {
2667            if let Some(_) = self.always_on_display_brightness {
2668                return 4;
2669            }
2670            if let Some(_) = self.normal_brightness {
2671                return 3;
2672            }
2673            if let Some(_) = self.panel_mode {
2674                return 2;
2675            }
2676            if let Some(_) = self.display_mode {
2677                return 1;
2678            }
2679            0
2680        }
2681    }
2682
2683    impl fidl::encoding::ValueTypeMarker for DisplaySyncInfo {
2684        type Borrowed<'a> = &'a Self;
2685        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2686            value
2687        }
2688    }
2689
2690    unsafe impl fidl::encoding::TypeMarker for DisplaySyncInfo {
2691        type Owned = Self;
2692
2693        #[inline(always)]
2694        fn inline_align(_context: fidl::encoding::Context) -> usize {
2695            8
2696        }
2697
2698        #[inline(always)]
2699        fn inline_size(_context: fidl::encoding::Context) -> usize {
2700            16
2701        }
2702    }
2703
2704    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<DisplaySyncInfo, D>
2705        for &DisplaySyncInfo
2706    {
2707        unsafe fn encode(
2708            self,
2709            encoder: &mut fidl::encoding::Encoder<'_, D>,
2710            offset: usize,
2711            mut depth: fidl::encoding::Depth,
2712        ) -> fidl::Result<()> {
2713            encoder.debug_check_bounds::<DisplaySyncInfo>(offset);
2714            // Vector header
2715            let max_ordinal: u64 = self.max_ordinal_present();
2716            encoder.write_num(max_ordinal, offset);
2717            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
2718            // Calling encoder.out_of_line_offset(0) is not allowed.
2719            if max_ordinal == 0 {
2720                return Ok(());
2721            }
2722            depth.increment()?;
2723            let envelope_size = 8;
2724            let bytes_len = max_ordinal as usize * envelope_size;
2725            #[allow(unused_variables)]
2726            let offset = encoder.out_of_line_offset(bytes_len);
2727            let mut _prev_end_offset: usize = 0;
2728            if 1 > max_ordinal {
2729                return Ok(());
2730            }
2731
2732            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2733            // are envelope_size bytes.
2734            let cur_offset: usize = (1 - 1) * envelope_size;
2735
2736            // Zero reserved fields.
2737            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2738
2739            // Safety:
2740            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2741            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2742            //   envelope_size bytes, there is always sufficient room.
2743            fidl::encoding::encode_in_envelope_optional::<DisplayMode, D>(
2744                self.display_mode
2745                    .as_ref()
2746                    .map(<DisplayMode as fidl::encoding::ValueTypeMarker>::borrow),
2747                encoder,
2748                offset + cur_offset,
2749                depth,
2750            )?;
2751
2752            _prev_end_offset = cur_offset + envelope_size;
2753            if 2 > max_ordinal {
2754                return Ok(());
2755            }
2756
2757            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2758            // are envelope_size bytes.
2759            let cur_offset: usize = (2 - 1) * envelope_size;
2760
2761            // Zero reserved fields.
2762            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2763
2764            // Safety:
2765            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2766            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2767            //   envelope_size bytes, there is always sufficient room.
2768            fidl::encoding::encode_in_envelope_optional::<u8, D>(
2769                self.panel_mode.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
2770                encoder,
2771                offset + cur_offset,
2772                depth,
2773            )?;
2774
2775            _prev_end_offset = cur_offset + envelope_size;
2776            if 3 > max_ordinal {
2777                return Ok(());
2778            }
2779
2780            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2781            // are envelope_size bytes.
2782            let cur_offset: usize = (3 - 1) * envelope_size;
2783
2784            // Zero reserved fields.
2785            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2786
2787            // Safety:
2788            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2789            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2790            //   envelope_size bytes, there is always sufficient room.
2791            fidl::encoding::encode_in_envelope_optional::<u16, D>(
2792                self.normal_brightness
2793                    .as_ref()
2794                    .map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
2795                encoder,
2796                offset + cur_offset,
2797                depth,
2798            )?;
2799
2800            _prev_end_offset = cur_offset + envelope_size;
2801            if 4 > max_ordinal {
2802                return Ok(());
2803            }
2804
2805            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2806            // are envelope_size bytes.
2807            let cur_offset: usize = (4 - 1) * envelope_size;
2808
2809            // Zero reserved fields.
2810            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2811
2812            // Safety:
2813            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2814            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2815            //   envelope_size bytes, there is always sufficient room.
2816            fidl::encoding::encode_in_envelope_optional::<u16, D>(
2817                self.always_on_display_brightness
2818                    .as_ref()
2819                    .map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
2820                encoder,
2821                offset + cur_offset,
2822                depth,
2823            )?;
2824
2825            _prev_end_offset = cur_offset + envelope_size;
2826
2827            Ok(())
2828        }
2829    }
2830
2831    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DisplaySyncInfo {
2832        #[inline(always)]
2833        fn new_empty() -> Self {
2834            Self::default()
2835        }
2836
2837        unsafe fn decode(
2838            &mut self,
2839            decoder: &mut fidl::encoding::Decoder<'_, D>,
2840            offset: usize,
2841            mut depth: fidl::encoding::Depth,
2842        ) -> fidl::Result<()> {
2843            decoder.debug_check_bounds::<Self>(offset);
2844            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
2845                None => return Err(fidl::Error::NotNullable),
2846                Some(len) => len,
2847            };
2848            // Calling decoder.out_of_line_offset(0) is not allowed.
2849            if len == 0 {
2850                return Ok(());
2851            };
2852            depth.increment()?;
2853            let envelope_size = 8;
2854            let bytes_len = len * envelope_size;
2855            let offset = decoder.out_of_line_offset(bytes_len)?;
2856            // Decode the envelope for each type.
2857            let mut _next_ordinal_to_read = 0;
2858            let mut next_offset = offset;
2859            let end_offset = offset + bytes_len;
2860            _next_ordinal_to_read += 1;
2861            if next_offset >= end_offset {
2862                return Ok(());
2863            }
2864
2865            // Decode unknown envelopes for gaps in ordinals.
2866            while _next_ordinal_to_read < 1 {
2867                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2868                _next_ordinal_to_read += 1;
2869                next_offset += envelope_size;
2870            }
2871
2872            let next_out_of_line = decoder.next_out_of_line();
2873            let handles_before = decoder.remaining_handles();
2874            if let Some((inlined, num_bytes, num_handles)) =
2875                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2876            {
2877                let member_inline_size =
2878                    <DisplayMode as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2879                if inlined != (member_inline_size <= 4) {
2880                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2881                }
2882                let inner_offset;
2883                let mut inner_depth = depth.clone();
2884                if inlined {
2885                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2886                    inner_offset = next_offset;
2887                } else {
2888                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2889                    inner_depth.increment()?;
2890                }
2891                let val_ref =
2892                    self.display_mode.get_or_insert_with(|| fidl::new_empty!(DisplayMode, D));
2893                fidl::decode!(DisplayMode, D, val_ref, decoder, inner_offset, inner_depth)?;
2894                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2895                {
2896                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2897                }
2898                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2899                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2900                }
2901            }
2902
2903            next_offset += envelope_size;
2904            _next_ordinal_to_read += 1;
2905            if next_offset >= end_offset {
2906                return Ok(());
2907            }
2908
2909            // Decode unknown envelopes for gaps in ordinals.
2910            while _next_ordinal_to_read < 2 {
2911                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2912                _next_ordinal_to_read += 1;
2913                next_offset += envelope_size;
2914            }
2915
2916            let next_out_of_line = decoder.next_out_of_line();
2917            let handles_before = decoder.remaining_handles();
2918            if let Some((inlined, num_bytes, num_handles)) =
2919                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2920            {
2921                let member_inline_size =
2922                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2923                if inlined != (member_inline_size <= 4) {
2924                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2925                }
2926                let inner_offset;
2927                let mut inner_depth = depth.clone();
2928                if inlined {
2929                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2930                    inner_offset = next_offset;
2931                } else {
2932                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2933                    inner_depth.increment()?;
2934                }
2935                let val_ref = self.panel_mode.get_or_insert_with(|| fidl::new_empty!(u8, D));
2936                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
2937                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2938                {
2939                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2940                }
2941                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2942                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2943                }
2944            }
2945
2946            next_offset += envelope_size;
2947            _next_ordinal_to_read += 1;
2948            if next_offset >= end_offset {
2949                return Ok(());
2950            }
2951
2952            // Decode unknown envelopes for gaps in ordinals.
2953            while _next_ordinal_to_read < 3 {
2954                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2955                _next_ordinal_to_read += 1;
2956                next_offset += envelope_size;
2957            }
2958
2959            let next_out_of_line = decoder.next_out_of_line();
2960            let handles_before = decoder.remaining_handles();
2961            if let Some((inlined, num_bytes, num_handles)) =
2962                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2963            {
2964                let member_inline_size =
2965                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2966                if inlined != (member_inline_size <= 4) {
2967                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2968                }
2969                let inner_offset;
2970                let mut inner_depth = depth.clone();
2971                if inlined {
2972                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2973                    inner_offset = next_offset;
2974                } else {
2975                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2976                    inner_depth.increment()?;
2977                }
2978                let val_ref =
2979                    self.normal_brightness.get_or_insert_with(|| fidl::new_empty!(u16, D));
2980                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
2981                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2982                {
2983                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2984                }
2985                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2986                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2987                }
2988            }
2989
2990            next_offset += envelope_size;
2991            _next_ordinal_to_read += 1;
2992            if next_offset >= end_offset {
2993                return Ok(());
2994            }
2995
2996            // Decode unknown envelopes for gaps in ordinals.
2997            while _next_ordinal_to_read < 4 {
2998                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2999                _next_ordinal_to_read += 1;
3000                next_offset += envelope_size;
3001            }
3002
3003            let next_out_of_line = decoder.next_out_of_line();
3004            let handles_before = decoder.remaining_handles();
3005            if let Some((inlined, num_bytes, num_handles)) =
3006                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3007            {
3008                let member_inline_size =
3009                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3010                if inlined != (member_inline_size <= 4) {
3011                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3012                }
3013                let inner_offset;
3014                let mut inner_depth = depth.clone();
3015                if inlined {
3016                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3017                    inner_offset = next_offset;
3018                } else {
3019                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3020                    inner_depth.increment()?;
3021                }
3022                let val_ref = self
3023                    .always_on_display_brightness
3024                    .get_or_insert_with(|| fidl::new_empty!(u16, D));
3025                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
3026                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3027                {
3028                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3029                }
3030                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3031                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3032                }
3033            }
3034
3035            next_offset += envelope_size;
3036
3037            // Decode the remaining unknown envelopes.
3038            while next_offset < end_offset {
3039                _next_ordinal_to_read += 1;
3040                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3041                next_offset += envelope_size;
3042            }
3043
3044            Ok(())
3045        }
3046    }
3047
3048    impl HangingDataChannelWriteRequest {
3049        #[inline(always)]
3050        fn max_ordinal_present(&self) -> u64 {
3051            if let Some(_) = self.data {
3052                return 1;
3053            }
3054            0
3055        }
3056    }
3057
3058    impl fidl::encoding::ValueTypeMarker for HangingDataChannelWriteRequest {
3059        type Borrowed<'a> = &'a Self;
3060        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3061            value
3062        }
3063    }
3064
3065    unsafe impl fidl::encoding::TypeMarker for HangingDataChannelWriteRequest {
3066        type Owned = Self;
3067
3068        #[inline(always)]
3069        fn inline_align(_context: fidl::encoding::Context) -> usize {
3070            8
3071        }
3072
3073        #[inline(always)]
3074        fn inline_size(_context: fidl::encoding::Context) -> usize {
3075            16
3076        }
3077    }
3078
3079    unsafe impl<D: fidl::encoding::ResourceDialect>
3080        fidl::encoding::Encode<HangingDataChannelWriteRequest, D>
3081        for &HangingDataChannelWriteRequest
3082    {
3083        unsafe fn encode(
3084            self,
3085            encoder: &mut fidl::encoding::Encoder<'_, D>,
3086            offset: usize,
3087            mut depth: fidl::encoding::Depth,
3088        ) -> fidl::Result<()> {
3089            encoder.debug_check_bounds::<HangingDataChannelWriteRequest>(offset);
3090            // Vector header
3091            let max_ordinal: u64 = self.max_ordinal_present();
3092            encoder.write_num(max_ordinal, offset);
3093            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
3094            // Calling encoder.out_of_line_offset(0) is not allowed.
3095            if max_ordinal == 0 {
3096                return Ok(());
3097            }
3098            depth.increment()?;
3099            let envelope_size = 8;
3100            let bytes_len = max_ordinal as usize * envelope_size;
3101            #[allow(unused_variables)]
3102            let offset = encoder.out_of_line_offset(bytes_len);
3103            let mut _prev_end_offset: usize = 0;
3104            if 1 > max_ordinal {
3105                return Ok(());
3106            }
3107
3108            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3109            // are envelope_size bytes.
3110            let cur_offset: usize = (1 - 1) * envelope_size;
3111
3112            // Zero reserved fields.
3113            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3114
3115            // Safety:
3116            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3117            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3118            //   envelope_size bytes, there is always sufficient room.
3119            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u8, 255>, D>(
3120                self.data.as_ref().map(
3121                    <fidl::encoding::Vector<u8, 255> as fidl::encoding::ValueTypeMarker>::borrow,
3122                ),
3123                encoder,
3124                offset + cur_offset,
3125                depth,
3126            )?;
3127
3128            _prev_end_offset = cur_offset + envelope_size;
3129
3130            Ok(())
3131        }
3132    }
3133
3134    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
3135        for HangingDataChannelWriteRequest
3136    {
3137        #[inline(always)]
3138        fn new_empty() -> Self {
3139            Self::default()
3140        }
3141
3142        unsafe fn decode(
3143            &mut self,
3144            decoder: &mut fidl::encoding::Decoder<'_, D>,
3145            offset: usize,
3146            mut depth: fidl::encoding::Depth,
3147        ) -> fidl::Result<()> {
3148            decoder.debug_check_bounds::<Self>(offset);
3149            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
3150                None => return Err(fidl::Error::NotNullable),
3151                Some(len) => len,
3152            };
3153            // Calling decoder.out_of_line_offset(0) is not allowed.
3154            if len == 0 {
3155                return Ok(());
3156            };
3157            depth.increment()?;
3158            let envelope_size = 8;
3159            let bytes_len = len * envelope_size;
3160            let offset = decoder.out_of_line_offset(bytes_len)?;
3161            // Decode the envelope for each type.
3162            let mut _next_ordinal_to_read = 0;
3163            let mut next_offset = offset;
3164            let end_offset = offset + bytes_len;
3165            _next_ordinal_to_read += 1;
3166            if next_offset >= end_offset {
3167                return Ok(());
3168            }
3169
3170            // Decode unknown envelopes for gaps in ordinals.
3171            while _next_ordinal_to_read < 1 {
3172                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3173                _next_ordinal_to_read += 1;
3174                next_offset += envelope_size;
3175            }
3176
3177            let next_out_of_line = decoder.next_out_of_line();
3178            let handles_before = decoder.remaining_handles();
3179            if let Some((inlined, num_bytes, num_handles)) =
3180                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3181            {
3182                let member_inline_size =
3183                    <fidl::encoding::Vector<u8, 255> as fidl::encoding::TypeMarker>::inline_size(
3184                        decoder.context,
3185                    );
3186                if inlined != (member_inline_size <= 4) {
3187                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3188                }
3189                let inner_offset;
3190                let mut inner_depth = depth.clone();
3191                if inlined {
3192                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3193                    inner_offset = next_offset;
3194                } else {
3195                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3196                    inner_depth.increment()?;
3197                }
3198                let val_ref = self
3199                    .data
3200                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u8, 255>, D));
3201                fidl::decode!(fidl::encoding::Vector<u8, 255>, D, val_ref, decoder, inner_offset, inner_depth)?;
3202                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3203                {
3204                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3205                }
3206                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3207                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3208                }
3209            }
3210
3211            next_offset += envelope_size;
3212
3213            // Decode the remaining unknown envelopes.
3214            while next_offset < end_offset {
3215                _next_ordinal_to_read += 1;
3216                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3217                next_offset += envelope_size;
3218            }
3219
3220            Ok(())
3221        }
3222    }
3223
3224    impl McuTimeSyncInfo {
3225        #[inline(always)]
3226        fn max_ordinal_present(&self) -> u64 {
3227            if let Some(_) = self.mcu_boot_time {
3228                return 2;
3229            }
3230            if let Some(_) = self.ap_boot_time {
3231                return 1;
3232            }
3233            0
3234        }
3235    }
3236
3237    impl fidl::encoding::ValueTypeMarker for McuTimeSyncInfo {
3238        type Borrowed<'a> = &'a Self;
3239        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3240            value
3241        }
3242    }
3243
3244    unsafe impl fidl::encoding::TypeMarker for McuTimeSyncInfo {
3245        type Owned = Self;
3246
3247        #[inline(always)]
3248        fn inline_align(_context: fidl::encoding::Context) -> usize {
3249            8
3250        }
3251
3252        #[inline(always)]
3253        fn inline_size(_context: fidl::encoding::Context) -> usize {
3254            16
3255        }
3256    }
3257
3258    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<McuTimeSyncInfo, D>
3259        for &McuTimeSyncInfo
3260    {
3261        unsafe fn encode(
3262            self,
3263            encoder: &mut fidl::encoding::Encoder<'_, D>,
3264            offset: usize,
3265            mut depth: fidl::encoding::Depth,
3266        ) -> fidl::Result<()> {
3267            encoder.debug_check_bounds::<McuTimeSyncInfo>(offset);
3268            // Vector header
3269            let max_ordinal: u64 = self.max_ordinal_present();
3270            encoder.write_num(max_ordinal, offset);
3271            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
3272            // Calling encoder.out_of_line_offset(0) is not allowed.
3273            if max_ordinal == 0 {
3274                return Ok(());
3275            }
3276            depth.increment()?;
3277            let envelope_size = 8;
3278            let bytes_len = max_ordinal as usize * envelope_size;
3279            #[allow(unused_variables)]
3280            let offset = encoder.out_of_line_offset(bytes_len);
3281            let mut _prev_end_offset: usize = 0;
3282            if 1 > max_ordinal {
3283                return Ok(());
3284            }
3285
3286            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3287            // are envelope_size bytes.
3288            let cur_offset: usize = (1 - 1) * envelope_size;
3289
3290            // Zero reserved fields.
3291            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3292
3293            // Safety:
3294            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3295            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3296            //   envelope_size bytes, there is always sufficient room.
3297            fidl::encoding::encode_in_envelope_optional::<i64, D>(
3298                self.ap_boot_time.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
3299                encoder,
3300                offset + cur_offset,
3301                depth,
3302            )?;
3303
3304            _prev_end_offset = cur_offset + envelope_size;
3305            if 2 > max_ordinal {
3306                return Ok(());
3307            }
3308
3309            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3310            // are envelope_size bytes.
3311            let cur_offset: usize = (2 - 1) * envelope_size;
3312
3313            // Zero reserved fields.
3314            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3315
3316            // Safety:
3317            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3318            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3319            //   envelope_size bytes, there is always sufficient room.
3320            fidl::encoding::encode_in_envelope_optional::<i64, D>(
3321                self.mcu_boot_time.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
3322                encoder,
3323                offset + cur_offset,
3324                depth,
3325            )?;
3326
3327            _prev_end_offset = cur_offset + envelope_size;
3328
3329            Ok(())
3330        }
3331    }
3332
3333    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for McuTimeSyncInfo {
3334        #[inline(always)]
3335        fn new_empty() -> Self {
3336            Self::default()
3337        }
3338
3339        unsafe fn decode(
3340            &mut self,
3341            decoder: &mut fidl::encoding::Decoder<'_, D>,
3342            offset: usize,
3343            mut depth: fidl::encoding::Depth,
3344        ) -> fidl::Result<()> {
3345            decoder.debug_check_bounds::<Self>(offset);
3346            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
3347                None => return Err(fidl::Error::NotNullable),
3348                Some(len) => len,
3349            };
3350            // Calling decoder.out_of_line_offset(0) is not allowed.
3351            if len == 0 {
3352                return Ok(());
3353            };
3354            depth.increment()?;
3355            let envelope_size = 8;
3356            let bytes_len = len * envelope_size;
3357            let offset = decoder.out_of_line_offset(bytes_len)?;
3358            // Decode the envelope for each type.
3359            let mut _next_ordinal_to_read = 0;
3360            let mut next_offset = offset;
3361            let end_offset = offset + bytes_len;
3362            _next_ordinal_to_read += 1;
3363            if next_offset >= end_offset {
3364                return Ok(());
3365            }
3366
3367            // Decode unknown envelopes for gaps in ordinals.
3368            while _next_ordinal_to_read < 1 {
3369                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3370                _next_ordinal_to_read += 1;
3371                next_offset += envelope_size;
3372            }
3373
3374            let next_out_of_line = decoder.next_out_of_line();
3375            let handles_before = decoder.remaining_handles();
3376            if let Some((inlined, num_bytes, num_handles)) =
3377                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3378            {
3379                let member_inline_size =
3380                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3381                if inlined != (member_inline_size <= 4) {
3382                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3383                }
3384                let inner_offset;
3385                let mut inner_depth = depth.clone();
3386                if inlined {
3387                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3388                    inner_offset = next_offset;
3389                } else {
3390                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3391                    inner_depth.increment()?;
3392                }
3393                let val_ref = self.ap_boot_time.get_or_insert_with(|| fidl::new_empty!(i64, D));
3394                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
3395                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3396                {
3397                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3398                }
3399                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3400                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3401                }
3402            }
3403
3404            next_offset += envelope_size;
3405            _next_ordinal_to_read += 1;
3406            if next_offset >= end_offset {
3407                return Ok(());
3408            }
3409
3410            // Decode unknown envelopes for gaps in ordinals.
3411            while _next_ordinal_to_read < 2 {
3412                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3413                _next_ordinal_to_read += 1;
3414                next_offset += envelope_size;
3415            }
3416
3417            let next_out_of_line = decoder.next_out_of_line();
3418            let handles_before = decoder.remaining_handles();
3419            if let Some((inlined, num_bytes, num_handles)) =
3420                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3421            {
3422                let member_inline_size =
3423                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3424                if inlined != (member_inline_size <= 4) {
3425                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3426                }
3427                let inner_offset;
3428                let mut inner_depth = depth.clone();
3429                if inlined {
3430                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3431                    inner_offset = next_offset;
3432                } else {
3433                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3434                    inner_depth.increment()?;
3435                }
3436                let val_ref = self.mcu_boot_time.get_or_insert_with(|| fidl::new_empty!(i64, D));
3437                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
3438                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3439                {
3440                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3441                }
3442                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3443                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3444                }
3445            }
3446
3447            next_offset += envelope_size;
3448
3449            // Decode the remaining unknown envelopes.
3450            while next_offset < end_offset {
3451                _next_ordinal_to_read += 1;
3452                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3453                next_offset += envelope_size;
3454            }
3455
3456            Ok(())
3457        }
3458    }
3459
3460    impl UnboundHangingDataChannelGetIdentifierResponse {
3461        #[inline(always)]
3462        fn max_ordinal_present(&self) -> u64 {
3463            if let Some(_) = self.name {
3464                return 1;
3465            }
3466            0
3467        }
3468    }
3469
3470    impl fidl::encoding::ValueTypeMarker for UnboundHangingDataChannelGetIdentifierResponse {
3471        type Borrowed<'a> = &'a Self;
3472        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3473            value
3474        }
3475    }
3476
3477    unsafe impl fidl::encoding::TypeMarker for UnboundHangingDataChannelGetIdentifierResponse {
3478        type Owned = Self;
3479
3480        #[inline(always)]
3481        fn inline_align(_context: fidl::encoding::Context) -> usize {
3482            8
3483        }
3484
3485        #[inline(always)]
3486        fn inline_size(_context: fidl::encoding::Context) -> usize {
3487            16
3488        }
3489    }
3490
3491    unsafe impl<D: fidl::encoding::ResourceDialect>
3492        fidl::encoding::Encode<UnboundHangingDataChannelGetIdentifierResponse, D>
3493        for &UnboundHangingDataChannelGetIdentifierResponse
3494    {
3495        unsafe fn encode(
3496            self,
3497            encoder: &mut fidl::encoding::Encoder<'_, D>,
3498            offset: usize,
3499            mut depth: fidl::encoding::Depth,
3500        ) -> fidl::Result<()> {
3501            encoder.debug_check_bounds::<UnboundHangingDataChannelGetIdentifierResponse>(offset);
3502            // Vector header
3503            let max_ordinal: u64 = self.max_ordinal_present();
3504            encoder.write_num(max_ordinal, offset);
3505            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
3506            // Calling encoder.out_of_line_offset(0) is not allowed.
3507            if max_ordinal == 0 {
3508                return Ok(());
3509            }
3510            depth.increment()?;
3511            let envelope_size = 8;
3512            let bytes_len = max_ordinal as usize * envelope_size;
3513            #[allow(unused_variables)]
3514            let offset = encoder.out_of_line_offset(bytes_len);
3515            let mut _prev_end_offset: usize = 0;
3516            if 1 > max_ordinal {
3517                return Ok(());
3518            }
3519
3520            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3521            // are envelope_size bytes.
3522            let cur_offset: usize = (1 - 1) * envelope_size;
3523
3524            // Zero reserved fields.
3525            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3526
3527            // Safety:
3528            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3529            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3530            //   envelope_size bytes, there is always sufficient room.
3531            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<100>, D>(
3532                self.name.as_ref().map(
3533                    <fidl::encoding::BoundedString<100> as fidl::encoding::ValueTypeMarker>::borrow,
3534                ),
3535                encoder,
3536                offset + cur_offset,
3537                depth,
3538            )?;
3539
3540            _prev_end_offset = cur_offset + envelope_size;
3541
3542            Ok(())
3543        }
3544    }
3545
3546    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
3547        for UnboundHangingDataChannelGetIdentifierResponse
3548    {
3549        #[inline(always)]
3550        fn new_empty() -> Self {
3551            Self::default()
3552        }
3553
3554        unsafe fn decode(
3555            &mut self,
3556            decoder: &mut fidl::encoding::Decoder<'_, D>,
3557            offset: usize,
3558            mut depth: fidl::encoding::Depth,
3559        ) -> fidl::Result<()> {
3560            decoder.debug_check_bounds::<Self>(offset);
3561            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
3562                None => return Err(fidl::Error::NotNullable),
3563                Some(len) => len,
3564            };
3565            // Calling decoder.out_of_line_offset(0) is not allowed.
3566            if len == 0 {
3567                return Ok(());
3568            };
3569            depth.increment()?;
3570            let envelope_size = 8;
3571            let bytes_len = len * envelope_size;
3572            let offset = decoder.out_of_line_offset(bytes_len)?;
3573            // Decode the envelope for each type.
3574            let mut _next_ordinal_to_read = 0;
3575            let mut next_offset = offset;
3576            let end_offset = offset + bytes_len;
3577            _next_ordinal_to_read += 1;
3578            if next_offset >= end_offset {
3579                return Ok(());
3580            }
3581
3582            // Decode unknown envelopes for gaps in ordinals.
3583            while _next_ordinal_to_read < 1 {
3584                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3585                _next_ordinal_to_read += 1;
3586                next_offset += envelope_size;
3587            }
3588
3589            let next_out_of_line = decoder.next_out_of_line();
3590            let handles_before = decoder.remaining_handles();
3591            if let Some((inlined, num_bytes, num_handles)) =
3592                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3593            {
3594                let member_inline_size =
3595                    <fidl::encoding::BoundedString<100> as fidl::encoding::TypeMarker>::inline_size(
3596                        decoder.context,
3597                    );
3598                if inlined != (member_inline_size <= 4) {
3599                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3600                }
3601                let inner_offset;
3602                let mut inner_depth = depth.clone();
3603                if inlined {
3604                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3605                    inner_offset = next_offset;
3606                } else {
3607                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3608                    inner_depth.increment()?;
3609                }
3610                let val_ref = self
3611                    .name
3612                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<100>, D));
3613                fidl::decode!(
3614                    fidl::encoding::BoundedString<100>,
3615                    D,
3616                    val_ref,
3617                    decoder,
3618                    inner_offset,
3619                    inner_depth
3620                )?;
3621                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3622                {
3623                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3624                }
3625                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3626                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3627                }
3628            }
3629
3630            next_offset += envelope_size;
3631
3632            // Decode the remaining unknown envelopes.
3633            while next_offset < end_offset {
3634                _next_ordinal_to_read += 1;
3635                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3636                next_offset += envelope_size;
3637            }
3638
3639            Ok(())
3640        }
3641    }
3642
3643    impl UnboundWaitableDataChannelGetIdentifierResponse {
3644        #[inline(always)]
3645        fn max_ordinal_present(&self) -> u64 {
3646            if let Some(_) = self.name {
3647                return 1;
3648            }
3649            0
3650        }
3651    }
3652
3653    impl fidl::encoding::ValueTypeMarker for UnboundWaitableDataChannelGetIdentifierResponse {
3654        type Borrowed<'a> = &'a Self;
3655        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3656            value
3657        }
3658    }
3659
3660    unsafe impl fidl::encoding::TypeMarker for UnboundWaitableDataChannelGetIdentifierResponse {
3661        type Owned = Self;
3662
3663        #[inline(always)]
3664        fn inline_align(_context: fidl::encoding::Context) -> usize {
3665            8
3666        }
3667
3668        #[inline(always)]
3669        fn inline_size(_context: fidl::encoding::Context) -> usize {
3670            16
3671        }
3672    }
3673
3674    unsafe impl<D: fidl::encoding::ResourceDialect>
3675        fidl::encoding::Encode<UnboundWaitableDataChannelGetIdentifierResponse, D>
3676        for &UnboundWaitableDataChannelGetIdentifierResponse
3677    {
3678        unsafe fn encode(
3679            self,
3680            encoder: &mut fidl::encoding::Encoder<'_, D>,
3681            offset: usize,
3682            mut depth: fidl::encoding::Depth,
3683        ) -> fidl::Result<()> {
3684            encoder.debug_check_bounds::<UnboundWaitableDataChannelGetIdentifierResponse>(offset);
3685            // Vector header
3686            let max_ordinal: u64 = self.max_ordinal_present();
3687            encoder.write_num(max_ordinal, offset);
3688            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
3689            // Calling encoder.out_of_line_offset(0) is not allowed.
3690            if max_ordinal == 0 {
3691                return Ok(());
3692            }
3693            depth.increment()?;
3694            let envelope_size = 8;
3695            let bytes_len = max_ordinal as usize * envelope_size;
3696            #[allow(unused_variables)]
3697            let offset = encoder.out_of_line_offset(bytes_len);
3698            let mut _prev_end_offset: usize = 0;
3699            if 1 > max_ordinal {
3700                return Ok(());
3701            }
3702
3703            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3704            // are envelope_size bytes.
3705            let cur_offset: usize = (1 - 1) * envelope_size;
3706
3707            // Zero reserved fields.
3708            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3709
3710            // Safety:
3711            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3712            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3713            //   envelope_size bytes, there is always sufficient room.
3714            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<100>, D>(
3715                self.name.as_ref().map(
3716                    <fidl::encoding::BoundedString<100> as fidl::encoding::ValueTypeMarker>::borrow,
3717                ),
3718                encoder,
3719                offset + cur_offset,
3720                depth,
3721            )?;
3722
3723            _prev_end_offset = cur_offset + envelope_size;
3724
3725            Ok(())
3726        }
3727    }
3728
3729    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
3730        for UnboundWaitableDataChannelGetIdentifierResponse
3731    {
3732        #[inline(always)]
3733        fn new_empty() -> Self {
3734            Self::default()
3735        }
3736
3737        unsafe fn decode(
3738            &mut self,
3739            decoder: &mut fidl::encoding::Decoder<'_, D>,
3740            offset: usize,
3741            mut depth: fidl::encoding::Depth,
3742        ) -> fidl::Result<()> {
3743            decoder.debug_check_bounds::<Self>(offset);
3744            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
3745                None => return Err(fidl::Error::NotNullable),
3746                Some(len) => len,
3747            };
3748            // Calling decoder.out_of_line_offset(0) is not allowed.
3749            if len == 0 {
3750                return Ok(());
3751            };
3752            depth.increment()?;
3753            let envelope_size = 8;
3754            let bytes_len = len * envelope_size;
3755            let offset = decoder.out_of_line_offset(bytes_len)?;
3756            // Decode the envelope for each type.
3757            let mut _next_ordinal_to_read = 0;
3758            let mut next_offset = offset;
3759            let end_offset = offset + bytes_len;
3760            _next_ordinal_to_read += 1;
3761            if next_offset >= end_offset {
3762                return Ok(());
3763            }
3764
3765            // Decode unknown envelopes for gaps in ordinals.
3766            while _next_ordinal_to_read < 1 {
3767                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3768                _next_ordinal_to_read += 1;
3769                next_offset += envelope_size;
3770            }
3771
3772            let next_out_of_line = decoder.next_out_of_line();
3773            let handles_before = decoder.remaining_handles();
3774            if let Some((inlined, num_bytes, num_handles)) =
3775                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3776            {
3777                let member_inline_size =
3778                    <fidl::encoding::BoundedString<100> as fidl::encoding::TypeMarker>::inline_size(
3779                        decoder.context,
3780                    );
3781                if inlined != (member_inline_size <= 4) {
3782                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3783                }
3784                let inner_offset;
3785                let mut inner_depth = depth.clone();
3786                if inlined {
3787                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3788                    inner_offset = next_offset;
3789                } else {
3790                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3791                    inner_depth.increment()?;
3792                }
3793                let val_ref = self
3794                    .name
3795                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<100>, D));
3796                fidl::decode!(
3797                    fidl::encoding::BoundedString<100>,
3798                    D,
3799                    val_ref,
3800                    decoder,
3801                    inner_offset,
3802                    inner_depth
3803                )?;
3804                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3805                {
3806                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3807                }
3808                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3809                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3810                }
3811            }
3812
3813            next_offset += envelope_size;
3814
3815            // Decode the remaining unknown envelopes.
3816            while next_offset < end_offset {
3817                _next_ordinal_to_read += 1;
3818                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3819                next_offset += envelope_size;
3820            }
3821
3822            Ok(())
3823        }
3824    }
3825
3826    impl WaitableDataChannelWriteRequest {
3827        #[inline(always)]
3828        fn max_ordinal_present(&self) -> u64 {
3829            if let Some(_) = self.data {
3830                return 1;
3831            }
3832            0
3833        }
3834    }
3835
3836    impl fidl::encoding::ValueTypeMarker for WaitableDataChannelWriteRequest {
3837        type Borrowed<'a> = &'a Self;
3838        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3839            value
3840        }
3841    }
3842
3843    unsafe impl fidl::encoding::TypeMarker for WaitableDataChannelWriteRequest {
3844        type Owned = Self;
3845
3846        #[inline(always)]
3847        fn inline_align(_context: fidl::encoding::Context) -> usize {
3848            8
3849        }
3850
3851        #[inline(always)]
3852        fn inline_size(_context: fidl::encoding::Context) -> usize {
3853            16
3854        }
3855    }
3856
3857    unsafe impl<D: fidl::encoding::ResourceDialect>
3858        fidl::encoding::Encode<WaitableDataChannelWriteRequest, D>
3859        for &WaitableDataChannelWriteRequest
3860    {
3861        unsafe fn encode(
3862            self,
3863            encoder: &mut fidl::encoding::Encoder<'_, D>,
3864            offset: usize,
3865            mut depth: fidl::encoding::Depth,
3866        ) -> fidl::Result<()> {
3867            encoder.debug_check_bounds::<WaitableDataChannelWriteRequest>(offset);
3868            // Vector header
3869            let max_ordinal: u64 = self.max_ordinal_present();
3870            encoder.write_num(max_ordinal, offset);
3871            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
3872            // Calling encoder.out_of_line_offset(0) is not allowed.
3873            if max_ordinal == 0 {
3874                return Ok(());
3875            }
3876            depth.increment()?;
3877            let envelope_size = 8;
3878            let bytes_len = max_ordinal as usize * envelope_size;
3879            #[allow(unused_variables)]
3880            let offset = encoder.out_of_line_offset(bytes_len);
3881            let mut _prev_end_offset: usize = 0;
3882            if 1 > max_ordinal {
3883                return Ok(());
3884            }
3885
3886            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3887            // are envelope_size bytes.
3888            let cur_offset: usize = (1 - 1) * envelope_size;
3889
3890            // Zero reserved fields.
3891            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3892
3893            // Safety:
3894            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3895            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3896            //   envelope_size bytes, there is always sufficient room.
3897            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u8, 255>, D>(
3898                self.data.as_ref().map(
3899                    <fidl::encoding::Vector<u8, 255> as fidl::encoding::ValueTypeMarker>::borrow,
3900                ),
3901                encoder,
3902                offset + cur_offset,
3903                depth,
3904            )?;
3905
3906            _prev_end_offset = cur_offset + envelope_size;
3907
3908            Ok(())
3909        }
3910    }
3911
3912    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
3913        for WaitableDataChannelWriteRequest
3914    {
3915        #[inline(always)]
3916        fn new_empty() -> Self {
3917            Self::default()
3918        }
3919
3920        unsafe fn decode(
3921            &mut self,
3922            decoder: &mut fidl::encoding::Decoder<'_, D>,
3923            offset: usize,
3924            mut depth: fidl::encoding::Depth,
3925        ) -> fidl::Result<()> {
3926            decoder.debug_check_bounds::<Self>(offset);
3927            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
3928                None => return Err(fidl::Error::NotNullable),
3929                Some(len) => len,
3930            };
3931            // Calling decoder.out_of_line_offset(0) is not allowed.
3932            if len == 0 {
3933                return Ok(());
3934            };
3935            depth.increment()?;
3936            let envelope_size = 8;
3937            let bytes_len = len * envelope_size;
3938            let offset = decoder.out_of_line_offset(bytes_len)?;
3939            // Decode the envelope for each type.
3940            let mut _next_ordinal_to_read = 0;
3941            let mut next_offset = offset;
3942            let end_offset = offset + bytes_len;
3943            _next_ordinal_to_read += 1;
3944            if next_offset >= end_offset {
3945                return Ok(());
3946            }
3947
3948            // Decode unknown envelopes for gaps in ordinals.
3949            while _next_ordinal_to_read < 1 {
3950                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3951                _next_ordinal_to_read += 1;
3952                next_offset += envelope_size;
3953            }
3954
3955            let next_out_of_line = decoder.next_out_of_line();
3956            let handles_before = decoder.remaining_handles();
3957            if let Some((inlined, num_bytes, num_handles)) =
3958                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3959            {
3960                let member_inline_size =
3961                    <fidl::encoding::Vector<u8, 255> as fidl::encoding::TypeMarker>::inline_size(
3962                        decoder.context,
3963                    );
3964                if inlined != (member_inline_size <= 4) {
3965                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3966                }
3967                let inner_offset;
3968                let mut inner_depth = depth.clone();
3969                if inlined {
3970                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3971                    inner_offset = next_offset;
3972                } else {
3973                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3974                    inner_depth.increment()?;
3975                }
3976                let val_ref = self
3977                    .data
3978                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u8, 255>, D));
3979                fidl::decode!(fidl::encoding::Vector<u8, 255>, D, val_ref, decoder, inner_offset, inner_depth)?;
3980                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3981                {
3982                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3983                }
3984                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3985                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3986                }
3987            }
3988
3989            next_offset += envelope_size;
3990
3991            // Decode the remaining unknown envelopes.
3992            while next_offset < end_offset {
3993                _next_ordinal_to_read += 1;
3994                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3995                next_offset += envelope_size;
3996            }
3997
3998            Ok(())
3999        }
4000    }
4001}