Skip to main content

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