Skip to main content

fidl_fuchsia_lowpan_experimental__common/
fidl_fuchsia_lowpan_experimental__common.rs

1// WARNING: This file is machine generated by fidlgen.
2
3#![warn(clippy::all)]
4#![allow(unused_parens, unused_mut, unused_imports, nonstandard_style)]
5
6use bitflags::bitflags;
7use fidl::encoding::{MessageBufFor, ProxyChannelBox, ResourceDialect};
8use futures::future::{self, MaybeDone, TryFutureExt};
9use zx_status;
10
11pub const MAX_EXTERNAL_ROUTES: u32 = 32;
12
13/// The maximum number of entries allowed in the neighbor-related inspect
14/// dump. This prevents the inspect tree from becoming excessively large.
15pub const MAX_NEIGHBOR_INSPECT_ENTRIES: u32 = 64;
16
17pub const MAX_ON_MESH_PREFIXES: u32 = 32;
18
19pub const MAX_PROVISION_URL_LEN: u16 = 64;
20
21/// The maximum number of SRP hosts and services included in the inspect dump.
22/// This limit prevents the inspect tree from becoming excessively large.
23pub const MAX_SRP_INSPECT_ENTRIES: u32 = 64;
24
25pub const MAX_VENDOR_DATA_LEN: u16 = 64;
26
27pub const MAX_VENDOR_MODEL_LEN: u16 = 32;
28
29pub const MAX_VENDOR_NAME_LEN: u16 = 32;
30
31pub const MAX_VENDOR_SW_VER_LEN: u16 = 16;
32
33pub const PSKD_LEN: u16 = 32;
34
35/// Represents the DHCPv6 PD state.
36#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
37pub enum Dhcp6PdState {
38    Dhcp6PdStateUnspecified,
39    /// DHCPv6 PD is disabled on the border router.
40    Dhcp6PdStateDisabled,
41    /// DHCPv6 PD is enabled but won't try to request and publish a prefix.
42    Dhcp6PdStateStopped,
43    /// DHCPv6 PD is enabled and will try to request and publish a prefix.
44    Dhcp6PdStateRunning,
45    /// DHCPv6 PD is idle; Higher-prf prefix published by other BRs.
46    Dhcp6PdStateIdle,
47    #[doc(hidden)]
48    __SourceBreaking {
49        unknown_ordinal: u32,
50    },
51}
52
53/// Pattern that matches an unknown `Dhcp6PdState` member.
54#[macro_export]
55macro_rules! Dhcp6PdStateUnknown {
56    () => {
57        _
58    };
59}
60
61impl Dhcp6PdState {
62    #[inline]
63    pub fn from_primitive(prim: u32) -> Option<Self> {
64        match prim {
65            0 => Some(Self::Dhcp6PdStateUnspecified),
66            1 => Some(Self::Dhcp6PdStateDisabled),
67            2 => Some(Self::Dhcp6PdStateStopped),
68            3 => Some(Self::Dhcp6PdStateRunning),
69            4 => Some(Self::Dhcp6PdStateIdle),
70            _ => None,
71        }
72    }
73
74    #[inline]
75    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
76        match prim {
77            0 => Self::Dhcp6PdStateUnspecified,
78            1 => Self::Dhcp6PdStateDisabled,
79            2 => Self::Dhcp6PdStateStopped,
80            3 => Self::Dhcp6PdStateRunning,
81            4 => Self::Dhcp6PdStateIdle,
82            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
83        }
84    }
85
86    #[inline]
87    pub fn unknown() -> Self {
88        Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
89    }
90
91    #[inline]
92    pub const fn into_primitive(self) -> u32 {
93        match self {
94            Self::Dhcp6PdStateUnspecified => 0,
95            Self::Dhcp6PdStateDisabled => 1,
96            Self::Dhcp6PdStateStopped => 2,
97            Self::Dhcp6PdStateRunning => 3,
98            Self::Dhcp6PdStateIdle => 4,
99            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
100        }
101    }
102
103    #[inline]
104    pub fn is_unknown(&self) -> bool {
105        match self {
106            Self::__SourceBreaking { unknown_ordinal: _ } => true,
107            _ => false,
108        }
109    }
110}
111
112#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
113pub enum Nat64State {
114    Nat64StateUnspecified,
115    Nat64StateDisabled,
116    Nat64StateNotRunning,
117    Nat64StateIdle,
118    Nat64StateActive,
119    #[doc(hidden)]
120    __SourceBreaking {
121        unknown_ordinal: u32,
122    },
123}
124
125/// Pattern that matches an unknown `Nat64State` member.
126#[macro_export]
127macro_rules! Nat64StateUnknown {
128    () => {
129        _
130    };
131}
132
133impl Nat64State {
134    #[inline]
135    pub fn from_primitive(prim: u32) -> Option<Self> {
136        match prim {
137            0 => Some(Self::Nat64StateUnspecified),
138            1 => Some(Self::Nat64StateDisabled),
139            2 => Some(Self::Nat64StateNotRunning),
140            3 => Some(Self::Nat64StateIdle),
141            4 => Some(Self::Nat64StateActive),
142            _ => None,
143        }
144    }
145
146    #[inline]
147    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
148        match prim {
149            0 => Self::Nat64StateUnspecified,
150            1 => Self::Nat64StateDisabled,
151            2 => Self::Nat64StateNotRunning,
152            3 => Self::Nat64StateIdle,
153            4 => Self::Nat64StateActive,
154            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
155        }
156    }
157
158    #[inline]
159    pub fn unknown() -> Self {
160        Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
161    }
162
163    #[inline]
164    pub const fn into_primitive(self) -> u32 {
165        match self {
166            Self::Nat64StateUnspecified => 0,
167            Self::Nat64StateDisabled => 1,
168            Self::Nat64StateNotRunning => 2,
169            Self::Nat64StateIdle => 3,
170            Self::Nat64StateActive => 4,
171            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
172        }
173    }
174
175    #[inline]
176    pub fn is_unknown(&self) -> bool {
177        match self {
178            Self::__SourceBreaking { unknown_ordinal: _ } => true,
179            _ => false,
180        }
181    }
182}
183
184/// LoWPAN Provisioning Error
185///
186/// Returned by [`ProvisioningMonitor.WatchProgress`].
187#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
188pub enum ProvisionError {
189    /// Provisioning did not successfully complete because the
190    /// credential was rejected. For example, the key was incorrect.
191    ///
192    /// This may be interpreted as an argument error.
193    CredentialRejected,
194    /// Provisioning did not successfully complete because the
195    /// no peers on the requested network are in range.
196    NetworkNotFound,
197    /// Forming a new network did not successfully complete because the
198    /// a peer with the requested network identity is in range.
199    NetworkAlreadyExists,
200    /// This operation was canceled due to an incompatible operation
201    /// being started before this one was finished.
202    Canceled,
203    #[doc(hidden)]
204    __SourceBreaking { unknown_ordinal: i32 },
205}
206
207/// Pattern that matches an unknown `ProvisionError` member.
208#[macro_export]
209macro_rules! ProvisionErrorUnknown {
210    () => {
211        _
212    };
213}
214
215impl ProvisionError {
216    #[inline]
217    pub fn from_primitive(prim: i32) -> Option<Self> {
218        match prim {
219            1 => Some(Self::CredentialRejected),
220            2 => Some(Self::NetworkNotFound),
221            3 => Some(Self::NetworkAlreadyExists),
222            4 => Some(Self::Canceled),
223            _ => None,
224        }
225    }
226
227    #[inline]
228    pub fn from_primitive_allow_unknown(prim: i32) -> Self {
229        match prim {
230            1 => Self::CredentialRejected,
231            2 => Self::NetworkNotFound,
232            3 => Self::NetworkAlreadyExists,
233            4 => Self::Canceled,
234            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
235        }
236    }
237
238    #[inline]
239    pub fn unknown() -> Self {
240        Self::__SourceBreaking { unknown_ordinal: 0x7fffffff }
241    }
242
243    #[inline]
244    pub const fn into_primitive(self) -> i32 {
245        match self {
246            Self::CredentialRejected => 1,
247            Self::NetworkNotFound => 2,
248            Self::NetworkAlreadyExists => 3,
249            Self::Canceled => 4,
250            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
251        }
252    }
253
254    #[inline]
255    pub fn is_unknown(&self) -> bool {
256        match self {
257            Self::__SourceBreaking { unknown_ordinal: _ } => true,
258            _ => false,
259        }
260    }
261}
262
263/// Route preference, as described in RFC4191.
264#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
265#[repr(i8)]
266pub enum RoutePreference {
267    /// Low route preference.
268    Low = -1,
269    /// Medium route preference.
270    Medium = 0,
271    /// High route preference.
272    High = 1,
273}
274
275impl RoutePreference {
276    #[inline]
277    pub fn from_primitive(prim: i8) -> Option<Self> {
278        match prim {
279            -1 => Some(Self::Low),
280            0 => Some(Self::Medium),
281            1 => Some(Self::High),
282            _ => None,
283        }
284    }
285
286    #[inline]
287    pub const fn into_primitive(self) -> i8 {
288        self as i8
289    }
290}
291
292#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
293#[repr(u32)]
294pub enum SrpServerAddressMode {
295    /// Thread network data is published as unicast addresses.
296    Unicast = 1,
297    /// Thread network data is published as anycast addresses.
298    Anycast = 2,
299}
300
301impl SrpServerAddressMode {
302    #[inline]
303    pub fn from_primitive(prim: u32) -> Option<Self> {
304        match prim {
305            1 => Some(Self::Unicast),
306            2 => Some(Self::Anycast),
307            _ => None,
308        }
309    }
310
311    #[inline]
312    pub const fn into_primitive(self) -> u32 {
313        self as u32
314    }
315}
316
317#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
318#[repr(u32)]
319pub enum SrpServerState {
320    /// The server is disabled.
321    Disabled = 1,
322    /// The server is enabled and running.
323    Running = 2,
324    /// The server is enabled, but stopped.
325    Stopped = 3,
326}
327
328impl SrpServerState {
329    #[inline]
330    pub fn from_primitive(prim: u32) -> Option<Self> {
331        match prim {
332            1 => Some(Self::Disabled),
333            2 => Some(Self::Running),
334            3 => Some(Self::Stopped),
335            _ => None,
336        }
337    }
338
339    #[inline]
340    pub const fn into_primitive(self) -> u32 {
341        self as u32
342    }
343}
344
345/// Represents the Upstream DNS state
346#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
347pub enum UpstreamDnsQueryState {
348    UpstreamdnsQueryStateUnspecified,
349    UpstreamdnsQueryStateEnabled,
350    UpstreamdnsQueryStateDisabled,
351    #[doc(hidden)]
352    __SourceBreaking {
353        unknown_ordinal: u32,
354    },
355}
356
357/// Pattern that matches an unknown `UpstreamDnsQueryState` member.
358#[macro_export]
359macro_rules! UpstreamDnsQueryStateUnknown {
360    () => {
361        _
362    };
363}
364
365impl UpstreamDnsQueryState {
366    #[inline]
367    pub fn from_primitive(prim: u32) -> Option<Self> {
368        match prim {
369            0 => Some(Self::UpstreamdnsQueryStateUnspecified),
370            1 => Some(Self::UpstreamdnsQueryStateEnabled),
371            2 => Some(Self::UpstreamdnsQueryStateDisabled),
372            _ => None,
373        }
374    }
375
376    #[inline]
377    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
378        match prim {
379            0 => Self::UpstreamdnsQueryStateUnspecified,
380            1 => Self::UpstreamdnsQueryStateEnabled,
381            2 => Self::UpstreamdnsQueryStateDisabled,
382            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
383        }
384    }
385
386    #[inline]
387    pub fn unknown() -> Self {
388        Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
389    }
390
391    #[inline]
392    pub const fn into_primitive(self) -> u32 {
393        match self {
394            Self::UpstreamdnsQueryStateUnspecified => 0,
395            Self::UpstreamdnsQueryStateEnabled => 1,
396            Self::UpstreamdnsQueryStateDisabled => 2,
397            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
398        }
399    }
400
401    #[inline]
402    pub fn is_unknown(&self) -> bool {
403        match self {
404            Self::__SourceBreaking { unknown_ordinal: _ } => true,
405            _ => false,
406        }
407    }
408}
409
410#[derive(Clone, Debug, PartialEq)]
411pub struct BeaconInfoStreamNextResponse {
412    pub beacons: Vec<BeaconInfo>,
413}
414
415impl fidl::Persistable for BeaconInfoStreamNextResponse {}
416
417#[derive(Clone, Debug, PartialEq)]
418pub struct DeviceGetSupportedChannelsResponse {
419    pub channels_info: Vec<ChannelInfo>,
420}
421
422impl fidl::Persistable for DeviceGetSupportedChannelsResponse {}
423
424#[derive(Clone, Debug, PartialEq)]
425pub struct DeviceRouteExtraGetLocalExternalRoutesResponse {
426    pub external_routes: Vec<ExternalRoute>,
427}
428
429impl fidl::Persistable for DeviceRouteExtraGetLocalExternalRoutesResponse {}
430
431#[derive(Clone, Debug, PartialEq)]
432pub struct DeviceRouteExtraGetLocalOnMeshPrefixesResponse {
433    pub prefixes: Vec<OnMeshPrefix>,
434}
435
436impl fidl::Persistable for DeviceRouteExtraGetLocalOnMeshPrefixesResponse {}
437
438#[derive(Clone, Debug, PartialEq)]
439pub struct DeviceRouteRegisterExternalRouteRequest {
440    pub external_route: ExternalRoute,
441}
442
443impl fidl::Persistable for DeviceRouteRegisterExternalRouteRequest {}
444
445#[derive(Clone, Debug, PartialEq)]
446pub struct DeviceRouteRegisterOnMeshPrefixRequest {
447    pub prefix: OnMeshPrefix,
448}
449
450impl fidl::Persistable for DeviceRouteRegisterOnMeshPrefixRequest {}
451
452#[derive(Clone, Debug, PartialEq)]
453pub struct DeviceRouteUnregisterExternalRouteRequest {
454    pub subnet: fidl_fuchsia_net__common::Ipv6AddressWithPrefix,
455}
456
457impl fidl::Persistable for DeviceRouteUnregisterExternalRouteRequest {}
458
459#[derive(Clone, Debug, PartialEq)]
460pub struct DeviceRouteUnregisterOnMeshPrefixRequest {
461    pub subnet: fidl_fuchsia_net__common::Ipv6AddressWithPrefix,
462}
463
464impl fidl::Persistable for DeviceRouteUnregisterOnMeshPrefixRequest {}
465
466#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
467#[repr(C)]
468pub struct LegacyJoiningMakeJoinableRequest {
469    pub duration: i64,
470    pub port: u16,
471}
472
473impl fidl::Persistable for LegacyJoiningMakeJoinableRequest {}
474
475#[derive(Clone, Debug, PartialEq)]
476pub struct ProvisioningMonitorWatchProgressResponse {
477    pub progress: ProvisioningProgress,
478}
479
480impl fidl::Persistable for ProvisioningMonitorWatchProgressResponse {}
481
482#[derive(Clone, Debug, PartialEq)]
483pub struct TelemetryProviderGetTelemetryResponse {
484    pub telemetry: Telemetry,
485}
486
487impl fidl::Persistable for TelemetryProviderGetTelemetryResponse {}
488
489#[derive(Clone, Debug, Default, PartialEq)]
490pub struct BeaconInfo {
491    /// The MAC address associated with this beacon.
492    pub address: Option<fidl_fuchsia_lowpan__common::MacAddress>,
493    /// The identity of the network being advertised by
494    /// this beacon.
495    pub identity: Option<fidl_fuchsia_lowpan_device__common::Identity>,
496    /// RSSI of the beacon, measured in dBm.
497    ///
498    /// A value of -128 should be treated as if this
499    /// field was absent.
500    pub rssi: Option<i8>,
501    /// Link Quality Index (LQI) of the beacon.
502    ///
503    /// * A value of 0 should be treated as if this
504    ///   field was absent.
505    /// * A value of 1 indicates the worst possible
506    ///   quality where the decoded beacon is still valid.
507    /// * A value of 255 indicates the best possible
508    ///   quality that can be recognized by the radio
509    ///   hardware.
510    /// * Values 2-254 are intended to represent relative
511    ///   quality levels evenly distributed between the
512    ///   worst and best, with lower values always
513    ///   indicating a worse quality than higher values.
514    pub lqi: Option<u8>,
515    #[doc(hidden)]
516    pub __source_breaking: fidl::marker::SourceBreaking,
517}
518
519impl fidl::Persistable for BeaconInfo {}
520
521/// Counters associated with border routing.
522#[derive(Clone, Debug, Default, PartialEq)]
523pub struct BorderRoutingCounters {
524    /// The number of packets associated with inbound unicast messages.
525    ///
526    /// Required.
527    pub inbound_unicast_packets: Option<u64>,
528    /// The number of bytes associated with inbound unicast messages.
529    ///
530    /// Required.
531    pub inbound_unicast_bytes: Option<u64>,
532    /// The number of packets associated with inbound multicast messages.
533    ///
534    /// Required.
535    pub inbound_multicast_packets: Option<u64>,
536    /// The number of bytes associated with inbound multicast messages.
537    ///
538    /// Required.
539    pub inbound_multicast_bytes: Option<u64>,
540    /// The number of packets associated with outbound unicast messages.
541    ///
542    /// Required.
543    pub outbound_unicast_packets: Option<u64>,
544    /// The number of bytes associated with outbound unicast messages.
545    ///
546    /// Required.
547    pub outbound_unicast_bytes: Option<u64>,
548    /// The number of packets associated with outbound multicast messages.
549    ///
550    /// Required.
551    pub outbound_multicast_packets: Option<u64>,
552    /// The number of bytes associated with outbound multicast messages.
553    ///
554    /// Required.
555    pub outbound_multicast_bytes: Option<u64>,
556    /// The number of received RA packets.
557    ///
558    /// Required.
559    pub ra_rx: Option<u32>,
560    /// The number of RA packets successfully transmitted.
561    ///
562    /// Required.
563    pub ra_tx_success: Option<u32>,
564    /// The number of RA packets failed to transmit.
565    ///
566    /// Required.
567    pub ra_tx_failure: Option<u32>,
568    /// The number of received RS packets.
569    ///
570    /// Required.
571    pub rs_rx: Option<u32>,
572    /// The number of RS packets successfully transmitted.
573    ///
574    /// Required.
575    pub rs_tx_success: Option<u32>,
576    /// The number of RS packets failed to transmit.
577    ///
578    /// Required.
579    pub rs_tx_failure: Option<u32>,
580    /// Inbound Internet packets when DHCPv6 PD enabled.
581    ///
582    /// Optional.
583    pub inbound_internet_packets: Option<u64>,
584    /// Inbound Internet bytes when DHCPv6 PD enabled.
585    ///
586    /// Optional.
587    pub inbound_internet_bytes: Option<u64>,
588    /// Outbound Internet packets when DHCPv6 PD enabled.
589    ///
590    /// Optional.
591    pub outbound_internet_packets: Option<u64>,
592    /// Outbound Internet bytes when DHCPv6 PD enabled.
593    ///
594    /// Optional.
595    pub outbound_internet_bytes: Option<u64>,
596    #[doc(hidden)]
597    pub __source_breaking: fidl::marker::SourceBreaking,
598}
599
600impl fidl::Persistable for BorderRoutingCounters {}
601
602/// Information about the state of components of NAT64
603#[derive(Clone, Debug, Default, PartialEq)]
604pub struct BorderRoutingNat64State {
605    /// prefix manager state
606    pub prefix_manager_state: Option<Nat64State>,
607    /// translator state
608    pub translator_state: Option<Nat64State>,
609    #[doc(hidden)]
610    pub __source_breaking: fidl::marker::SourceBreaking,
611}
612
613impl fidl::Persistable for BorderRoutingNat64State {}
614
615/// The peer BR's info found in Network Data entries.
616#[derive(Clone, Debug, Default, PartialEq)]
617pub struct BorderRoutingPeer {
618    /// IEEE 802.15.4 short address of neighbor.
619    ///
620    /// Required.
621    pub thread_rloc: Option<u16>,
622    /// The age of this entry in the neighbor table.
623    ///
624    /// Required.
625    pub age: Option<i64>,
626    #[doc(hidden)]
627    pub __source_breaking: fidl::marker::SourceBreaking,
628}
629
630impl fidl::Persistable for BorderRoutingPeer {}
631
632/// The discovered routers by Border Routing Manager on the infrastructure link.
633#[derive(Clone, Debug, Default, PartialEq)]
634pub struct BorderRoutingRouter {
635    /// IPv6 address string of the router.
636    ///
637    /// Required.
638    pub address: Option<String>,
639    /// Duration since last update (any message rx) from this router.
640    ///
641    /// Required.
642    pub duration_since_last_update: Option<i64>,
643    /// The router's age (duration since its first discovery).
644    ///
645    /// Required.
646    pub age: Option<i64>,
647    /// The router's Managed Address Config flag (`M` flag).
648    ///
649    /// Required.
650    pub managed_address_config_flag: Option<bool>,
651    /// The router's Other Config flag (`O` flag).
652    ///
653    /// Required.
654    pub other_config_flag: Option<bool>,
655    /// The router's SNAC Router flag (`S` flag).
656    ///
657    /// Required.
658    pub snac_router_flag: Option<bool>,
659    /// This router is the local device (this BR).
660    ///
661    /// Required.
662    pub is_local_device: Option<bool>,
663    /// This router is reachable.
664    ///
665    /// Required.
666    pub is_reachable: Option<bool>,
667    /// This router is (likely) a peer BR.
668    ///
669    /// Required.
670    pub is_peer_br: Option<bool>,
671    #[doc(hidden)]
672    pub __source_breaking: fidl::marker::SourceBreaking,
673}
674
675impl fidl::Persistable for BorderRoutingRouter {}
676
677#[derive(Clone, Debug, Default, PartialEq)]
678pub struct ChannelInfo {
679    /// The index used by the interface to identify
680    /// this channel.
681    pub index: Option<u16>,
682    /// Human-readable identifier for channel.
683    ///
684    /// For most network types, this is just
685    /// the string representation of the index.
686    /// However, some network types might have
687    /// non-integer ways of identifying specific
688    /// channels. This field allows the application
689    /// to display the name of the channel correctly
690    /// under such circumstances.
691    ///
692    /// The allowed characters include:
693    ///
694    ///  * Dash (`-`), Underscore (`_`), Plus(`+`), Semicolon(`:`)
695    ///  * Numbers (`0`-`9`)
696    ///  * Letters (`a`-`z`, `A`-`Z`)
697    pub id: Option<String>,
698    /// The maximum transmit power allowed on
699    /// this channel, in dBm.
700    pub max_transmit_power_dbm: Option<i8>,
701    /// The center RF frequency of this channel, in Hz.
702    ///
703    /// For example, 802.15.4 has the following values:
704    ///
705    /// Channel | Center Frequency (Hz)
706    /// --------|----------------------
707    /// 11      | 2,405,000,000
708    /// 12      | 2,410,000,000
709    /// 13      | 2,415,000,000
710    /// 14      | 2,420,000,000
711    /// 15      | 2,425,000,000
712    /// 16      | 2,430,000,000
713    /// 17      | 2,435,000,000
714    /// 18      | 2,440,000,000
715    /// 19      | 2,445,000,000
716    /// 20      | 2,450,000,000
717    /// 21      | 2,455,000,000
718    /// 22      | 2,460,000,000
719    /// 23      | 2,465,000,000
720    /// 24      | 2,470,000,000
721    /// 25      | 2,475,000,000
722    /// 26      | 2,480,000,000
723    pub spectrum_center_frequency_hz: Option<u64>,
724    /// The RF spectrum bandwidth used by this
725    /// channel where the power level is expected to
726    /// be higher than -20dBr, in Hz.
727    ///
728    /// For example, 802.15.4 channels 11 thru 26 would
729    /// have the value 2,000,000 (2 MHz).
730    pub spectrum_bandwidth_hz: Option<u64>,
731    /// Indicates if this channel is masked by the
732    /// current regulatory domain and is thus unable
733    /// to be used.
734    pub masked_by_regulatory_domain: Option<bool>,
735    #[doc(hidden)]
736    pub __source_breaking: fidl::marker::SourceBreaking,
737}
738
739impl fidl::Persistable for ChannelInfo {}
740
741/// DHCPv6 PD related info.
742#[derive(Clone, Debug, Default, PartialEq)]
743pub struct Dhcp6PdInfo {
744    /// DHCPv6 PD state.
745    ///
746    /// Required.
747    pub dhcp6pd_state: Option<Dhcp6PdState>,
748    /// DHCPv6 PD processed RA Info.
749    ///
750    /// Optional.
751    pub pd_processed_ra_info: Option<PdProcessedRaInfo>,
752    /// DHCPv6 PD prefix.
753    ///
754    /// Optional.
755    pub hashed_pd_prefix: Option<Vec<u8>>,
756    #[doc(hidden)]
757    pub __source_breaking: fidl::marker::SourceBreaking,
758}
759
760impl fidl::Persistable for Dhcp6PdInfo {}
761
762/// Represents a TXT record entry representing a key/value pair (RFC 6763 - section 6.3).
763#[derive(Clone, Debug, Default, PartialEq)]
764pub struct DnsTxtEntry {
765    /// The key string of the TXT record.
766    ///
767    /// Maximum length of TXT key string supported by `otDnsTxtEntryIterator` is 64,
768    /// see OT_DNS_TXT_KEY_ITER_MAX_LENGTH.
769    ///
770    /// Required.
771    pub key: Option<String>,
772    /// The value of the TXT record.
773    ///
774    /// The overall key-value pair encoded length (including the key and "=") must be 255
775    /// bytes or less.
776    ///
777    /// Required.
778    pub value: Option<Vec<u8>>,
779    #[doc(hidden)]
780    pub __source_breaking: fidl::marker::SourceBreaking,
781}
782
783impl fidl::Persistable for DnsTxtEntry {}
784
785/// Counters associated with the DNS-SD server.
786#[derive(Clone, Debug, Default, PartialEq)]
787pub struct DnssdCounters {
788    /// The number of successful responses.
789    ///
790    /// Required.
791    pub success_response: Option<u32>,
792    /// The number of 'server failure' responses.
793    ///
794    /// Required.
795    pub server_failure_response: Option<u32>,
796    /// The number of 'format error' responses.
797    ///
798    /// Required.
799    pub format_error_response: Option<u32>,
800    /// The number of 'name error' responses.
801    ///
802    /// Required.
803    pub name_error_response: Option<u32>,
804    /// The number of 'not implemented' responses.
805    ///
806    /// Required.
807    pub not_implemented_response: Option<u32>,
808    /// The number of 'other' responses.
809    ///
810    /// Required.
811    pub other_response: Option<u32>,
812    /// The number of queries completely resolved by the local SRP server.
813    ///
814    /// Required.
815    pub resolved_by_srp: Option<u32>,
816    /// The counters of upstream DNS feature.
817    ///
818    /// Optional.
819    pub upstream_dns_counters: Option<UpstreamDnsCounters>,
820    #[doc(hidden)]
821    pub __source_breaking: fidl::marker::SourceBreaking,
822}
823
824impl fidl::Persistable for DnssdCounters {}
825
826/// LoWPAN External Route.
827///
828/// Informed by the Thread 1.1.1 Specification, section 5.13.3.
829#[derive(Clone, Debug, Default, PartialEq)]
830pub struct ExternalRoute {
831    /// Subnet for route. Required.
832    pub subnet: Option<fidl_fuchsia_net__common::Ipv6AddressWithPrefix>,
833    /// Indicates the what preference this route should be given relative
834    /// to other devices offering the same external route. If not present,
835    /// `MEDIUM` preference is assumed.
836    ///
837    /// Based on `R_preference` from Section 5.13.3 of the Thread 1.1.1
838    /// Specification.
839    pub route_preference: Option<RoutePreference>,
840    /// True if the route is expected to be available for at least Thread's
841    /// `MIN_STABLE_LIFETIME`; otherwise, `false`. If not present, assumed to
842    /// be `false`.
843    ///
844    /// The Thread specification defines `MIN_STABLE_LIFETIME` as 168 hours.
845    ///
846    /// Based on `R_stable` from Section 5.13.3 of the Thread 1.1.1
847    /// Specification.
848    pub stable: Option<bool>,
849    #[doc(hidden)]
850    pub __source_breaking: fidl::marker::SourceBreaking,
851}
852
853impl fidl::Persistable for ExternalRoute {}
854
855/// Parameters for joiner commissioning.
856///
857/// More information:
858/// https://www.threadgroup.org/Portals/0/documents/support/CommissioningWhitePaper_658_2.pdf
859#[derive(Clone, Debug, Default, PartialEq)]
860pub struct JoinerCommissioningParams {
861    /// Commissioning PSKd. Required.
862    pub pskd: Option<String>,
863    /// Provisioning URL. Optional.
864    pub provisioning_url: Option<String>,
865    /// Vendor name. Optional.
866    pub vendor_name: Option<String>,
867    /// Vendor model. Optional.
868    pub vendor_model: Option<String>,
869    /// Vendor Software Version. Optional.
870    pub vendor_sw_version: Option<String>,
871    /// Vendor data string. Optional.
872    pub vendor_data_string: Option<String>,
873    #[doc(hidden)]
874    pub __source_breaking: fidl::marker::SourceBreaking,
875}
876
877impl fidl::Persistable for JoinerCommissioningParams {}
878
879/// Node information for Thread network leaders.
880#[derive(Clone, Debug, Default, PartialEq)]
881pub struct LeaderData {
882    /// The network partition ID of the leader.
883    ///
884    /// Required.
885    pub partition_id: Option<u32>,
886    /// The weight of this leader on the network.
887    ///
888    /// Required.
889    pub weight: Option<u8>,
890    /// The full network data version.
891    ///
892    /// Required.
893    pub network_data_version: Option<u8>,
894    /// The stable network data version.
895    ///
896    /// Required.
897    pub stable_network_data_version: Option<u8>,
898    /// The router ID of the leader.
899    ///
900    /// Required.
901    pub router_id: Option<u8>,
902    #[doc(hidden)]
903    pub __source_breaking: fidl::marker::SourceBreaking,
904}
905
906impl fidl::Persistable for LeaderData {}
907
908/// Link Metrics info of the neighbors.
909#[derive(Clone, Debug, Default, PartialEq)]
910pub struct LinkMetricsEntry {
911    /// Link Margin value of the neighbor
912    pub link_margin: Option<u8>,
913    /// RSSI value of the neighbor
914    pub rssi: Option<i8>,
915    #[doc(hidden)]
916    pub __source_breaking: fidl::marker::SourceBreaking,
917}
918
919impl fidl::Persistable for LinkMetricsEntry {}
920
921/// Multi radio link info associated with a neighbor.
922#[derive(Clone, Debug, Default, PartialEq)]
923pub struct MultiRadioNeighborInfo {
924    /// IEEE 802.15.4 Extended Address.
925    ///
926    /// Required.
927    pub extended_address: Option<Vec<u8>>,
928    /// IEEE 802.15.4 short address of neighbor.
929    ///
930    /// Required.
931    pub thread_rloc: Option<u16>,
932    /// Multi radio link info. So far only '15.4' and 'TREL' links.
933    /// Considering a potential future expansion to other links, set
934    /// the MAX capability to 5.
935    ///
936    /// Required.
937    pub radio_link_info: Option<Vec<RadioLinkInfo>>,
938    #[doc(hidden)]
939    pub __source_breaking: fidl::marker::SourceBreaking,
940}
941
942impl fidl::Persistable for MultiRadioNeighborInfo {}
943
944#[derive(Clone, Debug, Default, PartialEq)]
945pub struct Nat64ErrorCounters {
946    /// Packet drop for unknown reasons
947    pub unknown: Option<Nat64PacketCounters>,
948    /// Packet drop due to failed to parse the datagram
949    pub illegal_packet: Option<Nat64PacketCounters>,
950    /// Packet drop due to unsupported IP protocol
951    pub unsupported_protocol: Option<Nat64PacketCounters>,
952    /// Packet drop due to no mappings found or mapping pool exhausted
953    pub no_mapping: Option<Nat64PacketCounters>,
954    #[doc(hidden)]
955    pub __source_breaking: fidl::marker::SourceBreaking,
956}
957
958impl fidl::Persistable for Nat64ErrorCounters {}
959
960#[derive(Clone, Debug, Default, PartialEq)]
961pub struct Nat64Info {
962    /// NAT64 border routing state
963    pub nat64_state: Option<BorderRoutingNat64State>,
964    /// NAT64 mapping
965    pub nat64_mappings: Option<Vec<Nat64Mapping>>,
966    /// NAT64 error counters
967    pub nat64_error_counters: Option<Nat64ErrorCounters>,
968    /// NAT64 protocol counters
969    pub nat64_protocol_counters: Option<Nat64ProtocolCounters>,
970    #[doc(hidden)]
971    pub __source_breaking: fidl::marker::SourceBreaking,
972}
973
974impl fidl::Persistable for Nat64Info {}
975
976/// Information about the mappings of NAT64 translator
977#[derive(Clone, Debug, Default, PartialEq)]
978pub struct Nat64Mapping {
979    /// The unique id for a mapping session
980    pub mapping_id: Option<u64>,
981    /// The IPv4 address of the mapping
982    pub ip4_addr: Option<Vec<u8>>,
983    /// The IPv6 address of the mapping
984    pub ip6_addr: Option<Vec<u8>>,
985    /// Remaining time before expiry in milliseconds
986    pub remaining_time_ms: Option<u32>,
987    /// Nat64 Counters
988    pub counters: Option<Nat64ProtocolCounters>,
989    #[doc(hidden)]
990    pub __source_breaking: fidl::marker::SourceBreaking,
991}
992
993impl fidl::Persistable for Nat64Mapping {}
994
995#[derive(Clone, Debug, Default, PartialEq)]
996pub struct Nat64PacketCounters {
997    /// Number of packets translated from IPv4 to IPv6
998    pub ipv4_to_ipv6_packets: Option<u64>,
999    /// Number of packets translated from IPv6 to IPv4
1000    pub ipv6_to_ipv4_packets: Option<u64>,
1001    #[doc(hidden)]
1002    pub __source_breaking: fidl::marker::SourceBreaking,
1003}
1004
1005impl fidl::Persistable for Nat64PacketCounters {}
1006
1007#[derive(Clone, Debug, Default, PartialEq)]
1008pub struct Nat64ProtocolCounters {
1009    /// TCP counters
1010    pub tcp: Option<Nat64TrafficCounters>,
1011    /// UDP counters
1012    pub udp: Option<Nat64TrafficCounters>,
1013    /// ICMP counters
1014    pub icmp: Option<Nat64TrafficCounters>,
1015    /// Total counters
1016    pub total: Option<Nat64TrafficCounters>,
1017    #[doc(hidden)]
1018    pub __source_breaking: fidl::marker::SourceBreaking,
1019}
1020
1021impl fidl::Persistable for Nat64ProtocolCounters {}
1022
1023#[derive(Clone, Debug, Default, PartialEq)]
1024pub struct Nat64TrafficCounters {
1025    /// Number of packets translated from IPv4 to IPv6
1026    pub ipv4_to_ipv6_packets: Option<u64>,
1027    /// Sum of size of packets translated from IPv4 to IPv6
1028    pub ipv4_to_ipv6_bytes: Option<u64>,
1029    /// Number of packets translated from IPv6 to IPv4
1030    pub ipv6_to_ipv4_packets: Option<u64>,
1031    /// Sum of size of packets translated from IPv6 to IPv4
1032    pub ipv6_to_ipv4_bytes: Option<u64>,
1033    #[doc(hidden)]
1034    pub __source_breaking: fidl::marker::SourceBreaking,
1035}
1036
1037impl fidl::Persistable for Nat64TrafficCounters {}
1038
1039/// Describes the parameters of a network scan.
1040#[derive(Clone, Debug, Default, PartialEq)]
1041pub struct NetworkScanParameters {
1042    /// Subset of channels to scan.
1043    ///
1044    /// If unspecified, all channels will be scanned.
1045    pub channels: Option<Vec<u16>>,
1046    /// Transmit power (in dBm to the antenna) for transmitting
1047    /// beacon requests.
1048    ///
1049    /// Note that hardware limitations may cause the actual
1050    /// used transmit power to differ from what is specified.
1051    /// In that case the used transmit power will always be
1052    /// the highest available transmit power that is less than
1053    /// the specified transmit power. If the desired transmit
1054    /// power is lower than the lowest transmit power supported
1055    /// by the hardware, then that will be used instead.
1056    pub tx_power_dbm: Option<i8>,
1057    #[doc(hidden)]
1058    pub __source_breaking: fidl::marker::SourceBreaking,
1059}
1060
1061impl fidl::Persistable for NetworkScanParameters {}
1062
1063/// LoWPAN On-Mesh Prefix.
1064///
1065/// Informed by the Thread 1.1.1 Specification, section 5.13.2.
1066#[derive(Clone, Debug, Default, PartialEq)]
1067pub struct OnMeshPrefix {
1068    /// Subnet to advertise for devices to use on the network. Required.
1069    pub subnet: Option<fidl_fuchsia_net__common::Ipv6AddressWithPrefix>,
1070    /// If present, indicates that this device is offering a default route
1071    /// as well as indicating the what preference this default
1072    /// route should be given relative to other devices offering default
1073    /// routes. If not present, no default route is advertised.
1074    ///
1075    /// Based on `P_default` and `P_preference` from Section 5.13.2 of the
1076    /// Thread 1.1.1 Specification.
1077    pub default_route_preference: Option<RoutePreference>,
1078    /// True if the route is expected to be available for at least Thread's
1079    /// `MIN_STABLE_LIFETIME`; otherwise `false`. If not present, assumed to
1080    /// be `false`.
1081    ///
1082    /// The Thread specification defines `MIN_STABLE_LIFETIME` as 168 hours.
1083    ///
1084    /// Based on `P_stable` from Section 5.13.2 of the
1085    /// Thread 1.1.1 Specification.
1086    pub stable: Option<bool>,
1087    /// True if network devices are allowed to use previously configured
1088    /// addresses using this prefix. If not present, assumed to be `false`.
1089    ///
1090    /// "SLAAC" referrs to StateLess Address Auto Configuration, described in
1091    /// [RFC4862](https://tools.ietf.org/html/rfc4862).
1092    ///
1093    /// Based on `P_slaac_preferred` from Section 5.13.2 of the
1094    /// Thread 1.1.1 Specification.
1095    pub slaac_preferred: Option<bool>,
1096    /// True if network devices are allowed to autoconfigure addresses using
1097    /// this prefix. If not present, assumed to be `false`.
1098    ///
1099    /// "SLAAC" referrs to StateLess Address Auto Configuration, described in
1100    /// [RFC4862](https://tools.ietf.org/html/rfc4862).
1101    ///
1102    /// Based on `P_slaac_valid` from Section 5.13.2 of the
1103    /// Thread 1.1.1 Specification.
1104    pub slaac_valid: Option<bool>,
1105    #[doc(hidden)]
1106    pub __source_breaking: fidl::marker::SourceBreaking,
1107}
1108
1109impl fidl::Persistable for OnMeshPrefix {}
1110
1111/// Represents an Thread Active or Pending Operational Dataset.
1112#[derive(Clone, Debug, Default, PartialEq)]
1113pub struct OperationalDataset {
1114    /// Active Timestamp.
1115    ///
1116    /// Required.
1117    pub active_timestamp: Option<i64>,
1118    /// Pending Timestamp.
1119    ///
1120    /// Required.
1121    pub pending_timestamp: Option<i64>,
1122    /// Network Key.
1123    ///
1124    /// Required.
1125    pub network_key: Option<Vec<u8>>,
1126    /// Network Name.
1127    ///
1128    /// Required.
1129    pub network_name: Option<Vec<u8>>,
1130    /// Extended PAN ID.
1131    ///
1132    /// Required.
1133    pub extended_pan_id: Option<Vec<u8>>,
1134    /// Mesh Local Prefix.
1135    ///
1136    /// Required.
1137    pub mesh_local_prefix: Option<Vec<u8>>,
1138    /// Delay Timer.
1139    ///
1140    /// Required.
1141    pub delay: Option<u32>,
1142    /// PAN ID.
1143    ///
1144    /// Required.
1145    pub pan_id: Option<u16>,
1146    /// Channel.
1147    ///
1148    /// Required.
1149    pub channel: Option<u16>,
1150    /// Wake-up Channel.
1151    ///
1152    /// Required.
1153    pub wakeup_channel: Option<u16>,
1154    /// PSKc.
1155    ///
1156    /// Required.
1157    pub pskc: Option<Vec<u8>>,
1158    /// Security Policy.
1159    ///
1160    /// Required.
1161    pub security_policy: Option<SecurityPolicy>,
1162    /// Channel Mask.
1163    ///
1164    /// Required.
1165    pub channel_mask: Option<u32>,
1166    #[doc(hidden)]
1167    pub __source_breaking: fidl::marker::SourceBreaking,
1168}
1169
1170impl fidl::Persistable for OperationalDataset {}
1171
1172/// Platform counters related to processed RA info when DHCPv6 PD is enabled.
1173#[derive(Clone, Debug, Default, PartialEq)]
1174pub struct PdProcessedRaInfo {
1175    /// The number of platform generated RA handled by ApplyPlatformGeneratedRa.
1176    ///
1177    /// Required.
1178    pub num_platform_ra_received: Option<u32>,
1179    /// The number of PIO processed for adding OMR prefixes.
1180    ///
1181    /// Required.
1182    pub num_platform_pio_processed: Option<u32>,
1183    /// The duration since the last processed RA message.
1184    ///
1185    /// Required.
1186    pub last_platform_ra_msec: Option<u32>,
1187    #[doc(hidden)]
1188    pub __source_breaking: fidl::marker::SourceBreaking,
1189}
1190
1191impl fidl::Persistable for PdProcessedRaInfo {}
1192
1193/// Represents information associated with a radio link.
1194#[derive(Clone, Debug, Default, PartialEq)]
1195pub struct RadioLinkInfo {
1196    /// Radio Link Type, e.g., '15.4' or 'TREL'.
1197    /// Considering a potential future expansion to other links, set
1198    /// the MAX capability to 10.
1199    ///
1200    /// Required.
1201    pub link_type: Option<String>,
1202    /// Preference level of radio link.
1203    ///
1204    /// Required.
1205    pub preference: Option<u8>,
1206    #[doc(hidden)]
1207    pub __source_breaking: fidl::marker::SourceBreaking,
1208}
1209
1210impl fidl::Persistable for RadioLinkInfo {}
1211
1212/// Represents the diagnostic information for a Thread Router.
1213#[derive(Clone, Debug, Default, PartialEq)]
1214pub struct RouterInfo {
1215    /// IEEE 802.15.4 Extended Address
1216    ///
1217    /// Required.
1218    pub extended_address: Option<Vec<u8>>,
1219    /// IEEE 802.15.4 short address of neighbor.
1220    ///
1221    /// Required.
1222    pub thread_rloc: Option<u16>,
1223    /// Router ID.
1224    ///
1225    /// Required.
1226    pub router_id: Option<u8>,
1227    /// Next hop to router.
1228    ///
1229    /// Required.
1230    pub next_hop: Option<u8>,
1231    /// Path cost to router.
1232    ///
1233    /// Required.
1234    pub path_cost: Option<u8>,
1235    /// Link Quality In.
1236    ///
1237    /// Required.
1238    pub link_quality_in: Option<u8>,
1239    /// Link Quality Out.
1240    ///
1241    /// Required.
1242    pub link_quality_out: Option<u8>,
1243    /// The router's age (duration since last heard).
1244    ///
1245    /// Required.
1246    pub age: Option<i64>,
1247    /// Whether link established with Router ID or not.
1248    ///
1249    /// Required.
1250    pub link_established: Option<bool>,
1251    #[doc(hidden)]
1252    pub __source_breaking: fidl::marker::SourceBreaking,
1253}
1254
1255impl fidl::Persistable for RouterInfo {}
1256
1257/// Represents the Thread Security Policy.
1258#[derive(Clone, Debug, Default, PartialEq)]
1259pub struct SecurityPolicy {
1260    /// Key Rotation time value, in uints of hours.
1261    ///
1262    /// Required.
1263    pub rotation_time: Option<u16>,
1264    /// Whether Obtaining the Network Key for out-of-band commissioning is enabled.
1265    ///
1266    /// Required.
1267    pub obtain_network_key_enabled: Option<bool>,
1268    /// Whether Native Commissioning using PSKc is allowed.
1269    ///
1270    /// Required.
1271    pub native_commissioning_enabled: Option<bool>,
1272    /// Whether Thread 1.0/1.1.x Routers are enabled.
1273    ///
1274    /// Required.
1275    pub routers_enabled: Option<bool>,
1276    /// Whether External Commissioner authentication is allowed.
1277    ///
1278    /// Required.
1279    pub external_commissioning_enabled: Option<bool>,
1280    /// Whether Autonomous Enrollment is enabled.
1281    ///
1282    /// Required.
1283    pub autonomous_enrollment_enabled: Option<bool>,
1284    /// Whether Network Key Provisioning is enabled.
1285    ///
1286    /// Required.
1287    pub network_key_provisioning_enabled: Option<bool>,
1288    /// Whether ToBLE link is enabled.
1289    ///
1290    /// Required.
1291    pub toble_link_enabled: Option<bool>,
1292    /// Whether Non-CCM Routers enabled.
1293    ///
1294    /// Required.
1295    pub nonccm_routers_enabled: Option<bool>,
1296    /// The Version-threshold for Routing.
1297    ///
1298    /// Required.
1299    pub version_threshold_for_routing: Option<u8>,
1300    #[doc(hidden)]
1301    pub __source_breaking: fidl::marker::SourceBreaking,
1302}
1303
1304impl fidl::Persistable for SecurityPolicy {}
1305
1306/// Represents a SRP service host.
1307#[derive(Clone, Debug, Default, PartialEq)]
1308pub struct SrpServerHost {
1309    /// The full name of host.
1310    ///
1311    /// Required.
1312    pub name: Option<String>,
1313    /// Whether the SRP service host has been deleted.
1314    ///
1315    /// Required.
1316    pub deleted: Option<bool>,
1317    /// The IPv6 addresses of the SPR service host.
1318    ///
1319    /// Required.
1320    pub addresses: Option<Vec<fidl_fuchsia_net__common::Ipv6Address>>,
1321    #[doc(hidden)]
1322    pub __source_breaking: fidl::marker::SourceBreaking,
1323}
1324
1325impl fidl::Persistable for SrpServerHost {}
1326
1327/// State information about the SRP server.
1328#[derive(Clone, Debug, Default, PartialEq)]
1329pub struct SrpServerInfo {
1330    /// The operational state of the SRP server.
1331    ///
1332    /// Required.
1333    pub state: Option<SrpServerState>,
1334    /// The port the SRP server is listening to.
1335    ///
1336    /// Optional. The port may be omitted when `state` is `DISABLED`.
1337    pub port: Option<u16>,
1338    /// The address mode of the SRP server.
1339    ///
1340    /// Required.
1341    pub address_mode: Option<SrpServerAddressMode>,
1342    /// The response counters of the SRP server.
1343    ///
1344    /// Required.
1345    pub response_counters: Option<SrpServerResponseCounters>,
1346    /// The registration information of SRP hosts.
1347    ///
1348    /// Required.
1349    pub hosts_registration: Option<SrpServerRegistration>,
1350    /// The registration information of SRP services.
1351    ///
1352    /// Required.
1353    pub services_registration: Option<SrpServerRegistration>,
1354    /// The detailed registration information of SRP hosts.
1355    ///
1356    /// Required.
1357    pub hosts: Option<Vec<SrpServerHost>>,
1358    /// The detailed registration information of SRP services.
1359    ///
1360    /// Required.
1361    pub services: Option<Vec<SrpServerService>>,
1362    #[doc(hidden)]
1363    pub __source_breaking: fidl::marker::SourceBreaking,
1364}
1365
1366impl fidl::Persistable for SrpServerInfo {}
1367
1368/// Registration information about the SRP server.
1369#[derive(Clone, Debug, Default, PartialEq)]
1370pub struct SrpServerRegistration {
1371    /// Number of hosts/services that have not been deleted.
1372    ///
1373    /// Required.
1374    pub fresh_count: Option<u32>,
1375    /// Number of hosts/services that have been deleted.
1376    ///
1377    /// Required.
1378    pub deleted_count: Option<u32>,
1379    /// Total lease time.
1380    ///
1381    /// Required.
1382    pub lease_time_total: Option<i64>,
1383    /// Total key lease time.
1384    ///
1385    /// Required.
1386    pub key_lease_time_total: Option<i64>,
1387    /// Total remaining lease time.
1388    ///
1389    /// Required.
1390    pub remaining_lease_time_total: Option<i64>,
1391    /// Total remaining key lease time.
1392    ///
1393    /// Required.
1394    pub remaining_key_lease_time_total: Option<i64>,
1395    #[doc(hidden)]
1396    pub __source_breaking: fidl::marker::SourceBreaking,
1397}
1398
1399impl fidl::Persistable for SrpServerRegistration {}
1400
1401#[derive(Clone, Debug, Default, PartialEq)]
1402pub struct SrpServerResponseCounters {
1403    /// The number of successful responses.
1404    ///
1405    /// Required.
1406    pub success_response: Option<u32>,
1407    /// The number of 'server failure' responses.
1408    ///
1409    /// Required.
1410    pub server_failure_response: Option<u32>,
1411    /// The number of 'format error' responses.
1412    ///
1413    /// Required.
1414    pub format_error_response: Option<u32>,
1415    /// The number of 'name exists' responses.
1416    ///
1417    /// Required.
1418    pub name_exists_response: Option<u32>,
1419    /// The number of 'refused' responses.
1420    ///
1421    /// Required.
1422    pub refused_response: Option<u32>,
1423    /// The number of 'other' responses.
1424    ///
1425    /// Required.
1426    pub other_response: Option<u32>,
1427    #[doc(hidden)]
1428    pub __source_breaking: fidl::marker::SourceBreaking,
1429}
1430
1431impl fidl::Persistable for SrpServerResponseCounters {}
1432
1433/// Represents a SRP service.
1434#[derive(Clone, Debug, Default, PartialEq)]
1435pub struct SrpServerService {
1436    /// The full service instance name of the service.
1437    ///
1438    /// Required.
1439    pub instance_name: Option<String>,
1440    /// Whether the SRP service host has been deleted.
1441    ///
1442    /// Required.
1443    pub deleted: Option<bool>,
1444    /// The sub-type service name (full name) of the service.
1445    ///
1446    /// The maximum number of service subtype labels in the SRP service is 6,
1447    /// see OPENTHREAD_CONFIG_SRP_CLIENT_BUFFERS_SERVICE_MAX_SUB_TYPES.
1448    ///
1449    /// The maximum length for a single DNS label (sub-type) is 63 characters.
1450    ///
1451    /// Required.
1452    pub subtypes: Option<Vec<String>>,
1453    /// The port of the service instance.
1454    ///
1455    /// Required.
1456    pub port: Option<u16>,
1457    /// The priority of the service instance.
1458    ///
1459    /// Required.
1460    pub priority: Option<u16>,
1461    /// The weight of the service instance.
1462    ///
1463    /// Required.
1464    pub weight: Option<u16>,
1465    /// The TTL of the service instance.
1466    ///
1467    /// Required.
1468    pub ttl: Option<i64>,
1469    /// The lease time of a service.
1470    ///
1471    /// Required.
1472    pub lease: Option<i64>,
1473    /// The key lease time of a host/service.
1474    ///
1475    /// Required.
1476    pub key_lease: Option<i64>,
1477    /// The TXT record data.
1478    ///
1479    /// Required.
1480    pub txt_data: Option<Vec<DnsTxtEntry>>,
1481    /// The information of a service host.
1482    ///
1483    /// Required.
1484    pub host: Option<SrpServerHost>,
1485    #[doc(hidden)]
1486    pub __source_breaking: fidl::marker::SourceBreaking,
1487}
1488
1489impl fidl::Persistable for SrpServerService {}
1490
1491/// LoWPAN Interface Telemetry Information.
1492///
1493/// The fields in this table are used for providing low-level telemetry and information about the
1494/// LoWPAN interface for debugging and statistics purposes.
1495///
1496/// All fields are optional.
1497#[derive(Clone, Debug, Default, PartialEq)]
1498pub struct Telemetry {
1499    /// The current RSSI of the radio.
1500    pub rssi: Option<i8>,
1501    /// The configured transmit power of the radio.
1502    pub tx_power: Option<i8>,
1503    /// The current channel index of the radio.
1504    pub channel_index: Option<u16>,
1505    /// The partition ID of the currently associated network partition.
1506    pub partition_id: Option<u32>,
1507    /// The version string describing the underlying mesh stack.
1508    pub stack_version: Option<String>,
1509    /// The version string describing the underlying radio control firmware.
1510    pub rcp_version: Option<String>,
1511    /// Thread link mode byte.
1512    ///
1513    /// Only present on Thread networks.
1514    ///
1515    /// Defined by section 4.5.2 of the Thread 1.1.1 specification ("Mode TLV").
1516    pub thread_link_mode: Option<u8>,
1517    /// The router ID of this device in the currently associated network.
1518    ///
1519    /// Only present on Thread networks.
1520    pub thread_router_id: Option<u8>,
1521    /// The current RLOC16 address of this node.
1522    ///
1523    /// Only present on Thread networks.
1524    pub thread_rloc: Option<u16>,
1525    /// The full network data version.
1526    ///
1527    /// Only present on Thread networks.
1528    pub thread_network_data_version: Option<u8>,
1529    /// The stable network data version.
1530    ///
1531    /// Only present on Thread networks.
1532    pub thread_stable_network_data_version: Option<u8>,
1533    /// The current Thread network data, in raw binary form, as defined in section 5.13 of
1534    /// the Thread 1.1.1 specification.
1535    ///
1536    /// Only present on Thread networks.
1537    pub thread_network_data: Option<Vec<u8>>,
1538    /// The current Thread stable network data, in raw binary form, as defined in section 5.13 of
1539    /// the Thread 1.1.1 specification.
1540    ///
1541    /// Only present on Thread networks.
1542    pub thread_stable_network_data: Option<Vec<u8>>,
1543    /// The counters associated with border routing messages.
1544    ///
1545    /// Only present on Thread networks.
1546    pub thread_border_routing_counters: Option<BorderRoutingCounters>,
1547    /// The SRP server information.
1548    ///
1549    /// Only present on Thread networks.
1550    pub srp_server_info: Option<SrpServerInfo>,
1551    /// The DNS-SD server counters.
1552    ///
1553    /// Only present on Thread networks.
1554    pub dnssd_counters: Option<DnssdCounters>,
1555    /// The data associated with the leader of the currently associated Thread network.
1556    ///
1557    /// Only present on Thread networks.
1558    pub leader_data: Option<LeaderData>,
1559    /// The uptime of the current instance.
1560    ///
1561    /// Required.
1562    pub uptime: Option<i64>,
1563    /// Information about the NAT64
1564    ///
1565    /// Only present on Thread networks.
1566    pub nat64_info: Option<Nat64Info>,
1567    /// Information about the TREL interface, if available.
1568    ///
1569    /// Only present on Thread networks.
1570    pub trel_counters: Option<TrelCounters>,
1571    /// Information about the TREL peers, if available.
1572    ///
1573    /// Only present on Thread networks.
1574    pub trel_peers_info: Option<TrelPeersInfo>,
1575    /// Information about the Upstream DNS feature, if available.
1576    ///
1577    /// Only present on Thread networks.
1578    pub upstream_dns_info: Option<UpstreamDnsInfo>,
1579    /// Information about the DHCPv6 PD feature, if available.
1580    ///
1581    /// Only present on Thread networks.
1582    pub dhcp6pd_info: Option<Dhcp6PdInfo>,
1583    /// Link Metrics Manager related info, if available.
1584    ///
1585    /// Only present on Thread networks.
1586    pub link_metrics_entries: Option<Vec<LinkMetricsEntry>>,
1587    /// Counters related to border agent functionality.
1588    ///
1589    /// Only present on Thread networks.
1590    pub border_agent_counters: Option<fidl_fuchsia_lowpan_device__common::BorderAgentCounters>,
1591    /// Whether multi-AIL (Adjacent Infrastructure Link) scenario is detected.
1592    ///
1593    /// Only present on Thread networks.
1594    pub multi_ail_detected: Option<bool>,
1595    /// The Extended PAN ID of the currently associated Thread network. This 8-byte unique
1596    /// identifier is used to distinguish different Thread networks.
1597    ///
1598    /// Only present on Thread networks.
1599    pub extended_pan_id: Option<u64>,
1600    /// Thread Border Routing peers information.
1601    ///
1602    /// Only present on Thread networks.
1603    pub border_routing_peers: Option<Vec<BorderRoutingPeer>>,
1604    /// Thread Border Routing discovered routers by Border Routing Manager on the infrastructure link.
1605    ///
1606    /// Only present on Thread networks.
1607    pub border_routing_routers: Option<Vec<BorderRoutingRouter>>,
1608    /// Thread Active Operational Dataset.
1609    ///
1610    /// Only present on Thread networks.
1611    pub active_dataset: Option<OperationalDataset>,
1612    /// The multi radio link information associated with a neighbor with a given Extended Address.
1613    ///
1614    /// Only present on Thread networks.
1615    pub multiradio_neighbor_info: Option<Vec<MultiRadioNeighborInfo>>,
1616    /// Information regarding all active routers within the Thread network.
1617    ///
1618    /// Only present on Thread networks.
1619    pub router_info: Option<Vec<RouterInfo>>,
1620    #[doc(hidden)]
1621    pub __source_breaking: fidl::marker::SourceBreaking,
1622}
1623
1624impl fidl::Persistable for Telemetry {}
1625
1626/// Represents a group of TREL related counters in the platform layer.
1627///
1628/// Derived from [`otPlatTrelCounters`](https://openthread.io/reference/struct/ot-plat-trel-counters).
1629#[derive(Clone, Debug, Default, PartialEq)]
1630pub struct TrelCounters {
1631    /// Sum of size of packets received through TREL.
1632    pub rx_bytes: Option<u64>,
1633    /// Number of packets received through TREL.
1634    pub rx_packets: Option<u64>,
1635    /// Sum of size of packets successfully transmitted through TREL.
1636    pub tx_bytes: Option<u64>,
1637    /// Number of packet transmission failures through TREL.
1638    pub tx_failure: Option<u64>,
1639    /// Number of packets successfully transmitted through TREL.
1640    pub tx_packets: Option<u64>,
1641    #[doc(hidden)]
1642    pub __source_breaking: fidl::marker::SourceBreaking,
1643}
1644
1645impl fidl::Persistable for TrelCounters {}
1646
1647/// Represents the TREL peer related info.
1648///
1649/// The info is available in OpenThread via https://openthread.io/reference/group/api-trel
1650/// More fields may be added per request.
1651#[derive(Clone, Debug, Default, PartialEq)]
1652pub struct TrelPeersInfo {
1653    /// Number of TREL peers for this Thread Border Router.
1654    ///
1655    /// Required.
1656    pub num_trel_peers: Option<u16>,
1657    #[doc(hidden)]
1658    pub __source_breaking: fidl::marker::SourceBreaking,
1659}
1660
1661impl fidl::Persistable for TrelPeersInfo {}
1662
1663/// Represents the count of queries, responses, failures handled by upstream DNS server
1664///
1665/// Derived from `otUpstreamDnsCounters`(https://openthread.io/reference/group/api-dnssd-server)
1666#[derive(Clone, Debug, Default, PartialEq)]
1667pub struct UpstreamDnsCounters {
1668    /// The number of queries forwarded
1669    ///
1670    /// Required.
1671    pub queries: Option<u32>,
1672    /// The number of responses forwarded
1673    ///
1674    /// Required.
1675    pub responses: Option<u32>,
1676    /// The number of upstream DNS failures
1677    ///
1678    /// Required.
1679    pub failures: Option<u32>,
1680    #[doc(hidden)]
1681    pub __source_breaking: fidl::marker::SourceBreaking,
1682}
1683
1684impl fidl::Persistable for UpstreamDnsCounters {}
1685
1686/// Represents the Upstream DNS related info.
1687///
1688/// The info is available in OpenThread via https://openthread.io/reference/group/api-dnssd-server
1689/// More fields may be added per request.
1690#[derive(Clone, Debug, Default, PartialEq)]
1691pub struct UpstreamDnsInfo {
1692    /// State of upstream DNS query.
1693    ///
1694    /// Required.
1695    pub upstream_dns_query_state: Option<UpstreamDnsQueryState>,
1696    #[doc(hidden)]
1697    pub __source_breaking: fidl::marker::SourceBreaking,
1698}
1699
1700impl fidl::Persistable for UpstreamDnsInfo {}
1701
1702/// Parameters for DeviceExtra::JoinNetwork command.
1703#[derive(Clone, Debug)]
1704pub enum JoinParams {
1705    /// Attempts to find and join a known pre-existing network.
1706    ProvisioningParameter(fidl_fuchsia_lowpan_device__common::ProvisioningParams),
1707    /// Attempts to find and join an unknown pre-existing network
1708    /// that is configured to accept and provision devices with
1709    /// the given shared secret, or PSKd. This allows new devices to
1710    /// join existing networks without knowing the credentials for
1711    /// the specific network.
1712    JoinerParameter(JoinerCommissioningParams),
1713    #[doc(hidden)]
1714    __SourceBreaking { unknown_ordinal: u64 },
1715}
1716
1717/// Pattern that matches an unknown `JoinParams` member.
1718#[macro_export]
1719macro_rules! JoinParamsUnknown {
1720    () => {
1721        _
1722    };
1723}
1724
1725// Custom PartialEq so that unknown variants are not equal to themselves.
1726impl PartialEq for JoinParams {
1727    fn eq(&self, other: &Self) -> bool {
1728        match (self, other) {
1729            (Self::ProvisioningParameter(x), Self::ProvisioningParameter(y)) => *x == *y,
1730            (Self::JoinerParameter(x), Self::JoinerParameter(y)) => *x == *y,
1731            _ => false,
1732        }
1733    }
1734}
1735
1736impl JoinParams {
1737    #[inline]
1738    pub fn ordinal(&self) -> u64 {
1739        match *self {
1740            Self::ProvisioningParameter(_) => 1,
1741            Self::JoinerParameter(_) => 2,
1742            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
1743        }
1744    }
1745
1746    #[inline]
1747    pub fn unknown_variant_for_testing() -> Self {
1748        Self::__SourceBreaking { unknown_ordinal: 0 }
1749    }
1750
1751    #[inline]
1752    pub fn is_unknown(&self) -> bool {
1753        match self {
1754            Self::__SourceBreaking { .. } => true,
1755            _ => false,
1756        }
1757    }
1758}
1759
1760impl fidl::Persistable for JoinParams {}
1761
1762/// Indicates the current status of the form/join operation.
1763///
1764/// Returned by [`ProvisioningMonitor.WatchProgress`].
1765#[derive(Clone, Debug)]
1766pub enum ProvisioningProgress {
1767    /// Approximate percent complete indication for a user interface.
1768    Progress(f32),
1769    /// The final Identity when the operation has completed successfully.
1770    Identity(fidl_fuchsia_lowpan_device__common::Identity),
1771    #[doc(hidden)]
1772    __SourceBreaking { unknown_ordinal: u64 },
1773}
1774
1775/// Pattern that matches an unknown `ProvisioningProgress` member.
1776#[macro_export]
1777macro_rules! ProvisioningProgressUnknown {
1778    () => {
1779        _
1780    };
1781}
1782
1783// Custom PartialEq so that unknown variants are not equal to themselves.
1784impl PartialEq for ProvisioningProgress {
1785    fn eq(&self, other: &Self) -> bool {
1786        match (self, other) {
1787            (Self::Progress(x), Self::Progress(y)) => *x == *y,
1788            (Self::Identity(x), Self::Identity(y)) => *x == *y,
1789            _ => false,
1790        }
1791    }
1792}
1793
1794impl ProvisioningProgress {
1795    #[inline]
1796    pub fn ordinal(&self) -> u64 {
1797        match *self {
1798            Self::Progress(_) => 1,
1799            Self::Identity(_) => 2,
1800            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
1801        }
1802    }
1803
1804    #[inline]
1805    pub fn unknown_variant_for_testing() -> Self {
1806        Self::__SourceBreaking { unknown_ordinal: 0 }
1807    }
1808
1809    #[inline]
1810    pub fn is_unknown(&self) -> bool {
1811        match self {
1812            Self::__SourceBreaking { .. } => true,
1813            _ => false,
1814        }
1815    }
1816}
1817
1818impl fidl::Persistable for ProvisioningProgress {}
1819
1820pub mod beacon_info_stream_ordinals {
1821    pub const NEXT: u64 = 0x367a557363a340b6;
1822}
1823
1824pub mod device_ordinals {
1825    pub const GET_SUPPORTED_CHANNELS: u64 = 0x2d8b969a9bd70f23;
1826}
1827
1828pub mod device_connector_ordinals {
1829    pub const CONNECT: u64 = 0x296896c9304836cd;
1830}
1831
1832pub mod device_extra_ordinals {
1833    pub const FORM_NETWORK: u64 = 0x6a8135f84bfc90e;
1834    pub const JOIN_NETWORK: u64 = 0x3ea583bab79f81c0;
1835    pub const START_NETWORK_SCAN: u64 = 0x6288c73b79188b40;
1836}
1837
1838pub mod device_extra_connector_ordinals {
1839    pub const CONNECT: u64 = 0x3fcb37e4226c81e9;
1840}
1841
1842pub mod device_route_ordinals {
1843    pub const REGISTER_ON_MESH_PREFIX: u64 = 0x2c4135231eb97f61;
1844    pub const UNREGISTER_ON_MESH_PREFIX: u64 = 0x82d5184028b797f;
1845    pub const REGISTER_EXTERNAL_ROUTE: u64 = 0x75f70f0fc34a5a73;
1846    pub const UNREGISTER_EXTERNAL_ROUTE: u64 = 0x3769be353b1d7088;
1847}
1848
1849pub mod device_route_connector_ordinals {
1850    pub const CONNECT: u64 = 0x19cd5fdcb971f4ac;
1851}
1852
1853pub mod device_route_extra_ordinals {
1854    pub const GET_LOCAL_ON_MESH_PREFIXES: u64 = 0xf192c43311c811;
1855    pub const GET_LOCAL_EXTERNAL_ROUTES: u64 = 0x5a688c2e62c766a6;
1856}
1857
1858pub mod device_route_extra_connector_ordinals {
1859    pub const CONNECT: u64 = 0x12f72df7b1348fe2;
1860}
1861
1862pub mod legacy_joining_ordinals {
1863    pub const MAKE_JOINABLE: u64 = 0x1739a6ae36d5c5aa;
1864}
1865
1866pub mod legacy_joining_connector_ordinals {
1867    pub const CONNECT: u64 = 0x3c8dfeb943bb8d06;
1868}
1869
1870pub mod provisioning_monitor_ordinals {
1871    pub const WATCH_PROGRESS: u64 = 0xc35336fc43ac0c;
1872}
1873
1874pub mod telemetry_provider_ordinals {
1875    pub const GET_TELEMETRY: u64 = 0xc34f2fff7dacc41;
1876}
1877
1878pub mod telemetry_provider_connector_ordinals {
1879    pub const CONNECT: u64 = 0x24a5bf1be73e2fad;
1880}
1881
1882mod internal {
1883    use super::*;
1884    unsafe impl fidl::encoding::TypeMarker for Dhcp6PdState {
1885        type Owned = Self;
1886
1887        #[inline(always)]
1888        fn inline_align(_context: fidl::encoding::Context) -> usize {
1889            std::mem::align_of::<u32>()
1890        }
1891
1892        #[inline(always)]
1893        fn inline_size(_context: fidl::encoding::Context) -> usize {
1894            std::mem::size_of::<u32>()
1895        }
1896
1897        #[inline(always)]
1898        fn encode_is_copy() -> bool {
1899            false
1900        }
1901
1902        #[inline(always)]
1903        fn decode_is_copy() -> bool {
1904            false
1905        }
1906    }
1907
1908    impl fidl::encoding::ValueTypeMarker for Dhcp6PdState {
1909        type Borrowed<'a> = Self;
1910        #[inline(always)]
1911        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1912            *value
1913        }
1914    }
1915
1916    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for Dhcp6PdState {
1917        #[inline]
1918        unsafe fn encode(
1919            self,
1920            encoder: &mut fidl::encoding::Encoder<'_, D>,
1921            offset: usize,
1922            _depth: fidl::encoding::Depth,
1923        ) -> fidl::Result<()> {
1924            encoder.debug_check_bounds::<Self>(offset);
1925            encoder.write_num(self.into_primitive(), offset);
1926            Ok(())
1927        }
1928    }
1929
1930    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Dhcp6PdState {
1931        #[inline(always)]
1932        fn new_empty() -> Self {
1933            Self::unknown()
1934        }
1935
1936        #[inline]
1937        unsafe fn decode(
1938            &mut self,
1939            decoder: &mut fidl::encoding::Decoder<'_, D>,
1940            offset: usize,
1941            _depth: fidl::encoding::Depth,
1942        ) -> fidl::Result<()> {
1943            decoder.debug_check_bounds::<Self>(offset);
1944            let prim = decoder.read_num::<u32>(offset);
1945
1946            *self = Self::from_primitive_allow_unknown(prim);
1947            Ok(())
1948        }
1949    }
1950    unsafe impl fidl::encoding::TypeMarker for Nat64State {
1951        type Owned = Self;
1952
1953        #[inline(always)]
1954        fn inline_align(_context: fidl::encoding::Context) -> usize {
1955            std::mem::align_of::<u32>()
1956        }
1957
1958        #[inline(always)]
1959        fn inline_size(_context: fidl::encoding::Context) -> usize {
1960            std::mem::size_of::<u32>()
1961        }
1962
1963        #[inline(always)]
1964        fn encode_is_copy() -> bool {
1965            false
1966        }
1967
1968        #[inline(always)]
1969        fn decode_is_copy() -> bool {
1970            false
1971        }
1972    }
1973
1974    impl fidl::encoding::ValueTypeMarker for Nat64State {
1975        type Borrowed<'a> = Self;
1976        #[inline(always)]
1977        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1978            *value
1979        }
1980    }
1981
1982    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for Nat64State {
1983        #[inline]
1984        unsafe fn encode(
1985            self,
1986            encoder: &mut fidl::encoding::Encoder<'_, D>,
1987            offset: usize,
1988            _depth: fidl::encoding::Depth,
1989        ) -> fidl::Result<()> {
1990            encoder.debug_check_bounds::<Self>(offset);
1991            encoder.write_num(self.into_primitive(), offset);
1992            Ok(())
1993        }
1994    }
1995
1996    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Nat64State {
1997        #[inline(always)]
1998        fn new_empty() -> Self {
1999            Self::unknown()
2000        }
2001
2002        #[inline]
2003        unsafe fn decode(
2004            &mut self,
2005            decoder: &mut fidl::encoding::Decoder<'_, D>,
2006            offset: usize,
2007            _depth: fidl::encoding::Depth,
2008        ) -> fidl::Result<()> {
2009            decoder.debug_check_bounds::<Self>(offset);
2010            let prim = decoder.read_num::<u32>(offset);
2011
2012            *self = Self::from_primitive_allow_unknown(prim);
2013            Ok(())
2014        }
2015    }
2016    unsafe impl fidl::encoding::TypeMarker for ProvisionError {
2017        type Owned = Self;
2018
2019        #[inline(always)]
2020        fn inline_align(_context: fidl::encoding::Context) -> usize {
2021            std::mem::align_of::<i32>()
2022        }
2023
2024        #[inline(always)]
2025        fn inline_size(_context: fidl::encoding::Context) -> usize {
2026            std::mem::size_of::<i32>()
2027        }
2028
2029        #[inline(always)]
2030        fn encode_is_copy() -> bool {
2031            false
2032        }
2033
2034        #[inline(always)]
2035        fn decode_is_copy() -> bool {
2036            false
2037        }
2038    }
2039
2040    impl fidl::encoding::ValueTypeMarker for ProvisionError {
2041        type Borrowed<'a> = Self;
2042        #[inline(always)]
2043        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2044            *value
2045        }
2046    }
2047
2048    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for ProvisionError {
2049        #[inline]
2050        unsafe fn encode(
2051            self,
2052            encoder: &mut fidl::encoding::Encoder<'_, D>,
2053            offset: usize,
2054            _depth: fidl::encoding::Depth,
2055        ) -> fidl::Result<()> {
2056            encoder.debug_check_bounds::<Self>(offset);
2057            encoder.write_num(self.into_primitive(), offset);
2058            Ok(())
2059        }
2060    }
2061
2062    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ProvisionError {
2063        #[inline(always)]
2064        fn new_empty() -> Self {
2065            Self::unknown()
2066        }
2067
2068        #[inline]
2069        unsafe fn decode(
2070            &mut self,
2071            decoder: &mut fidl::encoding::Decoder<'_, D>,
2072            offset: usize,
2073            _depth: fidl::encoding::Depth,
2074        ) -> fidl::Result<()> {
2075            decoder.debug_check_bounds::<Self>(offset);
2076            let prim = decoder.read_num::<i32>(offset);
2077
2078            *self = Self::from_primitive_allow_unknown(prim);
2079            Ok(())
2080        }
2081    }
2082    unsafe impl fidl::encoding::TypeMarker for RoutePreference {
2083        type Owned = Self;
2084
2085        #[inline(always)]
2086        fn inline_align(_context: fidl::encoding::Context) -> usize {
2087            std::mem::align_of::<i8>()
2088        }
2089
2090        #[inline(always)]
2091        fn inline_size(_context: fidl::encoding::Context) -> usize {
2092            std::mem::size_of::<i8>()
2093        }
2094
2095        #[inline(always)]
2096        fn encode_is_copy() -> bool {
2097            true
2098        }
2099
2100        #[inline(always)]
2101        fn decode_is_copy() -> bool {
2102            false
2103        }
2104    }
2105
2106    impl fidl::encoding::ValueTypeMarker for RoutePreference {
2107        type Borrowed<'a> = Self;
2108        #[inline(always)]
2109        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2110            *value
2111        }
2112    }
2113
2114    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
2115        for RoutePreference
2116    {
2117        #[inline]
2118        unsafe fn encode(
2119            self,
2120            encoder: &mut fidl::encoding::Encoder<'_, D>,
2121            offset: usize,
2122            _depth: fidl::encoding::Depth,
2123        ) -> fidl::Result<()> {
2124            encoder.debug_check_bounds::<Self>(offset);
2125            encoder.write_num(self.into_primitive(), offset);
2126            Ok(())
2127        }
2128    }
2129
2130    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for RoutePreference {
2131        #[inline(always)]
2132        fn new_empty() -> Self {
2133            Self::Low
2134        }
2135
2136        #[inline]
2137        unsafe fn decode(
2138            &mut self,
2139            decoder: &mut fidl::encoding::Decoder<'_, D>,
2140            offset: usize,
2141            _depth: fidl::encoding::Depth,
2142        ) -> fidl::Result<()> {
2143            decoder.debug_check_bounds::<Self>(offset);
2144            let prim = decoder.read_num::<i8>(offset);
2145
2146            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
2147            Ok(())
2148        }
2149    }
2150    unsafe impl fidl::encoding::TypeMarker for SrpServerAddressMode {
2151        type Owned = Self;
2152
2153        #[inline(always)]
2154        fn inline_align(_context: fidl::encoding::Context) -> usize {
2155            std::mem::align_of::<u32>()
2156        }
2157
2158        #[inline(always)]
2159        fn inline_size(_context: fidl::encoding::Context) -> usize {
2160            std::mem::size_of::<u32>()
2161        }
2162
2163        #[inline(always)]
2164        fn encode_is_copy() -> bool {
2165            true
2166        }
2167
2168        #[inline(always)]
2169        fn decode_is_copy() -> bool {
2170            false
2171        }
2172    }
2173
2174    impl fidl::encoding::ValueTypeMarker for SrpServerAddressMode {
2175        type Borrowed<'a> = Self;
2176        #[inline(always)]
2177        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2178            *value
2179        }
2180    }
2181
2182    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
2183        for SrpServerAddressMode
2184    {
2185        #[inline]
2186        unsafe fn encode(
2187            self,
2188            encoder: &mut fidl::encoding::Encoder<'_, D>,
2189            offset: usize,
2190            _depth: fidl::encoding::Depth,
2191        ) -> fidl::Result<()> {
2192            encoder.debug_check_bounds::<Self>(offset);
2193            encoder.write_num(self.into_primitive(), offset);
2194            Ok(())
2195        }
2196    }
2197
2198    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SrpServerAddressMode {
2199        #[inline(always)]
2200        fn new_empty() -> Self {
2201            Self::Unicast
2202        }
2203
2204        #[inline]
2205        unsafe fn decode(
2206            &mut self,
2207            decoder: &mut fidl::encoding::Decoder<'_, D>,
2208            offset: usize,
2209            _depth: fidl::encoding::Depth,
2210        ) -> fidl::Result<()> {
2211            decoder.debug_check_bounds::<Self>(offset);
2212            let prim = decoder.read_num::<u32>(offset);
2213
2214            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
2215            Ok(())
2216        }
2217    }
2218    unsafe impl fidl::encoding::TypeMarker for SrpServerState {
2219        type Owned = Self;
2220
2221        #[inline(always)]
2222        fn inline_align(_context: fidl::encoding::Context) -> usize {
2223            std::mem::align_of::<u32>()
2224        }
2225
2226        #[inline(always)]
2227        fn inline_size(_context: fidl::encoding::Context) -> usize {
2228            std::mem::size_of::<u32>()
2229        }
2230
2231        #[inline(always)]
2232        fn encode_is_copy() -> bool {
2233            true
2234        }
2235
2236        #[inline(always)]
2237        fn decode_is_copy() -> bool {
2238            false
2239        }
2240    }
2241
2242    impl fidl::encoding::ValueTypeMarker for SrpServerState {
2243        type Borrowed<'a> = Self;
2244        #[inline(always)]
2245        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2246            *value
2247        }
2248    }
2249
2250    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for SrpServerState {
2251        #[inline]
2252        unsafe fn encode(
2253            self,
2254            encoder: &mut fidl::encoding::Encoder<'_, D>,
2255            offset: usize,
2256            _depth: fidl::encoding::Depth,
2257        ) -> fidl::Result<()> {
2258            encoder.debug_check_bounds::<Self>(offset);
2259            encoder.write_num(self.into_primitive(), offset);
2260            Ok(())
2261        }
2262    }
2263
2264    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SrpServerState {
2265        #[inline(always)]
2266        fn new_empty() -> Self {
2267            Self::Disabled
2268        }
2269
2270        #[inline]
2271        unsafe fn decode(
2272            &mut self,
2273            decoder: &mut fidl::encoding::Decoder<'_, D>,
2274            offset: usize,
2275            _depth: fidl::encoding::Depth,
2276        ) -> fidl::Result<()> {
2277            decoder.debug_check_bounds::<Self>(offset);
2278            let prim = decoder.read_num::<u32>(offset);
2279
2280            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
2281            Ok(())
2282        }
2283    }
2284    unsafe impl fidl::encoding::TypeMarker for UpstreamDnsQueryState {
2285        type Owned = Self;
2286
2287        #[inline(always)]
2288        fn inline_align(_context: fidl::encoding::Context) -> usize {
2289            std::mem::align_of::<u32>()
2290        }
2291
2292        #[inline(always)]
2293        fn inline_size(_context: fidl::encoding::Context) -> usize {
2294            std::mem::size_of::<u32>()
2295        }
2296
2297        #[inline(always)]
2298        fn encode_is_copy() -> bool {
2299            false
2300        }
2301
2302        #[inline(always)]
2303        fn decode_is_copy() -> bool {
2304            false
2305        }
2306    }
2307
2308    impl fidl::encoding::ValueTypeMarker for UpstreamDnsQueryState {
2309        type Borrowed<'a> = Self;
2310        #[inline(always)]
2311        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2312            *value
2313        }
2314    }
2315
2316    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
2317        for UpstreamDnsQueryState
2318    {
2319        #[inline]
2320        unsafe fn encode(
2321            self,
2322            encoder: &mut fidl::encoding::Encoder<'_, D>,
2323            offset: usize,
2324            _depth: fidl::encoding::Depth,
2325        ) -> fidl::Result<()> {
2326            encoder.debug_check_bounds::<Self>(offset);
2327            encoder.write_num(self.into_primitive(), offset);
2328            Ok(())
2329        }
2330    }
2331
2332    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for UpstreamDnsQueryState {
2333        #[inline(always)]
2334        fn new_empty() -> Self {
2335            Self::unknown()
2336        }
2337
2338        #[inline]
2339        unsafe fn decode(
2340            &mut self,
2341            decoder: &mut fidl::encoding::Decoder<'_, D>,
2342            offset: usize,
2343            _depth: fidl::encoding::Depth,
2344        ) -> fidl::Result<()> {
2345            decoder.debug_check_bounds::<Self>(offset);
2346            let prim = decoder.read_num::<u32>(offset);
2347
2348            *self = Self::from_primitive_allow_unknown(prim);
2349            Ok(())
2350        }
2351    }
2352
2353    impl fidl::encoding::ValueTypeMarker for BeaconInfoStreamNextResponse {
2354        type Borrowed<'a> = &'a Self;
2355        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2356            value
2357        }
2358    }
2359
2360    unsafe impl fidl::encoding::TypeMarker for BeaconInfoStreamNextResponse {
2361        type Owned = Self;
2362
2363        #[inline(always)]
2364        fn inline_align(_context: fidl::encoding::Context) -> usize {
2365            8
2366        }
2367
2368        #[inline(always)]
2369        fn inline_size(_context: fidl::encoding::Context) -> usize {
2370            16
2371        }
2372    }
2373
2374    unsafe impl<D: fidl::encoding::ResourceDialect>
2375        fidl::encoding::Encode<BeaconInfoStreamNextResponse, D> for &BeaconInfoStreamNextResponse
2376    {
2377        #[inline]
2378        unsafe fn encode(
2379            self,
2380            encoder: &mut fidl::encoding::Encoder<'_, D>,
2381            offset: usize,
2382            _depth: fidl::encoding::Depth,
2383        ) -> fidl::Result<()> {
2384            encoder.debug_check_bounds::<BeaconInfoStreamNextResponse>(offset);
2385            // Delegate to tuple encoding.
2386            fidl::encoding::Encode::<BeaconInfoStreamNextResponse, D>::encode(
2387                (
2388                    <fidl::encoding::Vector<BeaconInfo, 32> as fidl::encoding::ValueTypeMarker>::borrow(&self.beacons),
2389                ),
2390                encoder, offset, _depth
2391            )
2392        }
2393    }
2394    unsafe impl<
2395        D: fidl::encoding::ResourceDialect,
2396        T0: fidl::encoding::Encode<fidl::encoding::Vector<BeaconInfo, 32>, D>,
2397    > fidl::encoding::Encode<BeaconInfoStreamNextResponse, D> for (T0,)
2398    {
2399        #[inline]
2400        unsafe fn encode(
2401            self,
2402            encoder: &mut fidl::encoding::Encoder<'_, D>,
2403            offset: usize,
2404            depth: fidl::encoding::Depth,
2405        ) -> fidl::Result<()> {
2406            encoder.debug_check_bounds::<BeaconInfoStreamNextResponse>(offset);
2407            // Zero out padding regions. There's no need to apply masks
2408            // because the unmasked parts will be overwritten by fields.
2409            // Write the fields.
2410            self.0.encode(encoder, offset + 0, depth)?;
2411            Ok(())
2412        }
2413    }
2414
2415    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2416        for BeaconInfoStreamNextResponse
2417    {
2418        #[inline(always)]
2419        fn new_empty() -> Self {
2420            Self { beacons: fidl::new_empty!(fidl::encoding::Vector<BeaconInfo, 32>, D) }
2421        }
2422
2423        #[inline]
2424        unsafe fn decode(
2425            &mut self,
2426            decoder: &mut fidl::encoding::Decoder<'_, D>,
2427            offset: usize,
2428            _depth: fidl::encoding::Depth,
2429        ) -> fidl::Result<()> {
2430            decoder.debug_check_bounds::<Self>(offset);
2431            // Verify that padding bytes are zero.
2432            fidl::decode!(fidl::encoding::Vector<BeaconInfo, 32>, D, &mut self.beacons, decoder, offset + 0, _depth)?;
2433            Ok(())
2434        }
2435    }
2436
2437    impl fidl::encoding::ValueTypeMarker for DeviceGetSupportedChannelsResponse {
2438        type Borrowed<'a> = &'a Self;
2439        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2440            value
2441        }
2442    }
2443
2444    unsafe impl fidl::encoding::TypeMarker for DeviceGetSupportedChannelsResponse {
2445        type Owned = Self;
2446
2447        #[inline(always)]
2448        fn inline_align(_context: fidl::encoding::Context) -> usize {
2449            8
2450        }
2451
2452        #[inline(always)]
2453        fn inline_size(_context: fidl::encoding::Context) -> usize {
2454            16
2455        }
2456    }
2457
2458    unsafe impl<D: fidl::encoding::ResourceDialect>
2459        fidl::encoding::Encode<DeviceGetSupportedChannelsResponse, D>
2460        for &DeviceGetSupportedChannelsResponse
2461    {
2462        #[inline]
2463        unsafe fn encode(
2464            self,
2465            encoder: &mut fidl::encoding::Encoder<'_, D>,
2466            offset: usize,
2467            _depth: fidl::encoding::Depth,
2468        ) -> fidl::Result<()> {
2469            encoder.debug_check_bounds::<DeviceGetSupportedChannelsResponse>(offset);
2470            // Delegate to tuple encoding.
2471            fidl::encoding::Encode::<DeviceGetSupportedChannelsResponse, D>::encode(
2472                (
2473                    <fidl::encoding::Vector<ChannelInfo, 200> as fidl::encoding::ValueTypeMarker>::borrow(&self.channels_info),
2474                ),
2475                encoder, offset, _depth
2476            )
2477        }
2478    }
2479    unsafe impl<
2480        D: fidl::encoding::ResourceDialect,
2481        T0: fidl::encoding::Encode<fidl::encoding::Vector<ChannelInfo, 200>, D>,
2482    > fidl::encoding::Encode<DeviceGetSupportedChannelsResponse, D> for (T0,)
2483    {
2484        #[inline]
2485        unsafe fn encode(
2486            self,
2487            encoder: &mut fidl::encoding::Encoder<'_, D>,
2488            offset: usize,
2489            depth: fidl::encoding::Depth,
2490        ) -> fidl::Result<()> {
2491            encoder.debug_check_bounds::<DeviceGetSupportedChannelsResponse>(offset);
2492            // Zero out padding regions. There's no need to apply masks
2493            // because the unmasked parts will be overwritten by fields.
2494            // Write the fields.
2495            self.0.encode(encoder, offset + 0, depth)?;
2496            Ok(())
2497        }
2498    }
2499
2500    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2501        for DeviceGetSupportedChannelsResponse
2502    {
2503        #[inline(always)]
2504        fn new_empty() -> Self {
2505            Self { channels_info: fidl::new_empty!(fidl::encoding::Vector<ChannelInfo, 200>, D) }
2506        }
2507
2508        #[inline]
2509        unsafe fn decode(
2510            &mut self,
2511            decoder: &mut fidl::encoding::Decoder<'_, D>,
2512            offset: usize,
2513            _depth: fidl::encoding::Depth,
2514        ) -> fidl::Result<()> {
2515            decoder.debug_check_bounds::<Self>(offset);
2516            // Verify that padding bytes are zero.
2517            fidl::decode!(fidl::encoding::Vector<ChannelInfo, 200>, D, &mut self.channels_info, decoder, offset + 0, _depth)?;
2518            Ok(())
2519        }
2520    }
2521
2522    impl fidl::encoding::ValueTypeMarker for DeviceRouteExtraGetLocalExternalRoutesResponse {
2523        type Borrowed<'a> = &'a Self;
2524        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2525            value
2526        }
2527    }
2528
2529    unsafe impl fidl::encoding::TypeMarker for DeviceRouteExtraGetLocalExternalRoutesResponse {
2530        type Owned = Self;
2531
2532        #[inline(always)]
2533        fn inline_align(_context: fidl::encoding::Context) -> usize {
2534            8
2535        }
2536
2537        #[inline(always)]
2538        fn inline_size(_context: fidl::encoding::Context) -> usize {
2539            16
2540        }
2541    }
2542
2543    unsafe impl<D: fidl::encoding::ResourceDialect>
2544        fidl::encoding::Encode<DeviceRouteExtraGetLocalExternalRoutesResponse, D>
2545        for &DeviceRouteExtraGetLocalExternalRoutesResponse
2546    {
2547        #[inline]
2548        unsafe fn encode(
2549            self,
2550            encoder: &mut fidl::encoding::Encoder<'_, D>,
2551            offset: usize,
2552            _depth: fidl::encoding::Depth,
2553        ) -> fidl::Result<()> {
2554            encoder.debug_check_bounds::<DeviceRouteExtraGetLocalExternalRoutesResponse>(offset);
2555            // Delegate to tuple encoding.
2556            fidl::encoding::Encode::<DeviceRouteExtraGetLocalExternalRoutesResponse, D>::encode(
2557                (
2558                    <fidl::encoding::Vector<ExternalRoute, 32> as fidl::encoding::ValueTypeMarker>::borrow(&self.external_routes),
2559                ),
2560                encoder, offset, _depth
2561            )
2562        }
2563    }
2564    unsafe impl<
2565        D: fidl::encoding::ResourceDialect,
2566        T0: fidl::encoding::Encode<fidl::encoding::Vector<ExternalRoute, 32>, D>,
2567    > fidl::encoding::Encode<DeviceRouteExtraGetLocalExternalRoutesResponse, D> for (T0,)
2568    {
2569        #[inline]
2570        unsafe fn encode(
2571            self,
2572            encoder: &mut fidl::encoding::Encoder<'_, D>,
2573            offset: usize,
2574            depth: fidl::encoding::Depth,
2575        ) -> fidl::Result<()> {
2576            encoder.debug_check_bounds::<DeviceRouteExtraGetLocalExternalRoutesResponse>(offset);
2577            // Zero out padding regions. There's no need to apply masks
2578            // because the unmasked parts will be overwritten by fields.
2579            // Write the fields.
2580            self.0.encode(encoder, offset + 0, depth)?;
2581            Ok(())
2582        }
2583    }
2584
2585    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2586        for DeviceRouteExtraGetLocalExternalRoutesResponse
2587    {
2588        #[inline(always)]
2589        fn new_empty() -> Self {
2590            Self { external_routes: fidl::new_empty!(fidl::encoding::Vector<ExternalRoute, 32>, D) }
2591        }
2592
2593        #[inline]
2594        unsafe fn decode(
2595            &mut self,
2596            decoder: &mut fidl::encoding::Decoder<'_, D>,
2597            offset: usize,
2598            _depth: fidl::encoding::Depth,
2599        ) -> fidl::Result<()> {
2600            decoder.debug_check_bounds::<Self>(offset);
2601            // Verify that padding bytes are zero.
2602            fidl::decode!(fidl::encoding::Vector<ExternalRoute, 32>, D, &mut self.external_routes, decoder, offset + 0, _depth)?;
2603            Ok(())
2604        }
2605    }
2606
2607    impl fidl::encoding::ValueTypeMarker for DeviceRouteExtraGetLocalOnMeshPrefixesResponse {
2608        type Borrowed<'a> = &'a Self;
2609        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2610            value
2611        }
2612    }
2613
2614    unsafe impl fidl::encoding::TypeMarker for DeviceRouteExtraGetLocalOnMeshPrefixesResponse {
2615        type Owned = Self;
2616
2617        #[inline(always)]
2618        fn inline_align(_context: fidl::encoding::Context) -> usize {
2619            8
2620        }
2621
2622        #[inline(always)]
2623        fn inline_size(_context: fidl::encoding::Context) -> usize {
2624            16
2625        }
2626    }
2627
2628    unsafe impl<D: fidl::encoding::ResourceDialect>
2629        fidl::encoding::Encode<DeviceRouteExtraGetLocalOnMeshPrefixesResponse, D>
2630        for &DeviceRouteExtraGetLocalOnMeshPrefixesResponse
2631    {
2632        #[inline]
2633        unsafe fn encode(
2634            self,
2635            encoder: &mut fidl::encoding::Encoder<'_, D>,
2636            offset: usize,
2637            _depth: fidl::encoding::Depth,
2638        ) -> fidl::Result<()> {
2639            encoder.debug_check_bounds::<DeviceRouteExtraGetLocalOnMeshPrefixesResponse>(offset);
2640            // Delegate to tuple encoding.
2641            fidl::encoding::Encode::<DeviceRouteExtraGetLocalOnMeshPrefixesResponse, D>::encode(
2642                (
2643                    <fidl::encoding::Vector<OnMeshPrefix, 32> as fidl::encoding::ValueTypeMarker>::borrow(&self.prefixes),
2644                ),
2645                encoder, offset, _depth
2646            )
2647        }
2648    }
2649    unsafe impl<
2650        D: fidl::encoding::ResourceDialect,
2651        T0: fidl::encoding::Encode<fidl::encoding::Vector<OnMeshPrefix, 32>, D>,
2652    > fidl::encoding::Encode<DeviceRouteExtraGetLocalOnMeshPrefixesResponse, D> for (T0,)
2653    {
2654        #[inline]
2655        unsafe fn encode(
2656            self,
2657            encoder: &mut fidl::encoding::Encoder<'_, D>,
2658            offset: usize,
2659            depth: fidl::encoding::Depth,
2660        ) -> fidl::Result<()> {
2661            encoder.debug_check_bounds::<DeviceRouteExtraGetLocalOnMeshPrefixesResponse>(offset);
2662            // Zero out padding regions. There's no need to apply masks
2663            // because the unmasked parts will be overwritten by fields.
2664            // Write the fields.
2665            self.0.encode(encoder, offset + 0, depth)?;
2666            Ok(())
2667        }
2668    }
2669
2670    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2671        for DeviceRouteExtraGetLocalOnMeshPrefixesResponse
2672    {
2673        #[inline(always)]
2674        fn new_empty() -> Self {
2675            Self { prefixes: fidl::new_empty!(fidl::encoding::Vector<OnMeshPrefix, 32>, D) }
2676        }
2677
2678        #[inline]
2679        unsafe fn decode(
2680            &mut self,
2681            decoder: &mut fidl::encoding::Decoder<'_, D>,
2682            offset: usize,
2683            _depth: fidl::encoding::Depth,
2684        ) -> fidl::Result<()> {
2685            decoder.debug_check_bounds::<Self>(offset);
2686            // Verify that padding bytes are zero.
2687            fidl::decode!(fidl::encoding::Vector<OnMeshPrefix, 32>, D, &mut self.prefixes, decoder, offset + 0, _depth)?;
2688            Ok(())
2689        }
2690    }
2691
2692    impl fidl::encoding::ValueTypeMarker for DeviceRouteRegisterExternalRouteRequest {
2693        type Borrowed<'a> = &'a Self;
2694        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2695            value
2696        }
2697    }
2698
2699    unsafe impl fidl::encoding::TypeMarker for DeviceRouteRegisterExternalRouteRequest {
2700        type Owned = Self;
2701
2702        #[inline(always)]
2703        fn inline_align(_context: fidl::encoding::Context) -> usize {
2704            8
2705        }
2706
2707        #[inline(always)]
2708        fn inline_size(_context: fidl::encoding::Context) -> usize {
2709            16
2710        }
2711    }
2712
2713    unsafe impl<D: fidl::encoding::ResourceDialect>
2714        fidl::encoding::Encode<DeviceRouteRegisterExternalRouteRequest, D>
2715        for &DeviceRouteRegisterExternalRouteRequest
2716    {
2717        #[inline]
2718        unsafe fn encode(
2719            self,
2720            encoder: &mut fidl::encoding::Encoder<'_, D>,
2721            offset: usize,
2722            _depth: fidl::encoding::Depth,
2723        ) -> fidl::Result<()> {
2724            encoder.debug_check_bounds::<DeviceRouteRegisterExternalRouteRequest>(offset);
2725            // Delegate to tuple encoding.
2726            fidl::encoding::Encode::<DeviceRouteRegisterExternalRouteRequest, D>::encode(
2727                (<ExternalRoute as fidl::encoding::ValueTypeMarker>::borrow(&self.external_route),),
2728                encoder,
2729                offset,
2730                _depth,
2731            )
2732        }
2733    }
2734    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<ExternalRoute, D>>
2735        fidl::encoding::Encode<DeviceRouteRegisterExternalRouteRequest, D> for (T0,)
2736    {
2737        #[inline]
2738        unsafe fn encode(
2739            self,
2740            encoder: &mut fidl::encoding::Encoder<'_, D>,
2741            offset: usize,
2742            depth: fidl::encoding::Depth,
2743        ) -> fidl::Result<()> {
2744            encoder.debug_check_bounds::<DeviceRouteRegisterExternalRouteRequest>(offset);
2745            // Zero out padding regions. There's no need to apply masks
2746            // because the unmasked parts will be overwritten by fields.
2747            // Write the fields.
2748            self.0.encode(encoder, offset + 0, depth)?;
2749            Ok(())
2750        }
2751    }
2752
2753    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2754        for DeviceRouteRegisterExternalRouteRequest
2755    {
2756        #[inline(always)]
2757        fn new_empty() -> Self {
2758            Self { external_route: fidl::new_empty!(ExternalRoute, D) }
2759        }
2760
2761        #[inline]
2762        unsafe fn decode(
2763            &mut self,
2764            decoder: &mut fidl::encoding::Decoder<'_, D>,
2765            offset: usize,
2766            _depth: fidl::encoding::Depth,
2767        ) -> fidl::Result<()> {
2768            decoder.debug_check_bounds::<Self>(offset);
2769            // Verify that padding bytes are zero.
2770            fidl::decode!(ExternalRoute, D, &mut self.external_route, decoder, offset + 0, _depth)?;
2771            Ok(())
2772        }
2773    }
2774
2775    impl fidl::encoding::ValueTypeMarker for DeviceRouteRegisterOnMeshPrefixRequest {
2776        type Borrowed<'a> = &'a Self;
2777        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2778            value
2779        }
2780    }
2781
2782    unsafe impl fidl::encoding::TypeMarker for DeviceRouteRegisterOnMeshPrefixRequest {
2783        type Owned = Self;
2784
2785        #[inline(always)]
2786        fn inline_align(_context: fidl::encoding::Context) -> usize {
2787            8
2788        }
2789
2790        #[inline(always)]
2791        fn inline_size(_context: fidl::encoding::Context) -> usize {
2792            16
2793        }
2794    }
2795
2796    unsafe impl<D: fidl::encoding::ResourceDialect>
2797        fidl::encoding::Encode<DeviceRouteRegisterOnMeshPrefixRequest, D>
2798        for &DeviceRouteRegisterOnMeshPrefixRequest
2799    {
2800        #[inline]
2801        unsafe fn encode(
2802            self,
2803            encoder: &mut fidl::encoding::Encoder<'_, D>,
2804            offset: usize,
2805            _depth: fidl::encoding::Depth,
2806        ) -> fidl::Result<()> {
2807            encoder.debug_check_bounds::<DeviceRouteRegisterOnMeshPrefixRequest>(offset);
2808            // Delegate to tuple encoding.
2809            fidl::encoding::Encode::<DeviceRouteRegisterOnMeshPrefixRequest, D>::encode(
2810                (<OnMeshPrefix as fidl::encoding::ValueTypeMarker>::borrow(&self.prefix),),
2811                encoder,
2812                offset,
2813                _depth,
2814            )
2815        }
2816    }
2817    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<OnMeshPrefix, D>>
2818        fidl::encoding::Encode<DeviceRouteRegisterOnMeshPrefixRequest, D> for (T0,)
2819    {
2820        #[inline]
2821        unsafe fn encode(
2822            self,
2823            encoder: &mut fidl::encoding::Encoder<'_, D>,
2824            offset: usize,
2825            depth: fidl::encoding::Depth,
2826        ) -> fidl::Result<()> {
2827            encoder.debug_check_bounds::<DeviceRouteRegisterOnMeshPrefixRequest>(offset);
2828            // Zero out padding regions. There's no need to apply masks
2829            // because the unmasked parts will be overwritten by fields.
2830            // Write the fields.
2831            self.0.encode(encoder, offset + 0, depth)?;
2832            Ok(())
2833        }
2834    }
2835
2836    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2837        for DeviceRouteRegisterOnMeshPrefixRequest
2838    {
2839        #[inline(always)]
2840        fn new_empty() -> Self {
2841            Self { prefix: fidl::new_empty!(OnMeshPrefix, D) }
2842        }
2843
2844        #[inline]
2845        unsafe fn decode(
2846            &mut self,
2847            decoder: &mut fidl::encoding::Decoder<'_, D>,
2848            offset: usize,
2849            _depth: fidl::encoding::Depth,
2850        ) -> fidl::Result<()> {
2851            decoder.debug_check_bounds::<Self>(offset);
2852            // Verify that padding bytes are zero.
2853            fidl::decode!(OnMeshPrefix, D, &mut self.prefix, decoder, offset + 0, _depth)?;
2854            Ok(())
2855        }
2856    }
2857
2858    impl fidl::encoding::ValueTypeMarker for DeviceRouteUnregisterExternalRouteRequest {
2859        type Borrowed<'a> = &'a Self;
2860        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2861            value
2862        }
2863    }
2864
2865    unsafe impl fidl::encoding::TypeMarker for DeviceRouteUnregisterExternalRouteRequest {
2866        type Owned = Self;
2867
2868        #[inline(always)]
2869        fn inline_align(_context: fidl::encoding::Context) -> usize {
2870            1
2871        }
2872
2873        #[inline(always)]
2874        fn inline_size(_context: fidl::encoding::Context) -> usize {
2875            17
2876        }
2877    }
2878
2879    unsafe impl<D: fidl::encoding::ResourceDialect>
2880        fidl::encoding::Encode<DeviceRouteUnregisterExternalRouteRequest, D>
2881        for &DeviceRouteUnregisterExternalRouteRequest
2882    {
2883        #[inline]
2884        unsafe fn encode(
2885            self,
2886            encoder: &mut fidl::encoding::Encoder<'_, D>,
2887            offset: usize,
2888            _depth: fidl::encoding::Depth,
2889        ) -> fidl::Result<()> {
2890            encoder.debug_check_bounds::<DeviceRouteUnregisterExternalRouteRequest>(offset);
2891            // Delegate to tuple encoding.
2892            fidl::encoding::Encode::<DeviceRouteUnregisterExternalRouteRequest, D>::encode(
2893                (
2894                    <fidl_fuchsia_net__common::Ipv6AddressWithPrefix as fidl::encoding::ValueTypeMarker>::borrow(&self.subnet),
2895                ),
2896                encoder, offset, _depth
2897            )
2898        }
2899    }
2900    unsafe impl<
2901        D: fidl::encoding::ResourceDialect,
2902        T0: fidl::encoding::Encode<fidl_fuchsia_net__common::Ipv6AddressWithPrefix, D>,
2903    > fidl::encoding::Encode<DeviceRouteUnregisterExternalRouteRequest, D> for (T0,)
2904    {
2905        #[inline]
2906        unsafe fn encode(
2907            self,
2908            encoder: &mut fidl::encoding::Encoder<'_, D>,
2909            offset: usize,
2910            depth: fidl::encoding::Depth,
2911        ) -> fidl::Result<()> {
2912            encoder.debug_check_bounds::<DeviceRouteUnregisterExternalRouteRequest>(offset);
2913            // Zero out padding regions. There's no need to apply masks
2914            // because the unmasked parts will be overwritten by fields.
2915            // Write the fields.
2916            self.0.encode(encoder, offset + 0, depth)?;
2917            Ok(())
2918        }
2919    }
2920
2921    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2922        for DeviceRouteUnregisterExternalRouteRequest
2923    {
2924        #[inline(always)]
2925        fn new_empty() -> Self {
2926            Self { subnet: fidl::new_empty!(fidl_fuchsia_net__common::Ipv6AddressWithPrefix, D) }
2927        }
2928
2929        #[inline]
2930        unsafe fn decode(
2931            &mut self,
2932            decoder: &mut fidl::encoding::Decoder<'_, D>,
2933            offset: usize,
2934            _depth: fidl::encoding::Depth,
2935        ) -> fidl::Result<()> {
2936            decoder.debug_check_bounds::<Self>(offset);
2937            // Verify that padding bytes are zero.
2938            fidl::decode!(
2939                fidl_fuchsia_net__common::Ipv6AddressWithPrefix,
2940                D,
2941                &mut self.subnet,
2942                decoder,
2943                offset + 0,
2944                _depth
2945            )?;
2946            Ok(())
2947        }
2948    }
2949
2950    impl fidl::encoding::ValueTypeMarker for DeviceRouteUnregisterOnMeshPrefixRequest {
2951        type Borrowed<'a> = &'a Self;
2952        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2953            value
2954        }
2955    }
2956
2957    unsafe impl fidl::encoding::TypeMarker for DeviceRouteUnregisterOnMeshPrefixRequest {
2958        type Owned = Self;
2959
2960        #[inline(always)]
2961        fn inline_align(_context: fidl::encoding::Context) -> usize {
2962            1
2963        }
2964
2965        #[inline(always)]
2966        fn inline_size(_context: fidl::encoding::Context) -> usize {
2967            17
2968        }
2969    }
2970
2971    unsafe impl<D: fidl::encoding::ResourceDialect>
2972        fidl::encoding::Encode<DeviceRouteUnregisterOnMeshPrefixRequest, D>
2973        for &DeviceRouteUnregisterOnMeshPrefixRequest
2974    {
2975        #[inline]
2976        unsafe fn encode(
2977            self,
2978            encoder: &mut fidl::encoding::Encoder<'_, D>,
2979            offset: usize,
2980            _depth: fidl::encoding::Depth,
2981        ) -> fidl::Result<()> {
2982            encoder.debug_check_bounds::<DeviceRouteUnregisterOnMeshPrefixRequest>(offset);
2983            // Delegate to tuple encoding.
2984            fidl::encoding::Encode::<DeviceRouteUnregisterOnMeshPrefixRequest, D>::encode(
2985                (
2986                    <fidl_fuchsia_net__common::Ipv6AddressWithPrefix as fidl::encoding::ValueTypeMarker>::borrow(&self.subnet),
2987                ),
2988                encoder, offset, _depth
2989            )
2990        }
2991    }
2992    unsafe impl<
2993        D: fidl::encoding::ResourceDialect,
2994        T0: fidl::encoding::Encode<fidl_fuchsia_net__common::Ipv6AddressWithPrefix, D>,
2995    > fidl::encoding::Encode<DeviceRouteUnregisterOnMeshPrefixRequest, D> for (T0,)
2996    {
2997        #[inline]
2998        unsafe fn encode(
2999            self,
3000            encoder: &mut fidl::encoding::Encoder<'_, D>,
3001            offset: usize,
3002            depth: fidl::encoding::Depth,
3003        ) -> fidl::Result<()> {
3004            encoder.debug_check_bounds::<DeviceRouteUnregisterOnMeshPrefixRequest>(offset);
3005            // Zero out padding regions. There's no need to apply masks
3006            // because the unmasked parts will be overwritten by fields.
3007            // Write the fields.
3008            self.0.encode(encoder, offset + 0, depth)?;
3009            Ok(())
3010        }
3011    }
3012
3013    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
3014        for DeviceRouteUnregisterOnMeshPrefixRequest
3015    {
3016        #[inline(always)]
3017        fn new_empty() -> Self {
3018            Self { subnet: fidl::new_empty!(fidl_fuchsia_net__common::Ipv6AddressWithPrefix, D) }
3019        }
3020
3021        #[inline]
3022        unsafe fn decode(
3023            &mut self,
3024            decoder: &mut fidl::encoding::Decoder<'_, D>,
3025            offset: usize,
3026            _depth: fidl::encoding::Depth,
3027        ) -> fidl::Result<()> {
3028            decoder.debug_check_bounds::<Self>(offset);
3029            // Verify that padding bytes are zero.
3030            fidl::decode!(
3031                fidl_fuchsia_net__common::Ipv6AddressWithPrefix,
3032                D,
3033                &mut self.subnet,
3034                decoder,
3035                offset + 0,
3036                _depth
3037            )?;
3038            Ok(())
3039        }
3040    }
3041
3042    impl fidl::encoding::ValueTypeMarker for LegacyJoiningMakeJoinableRequest {
3043        type Borrowed<'a> = &'a Self;
3044        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3045            value
3046        }
3047    }
3048
3049    unsafe impl fidl::encoding::TypeMarker for LegacyJoiningMakeJoinableRequest {
3050        type Owned = Self;
3051
3052        #[inline(always)]
3053        fn inline_align(_context: fidl::encoding::Context) -> usize {
3054            8
3055        }
3056
3057        #[inline(always)]
3058        fn inline_size(_context: fidl::encoding::Context) -> usize {
3059            16
3060        }
3061    }
3062
3063    unsafe impl<D: fidl::encoding::ResourceDialect>
3064        fidl::encoding::Encode<LegacyJoiningMakeJoinableRequest, D>
3065        for &LegacyJoiningMakeJoinableRequest
3066    {
3067        #[inline]
3068        unsafe fn encode(
3069            self,
3070            encoder: &mut fidl::encoding::Encoder<'_, D>,
3071            offset: usize,
3072            _depth: fidl::encoding::Depth,
3073        ) -> fidl::Result<()> {
3074            encoder.debug_check_bounds::<LegacyJoiningMakeJoinableRequest>(offset);
3075            unsafe {
3076                // Copy the object into the buffer.
3077                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
3078                (buf_ptr as *mut LegacyJoiningMakeJoinableRequest)
3079                    .write_unaligned((self as *const LegacyJoiningMakeJoinableRequest).read());
3080                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
3081                // done second because the memcpy will write garbage to these bytes.
3082                let padding_ptr = buf_ptr.offset(8) as *mut u64;
3083                let padding_mask = 0xffffffffffff0000u64;
3084                padding_ptr.write_unaligned(padding_ptr.read_unaligned() & !padding_mask);
3085            }
3086            Ok(())
3087        }
3088    }
3089    unsafe impl<
3090        D: fidl::encoding::ResourceDialect,
3091        T0: fidl::encoding::Encode<i64, D>,
3092        T1: fidl::encoding::Encode<u16, D>,
3093    > fidl::encoding::Encode<LegacyJoiningMakeJoinableRequest, D> for (T0, T1)
3094    {
3095        #[inline]
3096        unsafe fn encode(
3097            self,
3098            encoder: &mut fidl::encoding::Encoder<'_, D>,
3099            offset: usize,
3100            depth: fidl::encoding::Depth,
3101        ) -> fidl::Result<()> {
3102            encoder.debug_check_bounds::<LegacyJoiningMakeJoinableRequest>(offset);
3103            // Zero out padding regions. There's no need to apply masks
3104            // because the unmasked parts will be overwritten by fields.
3105            unsafe {
3106                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(8);
3107                (ptr as *mut u64).write_unaligned(0);
3108            }
3109            // Write the fields.
3110            self.0.encode(encoder, offset + 0, depth)?;
3111            self.1.encode(encoder, offset + 8, depth)?;
3112            Ok(())
3113        }
3114    }
3115
3116    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
3117        for LegacyJoiningMakeJoinableRequest
3118    {
3119        #[inline(always)]
3120        fn new_empty() -> Self {
3121            Self { duration: fidl::new_empty!(i64, D), port: fidl::new_empty!(u16, D) }
3122        }
3123
3124        #[inline]
3125        unsafe fn decode(
3126            &mut self,
3127            decoder: &mut fidl::encoding::Decoder<'_, D>,
3128            offset: usize,
3129            _depth: fidl::encoding::Depth,
3130        ) -> fidl::Result<()> {
3131            decoder.debug_check_bounds::<Self>(offset);
3132            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
3133            // Verify that padding bytes are zero.
3134            let ptr = unsafe { buf_ptr.offset(8) };
3135            let padval = unsafe { (ptr as *const u64).read_unaligned() };
3136            let mask = 0xffffffffffff0000u64;
3137            let maskedval = padval & mask;
3138            if maskedval != 0 {
3139                return Err(fidl::Error::NonZeroPadding {
3140                    padding_start: offset + 8 + ((mask as u64).trailing_zeros() / 8) as usize,
3141                });
3142            }
3143            // Copy from the buffer into the object.
3144            unsafe {
3145                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 16);
3146            }
3147            Ok(())
3148        }
3149    }
3150
3151    impl fidl::encoding::ValueTypeMarker for ProvisioningMonitorWatchProgressResponse {
3152        type Borrowed<'a> = &'a Self;
3153        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3154            value
3155        }
3156    }
3157
3158    unsafe impl fidl::encoding::TypeMarker for ProvisioningMonitorWatchProgressResponse {
3159        type Owned = Self;
3160
3161        #[inline(always)]
3162        fn inline_align(_context: fidl::encoding::Context) -> usize {
3163            8
3164        }
3165
3166        #[inline(always)]
3167        fn inline_size(_context: fidl::encoding::Context) -> usize {
3168            16
3169        }
3170    }
3171
3172    unsafe impl<D: fidl::encoding::ResourceDialect>
3173        fidl::encoding::Encode<ProvisioningMonitorWatchProgressResponse, D>
3174        for &ProvisioningMonitorWatchProgressResponse
3175    {
3176        #[inline]
3177        unsafe fn encode(
3178            self,
3179            encoder: &mut fidl::encoding::Encoder<'_, D>,
3180            offset: usize,
3181            _depth: fidl::encoding::Depth,
3182        ) -> fidl::Result<()> {
3183            encoder.debug_check_bounds::<ProvisioningMonitorWatchProgressResponse>(offset);
3184            // Delegate to tuple encoding.
3185            fidl::encoding::Encode::<ProvisioningMonitorWatchProgressResponse, D>::encode(
3186                (<ProvisioningProgress as fidl::encoding::ValueTypeMarker>::borrow(&self.progress),),
3187                encoder,
3188                offset,
3189                _depth,
3190            )
3191        }
3192    }
3193    unsafe impl<
3194        D: fidl::encoding::ResourceDialect,
3195        T0: fidl::encoding::Encode<ProvisioningProgress, D>,
3196    > fidl::encoding::Encode<ProvisioningMonitorWatchProgressResponse, D> for (T0,)
3197    {
3198        #[inline]
3199        unsafe fn encode(
3200            self,
3201            encoder: &mut fidl::encoding::Encoder<'_, D>,
3202            offset: usize,
3203            depth: fidl::encoding::Depth,
3204        ) -> fidl::Result<()> {
3205            encoder.debug_check_bounds::<ProvisioningMonitorWatchProgressResponse>(offset);
3206            // Zero out padding regions. There's no need to apply masks
3207            // because the unmasked parts will be overwritten by fields.
3208            // Write the fields.
3209            self.0.encode(encoder, offset + 0, depth)?;
3210            Ok(())
3211        }
3212    }
3213
3214    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
3215        for ProvisioningMonitorWatchProgressResponse
3216    {
3217        #[inline(always)]
3218        fn new_empty() -> Self {
3219            Self { progress: fidl::new_empty!(ProvisioningProgress, D) }
3220        }
3221
3222        #[inline]
3223        unsafe fn decode(
3224            &mut self,
3225            decoder: &mut fidl::encoding::Decoder<'_, D>,
3226            offset: usize,
3227            _depth: fidl::encoding::Depth,
3228        ) -> fidl::Result<()> {
3229            decoder.debug_check_bounds::<Self>(offset);
3230            // Verify that padding bytes are zero.
3231            fidl::decode!(
3232                ProvisioningProgress,
3233                D,
3234                &mut self.progress,
3235                decoder,
3236                offset + 0,
3237                _depth
3238            )?;
3239            Ok(())
3240        }
3241    }
3242
3243    impl fidl::encoding::ValueTypeMarker for TelemetryProviderGetTelemetryResponse {
3244        type Borrowed<'a> = &'a Self;
3245        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3246            value
3247        }
3248    }
3249
3250    unsafe impl fidl::encoding::TypeMarker for TelemetryProviderGetTelemetryResponse {
3251        type Owned = Self;
3252
3253        #[inline(always)]
3254        fn inline_align(_context: fidl::encoding::Context) -> usize {
3255            8
3256        }
3257
3258        #[inline(always)]
3259        fn inline_size(_context: fidl::encoding::Context) -> usize {
3260            16
3261        }
3262    }
3263
3264    unsafe impl<D: fidl::encoding::ResourceDialect>
3265        fidl::encoding::Encode<TelemetryProviderGetTelemetryResponse, D>
3266        for &TelemetryProviderGetTelemetryResponse
3267    {
3268        #[inline]
3269        unsafe fn encode(
3270            self,
3271            encoder: &mut fidl::encoding::Encoder<'_, D>,
3272            offset: usize,
3273            _depth: fidl::encoding::Depth,
3274        ) -> fidl::Result<()> {
3275            encoder.debug_check_bounds::<TelemetryProviderGetTelemetryResponse>(offset);
3276            // Delegate to tuple encoding.
3277            fidl::encoding::Encode::<TelemetryProviderGetTelemetryResponse, D>::encode(
3278                (<Telemetry as fidl::encoding::ValueTypeMarker>::borrow(&self.telemetry),),
3279                encoder,
3280                offset,
3281                _depth,
3282            )
3283        }
3284    }
3285    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<Telemetry, D>>
3286        fidl::encoding::Encode<TelemetryProviderGetTelemetryResponse, D> for (T0,)
3287    {
3288        #[inline]
3289        unsafe fn encode(
3290            self,
3291            encoder: &mut fidl::encoding::Encoder<'_, D>,
3292            offset: usize,
3293            depth: fidl::encoding::Depth,
3294        ) -> fidl::Result<()> {
3295            encoder.debug_check_bounds::<TelemetryProviderGetTelemetryResponse>(offset);
3296            // Zero out padding regions. There's no need to apply masks
3297            // because the unmasked parts will be overwritten by fields.
3298            // Write the fields.
3299            self.0.encode(encoder, offset + 0, depth)?;
3300            Ok(())
3301        }
3302    }
3303
3304    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
3305        for TelemetryProviderGetTelemetryResponse
3306    {
3307        #[inline(always)]
3308        fn new_empty() -> Self {
3309            Self { telemetry: fidl::new_empty!(Telemetry, D) }
3310        }
3311
3312        #[inline]
3313        unsafe fn decode(
3314            &mut self,
3315            decoder: &mut fidl::encoding::Decoder<'_, D>,
3316            offset: usize,
3317            _depth: fidl::encoding::Depth,
3318        ) -> fidl::Result<()> {
3319            decoder.debug_check_bounds::<Self>(offset);
3320            // Verify that padding bytes are zero.
3321            fidl::decode!(Telemetry, D, &mut self.telemetry, decoder, offset + 0, _depth)?;
3322            Ok(())
3323        }
3324    }
3325
3326    impl BeaconInfo {
3327        #[inline(always)]
3328        fn max_ordinal_present(&self) -> u64 {
3329            if let Some(_) = self.lqi {
3330                return 4;
3331            }
3332            if let Some(_) = self.rssi {
3333                return 3;
3334            }
3335            if let Some(_) = self.identity {
3336                return 2;
3337            }
3338            if let Some(_) = self.address {
3339                return 1;
3340            }
3341            0
3342        }
3343    }
3344
3345    impl fidl::encoding::ValueTypeMarker for BeaconInfo {
3346        type Borrowed<'a> = &'a Self;
3347        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3348            value
3349        }
3350    }
3351
3352    unsafe impl fidl::encoding::TypeMarker for BeaconInfo {
3353        type Owned = Self;
3354
3355        #[inline(always)]
3356        fn inline_align(_context: fidl::encoding::Context) -> usize {
3357            8
3358        }
3359
3360        #[inline(always)]
3361        fn inline_size(_context: fidl::encoding::Context) -> usize {
3362            16
3363        }
3364    }
3365
3366    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<BeaconInfo, D>
3367        for &BeaconInfo
3368    {
3369        unsafe fn encode(
3370            self,
3371            encoder: &mut fidl::encoding::Encoder<'_, D>,
3372            offset: usize,
3373            mut depth: fidl::encoding::Depth,
3374        ) -> fidl::Result<()> {
3375            encoder.debug_check_bounds::<BeaconInfo>(offset);
3376            // Vector header
3377            let max_ordinal: u64 = self.max_ordinal_present();
3378            encoder.write_num(max_ordinal, offset);
3379            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
3380            // Calling encoder.out_of_line_offset(0) is not allowed.
3381            if max_ordinal == 0 {
3382                return Ok(());
3383            }
3384            depth.increment()?;
3385            let envelope_size = 8;
3386            let bytes_len = max_ordinal as usize * envelope_size;
3387            #[allow(unused_variables)]
3388            let offset = encoder.out_of_line_offset(bytes_len);
3389            let mut _prev_end_offset: usize = 0;
3390            if 1 > max_ordinal {
3391                return Ok(());
3392            }
3393
3394            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3395            // are envelope_size bytes.
3396            let cur_offset: usize = (1 - 1) * envelope_size;
3397
3398            // Zero reserved fields.
3399            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3400
3401            // Safety:
3402            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3403            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3404            //   envelope_size bytes, there is always sufficient room.
3405            fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_lowpan__common::MacAddress, D>(
3406            self.address.as_ref().map(<fidl_fuchsia_lowpan__common::MacAddress as fidl::encoding::ValueTypeMarker>::borrow),
3407            encoder, offset + cur_offset, depth
3408        )?;
3409
3410            _prev_end_offset = cur_offset + envelope_size;
3411            if 2 > max_ordinal {
3412                return Ok(());
3413            }
3414
3415            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3416            // are envelope_size bytes.
3417            let cur_offset: usize = (2 - 1) * envelope_size;
3418
3419            // Zero reserved fields.
3420            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3421
3422            // Safety:
3423            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3424            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3425            //   envelope_size bytes, there is always sufficient room.
3426            fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_lowpan_device__common::Identity, D>(
3427            self.identity.as_ref().map(<fidl_fuchsia_lowpan_device__common::Identity as fidl::encoding::ValueTypeMarker>::borrow),
3428            encoder, offset + cur_offset, depth
3429        )?;
3430
3431            _prev_end_offset = cur_offset + envelope_size;
3432            if 3 > max_ordinal {
3433                return Ok(());
3434            }
3435
3436            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3437            // are envelope_size bytes.
3438            let cur_offset: usize = (3 - 1) * envelope_size;
3439
3440            // Zero reserved fields.
3441            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3442
3443            // Safety:
3444            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3445            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3446            //   envelope_size bytes, there is always sufficient room.
3447            fidl::encoding::encode_in_envelope_optional::<i8, D>(
3448                self.rssi.as_ref().map(<i8 as fidl::encoding::ValueTypeMarker>::borrow),
3449                encoder,
3450                offset + cur_offset,
3451                depth,
3452            )?;
3453
3454            _prev_end_offset = cur_offset + envelope_size;
3455            if 4 > max_ordinal {
3456                return Ok(());
3457            }
3458
3459            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3460            // are envelope_size bytes.
3461            let cur_offset: usize = (4 - 1) * envelope_size;
3462
3463            // Zero reserved fields.
3464            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3465
3466            // Safety:
3467            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3468            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3469            //   envelope_size bytes, there is always sufficient room.
3470            fidl::encoding::encode_in_envelope_optional::<u8, D>(
3471                self.lqi.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
3472                encoder,
3473                offset + cur_offset,
3474                depth,
3475            )?;
3476
3477            _prev_end_offset = cur_offset + envelope_size;
3478
3479            Ok(())
3480        }
3481    }
3482
3483    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for BeaconInfo {
3484        #[inline(always)]
3485        fn new_empty() -> Self {
3486            Self::default()
3487        }
3488
3489        unsafe fn decode(
3490            &mut self,
3491            decoder: &mut fidl::encoding::Decoder<'_, D>,
3492            offset: usize,
3493            mut depth: fidl::encoding::Depth,
3494        ) -> fidl::Result<()> {
3495            decoder.debug_check_bounds::<Self>(offset);
3496            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
3497                None => return Err(fidl::Error::NotNullable),
3498                Some(len) => len,
3499            };
3500            // Calling decoder.out_of_line_offset(0) is not allowed.
3501            if len == 0 {
3502                return Ok(());
3503            };
3504            depth.increment()?;
3505            let envelope_size = 8;
3506            let bytes_len = len * envelope_size;
3507            let offset = decoder.out_of_line_offset(bytes_len)?;
3508            // Decode the envelope for each type.
3509            let mut _next_ordinal_to_read = 0;
3510            let mut next_offset = offset;
3511            let end_offset = offset + bytes_len;
3512            _next_ordinal_to_read += 1;
3513            if next_offset >= end_offset {
3514                return Ok(());
3515            }
3516
3517            // Decode unknown envelopes for gaps in ordinals.
3518            while _next_ordinal_to_read < 1 {
3519                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3520                _next_ordinal_to_read += 1;
3521                next_offset += envelope_size;
3522            }
3523
3524            let next_out_of_line = decoder.next_out_of_line();
3525            let handles_before = decoder.remaining_handles();
3526            if let Some((inlined, num_bytes, num_handles)) =
3527                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3528            {
3529                let member_inline_size = <fidl_fuchsia_lowpan__common::MacAddress as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3530                if inlined != (member_inline_size <= 4) {
3531                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3532                }
3533                let inner_offset;
3534                let mut inner_depth = depth.clone();
3535                if inlined {
3536                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3537                    inner_offset = next_offset;
3538                } else {
3539                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3540                    inner_depth.increment()?;
3541                }
3542                let val_ref = self.address.get_or_insert_with(|| {
3543                    fidl::new_empty!(fidl_fuchsia_lowpan__common::MacAddress, D)
3544                });
3545                fidl::decode!(
3546                    fidl_fuchsia_lowpan__common::MacAddress,
3547                    D,
3548                    val_ref,
3549                    decoder,
3550                    inner_offset,
3551                    inner_depth
3552                )?;
3553                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3554                {
3555                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3556                }
3557                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3558                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3559                }
3560            }
3561
3562            next_offset += envelope_size;
3563            _next_ordinal_to_read += 1;
3564            if next_offset >= end_offset {
3565                return Ok(());
3566            }
3567
3568            // Decode unknown envelopes for gaps in ordinals.
3569            while _next_ordinal_to_read < 2 {
3570                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3571                _next_ordinal_to_read += 1;
3572                next_offset += envelope_size;
3573            }
3574
3575            let next_out_of_line = decoder.next_out_of_line();
3576            let handles_before = decoder.remaining_handles();
3577            if let Some((inlined, num_bytes, num_handles)) =
3578                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3579            {
3580                let member_inline_size = <fidl_fuchsia_lowpan_device__common::Identity as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3581                if inlined != (member_inline_size <= 4) {
3582                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3583                }
3584                let inner_offset;
3585                let mut inner_depth = depth.clone();
3586                if inlined {
3587                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3588                    inner_offset = next_offset;
3589                } else {
3590                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3591                    inner_depth.increment()?;
3592                }
3593                let val_ref = self.identity.get_or_insert_with(|| {
3594                    fidl::new_empty!(fidl_fuchsia_lowpan_device__common::Identity, D)
3595                });
3596                fidl::decode!(
3597                    fidl_fuchsia_lowpan_device__common::Identity,
3598                    D,
3599                    val_ref,
3600                    decoder,
3601                    inner_offset,
3602                    inner_depth
3603                )?;
3604                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3605                {
3606                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3607                }
3608                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3609                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3610                }
3611            }
3612
3613            next_offset += envelope_size;
3614            _next_ordinal_to_read += 1;
3615            if next_offset >= end_offset {
3616                return Ok(());
3617            }
3618
3619            // Decode unknown envelopes for gaps in ordinals.
3620            while _next_ordinal_to_read < 3 {
3621                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3622                _next_ordinal_to_read += 1;
3623                next_offset += envelope_size;
3624            }
3625
3626            let next_out_of_line = decoder.next_out_of_line();
3627            let handles_before = decoder.remaining_handles();
3628            if let Some((inlined, num_bytes, num_handles)) =
3629                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3630            {
3631                let member_inline_size =
3632                    <i8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3633                if inlined != (member_inline_size <= 4) {
3634                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3635                }
3636                let inner_offset;
3637                let mut inner_depth = depth.clone();
3638                if inlined {
3639                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3640                    inner_offset = next_offset;
3641                } else {
3642                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3643                    inner_depth.increment()?;
3644                }
3645                let val_ref = self.rssi.get_or_insert_with(|| fidl::new_empty!(i8, D));
3646                fidl::decode!(i8, D, val_ref, decoder, inner_offset, inner_depth)?;
3647                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3648                {
3649                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3650                }
3651                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3652                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3653                }
3654            }
3655
3656            next_offset += envelope_size;
3657            _next_ordinal_to_read += 1;
3658            if next_offset >= end_offset {
3659                return Ok(());
3660            }
3661
3662            // Decode unknown envelopes for gaps in ordinals.
3663            while _next_ordinal_to_read < 4 {
3664                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3665                _next_ordinal_to_read += 1;
3666                next_offset += envelope_size;
3667            }
3668
3669            let next_out_of_line = decoder.next_out_of_line();
3670            let handles_before = decoder.remaining_handles();
3671            if let Some((inlined, num_bytes, num_handles)) =
3672                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3673            {
3674                let member_inline_size =
3675                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3676                if inlined != (member_inline_size <= 4) {
3677                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3678                }
3679                let inner_offset;
3680                let mut inner_depth = depth.clone();
3681                if inlined {
3682                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3683                    inner_offset = next_offset;
3684                } else {
3685                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3686                    inner_depth.increment()?;
3687                }
3688                let val_ref = self.lqi.get_or_insert_with(|| fidl::new_empty!(u8, D));
3689                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
3690                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3691                {
3692                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3693                }
3694                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3695                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3696                }
3697            }
3698
3699            next_offset += envelope_size;
3700
3701            // Decode the remaining unknown envelopes.
3702            while next_offset < end_offset {
3703                _next_ordinal_to_read += 1;
3704                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3705                next_offset += envelope_size;
3706            }
3707
3708            Ok(())
3709        }
3710    }
3711
3712    impl BorderRoutingCounters {
3713        #[inline(always)]
3714        fn max_ordinal_present(&self) -> u64 {
3715            if let Some(_) = self.outbound_internet_bytes {
3716                return 18;
3717            }
3718            if let Some(_) = self.outbound_internet_packets {
3719                return 17;
3720            }
3721            if let Some(_) = self.inbound_internet_bytes {
3722                return 16;
3723            }
3724            if let Some(_) = self.inbound_internet_packets {
3725                return 15;
3726            }
3727            if let Some(_) = self.rs_tx_failure {
3728                return 14;
3729            }
3730            if let Some(_) = self.rs_tx_success {
3731                return 13;
3732            }
3733            if let Some(_) = self.rs_rx {
3734                return 12;
3735            }
3736            if let Some(_) = self.ra_tx_failure {
3737                return 11;
3738            }
3739            if let Some(_) = self.ra_tx_success {
3740                return 10;
3741            }
3742            if let Some(_) = self.ra_rx {
3743                return 9;
3744            }
3745            if let Some(_) = self.outbound_multicast_bytes {
3746                return 8;
3747            }
3748            if let Some(_) = self.outbound_multicast_packets {
3749                return 7;
3750            }
3751            if let Some(_) = self.outbound_unicast_bytes {
3752                return 6;
3753            }
3754            if let Some(_) = self.outbound_unicast_packets {
3755                return 5;
3756            }
3757            if let Some(_) = self.inbound_multicast_bytes {
3758                return 4;
3759            }
3760            if let Some(_) = self.inbound_multicast_packets {
3761                return 3;
3762            }
3763            if let Some(_) = self.inbound_unicast_bytes {
3764                return 2;
3765            }
3766            if let Some(_) = self.inbound_unicast_packets {
3767                return 1;
3768            }
3769            0
3770        }
3771    }
3772
3773    impl fidl::encoding::ValueTypeMarker for BorderRoutingCounters {
3774        type Borrowed<'a> = &'a Self;
3775        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3776            value
3777        }
3778    }
3779
3780    unsafe impl fidl::encoding::TypeMarker for BorderRoutingCounters {
3781        type Owned = Self;
3782
3783        #[inline(always)]
3784        fn inline_align(_context: fidl::encoding::Context) -> usize {
3785            8
3786        }
3787
3788        #[inline(always)]
3789        fn inline_size(_context: fidl::encoding::Context) -> usize {
3790            16
3791        }
3792    }
3793
3794    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<BorderRoutingCounters, D>
3795        for &BorderRoutingCounters
3796    {
3797        unsafe fn encode(
3798            self,
3799            encoder: &mut fidl::encoding::Encoder<'_, D>,
3800            offset: usize,
3801            mut depth: fidl::encoding::Depth,
3802        ) -> fidl::Result<()> {
3803            encoder.debug_check_bounds::<BorderRoutingCounters>(offset);
3804            // Vector header
3805            let max_ordinal: u64 = self.max_ordinal_present();
3806            encoder.write_num(max_ordinal, offset);
3807            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
3808            // Calling encoder.out_of_line_offset(0) is not allowed.
3809            if max_ordinal == 0 {
3810                return Ok(());
3811            }
3812            depth.increment()?;
3813            let envelope_size = 8;
3814            let bytes_len = max_ordinal as usize * envelope_size;
3815            #[allow(unused_variables)]
3816            let offset = encoder.out_of_line_offset(bytes_len);
3817            let mut _prev_end_offset: usize = 0;
3818            if 1 > max_ordinal {
3819                return Ok(());
3820            }
3821
3822            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3823            // are envelope_size bytes.
3824            let cur_offset: usize = (1 - 1) * envelope_size;
3825
3826            // Zero reserved fields.
3827            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3828
3829            // Safety:
3830            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3831            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3832            //   envelope_size bytes, there is always sufficient room.
3833            fidl::encoding::encode_in_envelope_optional::<u64, D>(
3834                self.inbound_unicast_packets
3835                    .as_ref()
3836                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
3837                encoder,
3838                offset + cur_offset,
3839                depth,
3840            )?;
3841
3842            _prev_end_offset = cur_offset + envelope_size;
3843            if 2 > max_ordinal {
3844                return Ok(());
3845            }
3846
3847            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3848            // are envelope_size bytes.
3849            let cur_offset: usize = (2 - 1) * envelope_size;
3850
3851            // Zero reserved fields.
3852            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3853
3854            // Safety:
3855            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3856            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3857            //   envelope_size bytes, there is always sufficient room.
3858            fidl::encoding::encode_in_envelope_optional::<u64, D>(
3859                self.inbound_unicast_bytes
3860                    .as_ref()
3861                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
3862                encoder,
3863                offset + cur_offset,
3864                depth,
3865            )?;
3866
3867            _prev_end_offset = cur_offset + envelope_size;
3868            if 3 > max_ordinal {
3869                return Ok(());
3870            }
3871
3872            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3873            // are envelope_size bytes.
3874            let cur_offset: usize = (3 - 1) * envelope_size;
3875
3876            // Zero reserved fields.
3877            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3878
3879            // Safety:
3880            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3881            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3882            //   envelope_size bytes, there is always sufficient room.
3883            fidl::encoding::encode_in_envelope_optional::<u64, D>(
3884                self.inbound_multicast_packets
3885                    .as_ref()
3886                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
3887                encoder,
3888                offset + cur_offset,
3889                depth,
3890            )?;
3891
3892            _prev_end_offset = cur_offset + envelope_size;
3893            if 4 > max_ordinal {
3894                return Ok(());
3895            }
3896
3897            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3898            // are envelope_size bytes.
3899            let cur_offset: usize = (4 - 1) * envelope_size;
3900
3901            // Zero reserved fields.
3902            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3903
3904            // Safety:
3905            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3906            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3907            //   envelope_size bytes, there is always sufficient room.
3908            fidl::encoding::encode_in_envelope_optional::<u64, D>(
3909                self.inbound_multicast_bytes
3910                    .as_ref()
3911                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
3912                encoder,
3913                offset + cur_offset,
3914                depth,
3915            )?;
3916
3917            _prev_end_offset = cur_offset + envelope_size;
3918            if 5 > max_ordinal {
3919                return Ok(());
3920            }
3921
3922            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3923            // are envelope_size bytes.
3924            let cur_offset: usize = (5 - 1) * envelope_size;
3925
3926            // Zero reserved fields.
3927            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3928
3929            // Safety:
3930            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3931            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3932            //   envelope_size bytes, there is always sufficient room.
3933            fidl::encoding::encode_in_envelope_optional::<u64, D>(
3934                self.outbound_unicast_packets
3935                    .as_ref()
3936                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
3937                encoder,
3938                offset + cur_offset,
3939                depth,
3940            )?;
3941
3942            _prev_end_offset = cur_offset + envelope_size;
3943            if 6 > max_ordinal {
3944                return Ok(());
3945            }
3946
3947            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3948            // are envelope_size bytes.
3949            let cur_offset: usize = (6 - 1) * envelope_size;
3950
3951            // Zero reserved fields.
3952            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3953
3954            // Safety:
3955            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3956            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3957            //   envelope_size bytes, there is always sufficient room.
3958            fidl::encoding::encode_in_envelope_optional::<u64, D>(
3959                self.outbound_unicast_bytes
3960                    .as_ref()
3961                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
3962                encoder,
3963                offset + cur_offset,
3964                depth,
3965            )?;
3966
3967            _prev_end_offset = cur_offset + envelope_size;
3968            if 7 > max_ordinal {
3969                return Ok(());
3970            }
3971
3972            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3973            // are envelope_size bytes.
3974            let cur_offset: usize = (7 - 1) * envelope_size;
3975
3976            // Zero reserved fields.
3977            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3978
3979            // Safety:
3980            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3981            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3982            //   envelope_size bytes, there is always sufficient room.
3983            fidl::encoding::encode_in_envelope_optional::<u64, D>(
3984                self.outbound_multicast_packets
3985                    .as_ref()
3986                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
3987                encoder,
3988                offset + cur_offset,
3989                depth,
3990            )?;
3991
3992            _prev_end_offset = cur_offset + envelope_size;
3993            if 8 > max_ordinal {
3994                return Ok(());
3995            }
3996
3997            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3998            // are envelope_size bytes.
3999            let cur_offset: usize = (8 - 1) * envelope_size;
4000
4001            // Zero reserved fields.
4002            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4003
4004            // Safety:
4005            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4006            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4007            //   envelope_size bytes, there is always sufficient room.
4008            fidl::encoding::encode_in_envelope_optional::<u64, D>(
4009                self.outbound_multicast_bytes
4010                    .as_ref()
4011                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
4012                encoder,
4013                offset + cur_offset,
4014                depth,
4015            )?;
4016
4017            _prev_end_offset = cur_offset + envelope_size;
4018            if 9 > max_ordinal {
4019                return Ok(());
4020            }
4021
4022            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4023            // are envelope_size bytes.
4024            let cur_offset: usize = (9 - 1) * envelope_size;
4025
4026            // Zero reserved fields.
4027            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4028
4029            // Safety:
4030            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4031            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4032            //   envelope_size bytes, there is always sufficient room.
4033            fidl::encoding::encode_in_envelope_optional::<u32, D>(
4034                self.ra_rx.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
4035                encoder,
4036                offset + cur_offset,
4037                depth,
4038            )?;
4039
4040            _prev_end_offset = cur_offset + envelope_size;
4041            if 10 > max_ordinal {
4042                return Ok(());
4043            }
4044
4045            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4046            // are envelope_size bytes.
4047            let cur_offset: usize = (10 - 1) * envelope_size;
4048
4049            // Zero reserved fields.
4050            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4051
4052            // Safety:
4053            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4054            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4055            //   envelope_size bytes, there is always sufficient room.
4056            fidl::encoding::encode_in_envelope_optional::<u32, D>(
4057                self.ra_tx_success.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
4058                encoder,
4059                offset + cur_offset,
4060                depth,
4061            )?;
4062
4063            _prev_end_offset = cur_offset + envelope_size;
4064            if 11 > max_ordinal {
4065                return Ok(());
4066            }
4067
4068            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4069            // are envelope_size bytes.
4070            let cur_offset: usize = (11 - 1) * envelope_size;
4071
4072            // Zero reserved fields.
4073            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4074
4075            // Safety:
4076            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4077            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4078            //   envelope_size bytes, there is always sufficient room.
4079            fidl::encoding::encode_in_envelope_optional::<u32, D>(
4080                self.ra_tx_failure.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
4081                encoder,
4082                offset + cur_offset,
4083                depth,
4084            )?;
4085
4086            _prev_end_offset = cur_offset + envelope_size;
4087            if 12 > max_ordinal {
4088                return Ok(());
4089            }
4090
4091            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4092            // are envelope_size bytes.
4093            let cur_offset: usize = (12 - 1) * envelope_size;
4094
4095            // Zero reserved fields.
4096            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4097
4098            // Safety:
4099            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4100            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4101            //   envelope_size bytes, there is always sufficient room.
4102            fidl::encoding::encode_in_envelope_optional::<u32, D>(
4103                self.rs_rx.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
4104                encoder,
4105                offset + cur_offset,
4106                depth,
4107            )?;
4108
4109            _prev_end_offset = cur_offset + envelope_size;
4110            if 13 > max_ordinal {
4111                return Ok(());
4112            }
4113
4114            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4115            // are envelope_size bytes.
4116            let cur_offset: usize = (13 - 1) * envelope_size;
4117
4118            // Zero reserved fields.
4119            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4120
4121            // Safety:
4122            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4123            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4124            //   envelope_size bytes, there is always sufficient room.
4125            fidl::encoding::encode_in_envelope_optional::<u32, D>(
4126                self.rs_tx_success.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
4127                encoder,
4128                offset + cur_offset,
4129                depth,
4130            )?;
4131
4132            _prev_end_offset = cur_offset + envelope_size;
4133            if 14 > max_ordinal {
4134                return Ok(());
4135            }
4136
4137            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4138            // are envelope_size bytes.
4139            let cur_offset: usize = (14 - 1) * envelope_size;
4140
4141            // Zero reserved fields.
4142            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4143
4144            // Safety:
4145            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4146            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4147            //   envelope_size bytes, there is always sufficient room.
4148            fidl::encoding::encode_in_envelope_optional::<u32, D>(
4149                self.rs_tx_failure.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
4150                encoder,
4151                offset + cur_offset,
4152                depth,
4153            )?;
4154
4155            _prev_end_offset = cur_offset + envelope_size;
4156            if 15 > max_ordinal {
4157                return Ok(());
4158            }
4159
4160            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4161            // are envelope_size bytes.
4162            let cur_offset: usize = (15 - 1) * envelope_size;
4163
4164            // Zero reserved fields.
4165            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4166
4167            // Safety:
4168            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4169            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4170            //   envelope_size bytes, there is always sufficient room.
4171            fidl::encoding::encode_in_envelope_optional::<u64, D>(
4172                self.inbound_internet_packets
4173                    .as_ref()
4174                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
4175                encoder,
4176                offset + cur_offset,
4177                depth,
4178            )?;
4179
4180            _prev_end_offset = cur_offset + envelope_size;
4181            if 16 > max_ordinal {
4182                return Ok(());
4183            }
4184
4185            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4186            // are envelope_size bytes.
4187            let cur_offset: usize = (16 - 1) * envelope_size;
4188
4189            // Zero reserved fields.
4190            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4191
4192            // Safety:
4193            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4194            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4195            //   envelope_size bytes, there is always sufficient room.
4196            fidl::encoding::encode_in_envelope_optional::<u64, D>(
4197                self.inbound_internet_bytes
4198                    .as_ref()
4199                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
4200                encoder,
4201                offset + cur_offset,
4202                depth,
4203            )?;
4204
4205            _prev_end_offset = cur_offset + envelope_size;
4206            if 17 > max_ordinal {
4207                return Ok(());
4208            }
4209
4210            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4211            // are envelope_size bytes.
4212            let cur_offset: usize = (17 - 1) * envelope_size;
4213
4214            // Zero reserved fields.
4215            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4216
4217            // Safety:
4218            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4219            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4220            //   envelope_size bytes, there is always sufficient room.
4221            fidl::encoding::encode_in_envelope_optional::<u64, D>(
4222                self.outbound_internet_packets
4223                    .as_ref()
4224                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
4225                encoder,
4226                offset + cur_offset,
4227                depth,
4228            )?;
4229
4230            _prev_end_offset = cur_offset + envelope_size;
4231            if 18 > max_ordinal {
4232                return Ok(());
4233            }
4234
4235            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4236            // are envelope_size bytes.
4237            let cur_offset: usize = (18 - 1) * envelope_size;
4238
4239            // Zero reserved fields.
4240            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4241
4242            // Safety:
4243            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4244            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4245            //   envelope_size bytes, there is always sufficient room.
4246            fidl::encoding::encode_in_envelope_optional::<u64, D>(
4247                self.outbound_internet_bytes
4248                    .as_ref()
4249                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
4250                encoder,
4251                offset + cur_offset,
4252                depth,
4253            )?;
4254
4255            _prev_end_offset = cur_offset + envelope_size;
4256
4257            Ok(())
4258        }
4259    }
4260
4261    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for BorderRoutingCounters {
4262        #[inline(always)]
4263        fn new_empty() -> Self {
4264            Self::default()
4265        }
4266
4267        unsafe fn decode(
4268            &mut self,
4269            decoder: &mut fidl::encoding::Decoder<'_, D>,
4270            offset: usize,
4271            mut depth: fidl::encoding::Depth,
4272        ) -> fidl::Result<()> {
4273            decoder.debug_check_bounds::<Self>(offset);
4274            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
4275                None => return Err(fidl::Error::NotNullable),
4276                Some(len) => len,
4277            };
4278            // Calling decoder.out_of_line_offset(0) is not allowed.
4279            if len == 0 {
4280                return Ok(());
4281            };
4282            depth.increment()?;
4283            let envelope_size = 8;
4284            let bytes_len = len * envelope_size;
4285            let offset = decoder.out_of_line_offset(bytes_len)?;
4286            // Decode the envelope for each type.
4287            let mut _next_ordinal_to_read = 0;
4288            let mut next_offset = offset;
4289            let end_offset = offset + bytes_len;
4290            _next_ordinal_to_read += 1;
4291            if next_offset >= end_offset {
4292                return Ok(());
4293            }
4294
4295            // Decode unknown envelopes for gaps in ordinals.
4296            while _next_ordinal_to_read < 1 {
4297                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4298                _next_ordinal_to_read += 1;
4299                next_offset += envelope_size;
4300            }
4301
4302            let next_out_of_line = decoder.next_out_of_line();
4303            let handles_before = decoder.remaining_handles();
4304            if let Some((inlined, num_bytes, num_handles)) =
4305                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4306            {
4307                let member_inline_size =
4308                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4309                if inlined != (member_inline_size <= 4) {
4310                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4311                }
4312                let inner_offset;
4313                let mut inner_depth = depth.clone();
4314                if inlined {
4315                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4316                    inner_offset = next_offset;
4317                } else {
4318                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4319                    inner_depth.increment()?;
4320                }
4321                let val_ref =
4322                    self.inbound_unicast_packets.get_or_insert_with(|| fidl::new_empty!(u64, D));
4323                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
4324                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4325                {
4326                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4327                }
4328                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4329                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4330                }
4331            }
4332
4333            next_offset += envelope_size;
4334            _next_ordinal_to_read += 1;
4335            if next_offset >= end_offset {
4336                return Ok(());
4337            }
4338
4339            // Decode unknown envelopes for gaps in ordinals.
4340            while _next_ordinal_to_read < 2 {
4341                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4342                _next_ordinal_to_read += 1;
4343                next_offset += envelope_size;
4344            }
4345
4346            let next_out_of_line = decoder.next_out_of_line();
4347            let handles_before = decoder.remaining_handles();
4348            if let Some((inlined, num_bytes, num_handles)) =
4349                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4350            {
4351                let member_inline_size =
4352                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4353                if inlined != (member_inline_size <= 4) {
4354                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4355                }
4356                let inner_offset;
4357                let mut inner_depth = depth.clone();
4358                if inlined {
4359                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4360                    inner_offset = next_offset;
4361                } else {
4362                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4363                    inner_depth.increment()?;
4364                }
4365                let val_ref =
4366                    self.inbound_unicast_bytes.get_or_insert_with(|| fidl::new_empty!(u64, D));
4367                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
4368                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4369                {
4370                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4371                }
4372                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4373                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4374                }
4375            }
4376
4377            next_offset += envelope_size;
4378            _next_ordinal_to_read += 1;
4379            if next_offset >= end_offset {
4380                return Ok(());
4381            }
4382
4383            // Decode unknown envelopes for gaps in ordinals.
4384            while _next_ordinal_to_read < 3 {
4385                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4386                _next_ordinal_to_read += 1;
4387                next_offset += envelope_size;
4388            }
4389
4390            let next_out_of_line = decoder.next_out_of_line();
4391            let handles_before = decoder.remaining_handles();
4392            if let Some((inlined, num_bytes, num_handles)) =
4393                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4394            {
4395                let member_inline_size =
4396                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4397                if inlined != (member_inline_size <= 4) {
4398                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4399                }
4400                let inner_offset;
4401                let mut inner_depth = depth.clone();
4402                if inlined {
4403                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4404                    inner_offset = next_offset;
4405                } else {
4406                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4407                    inner_depth.increment()?;
4408                }
4409                let val_ref =
4410                    self.inbound_multicast_packets.get_or_insert_with(|| fidl::new_empty!(u64, D));
4411                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
4412                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4413                {
4414                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4415                }
4416                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4417                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4418                }
4419            }
4420
4421            next_offset += envelope_size;
4422            _next_ordinal_to_read += 1;
4423            if next_offset >= end_offset {
4424                return Ok(());
4425            }
4426
4427            // Decode unknown envelopes for gaps in ordinals.
4428            while _next_ordinal_to_read < 4 {
4429                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4430                _next_ordinal_to_read += 1;
4431                next_offset += envelope_size;
4432            }
4433
4434            let next_out_of_line = decoder.next_out_of_line();
4435            let handles_before = decoder.remaining_handles();
4436            if let Some((inlined, num_bytes, num_handles)) =
4437                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4438            {
4439                let member_inline_size =
4440                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4441                if inlined != (member_inline_size <= 4) {
4442                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4443                }
4444                let inner_offset;
4445                let mut inner_depth = depth.clone();
4446                if inlined {
4447                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4448                    inner_offset = next_offset;
4449                } else {
4450                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4451                    inner_depth.increment()?;
4452                }
4453                let val_ref =
4454                    self.inbound_multicast_bytes.get_or_insert_with(|| fidl::new_empty!(u64, D));
4455                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
4456                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4457                {
4458                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4459                }
4460                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4461                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4462                }
4463            }
4464
4465            next_offset += envelope_size;
4466            _next_ordinal_to_read += 1;
4467            if next_offset >= end_offset {
4468                return Ok(());
4469            }
4470
4471            // Decode unknown envelopes for gaps in ordinals.
4472            while _next_ordinal_to_read < 5 {
4473                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4474                _next_ordinal_to_read += 1;
4475                next_offset += envelope_size;
4476            }
4477
4478            let next_out_of_line = decoder.next_out_of_line();
4479            let handles_before = decoder.remaining_handles();
4480            if let Some((inlined, num_bytes, num_handles)) =
4481                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4482            {
4483                let member_inline_size =
4484                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4485                if inlined != (member_inline_size <= 4) {
4486                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4487                }
4488                let inner_offset;
4489                let mut inner_depth = depth.clone();
4490                if inlined {
4491                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4492                    inner_offset = next_offset;
4493                } else {
4494                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4495                    inner_depth.increment()?;
4496                }
4497                let val_ref =
4498                    self.outbound_unicast_packets.get_or_insert_with(|| fidl::new_empty!(u64, D));
4499                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
4500                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4501                {
4502                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4503                }
4504                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4505                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4506                }
4507            }
4508
4509            next_offset += envelope_size;
4510            _next_ordinal_to_read += 1;
4511            if next_offset >= end_offset {
4512                return Ok(());
4513            }
4514
4515            // Decode unknown envelopes for gaps in ordinals.
4516            while _next_ordinal_to_read < 6 {
4517                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4518                _next_ordinal_to_read += 1;
4519                next_offset += envelope_size;
4520            }
4521
4522            let next_out_of_line = decoder.next_out_of_line();
4523            let handles_before = decoder.remaining_handles();
4524            if let Some((inlined, num_bytes, num_handles)) =
4525                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4526            {
4527                let member_inline_size =
4528                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4529                if inlined != (member_inline_size <= 4) {
4530                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4531                }
4532                let inner_offset;
4533                let mut inner_depth = depth.clone();
4534                if inlined {
4535                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4536                    inner_offset = next_offset;
4537                } else {
4538                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4539                    inner_depth.increment()?;
4540                }
4541                let val_ref =
4542                    self.outbound_unicast_bytes.get_or_insert_with(|| fidl::new_empty!(u64, D));
4543                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
4544                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4545                {
4546                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4547                }
4548                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4549                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4550                }
4551            }
4552
4553            next_offset += envelope_size;
4554            _next_ordinal_to_read += 1;
4555            if next_offset >= end_offset {
4556                return Ok(());
4557            }
4558
4559            // Decode unknown envelopes for gaps in ordinals.
4560            while _next_ordinal_to_read < 7 {
4561                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4562                _next_ordinal_to_read += 1;
4563                next_offset += envelope_size;
4564            }
4565
4566            let next_out_of_line = decoder.next_out_of_line();
4567            let handles_before = decoder.remaining_handles();
4568            if let Some((inlined, num_bytes, num_handles)) =
4569                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4570            {
4571                let member_inline_size =
4572                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4573                if inlined != (member_inline_size <= 4) {
4574                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4575                }
4576                let inner_offset;
4577                let mut inner_depth = depth.clone();
4578                if inlined {
4579                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4580                    inner_offset = next_offset;
4581                } else {
4582                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4583                    inner_depth.increment()?;
4584                }
4585                let val_ref =
4586                    self.outbound_multicast_packets.get_or_insert_with(|| fidl::new_empty!(u64, D));
4587                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
4588                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4589                {
4590                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4591                }
4592                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4593                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4594                }
4595            }
4596
4597            next_offset += envelope_size;
4598            _next_ordinal_to_read += 1;
4599            if next_offset >= end_offset {
4600                return Ok(());
4601            }
4602
4603            // Decode unknown envelopes for gaps in ordinals.
4604            while _next_ordinal_to_read < 8 {
4605                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4606                _next_ordinal_to_read += 1;
4607                next_offset += envelope_size;
4608            }
4609
4610            let next_out_of_line = decoder.next_out_of_line();
4611            let handles_before = decoder.remaining_handles();
4612            if let Some((inlined, num_bytes, num_handles)) =
4613                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4614            {
4615                let member_inline_size =
4616                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4617                if inlined != (member_inline_size <= 4) {
4618                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4619                }
4620                let inner_offset;
4621                let mut inner_depth = depth.clone();
4622                if inlined {
4623                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4624                    inner_offset = next_offset;
4625                } else {
4626                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4627                    inner_depth.increment()?;
4628                }
4629                let val_ref =
4630                    self.outbound_multicast_bytes.get_or_insert_with(|| fidl::new_empty!(u64, D));
4631                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
4632                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4633                {
4634                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4635                }
4636                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4637                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4638                }
4639            }
4640
4641            next_offset += envelope_size;
4642            _next_ordinal_to_read += 1;
4643            if next_offset >= end_offset {
4644                return Ok(());
4645            }
4646
4647            // Decode unknown envelopes for gaps in ordinals.
4648            while _next_ordinal_to_read < 9 {
4649                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4650                _next_ordinal_to_read += 1;
4651                next_offset += envelope_size;
4652            }
4653
4654            let next_out_of_line = decoder.next_out_of_line();
4655            let handles_before = decoder.remaining_handles();
4656            if let Some((inlined, num_bytes, num_handles)) =
4657                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4658            {
4659                let member_inline_size =
4660                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4661                if inlined != (member_inline_size <= 4) {
4662                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4663                }
4664                let inner_offset;
4665                let mut inner_depth = depth.clone();
4666                if inlined {
4667                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4668                    inner_offset = next_offset;
4669                } else {
4670                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4671                    inner_depth.increment()?;
4672                }
4673                let val_ref = self.ra_rx.get_or_insert_with(|| fidl::new_empty!(u32, D));
4674                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
4675                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4676                {
4677                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4678                }
4679                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4680                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4681                }
4682            }
4683
4684            next_offset += envelope_size;
4685            _next_ordinal_to_read += 1;
4686            if next_offset >= end_offset {
4687                return Ok(());
4688            }
4689
4690            // Decode unknown envelopes for gaps in ordinals.
4691            while _next_ordinal_to_read < 10 {
4692                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4693                _next_ordinal_to_read += 1;
4694                next_offset += envelope_size;
4695            }
4696
4697            let next_out_of_line = decoder.next_out_of_line();
4698            let handles_before = decoder.remaining_handles();
4699            if let Some((inlined, num_bytes, num_handles)) =
4700                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4701            {
4702                let member_inline_size =
4703                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4704                if inlined != (member_inline_size <= 4) {
4705                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4706                }
4707                let inner_offset;
4708                let mut inner_depth = depth.clone();
4709                if inlined {
4710                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4711                    inner_offset = next_offset;
4712                } else {
4713                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4714                    inner_depth.increment()?;
4715                }
4716                let val_ref = self.ra_tx_success.get_or_insert_with(|| fidl::new_empty!(u32, D));
4717                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
4718                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4719                {
4720                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4721                }
4722                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4723                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4724                }
4725            }
4726
4727            next_offset += envelope_size;
4728            _next_ordinal_to_read += 1;
4729            if next_offset >= end_offset {
4730                return Ok(());
4731            }
4732
4733            // Decode unknown envelopes for gaps in ordinals.
4734            while _next_ordinal_to_read < 11 {
4735                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4736                _next_ordinal_to_read += 1;
4737                next_offset += envelope_size;
4738            }
4739
4740            let next_out_of_line = decoder.next_out_of_line();
4741            let handles_before = decoder.remaining_handles();
4742            if let Some((inlined, num_bytes, num_handles)) =
4743                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4744            {
4745                let member_inline_size =
4746                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4747                if inlined != (member_inline_size <= 4) {
4748                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4749                }
4750                let inner_offset;
4751                let mut inner_depth = depth.clone();
4752                if inlined {
4753                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4754                    inner_offset = next_offset;
4755                } else {
4756                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4757                    inner_depth.increment()?;
4758                }
4759                let val_ref = self.ra_tx_failure.get_or_insert_with(|| fidl::new_empty!(u32, D));
4760                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
4761                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4762                {
4763                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4764                }
4765                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4766                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4767                }
4768            }
4769
4770            next_offset += envelope_size;
4771            _next_ordinal_to_read += 1;
4772            if next_offset >= end_offset {
4773                return Ok(());
4774            }
4775
4776            // Decode unknown envelopes for gaps in ordinals.
4777            while _next_ordinal_to_read < 12 {
4778                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4779                _next_ordinal_to_read += 1;
4780                next_offset += envelope_size;
4781            }
4782
4783            let next_out_of_line = decoder.next_out_of_line();
4784            let handles_before = decoder.remaining_handles();
4785            if let Some((inlined, num_bytes, num_handles)) =
4786                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4787            {
4788                let member_inline_size =
4789                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4790                if inlined != (member_inline_size <= 4) {
4791                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4792                }
4793                let inner_offset;
4794                let mut inner_depth = depth.clone();
4795                if inlined {
4796                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4797                    inner_offset = next_offset;
4798                } else {
4799                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4800                    inner_depth.increment()?;
4801                }
4802                let val_ref = self.rs_rx.get_or_insert_with(|| fidl::new_empty!(u32, D));
4803                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
4804                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4805                {
4806                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4807                }
4808                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4809                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4810                }
4811            }
4812
4813            next_offset += envelope_size;
4814            _next_ordinal_to_read += 1;
4815            if next_offset >= end_offset {
4816                return Ok(());
4817            }
4818
4819            // Decode unknown envelopes for gaps in ordinals.
4820            while _next_ordinal_to_read < 13 {
4821                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4822                _next_ordinal_to_read += 1;
4823                next_offset += envelope_size;
4824            }
4825
4826            let next_out_of_line = decoder.next_out_of_line();
4827            let handles_before = decoder.remaining_handles();
4828            if let Some((inlined, num_bytes, num_handles)) =
4829                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4830            {
4831                let member_inline_size =
4832                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4833                if inlined != (member_inline_size <= 4) {
4834                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4835                }
4836                let inner_offset;
4837                let mut inner_depth = depth.clone();
4838                if inlined {
4839                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4840                    inner_offset = next_offset;
4841                } else {
4842                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4843                    inner_depth.increment()?;
4844                }
4845                let val_ref = self.rs_tx_success.get_or_insert_with(|| fidl::new_empty!(u32, D));
4846                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
4847                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4848                {
4849                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4850                }
4851                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4852                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4853                }
4854            }
4855
4856            next_offset += envelope_size;
4857            _next_ordinal_to_read += 1;
4858            if next_offset >= end_offset {
4859                return Ok(());
4860            }
4861
4862            // Decode unknown envelopes for gaps in ordinals.
4863            while _next_ordinal_to_read < 14 {
4864                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4865                _next_ordinal_to_read += 1;
4866                next_offset += envelope_size;
4867            }
4868
4869            let next_out_of_line = decoder.next_out_of_line();
4870            let handles_before = decoder.remaining_handles();
4871            if let Some((inlined, num_bytes, num_handles)) =
4872                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4873            {
4874                let member_inline_size =
4875                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4876                if inlined != (member_inline_size <= 4) {
4877                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4878                }
4879                let inner_offset;
4880                let mut inner_depth = depth.clone();
4881                if inlined {
4882                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4883                    inner_offset = next_offset;
4884                } else {
4885                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4886                    inner_depth.increment()?;
4887                }
4888                let val_ref = self.rs_tx_failure.get_or_insert_with(|| fidl::new_empty!(u32, D));
4889                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
4890                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4891                {
4892                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4893                }
4894                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4895                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4896                }
4897            }
4898
4899            next_offset += envelope_size;
4900            _next_ordinal_to_read += 1;
4901            if next_offset >= end_offset {
4902                return Ok(());
4903            }
4904
4905            // Decode unknown envelopes for gaps in ordinals.
4906            while _next_ordinal_to_read < 15 {
4907                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4908                _next_ordinal_to_read += 1;
4909                next_offset += envelope_size;
4910            }
4911
4912            let next_out_of_line = decoder.next_out_of_line();
4913            let handles_before = decoder.remaining_handles();
4914            if let Some((inlined, num_bytes, num_handles)) =
4915                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4916            {
4917                let member_inline_size =
4918                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4919                if inlined != (member_inline_size <= 4) {
4920                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4921                }
4922                let inner_offset;
4923                let mut inner_depth = depth.clone();
4924                if inlined {
4925                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4926                    inner_offset = next_offset;
4927                } else {
4928                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4929                    inner_depth.increment()?;
4930                }
4931                let val_ref =
4932                    self.inbound_internet_packets.get_or_insert_with(|| fidl::new_empty!(u64, D));
4933                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
4934                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4935                {
4936                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4937                }
4938                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4939                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4940                }
4941            }
4942
4943            next_offset += envelope_size;
4944            _next_ordinal_to_read += 1;
4945            if next_offset >= end_offset {
4946                return Ok(());
4947            }
4948
4949            // Decode unknown envelopes for gaps in ordinals.
4950            while _next_ordinal_to_read < 16 {
4951                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4952                _next_ordinal_to_read += 1;
4953                next_offset += envelope_size;
4954            }
4955
4956            let next_out_of_line = decoder.next_out_of_line();
4957            let handles_before = decoder.remaining_handles();
4958            if let Some((inlined, num_bytes, num_handles)) =
4959                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4960            {
4961                let member_inline_size =
4962                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4963                if inlined != (member_inline_size <= 4) {
4964                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4965                }
4966                let inner_offset;
4967                let mut inner_depth = depth.clone();
4968                if inlined {
4969                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4970                    inner_offset = next_offset;
4971                } else {
4972                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4973                    inner_depth.increment()?;
4974                }
4975                let val_ref =
4976                    self.inbound_internet_bytes.get_or_insert_with(|| fidl::new_empty!(u64, D));
4977                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
4978                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4979                {
4980                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4981                }
4982                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4983                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4984                }
4985            }
4986
4987            next_offset += envelope_size;
4988            _next_ordinal_to_read += 1;
4989            if next_offset >= end_offset {
4990                return Ok(());
4991            }
4992
4993            // Decode unknown envelopes for gaps in ordinals.
4994            while _next_ordinal_to_read < 17 {
4995                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4996                _next_ordinal_to_read += 1;
4997                next_offset += envelope_size;
4998            }
4999
5000            let next_out_of_line = decoder.next_out_of_line();
5001            let handles_before = decoder.remaining_handles();
5002            if let Some((inlined, num_bytes, num_handles)) =
5003                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5004            {
5005                let member_inline_size =
5006                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5007                if inlined != (member_inline_size <= 4) {
5008                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5009                }
5010                let inner_offset;
5011                let mut inner_depth = depth.clone();
5012                if inlined {
5013                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5014                    inner_offset = next_offset;
5015                } else {
5016                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5017                    inner_depth.increment()?;
5018                }
5019                let val_ref =
5020                    self.outbound_internet_packets.get_or_insert_with(|| fidl::new_empty!(u64, D));
5021                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
5022                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5023                {
5024                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5025                }
5026                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5027                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5028                }
5029            }
5030
5031            next_offset += envelope_size;
5032            _next_ordinal_to_read += 1;
5033            if next_offset >= end_offset {
5034                return Ok(());
5035            }
5036
5037            // Decode unknown envelopes for gaps in ordinals.
5038            while _next_ordinal_to_read < 18 {
5039                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5040                _next_ordinal_to_read += 1;
5041                next_offset += envelope_size;
5042            }
5043
5044            let next_out_of_line = decoder.next_out_of_line();
5045            let handles_before = decoder.remaining_handles();
5046            if let Some((inlined, num_bytes, num_handles)) =
5047                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5048            {
5049                let member_inline_size =
5050                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5051                if inlined != (member_inline_size <= 4) {
5052                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5053                }
5054                let inner_offset;
5055                let mut inner_depth = depth.clone();
5056                if inlined {
5057                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5058                    inner_offset = next_offset;
5059                } else {
5060                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5061                    inner_depth.increment()?;
5062                }
5063                let val_ref =
5064                    self.outbound_internet_bytes.get_or_insert_with(|| fidl::new_empty!(u64, D));
5065                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
5066                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5067                {
5068                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5069                }
5070                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5071                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5072                }
5073            }
5074
5075            next_offset += envelope_size;
5076
5077            // Decode the remaining unknown envelopes.
5078            while next_offset < end_offset {
5079                _next_ordinal_to_read += 1;
5080                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5081                next_offset += envelope_size;
5082            }
5083
5084            Ok(())
5085        }
5086    }
5087
5088    impl BorderRoutingNat64State {
5089        #[inline(always)]
5090        fn max_ordinal_present(&self) -> u64 {
5091            if let Some(_) = self.translator_state {
5092                return 2;
5093            }
5094            if let Some(_) = self.prefix_manager_state {
5095                return 1;
5096            }
5097            0
5098        }
5099    }
5100
5101    impl fidl::encoding::ValueTypeMarker for BorderRoutingNat64State {
5102        type Borrowed<'a> = &'a Self;
5103        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5104            value
5105        }
5106    }
5107
5108    unsafe impl fidl::encoding::TypeMarker for BorderRoutingNat64State {
5109        type Owned = Self;
5110
5111        #[inline(always)]
5112        fn inline_align(_context: fidl::encoding::Context) -> usize {
5113            8
5114        }
5115
5116        #[inline(always)]
5117        fn inline_size(_context: fidl::encoding::Context) -> usize {
5118            16
5119        }
5120    }
5121
5122    unsafe impl<D: fidl::encoding::ResourceDialect>
5123        fidl::encoding::Encode<BorderRoutingNat64State, D> for &BorderRoutingNat64State
5124    {
5125        unsafe fn encode(
5126            self,
5127            encoder: &mut fidl::encoding::Encoder<'_, D>,
5128            offset: usize,
5129            mut depth: fidl::encoding::Depth,
5130        ) -> fidl::Result<()> {
5131            encoder.debug_check_bounds::<BorderRoutingNat64State>(offset);
5132            // Vector header
5133            let max_ordinal: u64 = self.max_ordinal_present();
5134            encoder.write_num(max_ordinal, offset);
5135            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
5136            // Calling encoder.out_of_line_offset(0) is not allowed.
5137            if max_ordinal == 0 {
5138                return Ok(());
5139            }
5140            depth.increment()?;
5141            let envelope_size = 8;
5142            let bytes_len = max_ordinal as usize * envelope_size;
5143            #[allow(unused_variables)]
5144            let offset = encoder.out_of_line_offset(bytes_len);
5145            let mut _prev_end_offset: usize = 0;
5146            if 1 > max_ordinal {
5147                return Ok(());
5148            }
5149
5150            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5151            // are envelope_size bytes.
5152            let cur_offset: usize = (1 - 1) * envelope_size;
5153
5154            // Zero reserved fields.
5155            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5156
5157            // Safety:
5158            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5159            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5160            //   envelope_size bytes, there is always sufficient room.
5161            fidl::encoding::encode_in_envelope_optional::<Nat64State, D>(
5162                self.prefix_manager_state
5163                    .as_ref()
5164                    .map(<Nat64State as fidl::encoding::ValueTypeMarker>::borrow),
5165                encoder,
5166                offset + cur_offset,
5167                depth,
5168            )?;
5169
5170            _prev_end_offset = cur_offset + envelope_size;
5171            if 2 > max_ordinal {
5172                return Ok(());
5173            }
5174
5175            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5176            // are envelope_size bytes.
5177            let cur_offset: usize = (2 - 1) * envelope_size;
5178
5179            // Zero reserved fields.
5180            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5181
5182            // Safety:
5183            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5184            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5185            //   envelope_size bytes, there is always sufficient room.
5186            fidl::encoding::encode_in_envelope_optional::<Nat64State, D>(
5187                self.translator_state
5188                    .as_ref()
5189                    .map(<Nat64State as fidl::encoding::ValueTypeMarker>::borrow),
5190                encoder,
5191                offset + cur_offset,
5192                depth,
5193            )?;
5194
5195            _prev_end_offset = cur_offset + envelope_size;
5196
5197            Ok(())
5198        }
5199    }
5200
5201    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
5202        for BorderRoutingNat64State
5203    {
5204        #[inline(always)]
5205        fn new_empty() -> Self {
5206            Self::default()
5207        }
5208
5209        unsafe fn decode(
5210            &mut self,
5211            decoder: &mut fidl::encoding::Decoder<'_, D>,
5212            offset: usize,
5213            mut depth: fidl::encoding::Depth,
5214        ) -> fidl::Result<()> {
5215            decoder.debug_check_bounds::<Self>(offset);
5216            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
5217                None => return Err(fidl::Error::NotNullable),
5218                Some(len) => len,
5219            };
5220            // Calling decoder.out_of_line_offset(0) is not allowed.
5221            if len == 0 {
5222                return Ok(());
5223            };
5224            depth.increment()?;
5225            let envelope_size = 8;
5226            let bytes_len = len * envelope_size;
5227            let offset = decoder.out_of_line_offset(bytes_len)?;
5228            // Decode the envelope for each type.
5229            let mut _next_ordinal_to_read = 0;
5230            let mut next_offset = offset;
5231            let end_offset = offset + bytes_len;
5232            _next_ordinal_to_read += 1;
5233            if next_offset >= end_offset {
5234                return Ok(());
5235            }
5236
5237            // Decode unknown envelopes for gaps in ordinals.
5238            while _next_ordinal_to_read < 1 {
5239                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5240                _next_ordinal_to_read += 1;
5241                next_offset += envelope_size;
5242            }
5243
5244            let next_out_of_line = decoder.next_out_of_line();
5245            let handles_before = decoder.remaining_handles();
5246            if let Some((inlined, num_bytes, num_handles)) =
5247                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5248            {
5249                let member_inline_size =
5250                    <Nat64State as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5251                if inlined != (member_inline_size <= 4) {
5252                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5253                }
5254                let inner_offset;
5255                let mut inner_depth = depth.clone();
5256                if inlined {
5257                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5258                    inner_offset = next_offset;
5259                } else {
5260                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5261                    inner_depth.increment()?;
5262                }
5263                let val_ref = self
5264                    .prefix_manager_state
5265                    .get_or_insert_with(|| fidl::new_empty!(Nat64State, D));
5266                fidl::decode!(Nat64State, D, val_ref, decoder, inner_offset, inner_depth)?;
5267                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5268                {
5269                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5270                }
5271                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5272                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5273                }
5274            }
5275
5276            next_offset += envelope_size;
5277            _next_ordinal_to_read += 1;
5278            if next_offset >= end_offset {
5279                return Ok(());
5280            }
5281
5282            // Decode unknown envelopes for gaps in ordinals.
5283            while _next_ordinal_to_read < 2 {
5284                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5285                _next_ordinal_to_read += 1;
5286                next_offset += envelope_size;
5287            }
5288
5289            let next_out_of_line = decoder.next_out_of_line();
5290            let handles_before = decoder.remaining_handles();
5291            if let Some((inlined, num_bytes, num_handles)) =
5292                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5293            {
5294                let member_inline_size =
5295                    <Nat64State as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5296                if inlined != (member_inline_size <= 4) {
5297                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5298                }
5299                let inner_offset;
5300                let mut inner_depth = depth.clone();
5301                if inlined {
5302                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5303                    inner_offset = next_offset;
5304                } else {
5305                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5306                    inner_depth.increment()?;
5307                }
5308                let val_ref =
5309                    self.translator_state.get_or_insert_with(|| fidl::new_empty!(Nat64State, D));
5310                fidl::decode!(Nat64State, D, val_ref, decoder, inner_offset, inner_depth)?;
5311                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5312                {
5313                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5314                }
5315                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5316                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5317                }
5318            }
5319
5320            next_offset += envelope_size;
5321
5322            // Decode the remaining unknown envelopes.
5323            while next_offset < end_offset {
5324                _next_ordinal_to_read += 1;
5325                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5326                next_offset += envelope_size;
5327            }
5328
5329            Ok(())
5330        }
5331    }
5332
5333    impl BorderRoutingPeer {
5334        #[inline(always)]
5335        fn max_ordinal_present(&self) -> u64 {
5336            if let Some(_) = self.age {
5337                return 2;
5338            }
5339            if let Some(_) = self.thread_rloc {
5340                return 1;
5341            }
5342            0
5343        }
5344    }
5345
5346    impl fidl::encoding::ValueTypeMarker for BorderRoutingPeer {
5347        type Borrowed<'a> = &'a Self;
5348        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5349            value
5350        }
5351    }
5352
5353    unsafe impl fidl::encoding::TypeMarker for BorderRoutingPeer {
5354        type Owned = Self;
5355
5356        #[inline(always)]
5357        fn inline_align(_context: fidl::encoding::Context) -> usize {
5358            8
5359        }
5360
5361        #[inline(always)]
5362        fn inline_size(_context: fidl::encoding::Context) -> usize {
5363            16
5364        }
5365    }
5366
5367    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<BorderRoutingPeer, D>
5368        for &BorderRoutingPeer
5369    {
5370        unsafe fn encode(
5371            self,
5372            encoder: &mut fidl::encoding::Encoder<'_, D>,
5373            offset: usize,
5374            mut depth: fidl::encoding::Depth,
5375        ) -> fidl::Result<()> {
5376            encoder.debug_check_bounds::<BorderRoutingPeer>(offset);
5377            // Vector header
5378            let max_ordinal: u64 = self.max_ordinal_present();
5379            encoder.write_num(max_ordinal, offset);
5380            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
5381            // Calling encoder.out_of_line_offset(0) is not allowed.
5382            if max_ordinal == 0 {
5383                return Ok(());
5384            }
5385            depth.increment()?;
5386            let envelope_size = 8;
5387            let bytes_len = max_ordinal as usize * envelope_size;
5388            #[allow(unused_variables)]
5389            let offset = encoder.out_of_line_offset(bytes_len);
5390            let mut _prev_end_offset: usize = 0;
5391            if 1 > max_ordinal {
5392                return Ok(());
5393            }
5394
5395            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5396            // are envelope_size bytes.
5397            let cur_offset: usize = (1 - 1) * envelope_size;
5398
5399            // Zero reserved fields.
5400            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5401
5402            // Safety:
5403            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5404            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5405            //   envelope_size bytes, there is always sufficient room.
5406            fidl::encoding::encode_in_envelope_optional::<u16, D>(
5407                self.thread_rloc.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
5408                encoder,
5409                offset + cur_offset,
5410                depth,
5411            )?;
5412
5413            _prev_end_offset = cur_offset + envelope_size;
5414            if 2 > max_ordinal {
5415                return Ok(());
5416            }
5417
5418            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5419            // are envelope_size bytes.
5420            let cur_offset: usize = (2 - 1) * envelope_size;
5421
5422            // Zero reserved fields.
5423            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5424
5425            // Safety:
5426            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5427            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5428            //   envelope_size bytes, there is always sufficient room.
5429            fidl::encoding::encode_in_envelope_optional::<i64, D>(
5430                self.age.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
5431                encoder,
5432                offset + cur_offset,
5433                depth,
5434            )?;
5435
5436            _prev_end_offset = cur_offset + envelope_size;
5437
5438            Ok(())
5439        }
5440    }
5441
5442    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for BorderRoutingPeer {
5443        #[inline(always)]
5444        fn new_empty() -> Self {
5445            Self::default()
5446        }
5447
5448        unsafe fn decode(
5449            &mut self,
5450            decoder: &mut fidl::encoding::Decoder<'_, D>,
5451            offset: usize,
5452            mut depth: fidl::encoding::Depth,
5453        ) -> fidl::Result<()> {
5454            decoder.debug_check_bounds::<Self>(offset);
5455            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
5456                None => return Err(fidl::Error::NotNullable),
5457                Some(len) => len,
5458            };
5459            // Calling decoder.out_of_line_offset(0) is not allowed.
5460            if len == 0 {
5461                return Ok(());
5462            };
5463            depth.increment()?;
5464            let envelope_size = 8;
5465            let bytes_len = len * envelope_size;
5466            let offset = decoder.out_of_line_offset(bytes_len)?;
5467            // Decode the envelope for each type.
5468            let mut _next_ordinal_to_read = 0;
5469            let mut next_offset = offset;
5470            let end_offset = offset + bytes_len;
5471            _next_ordinal_to_read += 1;
5472            if next_offset >= end_offset {
5473                return Ok(());
5474            }
5475
5476            // Decode unknown envelopes for gaps in ordinals.
5477            while _next_ordinal_to_read < 1 {
5478                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5479                _next_ordinal_to_read += 1;
5480                next_offset += envelope_size;
5481            }
5482
5483            let next_out_of_line = decoder.next_out_of_line();
5484            let handles_before = decoder.remaining_handles();
5485            if let Some((inlined, num_bytes, num_handles)) =
5486                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5487            {
5488                let member_inline_size =
5489                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5490                if inlined != (member_inline_size <= 4) {
5491                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5492                }
5493                let inner_offset;
5494                let mut inner_depth = depth.clone();
5495                if inlined {
5496                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5497                    inner_offset = next_offset;
5498                } else {
5499                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5500                    inner_depth.increment()?;
5501                }
5502                let val_ref = self.thread_rloc.get_or_insert_with(|| fidl::new_empty!(u16, D));
5503                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
5504                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5505                {
5506                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5507                }
5508                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5509                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5510                }
5511            }
5512
5513            next_offset += envelope_size;
5514            _next_ordinal_to_read += 1;
5515            if next_offset >= end_offset {
5516                return Ok(());
5517            }
5518
5519            // Decode unknown envelopes for gaps in ordinals.
5520            while _next_ordinal_to_read < 2 {
5521                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5522                _next_ordinal_to_read += 1;
5523                next_offset += envelope_size;
5524            }
5525
5526            let next_out_of_line = decoder.next_out_of_line();
5527            let handles_before = decoder.remaining_handles();
5528            if let Some((inlined, num_bytes, num_handles)) =
5529                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5530            {
5531                let member_inline_size =
5532                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5533                if inlined != (member_inline_size <= 4) {
5534                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5535                }
5536                let inner_offset;
5537                let mut inner_depth = depth.clone();
5538                if inlined {
5539                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5540                    inner_offset = next_offset;
5541                } else {
5542                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5543                    inner_depth.increment()?;
5544                }
5545                let val_ref = self.age.get_or_insert_with(|| fidl::new_empty!(i64, D));
5546                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
5547                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5548                {
5549                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5550                }
5551                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5552                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5553                }
5554            }
5555
5556            next_offset += envelope_size;
5557
5558            // Decode the remaining unknown envelopes.
5559            while next_offset < end_offset {
5560                _next_ordinal_to_read += 1;
5561                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5562                next_offset += envelope_size;
5563            }
5564
5565            Ok(())
5566        }
5567    }
5568
5569    impl BorderRoutingRouter {
5570        #[inline(always)]
5571        fn max_ordinal_present(&self) -> u64 {
5572            if let Some(_) = self.is_peer_br {
5573                return 9;
5574            }
5575            if let Some(_) = self.is_reachable {
5576                return 8;
5577            }
5578            if let Some(_) = self.is_local_device {
5579                return 7;
5580            }
5581            if let Some(_) = self.snac_router_flag {
5582                return 6;
5583            }
5584            if let Some(_) = self.other_config_flag {
5585                return 5;
5586            }
5587            if let Some(_) = self.managed_address_config_flag {
5588                return 4;
5589            }
5590            if let Some(_) = self.age {
5591                return 3;
5592            }
5593            if let Some(_) = self.duration_since_last_update {
5594                return 2;
5595            }
5596            if let Some(_) = self.address {
5597                return 1;
5598            }
5599            0
5600        }
5601    }
5602
5603    impl fidl::encoding::ValueTypeMarker for BorderRoutingRouter {
5604        type Borrowed<'a> = &'a Self;
5605        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5606            value
5607        }
5608    }
5609
5610    unsafe impl fidl::encoding::TypeMarker for BorderRoutingRouter {
5611        type Owned = Self;
5612
5613        #[inline(always)]
5614        fn inline_align(_context: fidl::encoding::Context) -> usize {
5615            8
5616        }
5617
5618        #[inline(always)]
5619        fn inline_size(_context: fidl::encoding::Context) -> usize {
5620            16
5621        }
5622    }
5623
5624    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<BorderRoutingRouter, D>
5625        for &BorderRoutingRouter
5626    {
5627        unsafe fn encode(
5628            self,
5629            encoder: &mut fidl::encoding::Encoder<'_, D>,
5630            offset: usize,
5631            mut depth: fidl::encoding::Depth,
5632        ) -> fidl::Result<()> {
5633            encoder.debug_check_bounds::<BorderRoutingRouter>(offset);
5634            // Vector header
5635            let max_ordinal: u64 = self.max_ordinal_present();
5636            encoder.write_num(max_ordinal, offset);
5637            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
5638            // Calling encoder.out_of_line_offset(0) is not allowed.
5639            if max_ordinal == 0 {
5640                return Ok(());
5641            }
5642            depth.increment()?;
5643            let envelope_size = 8;
5644            let bytes_len = max_ordinal as usize * envelope_size;
5645            #[allow(unused_variables)]
5646            let offset = encoder.out_of_line_offset(bytes_len);
5647            let mut _prev_end_offset: usize = 0;
5648            if 1 > max_ordinal {
5649                return Ok(());
5650            }
5651
5652            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5653            // are envelope_size bytes.
5654            let cur_offset: usize = (1 - 1) * envelope_size;
5655
5656            // Zero reserved fields.
5657            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5658
5659            // Safety:
5660            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5661            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5662            //   envelope_size bytes, there is always sufficient room.
5663            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<64>, D>(
5664                self.address.as_ref().map(
5665                    <fidl::encoding::BoundedString<64> as fidl::encoding::ValueTypeMarker>::borrow,
5666                ),
5667                encoder,
5668                offset + cur_offset,
5669                depth,
5670            )?;
5671
5672            _prev_end_offset = cur_offset + envelope_size;
5673            if 2 > max_ordinal {
5674                return Ok(());
5675            }
5676
5677            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5678            // are envelope_size bytes.
5679            let cur_offset: usize = (2 - 1) * envelope_size;
5680
5681            // Zero reserved fields.
5682            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5683
5684            // Safety:
5685            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5686            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5687            //   envelope_size bytes, there is always sufficient room.
5688            fidl::encoding::encode_in_envelope_optional::<i64, D>(
5689                self.duration_since_last_update
5690                    .as_ref()
5691                    .map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
5692                encoder,
5693                offset + cur_offset,
5694                depth,
5695            )?;
5696
5697            _prev_end_offset = cur_offset + envelope_size;
5698            if 3 > max_ordinal {
5699                return Ok(());
5700            }
5701
5702            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5703            // are envelope_size bytes.
5704            let cur_offset: usize = (3 - 1) * envelope_size;
5705
5706            // Zero reserved fields.
5707            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5708
5709            // Safety:
5710            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5711            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5712            //   envelope_size bytes, there is always sufficient room.
5713            fidl::encoding::encode_in_envelope_optional::<i64, D>(
5714                self.age.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
5715                encoder,
5716                offset + cur_offset,
5717                depth,
5718            )?;
5719
5720            _prev_end_offset = cur_offset + envelope_size;
5721            if 4 > max_ordinal {
5722                return Ok(());
5723            }
5724
5725            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5726            // are envelope_size bytes.
5727            let cur_offset: usize = (4 - 1) * envelope_size;
5728
5729            // Zero reserved fields.
5730            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5731
5732            // Safety:
5733            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5734            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5735            //   envelope_size bytes, there is always sufficient room.
5736            fidl::encoding::encode_in_envelope_optional::<bool, D>(
5737                self.managed_address_config_flag
5738                    .as_ref()
5739                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
5740                encoder,
5741                offset + cur_offset,
5742                depth,
5743            )?;
5744
5745            _prev_end_offset = cur_offset + envelope_size;
5746            if 5 > max_ordinal {
5747                return Ok(());
5748            }
5749
5750            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5751            // are envelope_size bytes.
5752            let cur_offset: usize = (5 - 1) * envelope_size;
5753
5754            // Zero reserved fields.
5755            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5756
5757            // Safety:
5758            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5759            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5760            //   envelope_size bytes, there is always sufficient room.
5761            fidl::encoding::encode_in_envelope_optional::<bool, D>(
5762                self.other_config_flag
5763                    .as_ref()
5764                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
5765                encoder,
5766                offset + cur_offset,
5767                depth,
5768            )?;
5769
5770            _prev_end_offset = cur_offset + envelope_size;
5771            if 6 > max_ordinal {
5772                return Ok(());
5773            }
5774
5775            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5776            // are envelope_size bytes.
5777            let cur_offset: usize = (6 - 1) * envelope_size;
5778
5779            // Zero reserved fields.
5780            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5781
5782            // Safety:
5783            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5784            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5785            //   envelope_size bytes, there is always sufficient room.
5786            fidl::encoding::encode_in_envelope_optional::<bool, D>(
5787                self.snac_router_flag
5788                    .as_ref()
5789                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
5790                encoder,
5791                offset + cur_offset,
5792                depth,
5793            )?;
5794
5795            _prev_end_offset = cur_offset + envelope_size;
5796            if 7 > max_ordinal {
5797                return Ok(());
5798            }
5799
5800            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5801            // are envelope_size bytes.
5802            let cur_offset: usize = (7 - 1) * envelope_size;
5803
5804            // Zero reserved fields.
5805            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5806
5807            // Safety:
5808            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5809            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5810            //   envelope_size bytes, there is always sufficient room.
5811            fidl::encoding::encode_in_envelope_optional::<bool, D>(
5812                self.is_local_device
5813                    .as_ref()
5814                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
5815                encoder,
5816                offset + cur_offset,
5817                depth,
5818            )?;
5819
5820            _prev_end_offset = cur_offset + envelope_size;
5821            if 8 > max_ordinal {
5822                return Ok(());
5823            }
5824
5825            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5826            // are envelope_size bytes.
5827            let cur_offset: usize = (8 - 1) * envelope_size;
5828
5829            // Zero reserved fields.
5830            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5831
5832            // Safety:
5833            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5834            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5835            //   envelope_size bytes, there is always sufficient room.
5836            fidl::encoding::encode_in_envelope_optional::<bool, D>(
5837                self.is_reachable.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
5838                encoder,
5839                offset + cur_offset,
5840                depth,
5841            )?;
5842
5843            _prev_end_offset = cur_offset + envelope_size;
5844            if 9 > max_ordinal {
5845                return Ok(());
5846            }
5847
5848            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5849            // are envelope_size bytes.
5850            let cur_offset: usize = (9 - 1) * envelope_size;
5851
5852            // Zero reserved fields.
5853            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5854
5855            // Safety:
5856            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5857            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5858            //   envelope_size bytes, there is always sufficient room.
5859            fidl::encoding::encode_in_envelope_optional::<bool, D>(
5860                self.is_peer_br.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
5861                encoder,
5862                offset + cur_offset,
5863                depth,
5864            )?;
5865
5866            _prev_end_offset = cur_offset + envelope_size;
5867
5868            Ok(())
5869        }
5870    }
5871
5872    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for BorderRoutingRouter {
5873        #[inline(always)]
5874        fn new_empty() -> Self {
5875            Self::default()
5876        }
5877
5878        unsafe fn decode(
5879            &mut self,
5880            decoder: &mut fidl::encoding::Decoder<'_, D>,
5881            offset: usize,
5882            mut depth: fidl::encoding::Depth,
5883        ) -> fidl::Result<()> {
5884            decoder.debug_check_bounds::<Self>(offset);
5885            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
5886                None => return Err(fidl::Error::NotNullable),
5887                Some(len) => len,
5888            };
5889            // Calling decoder.out_of_line_offset(0) is not allowed.
5890            if len == 0 {
5891                return Ok(());
5892            };
5893            depth.increment()?;
5894            let envelope_size = 8;
5895            let bytes_len = len * envelope_size;
5896            let offset = decoder.out_of_line_offset(bytes_len)?;
5897            // Decode the envelope for each type.
5898            let mut _next_ordinal_to_read = 0;
5899            let mut next_offset = offset;
5900            let end_offset = offset + bytes_len;
5901            _next_ordinal_to_read += 1;
5902            if next_offset >= end_offset {
5903                return Ok(());
5904            }
5905
5906            // Decode unknown envelopes for gaps in ordinals.
5907            while _next_ordinal_to_read < 1 {
5908                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5909                _next_ordinal_to_read += 1;
5910                next_offset += envelope_size;
5911            }
5912
5913            let next_out_of_line = decoder.next_out_of_line();
5914            let handles_before = decoder.remaining_handles();
5915            if let Some((inlined, num_bytes, num_handles)) =
5916                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5917            {
5918                let member_inline_size =
5919                    <fidl::encoding::BoundedString<64> as fidl::encoding::TypeMarker>::inline_size(
5920                        decoder.context,
5921                    );
5922                if inlined != (member_inline_size <= 4) {
5923                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5924                }
5925                let inner_offset;
5926                let mut inner_depth = depth.clone();
5927                if inlined {
5928                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5929                    inner_offset = next_offset;
5930                } else {
5931                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5932                    inner_depth.increment()?;
5933                }
5934                let val_ref = self
5935                    .address
5936                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<64>, D));
5937                fidl::decode!(
5938                    fidl::encoding::BoundedString<64>,
5939                    D,
5940                    val_ref,
5941                    decoder,
5942                    inner_offset,
5943                    inner_depth
5944                )?;
5945                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5946                {
5947                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5948                }
5949                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5950                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5951                }
5952            }
5953
5954            next_offset += envelope_size;
5955            _next_ordinal_to_read += 1;
5956            if next_offset >= end_offset {
5957                return Ok(());
5958            }
5959
5960            // Decode unknown envelopes for gaps in ordinals.
5961            while _next_ordinal_to_read < 2 {
5962                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5963                _next_ordinal_to_read += 1;
5964                next_offset += envelope_size;
5965            }
5966
5967            let next_out_of_line = decoder.next_out_of_line();
5968            let handles_before = decoder.remaining_handles();
5969            if let Some((inlined, num_bytes, num_handles)) =
5970                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5971            {
5972                let member_inline_size =
5973                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5974                if inlined != (member_inline_size <= 4) {
5975                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5976                }
5977                let inner_offset;
5978                let mut inner_depth = depth.clone();
5979                if inlined {
5980                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5981                    inner_offset = next_offset;
5982                } else {
5983                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5984                    inner_depth.increment()?;
5985                }
5986                let val_ref =
5987                    self.duration_since_last_update.get_or_insert_with(|| fidl::new_empty!(i64, D));
5988                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
5989                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5990                {
5991                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5992                }
5993                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5994                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5995                }
5996            }
5997
5998            next_offset += envelope_size;
5999            _next_ordinal_to_read += 1;
6000            if next_offset >= end_offset {
6001                return Ok(());
6002            }
6003
6004            // Decode unknown envelopes for gaps in ordinals.
6005            while _next_ordinal_to_read < 3 {
6006                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6007                _next_ordinal_to_read += 1;
6008                next_offset += envelope_size;
6009            }
6010
6011            let next_out_of_line = decoder.next_out_of_line();
6012            let handles_before = decoder.remaining_handles();
6013            if let Some((inlined, num_bytes, num_handles)) =
6014                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6015            {
6016                let member_inline_size =
6017                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6018                if inlined != (member_inline_size <= 4) {
6019                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6020                }
6021                let inner_offset;
6022                let mut inner_depth = depth.clone();
6023                if inlined {
6024                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6025                    inner_offset = next_offset;
6026                } else {
6027                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6028                    inner_depth.increment()?;
6029                }
6030                let val_ref = self.age.get_or_insert_with(|| fidl::new_empty!(i64, D));
6031                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
6032                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6033                {
6034                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6035                }
6036                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6037                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6038                }
6039            }
6040
6041            next_offset += envelope_size;
6042            _next_ordinal_to_read += 1;
6043            if next_offset >= end_offset {
6044                return Ok(());
6045            }
6046
6047            // Decode unknown envelopes for gaps in ordinals.
6048            while _next_ordinal_to_read < 4 {
6049                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6050                _next_ordinal_to_read += 1;
6051                next_offset += envelope_size;
6052            }
6053
6054            let next_out_of_line = decoder.next_out_of_line();
6055            let handles_before = decoder.remaining_handles();
6056            if let Some((inlined, num_bytes, num_handles)) =
6057                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6058            {
6059                let member_inline_size =
6060                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6061                if inlined != (member_inline_size <= 4) {
6062                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6063                }
6064                let inner_offset;
6065                let mut inner_depth = depth.clone();
6066                if inlined {
6067                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6068                    inner_offset = next_offset;
6069                } else {
6070                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6071                    inner_depth.increment()?;
6072                }
6073                let val_ref = self
6074                    .managed_address_config_flag
6075                    .get_or_insert_with(|| fidl::new_empty!(bool, D));
6076                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
6077                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6078                {
6079                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6080                }
6081                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6082                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6083                }
6084            }
6085
6086            next_offset += envelope_size;
6087            _next_ordinal_to_read += 1;
6088            if next_offset >= end_offset {
6089                return Ok(());
6090            }
6091
6092            // Decode unknown envelopes for gaps in ordinals.
6093            while _next_ordinal_to_read < 5 {
6094                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6095                _next_ordinal_to_read += 1;
6096                next_offset += envelope_size;
6097            }
6098
6099            let next_out_of_line = decoder.next_out_of_line();
6100            let handles_before = decoder.remaining_handles();
6101            if let Some((inlined, num_bytes, num_handles)) =
6102                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6103            {
6104                let member_inline_size =
6105                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6106                if inlined != (member_inline_size <= 4) {
6107                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6108                }
6109                let inner_offset;
6110                let mut inner_depth = depth.clone();
6111                if inlined {
6112                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6113                    inner_offset = next_offset;
6114                } else {
6115                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6116                    inner_depth.increment()?;
6117                }
6118                let val_ref =
6119                    self.other_config_flag.get_or_insert_with(|| fidl::new_empty!(bool, D));
6120                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
6121                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6122                {
6123                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6124                }
6125                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6126                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6127                }
6128            }
6129
6130            next_offset += envelope_size;
6131            _next_ordinal_to_read += 1;
6132            if next_offset >= end_offset {
6133                return Ok(());
6134            }
6135
6136            // Decode unknown envelopes for gaps in ordinals.
6137            while _next_ordinal_to_read < 6 {
6138                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6139                _next_ordinal_to_read += 1;
6140                next_offset += envelope_size;
6141            }
6142
6143            let next_out_of_line = decoder.next_out_of_line();
6144            let handles_before = decoder.remaining_handles();
6145            if let Some((inlined, num_bytes, num_handles)) =
6146                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6147            {
6148                let member_inline_size =
6149                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6150                if inlined != (member_inline_size <= 4) {
6151                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6152                }
6153                let inner_offset;
6154                let mut inner_depth = depth.clone();
6155                if inlined {
6156                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6157                    inner_offset = next_offset;
6158                } else {
6159                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6160                    inner_depth.increment()?;
6161                }
6162                let val_ref =
6163                    self.snac_router_flag.get_or_insert_with(|| fidl::new_empty!(bool, D));
6164                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
6165                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6166                {
6167                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6168                }
6169                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6170                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6171                }
6172            }
6173
6174            next_offset += envelope_size;
6175            _next_ordinal_to_read += 1;
6176            if next_offset >= end_offset {
6177                return Ok(());
6178            }
6179
6180            // Decode unknown envelopes for gaps in ordinals.
6181            while _next_ordinal_to_read < 7 {
6182                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6183                _next_ordinal_to_read += 1;
6184                next_offset += envelope_size;
6185            }
6186
6187            let next_out_of_line = decoder.next_out_of_line();
6188            let handles_before = decoder.remaining_handles();
6189            if let Some((inlined, num_bytes, num_handles)) =
6190                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6191            {
6192                let member_inline_size =
6193                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6194                if inlined != (member_inline_size <= 4) {
6195                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6196                }
6197                let inner_offset;
6198                let mut inner_depth = depth.clone();
6199                if inlined {
6200                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6201                    inner_offset = next_offset;
6202                } else {
6203                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6204                    inner_depth.increment()?;
6205                }
6206                let val_ref = self.is_local_device.get_or_insert_with(|| fidl::new_empty!(bool, D));
6207                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
6208                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6209                {
6210                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6211                }
6212                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6213                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6214                }
6215            }
6216
6217            next_offset += envelope_size;
6218            _next_ordinal_to_read += 1;
6219            if next_offset >= end_offset {
6220                return Ok(());
6221            }
6222
6223            // Decode unknown envelopes for gaps in ordinals.
6224            while _next_ordinal_to_read < 8 {
6225                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6226                _next_ordinal_to_read += 1;
6227                next_offset += envelope_size;
6228            }
6229
6230            let next_out_of_line = decoder.next_out_of_line();
6231            let handles_before = decoder.remaining_handles();
6232            if let Some((inlined, num_bytes, num_handles)) =
6233                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6234            {
6235                let member_inline_size =
6236                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6237                if inlined != (member_inline_size <= 4) {
6238                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6239                }
6240                let inner_offset;
6241                let mut inner_depth = depth.clone();
6242                if inlined {
6243                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6244                    inner_offset = next_offset;
6245                } else {
6246                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6247                    inner_depth.increment()?;
6248                }
6249                let val_ref = self.is_reachable.get_or_insert_with(|| fidl::new_empty!(bool, D));
6250                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
6251                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6252                {
6253                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6254                }
6255                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6256                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6257                }
6258            }
6259
6260            next_offset += envelope_size;
6261            _next_ordinal_to_read += 1;
6262            if next_offset >= end_offset {
6263                return Ok(());
6264            }
6265
6266            // Decode unknown envelopes for gaps in ordinals.
6267            while _next_ordinal_to_read < 9 {
6268                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6269                _next_ordinal_to_read += 1;
6270                next_offset += envelope_size;
6271            }
6272
6273            let next_out_of_line = decoder.next_out_of_line();
6274            let handles_before = decoder.remaining_handles();
6275            if let Some((inlined, num_bytes, num_handles)) =
6276                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6277            {
6278                let member_inline_size =
6279                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6280                if inlined != (member_inline_size <= 4) {
6281                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6282                }
6283                let inner_offset;
6284                let mut inner_depth = depth.clone();
6285                if inlined {
6286                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6287                    inner_offset = next_offset;
6288                } else {
6289                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6290                    inner_depth.increment()?;
6291                }
6292                let val_ref = self.is_peer_br.get_or_insert_with(|| fidl::new_empty!(bool, D));
6293                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
6294                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6295                {
6296                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6297                }
6298                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6299                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6300                }
6301            }
6302
6303            next_offset += envelope_size;
6304
6305            // Decode the remaining unknown envelopes.
6306            while next_offset < end_offset {
6307                _next_ordinal_to_read += 1;
6308                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6309                next_offset += envelope_size;
6310            }
6311
6312            Ok(())
6313        }
6314    }
6315
6316    impl ChannelInfo {
6317        #[inline(always)]
6318        fn max_ordinal_present(&self) -> u64 {
6319            if let Some(_) = self.masked_by_regulatory_domain {
6320                return 6;
6321            }
6322            if let Some(_) = self.spectrum_bandwidth_hz {
6323                return 5;
6324            }
6325            if let Some(_) = self.spectrum_center_frequency_hz {
6326                return 4;
6327            }
6328            if let Some(_) = self.max_transmit_power_dbm {
6329                return 3;
6330            }
6331            if let Some(_) = self.id {
6332                return 2;
6333            }
6334            if let Some(_) = self.index {
6335                return 1;
6336            }
6337            0
6338        }
6339    }
6340
6341    impl fidl::encoding::ValueTypeMarker for ChannelInfo {
6342        type Borrowed<'a> = &'a Self;
6343        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
6344            value
6345        }
6346    }
6347
6348    unsafe impl fidl::encoding::TypeMarker for ChannelInfo {
6349        type Owned = Self;
6350
6351        #[inline(always)]
6352        fn inline_align(_context: fidl::encoding::Context) -> usize {
6353            8
6354        }
6355
6356        #[inline(always)]
6357        fn inline_size(_context: fidl::encoding::Context) -> usize {
6358            16
6359        }
6360    }
6361
6362    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<ChannelInfo, D>
6363        for &ChannelInfo
6364    {
6365        unsafe fn encode(
6366            self,
6367            encoder: &mut fidl::encoding::Encoder<'_, D>,
6368            offset: usize,
6369            mut depth: fidl::encoding::Depth,
6370        ) -> fidl::Result<()> {
6371            encoder.debug_check_bounds::<ChannelInfo>(offset);
6372            // Vector header
6373            let max_ordinal: u64 = self.max_ordinal_present();
6374            encoder.write_num(max_ordinal, offset);
6375            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
6376            // Calling encoder.out_of_line_offset(0) is not allowed.
6377            if max_ordinal == 0 {
6378                return Ok(());
6379            }
6380            depth.increment()?;
6381            let envelope_size = 8;
6382            let bytes_len = max_ordinal as usize * envelope_size;
6383            #[allow(unused_variables)]
6384            let offset = encoder.out_of_line_offset(bytes_len);
6385            let mut _prev_end_offset: usize = 0;
6386            if 1 > max_ordinal {
6387                return Ok(());
6388            }
6389
6390            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6391            // are envelope_size bytes.
6392            let cur_offset: usize = (1 - 1) * envelope_size;
6393
6394            // Zero reserved fields.
6395            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6396
6397            // Safety:
6398            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6399            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6400            //   envelope_size bytes, there is always sufficient room.
6401            fidl::encoding::encode_in_envelope_optional::<u16, D>(
6402                self.index.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
6403                encoder,
6404                offset + cur_offset,
6405                depth,
6406            )?;
6407
6408            _prev_end_offset = cur_offset + envelope_size;
6409            if 2 > max_ordinal {
6410                return Ok(());
6411            }
6412
6413            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6414            // are envelope_size bytes.
6415            let cur_offset: usize = (2 - 1) * envelope_size;
6416
6417            // Zero reserved fields.
6418            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6419
6420            // Safety:
6421            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6422            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6423            //   envelope_size bytes, there is always sufficient room.
6424            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<16>, D>(
6425                self.id.as_ref().map(
6426                    <fidl::encoding::BoundedString<16> as fidl::encoding::ValueTypeMarker>::borrow,
6427                ),
6428                encoder,
6429                offset + cur_offset,
6430                depth,
6431            )?;
6432
6433            _prev_end_offset = cur_offset + envelope_size;
6434            if 3 > max_ordinal {
6435                return Ok(());
6436            }
6437
6438            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6439            // are envelope_size bytes.
6440            let cur_offset: usize = (3 - 1) * envelope_size;
6441
6442            // Zero reserved fields.
6443            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6444
6445            // Safety:
6446            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6447            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6448            //   envelope_size bytes, there is always sufficient room.
6449            fidl::encoding::encode_in_envelope_optional::<i8, D>(
6450                self.max_transmit_power_dbm
6451                    .as_ref()
6452                    .map(<i8 as fidl::encoding::ValueTypeMarker>::borrow),
6453                encoder,
6454                offset + cur_offset,
6455                depth,
6456            )?;
6457
6458            _prev_end_offset = cur_offset + envelope_size;
6459            if 4 > max_ordinal {
6460                return Ok(());
6461            }
6462
6463            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6464            // are envelope_size bytes.
6465            let cur_offset: usize = (4 - 1) * envelope_size;
6466
6467            // Zero reserved fields.
6468            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6469
6470            // Safety:
6471            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6472            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6473            //   envelope_size bytes, there is always sufficient room.
6474            fidl::encoding::encode_in_envelope_optional::<u64, D>(
6475                self.spectrum_center_frequency_hz
6476                    .as_ref()
6477                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
6478                encoder,
6479                offset + cur_offset,
6480                depth,
6481            )?;
6482
6483            _prev_end_offset = cur_offset + envelope_size;
6484            if 5 > max_ordinal {
6485                return Ok(());
6486            }
6487
6488            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6489            // are envelope_size bytes.
6490            let cur_offset: usize = (5 - 1) * envelope_size;
6491
6492            // Zero reserved fields.
6493            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6494
6495            // Safety:
6496            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6497            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6498            //   envelope_size bytes, there is always sufficient room.
6499            fidl::encoding::encode_in_envelope_optional::<u64, D>(
6500                self.spectrum_bandwidth_hz
6501                    .as_ref()
6502                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
6503                encoder,
6504                offset + cur_offset,
6505                depth,
6506            )?;
6507
6508            _prev_end_offset = cur_offset + envelope_size;
6509            if 6 > max_ordinal {
6510                return Ok(());
6511            }
6512
6513            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6514            // are envelope_size bytes.
6515            let cur_offset: usize = (6 - 1) * envelope_size;
6516
6517            // Zero reserved fields.
6518            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6519
6520            // Safety:
6521            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6522            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6523            //   envelope_size bytes, there is always sufficient room.
6524            fidl::encoding::encode_in_envelope_optional::<bool, D>(
6525                self.masked_by_regulatory_domain
6526                    .as_ref()
6527                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
6528                encoder,
6529                offset + cur_offset,
6530                depth,
6531            )?;
6532
6533            _prev_end_offset = cur_offset + envelope_size;
6534
6535            Ok(())
6536        }
6537    }
6538
6539    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ChannelInfo {
6540        #[inline(always)]
6541        fn new_empty() -> Self {
6542            Self::default()
6543        }
6544
6545        unsafe fn decode(
6546            &mut self,
6547            decoder: &mut fidl::encoding::Decoder<'_, D>,
6548            offset: usize,
6549            mut depth: fidl::encoding::Depth,
6550        ) -> fidl::Result<()> {
6551            decoder.debug_check_bounds::<Self>(offset);
6552            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
6553                None => return Err(fidl::Error::NotNullable),
6554                Some(len) => len,
6555            };
6556            // Calling decoder.out_of_line_offset(0) is not allowed.
6557            if len == 0 {
6558                return Ok(());
6559            };
6560            depth.increment()?;
6561            let envelope_size = 8;
6562            let bytes_len = len * envelope_size;
6563            let offset = decoder.out_of_line_offset(bytes_len)?;
6564            // Decode the envelope for each type.
6565            let mut _next_ordinal_to_read = 0;
6566            let mut next_offset = offset;
6567            let end_offset = offset + bytes_len;
6568            _next_ordinal_to_read += 1;
6569            if next_offset >= end_offset {
6570                return Ok(());
6571            }
6572
6573            // Decode unknown envelopes for gaps in ordinals.
6574            while _next_ordinal_to_read < 1 {
6575                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6576                _next_ordinal_to_read += 1;
6577                next_offset += envelope_size;
6578            }
6579
6580            let next_out_of_line = decoder.next_out_of_line();
6581            let handles_before = decoder.remaining_handles();
6582            if let Some((inlined, num_bytes, num_handles)) =
6583                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6584            {
6585                let member_inline_size =
6586                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6587                if inlined != (member_inline_size <= 4) {
6588                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6589                }
6590                let inner_offset;
6591                let mut inner_depth = depth.clone();
6592                if inlined {
6593                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6594                    inner_offset = next_offset;
6595                } else {
6596                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6597                    inner_depth.increment()?;
6598                }
6599                let val_ref = self.index.get_or_insert_with(|| fidl::new_empty!(u16, D));
6600                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
6601                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6602                {
6603                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6604                }
6605                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6606                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6607                }
6608            }
6609
6610            next_offset += envelope_size;
6611            _next_ordinal_to_read += 1;
6612            if next_offset >= end_offset {
6613                return Ok(());
6614            }
6615
6616            // Decode unknown envelopes for gaps in ordinals.
6617            while _next_ordinal_to_read < 2 {
6618                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6619                _next_ordinal_to_read += 1;
6620                next_offset += envelope_size;
6621            }
6622
6623            let next_out_of_line = decoder.next_out_of_line();
6624            let handles_before = decoder.remaining_handles();
6625            if let Some((inlined, num_bytes, num_handles)) =
6626                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6627            {
6628                let member_inline_size =
6629                    <fidl::encoding::BoundedString<16> as fidl::encoding::TypeMarker>::inline_size(
6630                        decoder.context,
6631                    );
6632                if inlined != (member_inline_size <= 4) {
6633                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6634                }
6635                let inner_offset;
6636                let mut inner_depth = depth.clone();
6637                if inlined {
6638                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6639                    inner_offset = next_offset;
6640                } else {
6641                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6642                    inner_depth.increment()?;
6643                }
6644                let val_ref = self
6645                    .id
6646                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<16>, D));
6647                fidl::decode!(
6648                    fidl::encoding::BoundedString<16>,
6649                    D,
6650                    val_ref,
6651                    decoder,
6652                    inner_offset,
6653                    inner_depth
6654                )?;
6655                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6656                {
6657                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6658                }
6659                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6660                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6661                }
6662            }
6663
6664            next_offset += envelope_size;
6665            _next_ordinal_to_read += 1;
6666            if next_offset >= end_offset {
6667                return Ok(());
6668            }
6669
6670            // Decode unknown envelopes for gaps in ordinals.
6671            while _next_ordinal_to_read < 3 {
6672                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6673                _next_ordinal_to_read += 1;
6674                next_offset += envelope_size;
6675            }
6676
6677            let next_out_of_line = decoder.next_out_of_line();
6678            let handles_before = decoder.remaining_handles();
6679            if let Some((inlined, num_bytes, num_handles)) =
6680                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6681            {
6682                let member_inline_size =
6683                    <i8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6684                if inlined != (member_inline_size <= 4) {
6685                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6686                }
6687                let inner_offset;
6688                let mut inner_depth = depth.clone();
6689                if inlined {
6690                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6691                    inner_offset = next_offset;
6692                } else {
6693                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6694                    inner_depth.increment()?;
6695                }
6696                let val_ref =
6697                    self.max_transmit_power_dbm.get_or_insert_with(|| fidl::new_empty!(i8, D));
6698                fidl::decode!(i8, D, val_ref, decoder, inner_offset, inner_depth)?;
6699                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6700                {
6701                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6702                }
6703                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6704                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6705                }
6706            }
6707
6708            next_offset += envelope_size;
6709            _next_ordinal_to_read += 1;
6710            if next_offset >= end_offset {
6711                return Ok(());
6712            }
6713
6714            // Decode unknown envelopes for gaps in ordinals.
6715            while _next_ordinal_to_read < 4 {
6716                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6717                _next_ordinal_to_read += 1;
6718                next_offset += envelope_size;
6719            }
6720
6721            let next_out_of_line = decoder.next_out_of_line();
6722            let handles_before = decoder.remaining_handles();
6723            if let Some((inlined, num_bytes, num_handles)) =
6724                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6725            {
6726                let member_inline_size =
6727                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6728                if inlined != (member_inline_size <= 4) {
6729                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6730                }
6731                let inner_offset;
6732                let mut inner_depth = depth.clone();
6733                if inlined {
6734                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6735                    inner_offset = next_offset;
6736                } else {
6737                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6738                    inner_depth.increment()?;
6739                }
6740                let val_ref = self
6741                    .spectrum_center_frequency_hz
6742                    .get_or_insert_with(|| fidl::new_empty!(u64, D));
6743                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
6744                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6745                {
6746                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6747                }
6748                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6749                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6750                }
6751            }
6752
6753            next_offset += envelope_size;
6754            _next_ordinal_to_read += 1;
6755            if next_offset >= end_offset {
6756                return Ok(());
6757            }
6758
6759            // Decode unknown envelopes for gaps in ordinals.
6760            while _next_ordinal_to_read < 5 {
6761                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6762                _next_ordinal_to_read += 1;
6763                next_offset += envelope_size;
6764            }
6765
6766            let next_out_of_line = decoder.next_out_of_line();
6767            let handles_before = decoder.remaining_handles();
6768            if let Some((inlined, num_bytes, num_handles)) =
6769                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6770            {
6771                let member_inline_size =
6772                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6773                if inlined != (member_inline_size <= 4) {
6774                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6775                }
6776                let inner_offset;
6777                let mut inner_depth = depth.clone();
6778                if inlined {
6779                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6780                    inner_offset = next_offset;
6781                } else {
6782                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6783                    inner_depth.increment()?;
6784                }
6785                let val_ref =
6786                    self.spectrum_bandwidth_hz.get_or_insert_with(|| fidl::new_empty!(u64, D));
6787                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
6788                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6789                {
6790                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6791                }
6792                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6793                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6794                }
6795            }
6796
6797            next_offset += envelope_size;
6798            _next_ordinal_to_read += 1;
6799            if next_offset >= end_offset {
6800                return Ok(());
6801            }
6802
6803            // Decode unknown envelopes for gaps in ordinals.
6804            while _next_ordinal_to_read < 6 {
6805                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6806                _next_ordinal_to_read += 1;
6807                next_offset += envelope_size;
6808            }
6809
6810            let next_out_of_line = decoder.next_out_of_line();
6811            let handles_before = decoder.remaining_handles();
6812            if let Some((inlined, num_bytes, num_handles)) =
6813                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6814            {
6815                let member_inline_size =
6816                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6817                if inlined != (member_inline_size <= 4) {
6818                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6819                }
6820                let inner_offset;
6821                let mut inner_depth = depth.clone();
6822                if inlined {
6823                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6824                    inner_offset = next_offset;
6825                } else {
6826                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6827                    inner_depth.increment()?;
6828                }
6829                let val_ref = self
6830                    .masked_by_regulatory_domain
6831                    .get_or_insert_with(|| fidl::new_empty!(bool, D));
6832                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
6833                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6834                {
6835                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6836                }
6837                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6838                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6839                }
6840            }
6841
6842            next_offset += envelope_size;
6843
6844            // Decode the remaining unknown envelopes.
6845            while next_offset < end_offset {
6846                _next_ordinal_to_read += 1;
6847                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6848                next_offset += envelope_size;
6849            }
6850
6851            Ok(())
6852        }
6853    }
6854
6855    impl Dhcp6PdInfo {
6856        #[inline(always)]
6857        fn max_ordinal_present(&self) -> u64 {
6858            if let Some(_) = self.hashed_pd_prefix {
6859                return 3;
6860            }
6861            if let Some(_) = self.pd_processed_ra_info {
6862                return 2;
6863            }
6864            if let Some(_) = self.dhcp6pd_state {
6865                return 1;
6866            }
6867            0
6868        }
6869    }
6870
6871    impl fidl::encoding::ValueTypeMarker for Dhcp6PdInfo {
6872        type Borrowed<'a> = &'a Self;
6873        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
6874            value
6875        }
6876    }
6877
6878    unsafe impl fidl::encoding::TypeMarker for Dhcp6PdInfo {
6879        type Owned = Self;
6880
6881        #[inline(always)]
6882        fn inline_align(_context: fidl::encoding::Context) -> usize {
6883            8
6884        }
6885
6886        #[inline(always)]
6887        fn inline_size(_context: fidl::encoding::Context) -> usize {
6888            16
6889        }
6890    }
6891
6892    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Dhcp6PdInfo, D>
6893        for &Dhcp6PdInfo
6894    {
6895        unsafe fn encode(
6896            self,
6897            encoder: &mut fidl::encoding::Encoder<'_, D>,
6898            offset: usize,
6899            mut depth: fidl::encoding::Depth,
6900        ) -> fidl::Result<()> {
6901            encoder.debug_check_bounds::<Dhcp6PdInfo>(offset);
6902            // Vector header
6903            let max_ordinal: u64 = self.max_ordinal_present();
6904            encoder.write_num(max_ordinal, offset);
6905            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
6906            // Calling encoder.out_of_line_offset(0) is not allowed.
6907            if max_ordinal == 0 {
6908                return Ok(());
6909            }
6910            depth.increment()?;
6911            let envelope_size = 8;
6912            let bytes_len = max_ordinal as usize * envelope_size;
6913            #[allow(unused_variables)]
6914            let offset = encoder.out_of_line_offset(bytes_len);
6915            let mut _prev_end_offset: usize = 0;
6916            if 1 > max_ordinal {
6917                return Ok(());
6918            }
6919
6920            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6921            // are envelope_size bytes.
6922            let cur_offset: usize = (1 - 1) * envelope_size;
6923
6924            // Zero reserved fields.
6925            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6926
6927            // Safety:
6928            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6929            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6930            //   envelope_size bytes, there is always sufficient room.
6931            fidl::encoding::encode_in_envelope_optional::<Dhcp6PdState, D>(
6932                self.dhcp6pd_state
6933                    .as_ref()
6934                    .map(<Dhcp6PdState as fidl::encoding::ValueTypeMarker>::borrow),
6935                encoder,
6936                offset + cur_offset,
6937                depth,
6938            )?;
6939
6940            _prev_end_offset = cur_offset + envelope_size;
6941            if 2 > max_ordinal {
6942                return Ok(());
6943            }
6944
6945            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6946            // are envelope_size bytes.
6947            let cur_offset: usize = (2 - 1) * envelope_size;
6948
6949            // Zero reserved fields.
6950            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6951
6952            // Safety:
6953            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6954            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6955            //   envelope_size bytes, there is always sufficient room.
6956            fidl::encoding::encode_in_envelope_optional::<PdProcessedRaInfo, D>(
6957                self.pd_processed_ra_info
6958                    .as_ref()
6959                    .map(<PdProcessedRaInfo as fidl::encoding::ValueTypeMarker>::borrow),
6960                encoder,
6961                offset + cur_offset,
6962                depth,
6963            )?;
6964
6965            _prev_end_offset = cur_offset + envelope_size;
6966            if 3 > max_ordinal {
6967                return Ok(());
6968            }
6969
6970            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6971            // are envelope_size bytes.
6972            let cur_offset: usize = (3 - 1) * envelope_size;
6973
6974            // Zero reserved fields.
6975            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6976
6977            // Safety:
6978            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6979            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6980            //   envelope_size bytes, there is always sufficient room.
6981            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u8, 32>, D>(
6982                self.hashed_pd_prefix.as_ref().map(
6983                    <fidl::encoding::Vector<u8, 32> as fidl::encoding::ValueTypeMarker>::borrow,
6984                ),
6985                encoder,
6986                offset + cur_offset,
6987                depth,
6988            )?;
6989
6990            _prev_end_offset = cur_offset + envelope_size;
6991
6992            Ok(())
6993        }
6994    }
6995
6996    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Dhcp6PdInfo {
6997        #[inline(always)]
6998        fn new_empty() -> Self {
6999            Self::default()
7000        }
7001
7002        unsafe fn decode(
7003            &mut self,
7004            decoder: &mut fidl::encoding::Decoder<'_, D>,
7005            offset: usize,
7006            mut depth: fidl::encoding::Depth,
7007        ) -> fidl::Result<()> {
7008            decoder.debug_check_bounds::<Self>(offset);
7009            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
7010                None => return Err(fidl::Error::NotNullable),
7011                Some(len) => len,
7012            };
7013            // Calling decoder.out_of_line_offset(0) is not allowed.
7014            if len == 0 {
7015                return Ok(());
7016            };
7017            depth.increment()?;
7018            let envelope_size = 8;
7019            let bytes_len = len * envelope_size;
7020            let offset = decoder.out_of_line_offset(bytes_len)?;
7021            // Decode the envelope for each type.
7022            let mut _next_ordinal_to_read = 0;
7023            let mut next_offset = offset;
7024            let end_offset = offset + bytes_len;
7025            _next_ordinal_to_read += 1;
7026            if next_offset >= end_offset {
7027                return Ok(());
7028            }
7029
7030            // Decode unknown envelopes for gaps in ordinals.
7031            while _next_ordinal_to_read < 1 {
7032                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7033                _next_ordinal_to_read += 1;
7034                next_offset += envelope_size;
7035            }
7036
7037            let next_out_of_line = decoder.next_out_of_line();
7038            let handles_before = decoder.remaining_handles();
7039            if let Some((inlined, num_bytes, num_handles)) =
7040                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7041            {
7042                let member_inline_size =
7043                    <Dhcp6PdState as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7044                if inlined != (member_inline_size <= 4) {
7045                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7046                }
7047                let inner_offset;
7048                let mut inner_depth = depth.clone();
7049                if inlined {
7050                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7051                    inner_offset = next_offset;
7052                } else {
7053                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7054                    inner_depth.increment()?;
7055                }
7056                let val_ref =
7057                    self.dhcp6pd_state.get_or_insert_with(|| fidl::new_empty!(Dhcp6PdState, D));
7058                fidl::decode!(Dhcp6PdState, D, val_ref, decoder, inner_offset, inner_depth)?;
7059                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7060                {
7061                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7062                }
7063                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7064                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7065                }
7066            }
7067
7068            next_offset += envelope_size;
7069            _next_ordinal_to_read += 1;
7070            if next_offset >= end_offset {
7071                return Ok(());
7072            }
7073
7074            // Decode unknown envelopes for gaps in ordinals.
7075            while _next_ordinal_to_read < 2 {
7076                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7077                _next_ordinal_to_read += 1;
7078                next_offset += envelope_size;
7079            }
7080
7081            let next_out_of_line = decoder.next_out_of_line();
7082            let handles_before = decoder.remaining_handles();
7083            if let Some((inlined, num_bytes, num_handles)) =
7084                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7085            {
7086                let member_inline_size =
7087                    <PdProcessedRaInfo as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7088                if inlined != (member_inline_size <= 4) {
7089                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7090                }
7091                let inner_offset;
7092                let mut inner_depth = depth.clone();
7093                if inlined {
7094                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7095                    inner_offset = next_offset;
7096                } else {
7097                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7098                    inner_depth.increment()?;
7099                }
7100                let val_ref = self
7101                    .pd_processed_ra_info
7102                    .get_or_insert_with(|| fidl::new_empty!(PdProcessedRaInfo, D));
7103                fidl::decode!(PdProcessedRaInfo, D, val_ref, decoder, inner_offset, inner_depth)?;
7104                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7105                {
7106                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7107                }
7108                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7109                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7110                }
7111            }
7112
7113            next_offset += envelope_size;
7114            _next_ordinal_to_read += 1;
7115            if next_offset >= end_offset {
7116                return Ok(());
7117            }
7118
7119            // Decode unknown envelopes for gaps in ordinals.
7120            while _next_ordinal_to_read < 3 {
7121                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7122                _next_ordinal_to_read += 1;
7123                next_offset += envelope_size;
7124            }
7125
7126            let next_out_of_line = decoder.next_out_of_line();
7127            let handles_before = decoder.remaining_handles();
7128            if let Some((inlined, num_bytes, num_handles)) =
7129                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7130            {
7131                let member_inline_size =
7132                    <fidl::encoding::Vector<u8, 32> as fidl::encoding::TypeMarker>::inline_size(
7133                        decoder.context,
7134                    );
7135                if inlined != (member_inline_size <= 4) {
7136                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7137                }
7138                let inner_offset;
7139                let mut inner_depth = depth.clone();
7140                if inlined {
7141                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7142                    inner_offset = next_offset;
7143                } else {
7144                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7145                    inner_depth.increment()?;
7146                }
7147                let val_ref = self
7148                    .hashed_pd_prefix
7149                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u8, 32>, D));
7150                fidl::decode!(fidl::encoding::Vector<u8, 32>, D, val_ref, decoder, inner_offset, inner_depth)?;
7151                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7152                {
7153                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7154                }
7155                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7156                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7157                }
7158            }
7159
7160            next_offset += envelope_size;
7161
7162            // Decode the remaining unknown envelopes.
7163            while next_offset < end_offset {
7164                _next_ordinal_to_read += 1;
7165                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7166                next_offset += envelope_size;
7167            }
7168
7169            Ok(())
7170        }
7171    }
7172
7173    impl DnsTxtEntry {
7174        #[inline(always)]
7175        fn max_ordinal_present(&self) -> u64 {
7176            if let Some(_) = self.value {
7177                return 2;
7178            }
7179            if let Some(_) = self.key {
7180                return 1;
7181            }
7182            0
7183        }
7184    }
7185
7186    impl fidl::encoding::ValueTypeMarker for DnsTxtEntry {
7187        type Borrowed<'a> = &'a Self;
7188        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
7189            value
7190        }
7191    }
7192
7193    unsafe impl fidl::encoding::TypeMarker for DnsTxtEntry {
7194        type Owned = Self;
7195
7196        #[inline(always)]
7197        fn inline_align(_context: fidl::encoding::Context) -> usize {
7198            8
7199        }
7200
7201        #[inline(always)]
7202        fn inline_size(_context: fidl::encoding::Context) -> usize {
7203            16
7204        }
7205    }
7206
7207    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<DnsTxtEntry, D>
7208        for &DnsTxtEntry
7209    {
7210        unsafe fn encode(
7211            self,
7212            encoder: &mut fidl::encoding::Encoder<'_, D>,
7213            offset: usize,
7214            mut depth: fidl::encoding::Depth,
7215        ) -> fidl::Result<()> {
7216            encoder.debug_check_bounds::<DnsTxtEntry>(offset);
7217            // Vector header
7218            let max_ordinal: u64 = self.max_ordinal_present();
7219            encoder.write_num(max_ordinal, offset);
7220            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
7221            // Calling encoder.out_of_line_offset(0) is not allowed.
7222            if max_ordinal == 0 {
7223                return Ok(());
7224            }
7225            depth.increment()?;
7226            let envelope_size = 8;
7227            let bytes_len = max_ordinal as usize * envelope_size;
7228            #[allow(unused_variables)]
7229            let offset = encoder.out_of_line_offset(bytes_len);
7230            let mut _prev_end_offset: usize = 0;
7231            if 1 > max_ordinal {
7232                return Ok(());
7233            }
7234
7235            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7236            // are envelope_size bytes.
7237            let cur_offset: usize = (1 - 1) * envelope_size;
7238
7239            // Zero reserved fields.
7240            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7241
7242            // Safety:
7243            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7244            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7245            //   envelope_size bytes, there is always sufficient room.
7246            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<64>, D>(
7247                self.key.as_ref().map(
7248                    <fidl::encoding::BoundedString<64> as fidl::encoding::ValueTypeMarker>::borrow,
7249                ),
7250                encoder,
7251                offset + cur_offset,
7252                depth,
7253            )?;
7254
7255            _prev_end_offset = cur_offset + envelope_size;
7256            if 2 > max_ordinal {
7257                return Ok(());
7258            }
7259
7260            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7261            // are envelope_size bytes.
7262            let cur_offset: usize = (2 - 1) * envelope_size;
7263
7264            // Zero reserved fields.
7265            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7266
7267            // Safety:
7268            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7269            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7270            //   envelope_size bytes, there is always sufficient room.
7271            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u8, 253>, D>(
7272                self.value.as_ref().map(
7273                    <fidl::encoding::Vector<u8, 253> as fidl::encoding::ValueTypeMarker>::borrow,
7274                ),
7275                encoder,
7276                offset + cur_offset,
7277                depth,
7278            )?;
7279
7280            _prev_end_offset = cur_offset + envelope_size;
7281
7282            Ok(())
7283        }
7284    }
7285
7286    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DnsTxtEntry {
7287        #[inline(always)]
7288        fn new_empty() -> Self {
7289            Self::default()
7290        }
7291
7292        unsafe fn decode(
7293            &mut self,
7294            decoder: &mut fidl::encoding::Decoder<'_, D>,
7295            offset: usize,
7296            mut depth: fidl::encoding::Depth,
7297        ) -> fidl::Result<()> {
7298            decoder.debug_check_bounds::<Self>(offset);
7299            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
7300                None => return Err(fidl::Error::NotNullable),
7301                Some(len) => len,
7302            };
7303            // Calling decoder.out_of_line_offset(0) is not allowed.
7304            if len == 0 {
7305                return Ok(());
7306            };
7307            depth.increment()?;
7308            let envelope_size = 8;
7309            let bytes_len = len * envelope_size;
7310            let offset = decoder.out_of_line_offset(bytes_len)?;
7311            // Decode the envelope for each type.
7312            let mut _next_ordinal_to_read = 0;
7313            let mut next_offset = offset;
7314            let end_offset = offset + bytes_len;
7315            _next_ordinal_to_read += 1;
7316            if next_offset >= end_offset {
7317                return Ok(());
7318            }
7319
7320            // Decode unknown envelopes for gaps in ordinals.
7321            while _next_ordinal_to_read < 1 {
7322                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7323                _next_ordinal_to_read += 1;
7324                next_offset += envelope_size;
7325            }
7326
7327            let next_out_of_line = decoder.next_out_of_line();
7328            let handles_before = decoder.remaining_handles();
7329            if let Some((inlined, num_bytes, num_handles)) =
7330                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7331            {
7332                let member_inline_size =
7333                    <fidl::encoding::BoundedString<64> as fidl::encoding::TypeMarker>::inline_size(
7334                        decoder.context,
7335                    );
7336                if inlined != (member_inline_size <= 4) {
7337                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7338                }
7339                let inner_offset;
7340                let mut inner_depth = depth.clone();
7341                if inlined {
7342                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7343                    inner_offset = next_offset;
7344                } else {
7345                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7346                    inner_depth.increment()?;
7347                }
7348                let val_ref = self
7349                    .key
7350                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<64>, D));
7351                fidl::decode!(
7352                    fidl::encoding::BoundedString<64>,
7353                    D,
7354                    val_ref,
7355                    decoder,
7356                    inner_offset,
7357                    inner_depth
7358                )?;
7359                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7360                {
7361                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7362                }
7363                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7364                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7365                }
7366            }
7367
7368            next_offset += envelope_size;
7369            _next_ordinal_to_read += 1;
7370            if next_offset >= end_offset {
7371                return Ok(());
7372            }
7373
7374            // Decode unknown envelopes for gaps in ordinals.
7375            while _next_ordinal_to_read < 2 {
7376                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7377                _next_ordinal_to_read += 1;
7378                next_offset += envelope_size;
7379            }
7380
7381            let next_out_of_line = decoder.next_out_of_line();
7382            let handles_before = decoder.remaining_handles();
7383            if let Some((inlined, num_bytes, num_handles)) =
7384                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7385            {
7386                let member_inline_size =
7387                    <fidl::encoding::Vector<u8, 253> as fidl::encoding::TypeMarker>::inline_size(
7388                        decoder.context,
7389                    );
7390                if inlined != (member_inline_size <= 4) {
7391                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7392                }
7393                let inner_offset;
7394                let mut inner_depth = depth.clone();
7395                if inlined {
7396                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7397                    inner_offset = next_offset;
7398                } else {
7399                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7400                    inner_depth.increment()?;
7401                }
7402                let val_ref = self
7403                    .value
7404                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u8, 253>, D));
7405                fidl::decode!(fidl::encoding::Vector<u8, 253>, D, val_ref, decoder, inner_offset, inner_depth)?;
7406                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7407                {
7408                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7409                }
7410                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7411                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7412                }
7413            }
7414
7415            next_offset += envelope_size;
7416
7417            // Decode the remaining unknown envelopes.
7418            while next_offset < end_offset {
7419                _next_ordinal_to_read += 1;
7420                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7421                next_offset += envelope_size;
7422            }
7423
7424            Ok(())
7425        }
7426    }
7427
7428    impl DnssdCounters {
7429        #[inline(always)]
7430        fn max_ordinal_present(&self) -> u64 {
7431            if let Some(_) = self.upstream_dns_counters {
7432                return 8;
7433            }
7434            if let Some(_) = self.resolved_by_srp {
7435                return 7;
7436            }
7437            if let Some(_) = self.other_response {
7438                return 6;
7439            }
7440            if let Some(_) = self.not_implemented_response {
7441                return 5;
7442            }
7443            if let Some(_) = self.name_error_response {
7444                return 4;
7445            }
7446            if let Some(_) = self.format_error_response {
7447                return 3;
7448            }
7449            if let Some(_) = self.server_failure_response {
7450                return 2;
7451            }
7452            if let Some(_) = self.success_response {
7453                return 1;
7454            }
7455            0
7456        }
7457    }
7458
7459    impl fidl::encoding::ValueTypeMarker for DnssdCounters {
7460        type Borrowed<'a> = &'a Self;
7461        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
7462            value
7463        }
7464    }
7465
7466    unsafe impl fidl::encoding::TypeMarker for DnssdCounters {
7467        type Owned = Self;
7468
7469        #[inline(always)]
7470        fn inline_align(_context: fidl::encoding::Context) -> usize {
7471            8
7472        }
7473
7474        #[inline(always)]
7475        fn inline_size(_context: fidl::encoding::Context) -> usize {
7476            16
7477        }
7478    }
7479
7480    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<DnssdCounters, D>
7481        for &DnssdCounters
7482    {
7483        unsafe fn encode(
7484            self,
7485            encoder: &mut fidl::encoding::Encoder<'_, D>,
7486            offset: usize,
7487            mut depth: fidl::encoding::Depth,
7488        ) -> fidl::Result<()> {
7489            encoder.debug_check_bounds::<DnssdCounters>(offset);
7490            // Vector header
7491            let max_ordinal: u64 = self.max_ordinal_present();
7492            encoder.write_num(max_ordinal, offset);
7493            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
7494            // Calling encoder.out_of_line_offset(0) is not allowed.
7495            if max_ordinal == 0 {
7496                return Ok(());
7497            }
7498            depth.increment()?;
7499            let envelope_size = 8;
7500            let bytes_len = max_ordinal as usize * envelope_size;
7501            #[allow(unused_variables)]
7502            let offset = encoder.out_of_line_offset(bytes_len);
7503            let mut _prev_end_offset: usize = 0;
7504            if 1 > max_ordinal {
7505                return Ok(());
7506            }
7507
7508            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7509            // are envelope_size bytes.
7510            let cur_offset: usize = (1 - 1) * envelope_size;
7511
7512            // Zero reserved fields.
7513            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7514
7515            // Safety:
7516            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7517            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7518            //   envelope_size bytes, there is always sufficient room.
7519            fidl::encoding::encode_in_envelope_optional::<u32, D>(
7520                self.success_response
7521                    .as_ref()
7522                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
7523                encoder,
7524                offset + cur_offset,
7525                depth,
7526            )?;
7527
7528            _prev_end_offset = cur_offset + envelope_size;
7529            if 2 > max_ordinal {
7530                return Ok(());
7531            }
7532
7533            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7534            // are envelope_size bytes.
7535            let cur_offset: usize = (2 - 1) * envelope_size;
7536
7537            // Zero reserved fields.
7538            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7539
7540            // Safety:
7541            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7542            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7543            //   envelope_size bytes, there is always sufficient room.
7544            fidl::encoding::encode_in_envelope_optional::<u32, D>(
7545                self.server_failure_response
7546                    .as_ref()
7547                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
7548                encoder,
7549                offset + cur_offset,
7550                depth,
7551            )?;
7552
7553            _prev_end_offset = cur_offset + envelope_size;
7554            if 3 > max_ordinal {
7555                return Ok(());
7556            }
7557
7558            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7559            // are envelope_size bytes.
7560            let cur_offset: usize = (3 - 1) * envelope_size;
7561
7562            // Zero reserved fields.
7563            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7564
7565            // Safety:
7566            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7567            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7568            //   envelope_size bytes, there is always sufficient room.
7569            fidl::encoding::encode_in_envelope_optional::<u32, D>(
7570                self.format_error_response
7571                    .as_ref()
7572                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
7573                encoder,
7574                offset + cur_offset,
7575                depth,
7576            )?;
7577
7578            _prev_end_offset = cur_offset + envelope_size;
7579            if 4 > max_ordinal {
7580                return Ok(());
7581            }
7582
7583            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7584            // are envelope_size bytes.
7585            let cur_offset: usize = (4 - 1) * envelope_size;
7586
7587            // Zero reserved fields.
7588            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7589
7590            // Safety:
7591            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7592            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7593            //   envelope_size bytes, there is always sufficient room.
7594            fidl::encoding::encode_in_envelope_optional::<u32, D>(
7595                self.name_error_response
7596                    .as_ref()
7597                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
7598                encoder,
7599                offset + cur_offset,
7600                depth,
7601            )?;
7602
7603            _prev_end_offset = cur_offset + envelope_size;
7604            if 5 > max_ordinal {
7605                return Ok(());
7606            }
7607
7608            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7609            // are envelope_size bytes.
7610            let cur_offset: usize = (5 - 1) * envelope_size;
7611
7612            // Zero reserved fields.
7613            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7614
7615            // Safety:
7616            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7617            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7618            //   envelope_size bytes, there is always sufficient room.
7619            fidl::encoding::encode_in_envelope_optional::<u32, D>(
7620                self.not_implemented_response
7621                    .as_ref()
7622                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
7623                encoder,
7624                offset + cur_offset,
7625                depth,
7626            )?;
7627
7628            _prev_end_offset = cur_offset + envelope_size;
7629            if 6 > max_ordinal {
7630                return Ok(());
7631            }
7632
7633            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7634            // are envelope_size bytes.
7635            let cur_offset: usize = (6 - 1) * envelope_size;
7636
7637            // Zero reserved fields.
7638            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7639
7640            // Safety:
7641            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7642            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7643            //   envelope_size bytes, there is always sufficient room.
7644            fidl::encoding::encode_in_envelope_optional::<u32, D>(
7645                self.other_response.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
7646                encoder,
7647                offset + cur_offset,
7648                depth,
7649            )?;
7650
7651            _prev_end_offset = cur_offset + envelope_size;
7652            if 7 > max_ordinal {
7653                return Ok(());
7654            }
7655
7656            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7657            // are envelope_size bytes.
7658            let cur_offset: usize = (7 - 1) * envelope_size;
7659
7660            // Zero reserved fields.
7661            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7662
7663            // Safety:
7664            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7665            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7666            //   envelope_size bytes, there is always sufficient room.
7667            fidl::encoding::encode_in_envelope_optional::<u32, D>(
7668                self.resolved_by_srp.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
7669                encoder,
7670                offset + cur_offset,
7671                depth,
7672            )?;
7673
7674            _prev_end_offset = cur_offset + envelope_size;
7675            if 8 > max_ordinal {
7676                return Ok(());
7677            }
7678
7679            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7680            // are envelope_size bytes.
7681            let cur_offset: usize = (8 - 1) * envelope_size;
7682
7683            // Zero reserved fields.
7684            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7685
7686            // Safety:
7687            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7688            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7689            //   envelope_size bytes, there is always sufficient room.
7690            fidl::encoding::encode_in_envelope_optional::<UpstreamDnsCounters, D>(
7691                self.upstream_dns_counters
7692                    .as_ref()
7693                    .map(<UpstreamDnsCounters as fidl::encoding::ValueTypeMarker>::borrow),
7694                encoder,
7695                offset + cur_offset,
7696                depth,
7697            )?;
7698
7699            _prev_end_offset = cur_offset + envelope_size;
7700
7701            Ok(())
7702        }
7703    }
7704
7705    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DnssdCounters {
7706        #[inline(always)]
7707        fn new_empty() -> Self {
7708            Self::default()
7709        }
7710
7711        unsafe fn decode(
7712            &mut self,
7713            decoder: &mut fidl::encoding::Decoder<'_, D>,
7714            offset: usize,
7715            mut depth: fidl::encoding::Depth,
7716        ) -> fidl::Result<()> {
7717            decoder.debug_check_bounds::<Self>(offset);
7718            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
7719                None => return Err(fidl::Error::NotNullable),
7720                Some(len) => len,
7721            };
7722            // Calling decoder.out_of_line_offset(0) is not allowed.
7723            if len == 0 {
7724                return Ok(());
7725            };
7726            depth.increment()?;
7727            let envelope_size = 8;
7728            let bytes_len = len * envelope_size;
7729            let offset = decoder.out_of_line_offset(bytes_len)?;
7730            // Decode the envelope for each type.
7731            let mut _next_ordinal_to_read = 0;
7732            let mut next_offset = offset;
7733            let end_offset = offset + bytes_len;
7734            _next_ordinal_to_read += 1;
7735            if next_offset >= end_offset {
7736                return Ok(());
7737            }
7738
7739            // Decode unknown envelopes for gaps in ordinals.
7740            while _next_ordinal_to_read < 1 {
7741                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7742                _next_ordinal_to_read += 1;
7743                next_offset += envelope_size;
7744            }
7745
7746            let next_out_of_line = decoder.next_out_of_line();
7747            let handles_before = decoder.remaining_handles();
7748            if let Some((inlined, num_bytes, num_handles)) =
7749                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7750            {
7751                let member_inline_size =
7752                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7753                if inlined != (member_inline_size <= 4) {
7754                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7755                }
7756                let inner_offset;
7757                let mut inner_depth = depth.clone();
7758                if inlined {
7759                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7760                    inner_offset = next_offset;
7761                } else {
7762                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7763                    inner_depth.increment()?;
7764                }
7765                let val_ref = self.success_response.get_or_insert_with(|| fidl::new_empty!(u32, D));
7766                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
7767                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7768                {
7769                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7770                }
7771                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7772                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7773                }
7774            }
7775
7776            next_offset += envelope_size;
7777            _next_ordinal_to_read += 1;
7778            if next_offset >= end_offset {
7779                return Ok(());
7780            }
7781
7782            // Decode unknown envelopes for gaps in ordinals.
7783            while _next_ordinal_to_read < 2 {
7784                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7785                _next_ordinal_to_read += 1;
7786                next_offset += envelope_size;
7787            }
7788
7789            let next_out_of_line = decoder.next_out_of_line();
7790            let handles_before = decoder.remaining_handles();
7791            if let Some((inlined, num_bytes, num_handles)) =
7792                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7793            {
7794                let member_inline_size =
7795                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7796                if inlined != (member_inline_size <= 4) {
7797                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7798                }
7799                let inner_offset;
7800                let mut inner_depth = depth.clone();
7801                if inlined {
7802                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7803                    inner_offset = next_offset;
7804                } else {
7805                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7806                    inner_depth.increment()?;
7807                }
7808                let val_ref =
7809                    self.server_failure_response.get_or_insert_with(|| fidl::new_empty!(u32, D));
7810                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
7811                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7812                {
7813                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7814                }
7815                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7816                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7817                }
7818            }
7819
7820            next_offset += envelope_size;
7821            _next_ordinal_to_read += 1;
7822            if next_offset >= end_offset {
7823                return Ok(());
7824            }
7825
7826            // Decode unknown envelopes for gaps in ordinals.
7827            while _next_ordinal_to_read < 3 {
7828                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7829                _next_ordinal_to_read += 1;
7830                next_offset += envelope_size;
7831            }
7832
7833            let next_out_of_line = decoder.next_out_of_line();
7834            let handles_before = decoder.remaining_handles();
7835            if let Some((inlined, num_bytes, num_handles)) =
7836                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7837            {
7838                let member_inline_size =
7839                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7840                if inlined != (member_inline_size <= 4) {
7841                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7842                }
7843                let inner_offset;
7844                let mut inner_depth = depth.clone();
7845                if inlined {
7846                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7847                    inner_offset = next_offset;
7848                } else {
7849                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7850                    inner_depth.increment()?;
7851                }
7852                let val_ref =
7853                    self.format_error_response.get_or_insert_with(|| fidl::new_empty!(u32, D));
7854                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
7855                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7856                {
7857                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7858                }
7859                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7860                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7861                }
7862            }
7863
7864            next_offset += envelope_size;
7865            _next_ordinal_to_read += 1;
7866            if next_offset >= end_offset {
7867                return Ok(());
7868            }
7869
7870            // Decode unknown envelopes for gaps in ordinals.
7871            while _next_ordinal_to_read < 4 {
7872                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7873                _next_ordinal_to_read += 1;
7874                next_offset += envelope_size;
7875            }
7876
7877            let next_out_of_line = decoder.next_out_of_line();
7878            let handles_before = decoder.remaining_handles();
7879            if let Some((inlined, num_bytes, num_handles)) =
7880                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7881            {
7882                let member_inline_size =
7883                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7884                if inlined != (member_inline_size <= 4) {
7885                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7886                }
7887                let inner_offset;
7888                let mut inner_depth = depth.clone();
7889                if inlined {
7890                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7891                    inner_offset = next_offset;
7892                } else {
7893                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7894                    inner_depth.increment()?;
7895                }
7896                let val_ref =
7897                    self.name_error_response.get_or_insert_with(|| fidl::new_empty!(u32, D));
7898                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
7899                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7900                {
7901                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7902                }
7903                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7904                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7905                }
7906            }
7907
7908            next_offset += envelope_size;
7909            _next_ordinal_to_read += 1;
7910            if next_offset >= end_offset {
7911                return Ok(());
7912            }
7913
7914            // Decode unknown envelopes for gaps in ordinals.
7915            while _next_ordinal_to_read < 5 {
7916                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7917                _next_ordinal_to_read += 1;
7918                next_offset += envelope_size;
7919            }
7920
7921            let next_out_of_line = decoder.next_out_of_line();
7922            let handles_before = decoder.remaining_handles();
7923            if let Some((inlined, num_bytes, num_handles)) =
7924                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7925            {
7926                let member_inline_size =
7927                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7928                if inlined != (member_inline_size <= 4) {
7929                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7930                }
7931                let inner_offset;
7932                let mut inner_depth = depth.clone();
7933                if inlined {
7934                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7935                    inner_offset = next_offset;
7936                } else {
7937                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7938                    inner_depth.increment()?;
7939                }
7940                let val_ref =
7941                    self.not_implemented_response.get_or_insert_with(|| fidl::new_empty!(u32, D));
7942                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
7943                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7944                {
7945                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7946                }
7947                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7948                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7949                }
7950            }
7951
7952            next_offset += envelope_size;
7953            _next_ordinal_to_read += 1;
7954            if next_offset >= end_offset {
7955                return Ok(());
7956            }
7957
7958            // Decode unknown envelopes for gaps in ordinals.
7959            while _next_ordinal_to_read < 6 {
7960                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7961                _next_ordinal_to_read += 1;
7962                next_offset += envelope_size;
7963            }
7964
7965            let next_out_of_line = decoder.next_out_of_line();
7966            let handles_before = decoder.remaining_handles();
7967            if let Some((inlined, num_bytes, num_handles)) =
7968                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7969            {
7970                let member_inline_size =
7971                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7972                if inlined != (member_inline_size <= 4) {
7973                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7974                }
7975                let inner_offset;
7976                let mut inner_depth = depth.clone();
7977                if inlined {
7978                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7979                    inner_offset = next_offset;
7980                } else {
7981                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7982                    inner_depth.increment()?;
7983                }
7984                let val_ref = self.other_response.get_or_insert_with(|| fidl::new_empty!(u32, D));
7985                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
7986                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7987                {
7988                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7989                }
7990                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7991                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7992                }
7993            }
7994
7995            next_offset += envelope_size;
7996            _next_ordinal_to_read += 1;
7997            if next_offset >= end_offset {
7998                return Ok(());
7999            }
8000
8001            // Decode unknown envelopes for gaps in ordinals.
8002            while _next_ordinal_to_read < 7 {
8003                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8004                _next_ordinal_to_read += 1;
8005                next_offset += envelope_size;
8006            }
8007
8008            let next_out_of_line = decoder.next_out_of_line();
8009            let handles_before = decoder.remaining_handles();
8010            if let Some((inlined, num_bytes, num_handles)) =
8011                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8012            {
8013                let member_inline_size =
8014                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
8015                if inlined != (member_inline_size <= 4) {
8016                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8017                }
8018                let inner_offset;
8019                let mut inner_depth = depth.clone();
8020                if inlined {
8021                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8022                    inner_offset = next_offset;
8023                } else {
8024                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8025                    inner_depth.increment()?;
8026                }
8027                let val_ref = self.resolved_by_srp.get_or_insert_with(|| fidl::new_empty!(u32, D));
8028                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
8029                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8030                {
8031                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8032                }
8033                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8034                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8035                }
8036            }
8037
8038            next_offset += envelope_size;
8039            _next_ordinal_to_read += 1;
8040            if next_offset >= end_offset {
8041                return Ok(());
8042            }
8043
8044            // Decode unknown envelopes for gaps in ordinals.
8045            while _next_ordinal_to_read < 8 {
8046                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8047                _next_ordinal_to_read += 1;
8048                next_offset += envelope_size;
8049            }
8050
8051            let next_out_of_line = decoder.next_out_of_line();
8052            let handles_before = decoder.remaining_handles();
8053            if let Some((inlined, num_bytes, num_handles)) =
8054                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8055            {
8056                let member_inline_size =
8057                    <UpstreamDnsCounters as fidl::encoding::TypeMarker>::inline_size(
8058                        decoder.context,
8059                    );
8060                if inlined != (member_inline_size <= 4) {
8061                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8062                }
8063                let inner_offset;
8064                let mut inner_depth = depth.clone();
8065                if inlined {
8066                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8067                    inner_offset = next_offset;
8068                } else {
8069                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8070                    inner_depth.increment()?;
8071                }
8072                let val_ref = self
8073                    .upstream_dns_counters
8074                    .get_or_insert_with(|| fidl::new_empty!(UpstreamDnsCounters, D));
8075                fidl::decode!(UpstreamDnsCounters, D, val_ref, decoder, inner_offset, inner_depth)?;
8076                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8077                {
8078                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8079                }
8080                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8081                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8082                }
8083            }
8084
8085            next_offset += envelope_size;
8086
8087            // Decode the remaining unknown envelopes.
8088            while next_offset < end_offset {
8089                _next_ordinal_to_read += 1;
8090                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8091                next_offset += envelope_size;
8092            }
8093
8094            Ok(())
8095        }
8096    }
8097
8098    impl ExternalRoute {
8099        #[inline(always)]
8100        fn max_ordinal_present(&self) -> u64 {
8101            if let Some(_) = self.stable {
8102                return 3;
8103            }
8104            if let Some(_) = self.route_preference {
8105                return 2;
8106            }
8107            if let Some(_) = self.subnet {
8108                return 1;
8109            }
8110            0
8111        }
8112    }
8113
8114    impl fidl::encoding::ValueTypeMarker for ExternalRoute {
8115        type Borrowed<'a> = &'a Self;
8116        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
8117            value
8118        }
8119    }
8120
8121    unsafe impl fidl::encoding::TypeMarker for ExternalRoute {
8122        type Owned = Self;
8123
8124        #[inline(always)]
8125        fn inline_align(_context: fidl::encoding::Context) -> usize {
8126            8
8127        }
8128
8129        #[inline(always)]
8130        fn inline_size(_context: fidl::encoding::Context) -> usize {
8131            16
8132        }
8133    }
8134
8135    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<ExternalRoute, D>
8136        for &ExternalRoute
8137    {
8138        unsafe fn encode(
8139            self,
8140            encoder: &mut fidl::encoding::Encoder<'_, D>,
8141            offset: usize,
8142            mut depth: fidl::encoding::Depth,
8143        ) -> fidl::Result<()> {
8144            encoder.debug_check_bounds::<ExternalRoute>(offset);
8145            // Vector header
8146            let max_ordinal: u64 = self.max_ordinal_present();
8147            encoder.write_num(max_ordinal, offset);
8148            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
8149            // Calling encoder.out_of_line_offset(0) is not allowed.
8150            if max_ordinal == 0 {
8151                return Ok(());
8152            }
8153            depth.increment()?;
8154            let envelope_size = 8;
8155            let bytes_len = max_ordinal as usize * envelope_size;
8156            #[allow(unused_variables)]
8157            let offset = encoder.out_of_line_offset(bytes_len);
8158            let mut _prev_end_offset: usize = 0;
8159            if 1 > max_ordinal {
8160                return Ok(());
8161            }
8162
8163            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8164            // are envelope_size bytes.
8165            let cur_offset: usize = (1 - 1) * envelope_size;
8166
8167            // Zero reserved fields.
8168            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8169
8170            // Safety:
8171            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8172            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8173            //   envelope_size bytes, there is always sufficient room.
8174            fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_net__common::Ipv6AddressWithPrefix, D>(
8175            self.subnet.as_ref().map(<fidl_fuchsia_net__common::Ipv6AddressWithPrefix as fidl::encoding::ValueTypeMarker>::borrow),
8176            encoder, offset + cur_offset, depth
8177        )?;
8178
8179            _prev_end_offset = cur_offset + envelope_size;
8180            if 2 > max_ordinal {
8181                return Ok(());
8182            }
8183
8184            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8185            // are envelope_size bytes.
8186            let cur_offset: usize = (2 - 1) * envelope_size;
8187
8188            // Zero reserved fields.
8189            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8190
8191            // Safety:
8192            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8193            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8194            //   envelope_size bytes, there is always sufficient room.
8195            fidl::encoding::encode_in_envelope_optional::<RoutePreference, D>(
8196                self.route_preference
8197                    .as_ref()
8198                    .map(<RoutePreference as fidl::encoding::ValueTypeMarker>::borrow),
8199                encoder,
8200                offset + cur_offset,
8201                depth,
8202            )?;
8203
8204            _prev_end_offset = cur_offset + envelope_size;
8205            if 3 > max_ordinal {
8206                return Ok(());
8207            }
8208
8209            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8210            // are envelope_size bytes.
8211            let cur_offset: usize = (3 - 1) * envelope_size;
8212
8213            // Zero reserved fields.
8214            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8215
8216            // Safety:
8217            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8218            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8219            //   envelope_size bytes, there is always sufficient room.
8220            fidl::encoding::encode_in_envelope_optional::<bool, D>(
8221                self.stable.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
8222                encoder,
8223                offset + cur_offset,
8224                depth,
8225            )?;
8226
8227            _prev_end_offset = cur_offset + envelope_size;
8228
8229            Ok(())
8230        }
8231    }
8232
8233    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ExternalRoute {
8234        #[inline(always)]
8235        fn new_empty() -> Self {
8236            Self::default()
8237        }
8238
8239        unsafe fn decode(
8240            &mut self,
8241            decoder: &mut fidl::encoding::Decoder<'_, D>,
8242            offset: usize,
8243            mut depth: fidl::encoding::Depth,
8244        ) -> fidl::Result<()> {
8245            decoder.debug_check_bounds::<Self>(offset);
8246            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
8247                None => return Err(fidl::Error::NotNullable),
8248                Some(len) => len,
8249            };
8250            // Calling decoder.out_of_line_offset(0) is not allowed.
8251            if len == 0 {
8252                return Ok(());
8253            };
8254            depth.increment()?;
8255            let envelope_size = 8;
8256            let bytes_len = len * envelope_size;
8257            let offset = decoder.out_of_line_offset(bytes_len)?;
8258            // Decode the envelope for each type.
8259            let mut _next_ordinal_to_read = 0;
8260            let mut next_offset = offset;
8261            let end_offset = offset + bytes_len;
8262            _next_ordinal_to_read += 1;
8263            if next_offset >= end_offset {
8264                return Ok(());
8265            }
8266
8267            // Decode unknown envelopes for gaps in ordinals.
8268            while _next_ordinal_to_read < 1 {
8269                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8270                _next_ordinal_to_read += 1;
8271                next_offset += envelope_size;
8272            }
8273
8274            let next_out_of_line = decoder.next_out_of_line();
8275            let handles_before = decoder.remaining_handles();
8276            if let Some((inlined, num_bytes, num_handles)) =
8277                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8278            {
8279                let member_inline_size = <fidl_fuchsia_net__common::Ipv6AddressWithPrefix as fidl::encoding::TypeMarker>::inline_size(decoder.context);
8280                if inlined != (member_inline_size <= 4) {
8281                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8282                }
8283                let inner_offset;
8284                let mut inner_depth = depth.clone();
8285                if inlined {
8286                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8287                    inner_offset = next_offset;
8288                } else {
8289                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8290                    inner_depth.increment()?;
8291                }
8292                let val_ref = self.subnet.get_or_insert_with(|| {
8293                    fidl::new_empty!(fidl_fuchsia_net__common::Ipv6AddressWithPrefix, D)
8294                });
8295                fidl::decode!(
8296                    fidl_fuchsia_net__common::Ipv6AddressWithPrefix,
8297                    D,
8298                    val_ref,
8299                    decoder,
8300                    inner_offset,
8301                    inner_depth
8302                )?;
8303                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8304                {
8305                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8306                }
8307                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8308                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8309                }
8310            }
8311
8312            next_offset += envelope_size;
8313            _next_ordinal_to_read += 1;
8314            if next_offset >= end_offset {
8315                return Ok(());
8316            }
8317
8318            // Decode unknown envelopes for gaps in ordinals.
8319            while _next_ordinal_to_read < 2 {
8320                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8321                _next_ordinal_to_read += 1;
8322                next_offset += envelope_size;
8323            }
8324
8325            let next_out_of_line = decoder.next_out_of_line();
8326            let handles_before = decoder.remaining_handles();
8327            if let Some((inlined, num_bytes, num_handles)) =
8328                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8329            {
8330                let member_inline_size =
8331                    <RoutePreference as fidl::encoding::TypeMarker>::inline_size(decoder.context);
8332                if inlined != (member_inline_size <= 4) {
8333                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8334                }
8335                let inner_offset;
8336                let mut inner_depth = depth.clone();
8337                if inlined {
8338                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8339                    inner_offset = next_offset;
8340                } else {
8341                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8342                    inner_depth.increment()?;
8343                }
8344                let val_ref = self
8345                    .route_preference
8346                    .get_or_insert_with(|| fidl::new_empty!(RoutePreference, D));
8347                fidl::decode!(RoutePreference, D, val_ref, decoder, inner_offset, inner_depth)?;
8348                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8349                {
8350                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8351                }
8352                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8353                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8354                }
8355            }
8356
8357            next_offset += envelope_size;
8358            _next_ordinal_to_read += 1;
8359            if next_offset >= end_offset {
8360                return Ok(());
8361            }
8362
8363            // Decode unknown envelopes for gaps in ordinals.
8364            while _next_ordinal_to_read < 3 {
8365                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8366                _next_ordinal_to_read += 1;
8367                next_offset += envelope_size;
8368            }
8369
8370            let next_out_of_line = decoder.next_out_of_line();
8371            let handles_before = decoder.remaining_handles();
8372            if let Some((inlined, num_bytes, num_handles)) =
8373                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8374            {
8375                let member_inline_size =
8376                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
8377                if inlined != (member_inline_size <= 4) {
8378                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8379                }
8380                let inner_offset;
8381                let mut inner_depth = depth.clone();
8382                if inlined {
8383                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8384                    inner_offset = next_offset;
8385                } else {
8386                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8387                    inner_depth.increment()?;
8388                }
8389                let val_ref = self.stable.get_or_insert_with(|| fidl::new_empty!(bool, D));
8390                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
8391                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8392                {
8393                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8394                }
8395                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8396                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8397                }
8398            }
8399
8400            next_offset += envelope_size;
8401
8402            // Decode the remaining unknown envelopes.
8403            while next_offset < end_offset {
8404                _next_ordinal_to_read += 1;
8405                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8406                next_offset += envelope_size;
8407            }
8408
8409            Ok(())
8410        }
8411    }
8412
8413    impl JoinerCommissioningParams {
8414        #[inline(always)]
8415        fn max_ordinal_present(&self) -> u64 {
8416            if let Some(_) = self.vendor_data_string {
8417                return 6;
8418            }
8419            if let Some(_) = self.vendor_sw_version {
8420                return 5;
8421            }
8422            if let Some(_) = self.vendor_model {
8423                return 4;
8424            }
8425            if let Some(_) = self.vendor_name {
8426                return 3;
8427            }
8428            if let Some(_) = self.provisioning_url {
8429                return 2;
8430            }
8431            if let Some(_) = self.pskd {
8432                return 1;
8433            }
8434            0
8435        }
8436    }
8437
8438    impl fidl::encoding::ValueTypeMarker for JoinerCommissioningParams {
8439        type Borrowed<'a> = &'a Self;
8440        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
8441            value
8442        }
8443    }
8444
8445    unsafe impl fidl::encoding::TypeMarker for JoinerCommissioningParams {
8446        type Owned = Self;
8447
8448        #[inline(always)]
8449        fn inline_align(_context: fidl::encoding::Context) -> usize {
8450            8
8451        }
8452
8453        #[inline(always)]
8454        fn inline_size(_context: fidl::encoding::Context) -> usize {
8455            16
8456        }
8457    }
8458
8459    unsafe impl<D: fidl::encoding::ResourceDialect>
8460        fidl::encoding::Encode<JoinerCommissioningParams, D> for &JoinerCommissioningParams
8461    {
8462        unsafe fn encode(
8463            self,
8464            encoder: &mut fidl::encoding::Encoder<'_, D>,
8465            offset: usize,
8466            mut depth: fidl::encoding::Depth,
8467        ) -> fidl::Result<()> {
8468            encoder.debug_check_bounds::<JoinerCommissioningParams>(offset);
8469            // Vector header
8470            let max_ordinal: u64 = self.max_ordinal_present();
8471            encoder.write_num(max_ordinal, offset);
8472            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
8473            // Calling encoder.out_of_line_offset(0) is not allowed.
8474            if max_ordinal == 0 {
8475                return Ok(());
8476            }
8477            depth.increment()?;
8478            let envelope_size = 8;
8479            let bytes_len = max_ordinal as usize * envelope_size;
8480            #[allow(unused_variables)]
8481            let offset = encoder.out_of_line_offset(bytes_len);
8482            let mut _prev_end_offset: usize = 0;
8483            if 1 > max_ordinal {
8484                return Ok(());
8485            }
8486
8487            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8488            // are envelope_size bytes.
8489            let cur_offset: usize = (1 - 1) * envelope_size;
8490
8491            // Zero reserved fields.
8492            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8493
8494            // Safety:
8495            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8496            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8497            //   envelope_size bytes, there is always sufficient room.
8498            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<32>, D>(
8499                self.pskd.as_ref().map(
8500                    <fidl::encoding::BoundedString<32> as fidl::encoding::ValueTypeMarker>::borrow,
8501                ),
8502                encoder,
8503                offset + cur_offset,
8504                depth,
8505            )?;
8506
8507            _prev_end_offset = cur_offset + envelope_size;
8508            if 2 > max_ordinal {
8509                return Ok(());
8510            }
8511
8512            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8513            // are envelope_size bytes.
8514            let cur_offset: usize = (2 - 1) * envelope_size;
8515
8516            // Zero reserved fields.
8517            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8518
8519            // Safety:
8520            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8521            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8522            //   envelope_size bytes, there is always sufficient room.
8523            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<64>, D>(
8524                self.provisioning_url.as_ref().map(
8525                    <fidl::encoding::BoundedString<64> as fidl::encoding::ValueTypeMarker>::borrow,
8526                ),
8527                encoder,
8528                offset + cur_offset,
8529                depth,
8530            )?;
8531
8532            _prev_end_offset = cur_offset + envelope_size;
8533            if 3 > max_ordinal {
8534                return Ok(());
8535            }
8536
8537            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8538            // are envelope_size bytes.
8539            let cur_offset: usize = (3 - 1) * envelope_size;
8540
8541            // Zero reserved fields.
8542            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8543
8544            // Safety:
8545            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8546            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8547            //   envelope_size bytes, there is always sufficient room.
8548            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<32>, D>(
8549                self.vendor_name.as_ref().map(
8550                    <fidl::encoding::BoundedString<32> as fidl::encoding::ValueTypeMarker>::borrow,
8551                ),
8552                encoder,
8553                offset + cur_offset,
8554                depth,
8555            )?;
8556
8557            _prev_end_offset = cur_offset + envelope_size;
8558            if 4 > max_ordinal {
8559                return Ok(());
8560            }
8561
8562            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8563            // are envelope_size bytes.
8564            let cur_offset: usize = (4 - 1) * envelope_size;
8565
8566            // Zero reserved fields.
8567            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8568
8569            // Safety:
8570            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8571            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8572            //   envelope_size bytes, there is always sufficient room.
8573            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<32>, D>(
8574                self.vendor_model.as_ref().map(
8575                    <fidl::encoding::BoundedString<32> as fidl::encoding::ValueTypeMarker>::borrow,
8576                ),
8577                encoder,
8578                offset + cur_offset,
8579                depth,
8580            )?;
8581
8582            _prev_end_offset = cur_offset + envelope_size;
8583            if 5 > max_ordinal {
8584                return Ok(());
8585            }
8586
8587            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8588            // are envelope_size bytes.
8589            let cur_offset: usize = (5 - 1) * envelope_size;
8590
8591            // Zero reserved fields.
8592            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8593
8594            // Safety:
8595            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8596            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8597            //   envelope_size bytes, there is always sufficient room.
8598            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<16>, D>(
8599                self.vendor_sw_version.as_ref().map(
8600                    <fidl::encoding::BoundedString<16> as fidl::encoding::ValueTypeMarker>::borrow,
8601                ),
8602                encoder,
8603                offset + cur_offset,
8604                depth,
8605            )?;
8606
8607            _prev_end_offset = cur_offset + envelope_size;
8608            if 6 > max_ordinal {
8609                return Ok(());
8610            }
8611
8612            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8613            // are envelope_size bytes.
8614            let cur_offset: usize = (6 - 1) * envelope_size;
8615
8616            // Zero reserved fields.
8617            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8618
8619            // Safety:
8620            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8621            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8622            //   envelope_size bytes, there is always sufficient room.
8623            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<64>, D>(
8624                self.vendor_data_string.as_ref().map(
8625                    <fidl::encoding::BoundedString<64> as fidl::encoding::ValueTypeMarker>::borrow,
8626                ),
8627                encoder,
8628                offset + cur_offset,
8629                depth,
8630            )?;
8631
8632            _prev_end_offset = cur_offset + envelope_size;
8633
8634            Ok(())
8635        }
8636    }
8637
8638    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
8639        for JoinerCommissioningParams
8640    {
8641        #[inline(always)]
8642        fn new_empty() -> Self {
8643            Self::default()
8644        }
8645
8646        unsafe fn decode(
8647            &mut self,
8648            decoder: &mut fidl::encoding::Decoder<'_, D>,
8649            offset: usize,
8650            mut depth: fidl::encoding::Depth,
8651        ) -> fidl::Result<()> {
8652            decoder.debug_check_bounds::<Self>(offset);
8653            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
8654                None => return Err(fidl::Error::NotNullable),
8655                Some(len) => len,
8656            };
8657            // Calling decoder.out_of_line_offset(0) is not allowed.
8658            if len == 0 {
8659                return Ok(());
8660            };
8661            depth.increment()?;
8662            let envelope_size = 8;
8663            let bytes_len = len * envelope_size;
8664            let offset = decoder.out_of_line_offset(bytes_len)?;
8665            // Decode the envelope for each type.
8666            let mut _next_ordinal_to_read = 0;
8667            let mut next_offset = offset;
8668            let end_offset = offset + bytes_len;
8669            _next_ordinal_to_read += 1;
8670            if next_offset >= end_offset {
8671                return Ok(());
8672            }
8673
8674            // Decode unknown envelopes for gaps in ordinals.
8675            while _next_ordinal_to_read < 1 {
8676                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8677                _next_ordinal_to_read += 1;
8678                next_offset += envelope_size;
8679            }
8680
8681            let next_out_of_line = decoder.next_out_of_line();
8682            let handles_before = decoder.remaining_handles();
8683            if let Some((inlined, num_bytes, num_handles)) =
8684                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8685            {
8686                let member_inline_size =
8687                    <fidl::encoding::BoundedString<32> as fidl::encoding::TypeMarker>::inline_size(
8688                        decoder.context,
8689                    );
8690                if inlined != (member_inline_size <= 4) {
8691                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8692                }
8693                let inner_offset;
8694                let mut inner_depth = depth.clone();
8695                if inlined {
8696                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8697                    inner_offset = next_offset;
8698                } else {
8699                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8700                    inner_depth.increment()?;
8701                }
8702                let val_ref = self
8703                    .pskd
8704                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<32>, D));
8705                fidl::decode!(
8706                    fidl::encoding::BoundedString<32>,
8707                    D,
8708                    val_ref,
8709                    decoder,
8710                    inner_offset,
8711                    inner_depth
8712                )?;
8713                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8714                {
8715                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8716                }
8717                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8718                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8719                }
8720            }
8721
8722            next_offset += envelope_size;
8723            _next_ordinal_to_read += 1;
8724            if next_offset >= end_offset {
8725                return Ok(());
8726            }
8727
8728            // Decode unknown envelopes for gaps in ordinals.
8729            while _next_ordinal_to_read < 2 {
8730                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8731                _next_ordinal_to_read += 1;
8732                next_offset += envelope_size;
8733            }
8734
8735            let next_out_of_line = decoder.next_out_of_line();
8736            let handles_before = decoder.remaining_handles();
8737            if let Some((inlined, num_bytes, num_handles)) =
8738                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8739            {
8740                let member_inline_size =
8741                    <fidl::encoding::BoundedString<64> as fidl::encoding::TypeMarker>::inline_size(
8742                        decoder.context,
8743                    );
8744                if inlined != (member_inline_size <= 4) {
8745                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8746                }
8747                let inner_offset;
8748                let mut inner_depth = depth.clone();
8749                if inlined {
8750                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8751                    inner_offset = next_offset;
8752                } else {
8753                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8754                    inner_depth.increment()?;
8755                }
8756                let val_ref = self
8757                    .provisioning_url
8758                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<64>, D));
8759                fidl::decode!(
8760                    fidl::encoding::BoundedString<64>,
8761                    D,
8762                    val_ref,
8763                    decoder,
8764                    inner_offset,
8765                    inner_depth
8766                )?;
8767                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8768                {
8769                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8770                }
8771                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8772                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8773                }
8774            }
8775
8776            next_offset += envelope_size;
8777            _next_ordinal_to_read += 1;
8778            if next_offset >= end_offset {
8779                return Ok(());
8780            }
8781
8782            // Decode unknown envelopes for gaps in ordinals.
8783            while _next_ordinal_to_read < 3 {
8784                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8785                _next_ordinal_to_read += 1;
8786                next_offset += envelope_size;
8787            }
8788
8789            let next_out_of_line = decoder.next_out_of_line();
8790            let handles_before = decoder.remaining_handles();
8791            if let Some((inlined, num_bytes, num_handles)) =
8792                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8793            {
8794                let member_inline_size =
8795                    <fidl::encoding::BoundedString<32> as fidl::encoding::TypeMarker>::inline_size(
8796                        decoder.context,
8797                    );
8798                if inlined != (member_inline_size <= 4) {
8799                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8800                }
8801                let inner_offset;
8802                let mut inner_depth = depth.clone();
8803                if inlined {
8804                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8805                    inner_offset = next_offset;
8806                } else {
8807                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8808                    inner_depth.increment()?;
8809                }
8810                let val_ref = self
8811                    .vendor_name
8812                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<32>, D));
8813                fidl::decode!(
8814                    fidl::encoding::BoundedString<32>,
8815                    D,
8816                    val_ref,
8817                    decoder,
8818                    inner_offset,
8819                    inner_depth
8820                )?;
8821                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8822                {
8823                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8824                }
8825                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8826                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8827                }
8828            }
8829
8830            next_offset += envelope_size;
8831            _next_ordinal_to_read += 1;
8832            if next_offset >= end_offset {
8833                return Ok(());
8834            }
8835
8836            // Decode unknown envelopes for gaps in ordinals.
8837            while _next_ordinal_to_read < 4 {
8838                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8839                _next_ordinal_to_read += 1;
8840                next_offset += envelope_size;
8841            }
8842
8843            let next_out_of_line = decoder.next_out_of_line();
8844            let handles_before = decoder.remaining_handles();
8845            if let Some((inlined, num_bytes, num_handles)) =
8846                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8847            {
8848                let member_inline_size =
8849                    <fidl::encoding::BoundedString<32> as fidl::encoding::TypeMarker>::inline_size(
8850                        decoder.context,
8851                    );
8852                if inlined != (member_inline_size <= 4) {
8853                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8854                }
8855                let inner_offset;
8856                let mut inner_depth = depth.clone();
8857                if inlined {
8858                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8859                    inner_offset = next_offset;
8860                } else {
8861                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8862                    inner_depth.increment()?;
8863                }
8864                let val_ref = self
8865                    .vendor_model
8866                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<32>, D));
8867                fidl::decode!(
8868                    fidl::encoding::BoundedString<32>,
8869                    D,
8870                    val_ref,
8871                    decoder,
8872                    inner_offset,
8873                    inner_depth
8874                )?;
8875                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8876                {
8877                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8878                }
8879                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8880                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8881                }
8882            }
8883
8884            next_offset += envelope_size;
8885            _next_ordinal_to_read += 1;
8886            if next_offset >= end_offset {
8887                return Ok(());
8888            }
8889
8890            // Decode unknown envelopes for gaps in ordinals.
8891            while _next_ordinal_to_read < 5 {
8892                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8893                _next_ordinal_to_read += 1;
8894                next_offset += envelope_size;
8895            }
8896
8897            let next_out_of_line = decoder.next_out_of_line();
8898            let handles_before = decoder.remaining_handles();
8899            if let Some((inlined, num_bytes, num_handles)) =
8900                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8901            {
8902                let member_inline_size =
8903                    <fidl::encoding::BoundedString<16> as fidl::encoding::TypeMarker>::inline_size(
8904                        decoder.context,
8905                    );
8906                if inlined != (member_inline_size <= 4) {
8907                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8908                }
8909                let inner_offset;
8910                let mut inner_depth = depth.clone();
8911                if inlined {
8912                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8913                    inner_offset = next_offset;
8914                } else {
8915                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8916                    inner_depth.increment()?;
8917                }
8918                let val_ref = self
8919                    .vendor_sw_version
8920                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<16>, D));
8921                fidl::decode!(
8922                    fidl::encoding::BoundedString<16>,
8923                    D,
8924                    val_ref,
8925                    decoder,
8926                    inner_offset,
8927                    inner_depth
8928                )?;
8929                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8930                {
8931                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8932                }
8933                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8934                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8935                }
8936            }
8937
8938            next_offset += envelope_size;
8939            _next_ordinal_to_read += 1;
8940            if next_offset >= end_offset {
8941                return Ok(());
8942            }
8943
8944            // Decode unknown envelopes for gaps in ordinals.
8945            while _next_ordinal_to_read < 6 {
8946                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8947                _next_ordinal_to_read += 1;
8948                next_offset += envelope_size;
8949            }
8950
8951            let next_out_of_line = decoder.next_out_of_line();
8952            let handles_before = decoder.remaining_handles();
8953            if let Some((inlined, num_bytes, num_handles)) =
8954                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8955            {
8956                let member_inline_size =
8957                    <fidl::encoding::BoundedString<64> as fidl::encoding::TypeMarker>::inline_size(
8958                        decoder.context,
8959                    );
8960                if inlined != (member_inline_size <= 4) {
8961                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8962                }
8963                let inner_offset;
8964                let mut inner_depth = depth.clone();
8965                if inlined {
8966                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8967                    inner_offset = next_offset;
8968                } else {
8969                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8970                    inner_depth.increment()?;
8971                }
8972                let val_ref = self
8973                    .vendor_data_string
8974                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<64>, D));
8975                fidl::decode!(
8976                    fidl::encoding::BoundedString<64>,
8977                    D,
8978                    val_ref,
8979                    decoder,
8980                    inner_offset,
8981                    inner_depth
8982                )?;
8983                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8984                {
8985                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8986                }
8987                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8988                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8989                }
8990            }
8991
8992            next_offset += envelope_size;
8993
8994            // Decode the remaining unknown envelopes.
8995            while next_offset < end_offset {
8996                _next_ordinal_to_read += 1;
8997                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8998                next_offset += envelope_size;
8999            }
9000
9001            Ok(())
9002        }
9003    }
9004
9005    impl LeaderData {
9006        #[inline(always)]
9007        fn max_ordinal_present(&self) -> u64 {
9008            if let Some(_) = self.router_id {
9009                return 5;
9010            }
9011            if let Some(_) = self.stable_network_data_version {
9012                return 4;
9013            }
9014            if let Some(_) = self.network_data_version {
9015                return 3;
9016            }
9017            if let Some(_) = self.weight {
9018                return 2;
9019            }
9020            if let Some(_) = self.partition_id {
9021                return 1;
9022            }
9023            0
9024        }
9025    }
9026
9027    impl fidl::encoding::ValueTypeMarker for LeaderData {
9028        type Borrowed<'a> = &'a Self;
9029        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
9030            value
9031        }
9032    }
9033
9034    unsafe impl fidl::encoding::TypeMarker for LeaderData {
9035        type Owned = Self;
9036
9037        #[inline(always)]
9038        fn inline_align(_context: fidl::encoding::Context) -> usize {
9039            8
9040        }
9041
9042        #[inline(always)]
9043        fn inline_size(_context: fidl::encoding::Context) -> usize {
9044            16
9045        }
9046    }
9047
9048    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<LeaderData, D>
9049        for &LeaderData
9050    {
9051        unsafe fn encode(
9052            self,
9053            encoder: &mut fidl::encoding::Encoder<'_, D>,
9054            offset: usize,
9055            mut depth: fidl::encoding::Depth,
9056        ) -> fidl::Result<()> {
9057            encoder.debug_check_bounds::<LeaderData>(offset);
9058            // Vector header
9059            let max_ordinal: u64 = self.max_ordinal_present();
9060            encoder.write_num(max_ordinal, offset);
9061            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
9062            // Calling encoder.out_of_line_offset(0) is not allowed.
9063            if max_ordinal == 0 {
9064                return Ok(());
9065            }
9066            depth.increment()?;
9067            let envelope_size = 8;
9068            let bytes_len = max_ordinal as usize * envelope_size;
9069            #[allow(unused_variables)]
9070            let offset = encoder.out_of_line_offset(bytes_len);
9071            let mut _prev_end_offset: usize = 0;
9072            if 1 > max_ordinal {
9073                return Ok(());
9074            }
9075
9076            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9077            // are envelope_size bytes.
9078            let cur_offset: usize = (1 - 1) * envelope_size;
9079
9080            // Zero reserved fields.
9081            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9082
9083            // Safety:
9084            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9085            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9086            //   envelope_size bytes, there is always sufficient room.
9087            fidl::encoding::encode_in_envelope_optional::<u32, D>(
9088                self.partition_id.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
9089                encoder,
9090                offset + cur_offset,
9091                depth,
9092            )?;
9093
9094            _prev_end_offset = cur_offset + envelope_size;
9095            if 2 > max_ordinal {
9096                return Ok(());
9097            }
9098
9099            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9100            // are envelope_size bytes.
9101            let cur_offset: usize = (2 - 1) * envelope_size;
9102
9103            // Zero reserved fields.
9104            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9105
9106            // Safety:
9107            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9108            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9109            //   envelope_size bytes, there is always sufficient room.
9110            fidl::encoding::encode_in_envelope_optional::<u8, D>(
9111                self.weight.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
9112                encoder,
9113                offset + cur_offset,
9114                depth,
9115            )?;
9116
9117            _prev_end_offset = cur_offset + envelope_size;
9118            if 3 > max_ordinal {
9119                return Ok(());
9120            }
9121
9122            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9123            // are envelope_size bytes.
9124            let cur_offset: usize = (3 - 1) * envelope_size;
9125
9126            // Zero reserved fields.
9127            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9128
9129            // Safety:
9130            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9131            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9132            //   envelope_size bytes, there is always sufficient room.
9133            fidl::encoding::encode_in_envelope_optional::<u8, D>(
9134                self.network_data_version
9135                    .as_ref()
9136                    .map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
9137                encoder,
9138                offset + cur_offset,
9139                depth,
9140            )?;
9141
9142            _prev_end_offset = cur_offset + envelope_size;
9143            if 4 > max_ordinal {
9144                return Ok(());
9145            }
9146
9147            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9148            // are envelope_size bytes.
9149            let cur_offset: usize = (4 - 1) * envelope_size;
9150
9151            // Zero reserved fields.
9152            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9153
9154            // Safety:
9155            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9156            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9157            //   envelope_size bytes, there is always sufficient room.
9158            fidl::encoding::encode_in_envelope_optional::<u8, D>(
9159                self.stable_network_data_version
9160                    .as_ref()
9161                    .map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
9162                encoder,
9163                offset + cur_offset,
9164                depth,
9165            )?;
9166
9167            _prev_end_offset = cur_offset + envelope_size;
9168            if 5 > max_ordinal {
9169                return Ok(());
9170            }
9171
9172            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9173            // are envelope_size bytes.
9174            let cur_offset: usize = (5 - 1) * envelope_size;
9175
9176            // Zero reserved fields.
9177            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9178
9179            // Safety:
9180            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9181            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9182            //   envelope_size bytes, there is always sufficient room.
9183            fidl::encoding::encode_in_envelope_optional::<u8, D>(
9184                self.router_id.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
9185                encoder,
9186                offset + cur_offset,
9187                depth,
9188            )?;
9189
9190            _prev_end_offset = cur_offset + envelope_size;
9191
9192            Ok(())
9193        }
9194    }
9195
9196    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for LeaderData {
9197        #[inline(always)]
9198        fn new_empty() -> Self {
9199            Self::default()
9200        }
9201
9202        unsafe fn decode(
9203            &mut self,
9204            decoder: &mut fidl::encoding::Decoder<'_, D>,
9205            offset: usize,
9206            mut depth: fidl::encoding::Depth,
9207        ) -> fidl::Result<()> {
9208            decoder.debug_check_bounds::<Self>(offset);
9209            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
9210                None => return Err(fidl::Error::NotNullable),
9211                Some(len) => len,
9212            };
9213            // Calling decoder.out_of_line_offset(0) is not allowed.
9214            if len == 0 {
9215                return Ok(());
9216            };
9217            depth.increment()?;
9218            let envelope_size = 8;
9219            let bytes_len = len * envelope_size;
9220            let offset = decoder.out_of_line_offset(bytes_len)?;
9221            // Decode the envelope for each type.
9222            let mut _next_ordinal_to_read = 0;
9223            let mut next_offset = offset;
9224            let end_offset = offset + bytes_len;
9225            _next_ordinal_to_read += 1;
9226            if next_offset >= end_offset {
9227                return Ok(());
9228            }
9229
9230            // Decode unknown envelopes for gaps in ordinals.
9231            while _next_ordinal_to_read < 1 {
9232                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9233                _next_ordinal_to_read += 1;
9234                next_offset += envelope_size;
9235            }
9236
9237            let next_out_of_line = decoder.next_out_of_line();
9238            let handles_before = decoder.remaining_handles();
9239            if let Some((inlined, num_bytes, num_handles)) =
9240                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9241            {
9242                let member_inline_size =
9243                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
9244                if inlined != (member_inline_size <= 4) {
9245                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9246                }
9247                let inner_offset;
9248                let mut inner_depth = depth.clone();
9249                if inlined {
9250                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9251                    inner_offset = next_offset;
9252                } else {
9253                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9254                    inner_depth.increment()?;
9255                }
9256                let val_ref = self.partition_id.get_or_insert_with(|| fidl::new_empty!(u32, D));
9257                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
9258                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9259                {
9260                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9261                }
9262                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9263                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9264                }
9265            }
9266
9267            next_offset += envelope_size;
9268            _next_ordinal_to_read += 1;
9269            if next_offset >= end_offset {
9270                return Ok(());
9271            }
9272
9273            // Decode unknown envelopes for gaps in ordinals.
9274            while _next_ordinal_to_read < 2 {
9275                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9276                _next_ordinal_to_read += 1;
9277                next_offset += envelope_size;
9278            }
9279
9280            let next_out_of_line = decoder.next_out_of_line();
9281            let handles_before = decoder.remaining_handles();
9282            if let Some((inlined, num_bytes, num_handles)) =
9283                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9284            {
9285                let member_inline_size =
9286                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
9287                if inlined != (member_inline_size <= 4) {
9288                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9289                }
9290                let inner_offset;
9291                let mut inner_depth = depth.clone();
9292                if inlined {
9293                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9294                    inner_offset = next_offset;
9295                } else {
9296                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9297                    inner_depth.increment()?;
9298                }
9299                let val_ref = self.weight.get_or_insert_with(|| fidl::new_empty!(u8, D));
9300                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
9301                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9302                {
9303                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9304                }
9305                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9306                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9307                }
9308            }
9309
9310            next_offset += envelope_size;
9311            _next_ordinal_to_read += 1;
9312            if next_offset >= end_offset {
9313                return Ok(());
9314            }
9315
9316            // Decode unknown envelopes for gaps in ordinals.
9317            while _next_ordinal_to_read < 3 {
9318                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9319                _next_ordinal_to_read += 1;
9320                next_offset += envelope_size;
9321            }
9322
9323            let next_out_of_line = decoder.next_out_of_line();
9324            let handles_before = decoder.remaining_handles();
9325            if let Some((inlined, num_bytes, num_handles)) =
9326                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9327            {
9328                let member_inline_size =
9329                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
9330                if inlined != (member_inline_size <= 4) {
9331                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9332                }
9333                let inner_offset;
9334                let mut inner_depth = depth.clone();
9335                if inlined {
9336                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9337                    inner_offset = next_offset;
9338                } else {
9339                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9340                    inner_depth.increment()?;
9341                }
9342                let val_ref =
9343                    self.network_data_version.get_or_insert_with(|| fidl::new_empty!(u8, D));
9344                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
9345                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9346                {
9347                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9348                }
9349                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9350                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9351                }
9352            }
9353
9354            next_offset += envelope_size;
9355            _next_ordinal_to_read += 1;
9356            if next_offset >= end_offset {
9357                return Ok(());
9358            }
9359
9360            // Decode unknown envelopes for gaps in ordinals.
9361            while _next_ordinal_to_read < 4 {
9362                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9363                _next_ordinal_to_read += 1;
9364                next_offset += envelope_size;
9365            }
9366
9367            let next_out_of_line = decoder.next_out_of_line();
9368            let handles_before = decoder.remaining_handles();
9369            if let Some((inlined, num_bytes, num_handles)) =
9370                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9371            {
9372                let member_inline_size =
9373                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
9374                if inlined != (member_inline_size <= 4) {
9375                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9376                }
9377                let inner_offset;
9378                let mut inner_depth = depth.clone();
9379                if inlined {
9380                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9381                    inner_offset = next_offset;
9382                } else {
9383                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9384                    inner_depth.increment()?;
9385                }
9386                let val_ref =
9387                    self.stable_network_data_version.get_or_insert_with(|| fidl::new_empty!(u8, D));
9388                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
9389                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9390                {
9391                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9392                }
9393                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9394                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9395                }
9396            }
9397
9398            next_offset += envelope_size;
9399            _next_ordinal_to_read += 1;
9400            if next_offset >= end_offset {
9401                return Ok(());
9402            }
9403
9404            // Decode unknown envelopes for gaps in ordinals.
9405            while _next_ordinal_to_read < 5 {
9406                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9407                _next_ordinal_to_read += 1;
9408                next_offset += envelope_size;
9409            }
9410
9411            let next_out_of_line = decoder.next_out_of_line();
9412            let handles_before = decoder.remaining_handles();
9413            if let Some((inlined, num_bytes, num_handles)) =
9414                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9415            {
9416                let member_inline_size =
9417                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
9418                if inlined != (member_inline_size <= 4) {
9419                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9420                }
9421                let inner_offset;
9422                let mut inner_depth = depth.clone();
9423                if inlined {
9424                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9425                    inner_offset = next_offset;
9426                } else {
9427                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9428                    inner_depth.increment()?;
9429                }
9430                let val_ref = self.router_id.get_or_insert_with(|| fidl::new_empty!(u8, D));
9431                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
9432                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9433                {
9434                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9435                }
9436                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9437                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9438                }
9439            }
9440
9441            next_offset += envelope_size;
9442
9443            // Decode the remaining unknown envelopes.
9444            while next_offset < end_offset {
9445                _next_ordinal_to_read += 1;
9446                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9447                next_offset += envelope_size;
9448            }
9449
9450            Ok(())
9451        }
9452    }
9453
9454    impl LinkMetricsEntry {
9455        #[inline(always)]
9456        fn max_ordinal_present(&self) -> u64 {
9457            if let Some(_) = self.rssi {
9458                return 2;
9459            }
9460            if let Some(_) = self.link_margin {
9461                return 1;
9462            }
9463            0
9464        }
9465    }
9466
9467    impl fidl::encoding::ValueTypeMarker for LinkMetricsEntry {
9468        type Borrowed<'a> = &'a Self;
9469        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
9470            value
9471        }
9472    }
9473
9474    unsafe impl fidl::encoding::TypeMarker for LinkMetricsEntry {
9475        type Owned = Self;
9476
9477        #[inline(always)]
9478        fn inline_align(_context: fidl::encoding::Context) -> usize {
9479            8
9480        }
9481
9482        #[inline(always)]
9483        fn inline_size(_context: fidl::encoding::Context) -> usize {
9484            16
9485        }
9486    }
9487
9488    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<LinkMetricsEntry, D>
9489        for &LinkMetricsEntry
9490    {
9491        unsafe fn encode(
9492            self,
9493            encoder: &mut fidl::encoding::Encoder<'_, D>,
9494            offset: usize,
9495            mut depth: fidl::encoding::Depth,
9496        ) -> fidl::Result<()> {
9497            encoder.debug_check_bounds::<LinkMetricsEntry>(offset);
9498            // Vector header
9499            let max_ordinal: u64 = self.max_ordinal_present();
9500            encoder.write_num(max_ordinal, offset);
9501            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
9502            // Calling encoder.out_of_line_offset(0) is not allowed.
9503            if max_ordinal == 0 {
9504                return Ok(());
9505            }
9506            depth.increment()?;
9507            let envelope_size = 8;
9508            let bytes_len = max_ordinal as usize * envelope_size;
9509            #[allow(unused_variables)]
9510            let offset = encoder.out_of_line_offset(bytes_len);
9511            let mut _prev_end_offset: usize = 0;
9512            if 1 > max_ordinal {
9513                return Ok(());
9514            }
9515
9516            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9517            // are envelope_size bytes.
9518            let cur_offset: usize = (1 - 1) * envelope_size;
9519
9520            // Zero reserved fields.
9521            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9522
9523            // Safety:
9524            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9525            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9526            //   envelope_size bytes, there is always sufficient room.
9527            fidl::encoding::encode_in_envelope_optional::<u8, D>(
9528                self.link_margin.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
9529                encoder,
9530                offset + cur_offset,
9531                depth,
9532            )?;
9533
9534            _prev_end_offset = cur_offset + envelope_size;
9535            if 2 > max_ordinal {
9536                return Ok(());
9537            }
9538
9539            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9540            // are envelope_size bytes.
9541            let cur_offset: usize = (2 - 1) * envelope_size;
9542
9543            // Zero reserved fields.
9544            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9545
9546            // Safety:
9547            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9548            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9549            //   envelope_size bytes, there is always sufficient room.
9550            fidl::encoding::encode_in_envelope_optional::<i8, D>(
9551                self.rssi.as_ref().map(<i8 as fidl::encoding::ValueTypeMarker>::borrow),
9552                encoder,
9553                offset + cur_offset,
9554                depth,
9555            )?;
9556
9557            _prev_end_offset = cur_offset + envelope_size;
9558
9559            Ok(())
9560        }
9561    }
9562
9563    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for LinkMetricsEntry {
9564        #[inline(always)]
9565        fn new_empty() -> Self {
9566            Self::default()
9567        }
9568
9569        unsafe fn decode(
9570            &mut self,
9571            decoder: &mut fidl::encoding::Decoder<'_, D>,
9572            offset: usize,
9573            mut depth: fidl::encoding::Depth,
9574        ) -> fidl::Result<()> {
9575            decoder.debug_check_bounds::<Self>(offset);
9576            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
9577                None => return Err(fidl::Error::NotNullable),
9578                Some(len) => len,
9579            };
9580            // Calling decoder.out_of_line_offset(0) is not allowed.
9581            if len == 0 {
9582                return Ok(());
9583            };
9584            depth.increment()?;
9585            let envelope_size = 8;
9586            let bytes_len = len * envelope_size;
9587            let offset = decoder.out_of_line_offset(bytes_len)?;
9588            // Decode the envelope for each type.
9589            let mut _next_ordinal_to_read = 0;
9590            let mut next_offset = offset;
9591            let end_offset = offset + bytes_len;
9592            _next_ordinal_to_read += 1;
9593            if next_offset >= end_offset {
9594                return Ok(());
9595            }
9596
9597            // Decode unknown envelopes for gaps in ordinals.
9598            while _next_ordinal_to_read < 1 {
9599                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9600                _next_ordinal_to_read += 1;
9601                next_offset += envelope_size;
9602            }
9603
9604            let next_out_of_line = decoder.next_out_of_line();
9605            let handles_before = decoder.remaining_handles();
9606            if let Some((inlined, num_bytes, num_handles)) =
9607                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9608            {
9609                let member_inline_size =
9610                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
9611                if inlined != (member_inline_size <= 4) {
9612                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9613                }
9614                let inner_offset;
9615                let mut inner_depth = depth.clone();
9616                if inlined {
9617                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9618                    inner_offset = next_offset;
9619                } else {
9620                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9621                    inner_depth.increment()?;
9622                }
9623                let val_ref = self.link_margin.get_or_insert_with(|| fidl::new_empty!(u8, D));
9624                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
9625                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9626                {
9627                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9628                }
9629                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9630                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9631                }
9632            }
9633
9634            next_offset += envelope_size;
9635            _next_ordinal_to_read += 1;
9636            if next_offset >= end_offset {
9637                return Ok(());
9638            }
9639
9640            // Decode unknown envelopes for gaps in ordinals.
9641            while _next_ordinal_to_read < 2 {
9642                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9643                _next_ordinal_to_read += 1;
9644                next_offset += envelope_size;
9645            }
9646
9647            let next_out_of_line = decoder.next_out_of_line();
9648            let handles_before = decoder.remaining_handles();
9649            if let Some((inlined, num_bytes, num_handles)) =
9650                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9651            {
9652                let member_inline_size =
9653                    <i8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
9654                if inlined != (member_inline_size <= 4) {
9655                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9656                }
9657                let inner_offset;
9658                let mut inner_depth = depth.clone();
9659                if inlined {
9660                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9661                    inner_offset = next_offset;
9662                } else {
9663                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9664                    inner_depth.increment()?;
9665                }
9666                let val_ref = self.rssi.get_or_insert_with(|| fidl::new_empty!(i8, D));
9667                fidl::decode!(i8, D, val_ref, decoder, inner_offset, inner_depth)?;
9668                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9669                {
9670                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9671                }
9672                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9673                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9674                }
9675            }
9676
9677            next_offset += envelope_size;
9678
9679            // Decode the remaining unknown envelopes.
9680            while next_offset < end_offset {
9681                _next_ordinal_to_read += 1;
9682                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9683                next_offset += envelope_size;
9684            }
9685
9686            Ok(())
9687        }
9688    }
9689
9690    impl MultiRadioNeighborInfo {
9691        #[inline(always)]
9692        fn max_ordinal_present(&self) -> u64 {
9693            if let Some(_) = self.radio_link_info {
9694                return 3;
9695            }
9696            if let Some(_) = self.thread_rloc {
9697                return 2;
9698            }
9699            if let Some(_) = self.extended_address {
9700                return 1;
9701            }
9702            0
9703        }
9704    }
9705
9706    impl fidl::encoding::ValueTypeMarker for MultiRadioNeighborInfo {
9707        type Borrowed<'a> = &'a Self;
9708        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
9709            value
9710        }
9711    }
9712
9713    unsafe impl fidl::encoding::TypeMarker for MultiRadioNeighborInfo {
9714        type Owned = Self;
9715
9716        #[inline(always)]
9717        fn inline_align(_context: fidl::encoding::Context) -> usize {
9718            8
9719        }
9720
9721        #[inline(always)]
9722        fn inline_size(_context: fidl::encoding::Context) -> usize {
9723            16
9724        }
9725    }
9726
9727    unsafe impl<D: fidl::encoding::ResourceDialect>
9728        fidl::encoding::Encode<MultiRadioNeighborInfo, D> for &MultiRadioNeighborInfo
9729    {
9730        unsafe fn encode(
9731            self,
9732            encoder: &mut fidl::encoding::Encoder<'_, D>,
9733            offset: usize,
9734            mut depth: fidl::encoding::Depth,
9735        ) -> fidl::Result<()> {
9736            encoder.debug_check_bounds::<MultiRadioNeighborInfo>(offset);
9737            // Vector header
9738            let max_ordinal: u64 = self.max_ordinal_present();
9739            encoder.write_num(max_ordinal, offset);
9740            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
9741            // Calling encoder.out_of_line_offset(0) is not allowed.
9742            if max_ordinal == 0 {
9743                return Ok(());
9744            }
9745            depth.increment()?;
9746            let envelope_size = 8;
9747            let bytes_len = max_ordinal as usize * envelope_size;
9748            #[allow(unused_variables)]
9749            let offset = encoder.out_of_line_offset(bytes_len);
9750            let mut _prev_end_offset: usize = 0;
9751            if 1 > max_ordinal {
9752                return Ok(());
9753            }
9754
9755            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9756            // are envelope_size bytes.
9757            let cur_offset: usize = (1 - 1) * envelope_size;
9758
9759            // Zero reserved fields.
9760            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9761
9762            // Safety:
9763            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9764            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9765            //   envelope_size bytes, there is always sufficient room.
9766            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u8, 8>, D>(
9767                self.extended_address.as_ref().map(
9768                    <fidl::encoding::Vector<u8, 8> as fidl::encoding::ValueTypeMarker>::borrow,
9769                ),
9770                encoder,
9771                offset + cur_offset,
9772                depth,
9773            )?;
9774
9775            _prev_end_offset = cur_offset + envelope_size;
9776            if 2 > max_ordinal {
9777                return Ok(());
9778            }
9779
9780            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9781            // are envelope_size bytes.
9782            let cur_offset: usize = (2 - 1) * envelope_size;
9783
9784            // Zero reserved fields.
9785            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9786
9787            // Safety:
9788            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9789            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9790            //   envelope_size bytes, there is always sufficient room.
9791            fidl::encoding::encode_in_envelope_optional::<u16, D>(
9792                self.thread_rloc.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
9793                encoder,
9794                offset + cur_offset,
9795                depth,
9796            )?;
9797
9798            _prev_end_offset = cur_offset + envelope_size;
9799            if 3 > max_ordinal {
9800                return Ok(());
9801            }
9802
9803            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9804            // are envelope_size bytes.
9805            let cur_offset: usize = (3 - 1) * envelope_size;
9806
9807            // Zero reserved fields.
9808            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9809
9810            // Safety:
9811            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9812            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9813            //   envelope_size bytes, there is always sufficient room.
9814            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<RadioLinkInfo, 5>, D>(
9815            self.radio_link_info.as_ref().map(<fidl::encoding::Vector<RadioLinkInfo, 5> as fidl::encoding::ValueTypeMarker>::borrow),
9816            encoder, offset + cur_offset, depth
9817        )?;
9818
9819            _prev_end_offset = cur_offset + envelope_size;
9820
9821            Ok(())
9822        }
9823    }
9824
9825    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
9826        for MultiRadioNeighborInfo
9827    {
9828        #[inline(always)]
9829        fn new_empty() -> Self {
9830            Self::default()
9831        }
9832
9833        unsafe fn decode(
9834            &mut self,
9835            decoder: &mut fidl::encoding::Decoder<'_, D>,
9836            offset: usize,
9837            mut depth: fidl::encoding::Depth,
9838        ) -> fidl::Result<()> {
9839            decoder.debug_check_bounds::<Self>(offset);
9840            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
9841                None => return Err(fidl::Error::NotNullable),
9842                Some(len) => len,
9843            };
9844            // Calling decoder.out_of_line_offset(0) is not allowed.
9845            if len == 0 {
9846                return Ok(());
9847            };
9848            depth.increment()?;
9849            let envelope_size = 8;
9850            let bytes_len = len * envelope_size;
9851            let offset = decoder.out_of_line_offset(bytes_len)?;
9852            // Decode the envelope for each type.
9853            let mut _next_ordinal_to_read = 0;
9854            let mut next_offset = offset;
9855            let end_offset = offset + bytes_len;
9856            _next_ordinal_to_read += 1;
9857            if next_offset >= end_offset {
9858                return Ok(());
9859            }
9860
9861            // Decode unknown envelopes for gaps in ordinals.
9862            while _next_ordinal_to_read < 1 {
9863                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9864                _next_ordinal_to_read += 1;
9865                next_offset += envelope_size;
9866            }
9867
9868            let next_out_of_line = decoder.next_out_of_line();
9869            let handles_before = decoder.remaining_handles();
9870            if let Some((inlined, num_bytes, num_handles)) =
9871                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9872            {
9873                let member_inline_size =
9874                    <fidl::encoding::Vector<u8, 8> as fidl::encoding::TypeMarker>::inline_size(
9875                        decoder.context,
9876                    );
9877                if inlined != (member_inline_size <= 4) {
9878                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9879                }
9880                let inner_offset;
9881                let mut inner_depth = depth.clone();
9882                if inlined {
9883                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9884                    inner_offset = next_offset;
9885                } else {
9886                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9887                    inner_depth.increment()?;
9888                }
9889                let val_ref = self
9890                    .extended_address
9891                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u8, 8>, D));
9892                fidl::decode!(fidl::encoding::Vector<u8, 8>, D, val_ref, decoder, inner_offset, inner_depth)?;
9893                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9894                {
9895                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9896                }
9897                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9898                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9899                }
9900            }
9901
9902            next_offset += envelope_size;
9903            _next_ordinal_to_read += 1;
9904            if next_offset >= end_offset {
9905                return Ok(());
9906            }
9907
9908            // Decode unknown envelopes for gaps in ordinals.
9909            while _next_ordinal_to_read < 2 {
9910                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9911                _next_ordinal_to_read += 1;
9912                next_offset += envelope_size;
9913            }
9914
9915            let next_out_of_line = decoder.next_out_of_line();
9916            let handles_before = decoder.remaining_handles();
9917            if let Some((inlined, num_bytes, num_handles)) =
9918                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9919            {
9920                let member_inline_size =
9921                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
9922                if inlined != (member_inline_size <= 4) {
9923                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9924                }
9925                let inner_offset;
9926                let mut inner_depth = depth.clone();
9927                if inlined {
9928                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9929                    inner_offset = next_offset;
9930                } else {
9931                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9932                    inner_depth.increment()?;
9933                }
9934                let val_ref = self.thread_rloc.get_or_insert_with(|| fidl::new_empty!(u16, D));
9935                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
9936                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9937                {
9938                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9939                }
9940                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9941                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9942                }
9943            }
9944
9945            next_offset += envelope_size;
9946            _next_ordinal_to_read += 1;
9947            if next_offset >= end_offset {
9948                return Ok(());
9949            }
9950
9951            // Decode unknown envelopes for gaps in ordinals.
9952            while _next_ordinal_to_read < 3 {
9953                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9954                _next_ordinal_to_read += 1;
9955                next_offset += envelope_size;
9956            }
9957
9958            let next_out_of_line = decoder.next_out_of_line();
9959            let handles_before = decoder.remaining_handles();
9960            if let Some((inlined, num_bytes, num_handles)) =
9961                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9962            {
9963                let member_inline_size = <fidl::encoding::Vector<RadioLinkInfo, 5> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
9964                if inlined != (member_inline_size <= 4) {
9965                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9966                }
9967                let inner_offset;
9968                let mut inner_depth = depth.clone();
9969                if inlined {
9970                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9971                    inner_offset = next_offset;
9972                } else {
9973                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9974                    inner_depth.increment()?;
9975                }
9976                let val_ref = self.radio_link_info.get_or_insert_with(
9977                    || fidl::new_empty!(fidl::encoding::Vector<RadioLinkInfo, 5>, D),
9978                );
9979                fidl::decode!(fidl::encoding::Vector<RadioLinkInfo, 5>, D, val_ref, decoder, inner_offset, inner_depth)?;
9980                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9981                {
9982                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9983                }
9984                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9985                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9986                }
9987            }
9988
9989            next_offset += envelope_size;
9990
9991            // Decode the remaining unknown envelopes.
9992            while next_offset < end_offset {
9993                _next_ordinal_to_read += 1;
9994                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9995                next_offset += envelope_size;
9996            }
9997
9998            Ok(())
9999        }
10000    }
10001
10002    impl Nat64ErrorCounters {
10003        #[inline(always)]
10004        fn max_ordinal_present(&self) -> u64 {
10005            if let Some(_) = self.no_mapping {
10006                return 4;
10007            }
10008            if let Some(_) = self.unsupported_protocol {
10009                return 3;
10010            }
10011            if let Some(_) = self.illegal_packet {
10012                return 2;
10013            }
10014            if let Some(_) = self.unknown {
10015                return 1;
10016            }
10017            0
10018        }
10019    }
10020
10021    impl fidl::encoding::ValueTypeMarker for Nat64ErrorCounters {
10022        type Borrowed<'a> = &'a Self;
10023        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
10024            value
10025        }
10026    }
10027
10028    unsafe impl fidl::encoding::TypeMarker for Nat64ErrorCounters {
10029        type Owned = Self;
10030
10031        #[inline(always)]
10032        fn inline_align(_context: fidl::encoding::Context) -> usize {
10033            8
10034        }
10035
10036        #[inline(always)]
10037        fn inline_size(_context: fidl::encoding::Context) -> usize {
10038            16
10039        }
10040    }
10041
10042    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Nat64ErrorCounters, D>
10043        for &Nat64ErrorCounters
10044    {
10045        unsafe fn encode(
10046            self,
10047            encoder: &mut fidl::encoding::Encoder<'_, D>,
10048            offset: usize,
10049            mut depth: fidl::encoding::Depth,
10050        ) -> fidl::Result<()> {
10051            encoder.debug_check_bounds::<Nat64ErrorCounters>(offset);
10052            // Vector header
10053            let max_ordinal: u64 = self.max_ordinal_present();
10054            encoder.write_num(max_ordinal, offset);
10055            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
10056            // Calling encoder.out_of_line_offset(0) is not allowed.
10057            if max_ordinal == 0 {
10058                return Ok(());
10059            }
10060            depth.increment()?;
10061            let envelope_size = 8;
10062            let bytes_len = max_ordinal as usize * envelope_size;
10063            #[allow(unused_variables)]
10064            let offset = encoder.out_of_line_offset(bytes_len);
10065            let mut _prev_end_offset: usize = 0;
10066            if 1 > max_ordinal {
10067                return Ok(());
10068            }
10069
10070            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10071            // are envelope_size bytes.
10072            let cur_offset: usize = (1 - 1) * envelope_size;
10073
10074            // Zero reserved fields.
10075            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10076
10077            // Safety:
10078            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10079            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10080            //   envelope_size bytes, there is always sufficient room.
10081            fidl::encoding::encode_in_envelope_optional::<Nat64PacketCounters, D>(
10082                self.unknown
10083                    .as_ref()
10084                    .map(<Nat64PacketCounters as fidl::encoding::ValueTypeMarker>::borrow),
10085                encoder,
10086                offset + cur_offset,
10087                depth,
10088            )?;
10089
10090            _prev_end_offset = cur_offset + envelope_size;
10091            if 2 > max_ordinal {
10092                return Ok(());
10093            }
10094
10095            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10096            // are envelope_size bytes.
10097            let cur_offset: usize = (2 - 1) * envelope_size;
10098
10099            // Zero reserved fields.
10100            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10101
10102            // Safety:
10103            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10104            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10105            //   envelope_size bytes, there is always sufficient room.
10106            fidl::encoding::encode_in_envelope_optional::<Nat64PacketCounters, D>(
10107                self.illegal_packet
10108                    .as_ref()
10109                    .map(<Nat64PacketCounters as fidl::encoding::ValueTypeMarker>::borrow),
10110                encoder,
10111                offset + cur_offset,
10112                depth,
10113            )?;
10114
10115            _prev_end_offset = cur_offset + envelope_size;
10116            if 3 > max_ordinal {
10117                return Ok(());
10118            }
10119
10120            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10121            // are envelope_size bytes.
10122            let cur_offset: usize = (3 - 1) * envelope_size;
10123
10124            // Zero reserved fields.
10125            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10126
10127            // Safety:
10128            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10129            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10130            //   envelope_size bytes, there is always sufficient room.
10131            fidl::encoding::encode_in_envelope_optional::<Nat64PacketCounters, D>(
10132                self.unsupported_protocol
10133                    .as_ref()
10134                    .map(<Nat64PacketCounters as fidl::encoding::ValueTypeMarker>::borrow),
10135                encoder,
10136                offset + cur_offset,
10137                depth,
10138            )?;
10139
10140            _prev_end_offset = cur_offset + envelope_size;
10141            if 4 > max_ordinal {
10142                return Ok(());
10143            }
10144
10145            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10146            // are envelope_size bytes.
10147            let cur_offset: usize = (4 - 1) * envelope_size;
10148
10149            // Zero reserved fields.
10150            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10151
10152            // Safety:
10153            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10154            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10155            //   envelope_size bytes, there is always sufficient room.
10156            fidl::encoding::encode_in_envelope_optional::<Nat64PacketCounters, D>(
10157                self.no_mapping
10158                    .as_ref()
10159                    .map(<Nat64PacketCounters as fidl::encoding::ValueTypeMarker>::borrow),
10160                encoder,
10161                offset + cur_offset,
10162                depth,
10163            )?;
10164
10165            _prev_end_offset = cur_offset + envelope_size;
10166
10167            Ok(())
10168        }
10169    }
10170
10171    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Nat64ErrorCounters {
10172        #[inline(always)]
10173        fn new_empty() -> Self {
10174            Self::default()
10175        }
10176
10177        unsafe fn decode(
10178            &mut self,
10179            decoder: &mut fidl::encoding::Decoder<'_, D>,
10180            offset: usize,
10181            mut depth: fidl::encoding::Depth,
10182        ) -> fidl::Result<()> {
10183            decoder.debug_check_bounds::<Self>(offset);
10184            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
10185                None => return Err(fidl::Error::NotNullable),
10186                Some(len) => len,
10187            };
10188            // Calling decoder.out_of_line_offset(0) is not allowed.
10189            if len == 0 {
10190                return Ok(());
10191            };
10192            depth.increment()?;
10193            let envelope_size = 8;
10194            let bytes_len = len * envelope_size;
10195            let offset = decoder.out_of_line_offset(bytes_len)?;
10196            // Decode the envelope for each type.
10197            let mut _next_ordinal_to_read = 0;
10198            let mut next_offset = offset;
10199            let end_offset = offset + bytes_len;
10200            _next_ordinal_to_read += 1;
10201            if next_offset >= end_offset {
10202                return Ok(());
10203            }
10204
10205            // Decode unknown envelopes for gaps in ordinals.
10206            while _next_ordinal_to_read < 1 {
10207                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10208                _next_ordinal_to_read += 1;
10209                next_offset += envelope_size;
10210            }
10211
10212            let next_out_of_line = decoder.next_out_of_line();
10213            let handles_before = decoder.remaining_handles();
10214            if let Some((inlined, num_bytes, num_handles)) =
10215                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10216            {
10217                let member_inline_size =
10218                    <Nat64PacketCounters as fidl::encoding::TypeMarker>::inline_size(
10219                        decoder.context,
10220                    );
10221                if inlined != (member_inline_size <= 4) {
10222                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10223                }
10224                let inner_offset;
10225                let mut inner_depth = depth.clone();
10226                if inlined {
10227                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10228                    inner_offset = next_offset;
10229                } else {
10230                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10231                    inner_depth.increment()?;
10232                }
10233                let val_ref =
10234                    self.unknown.get_or_insert_with(|| fidl::new_empty!(Nat64PacketCounters, D));
10235                fidl::decode!(Nat64PacketCounters, D, val_ref, decoder, inner_offset, inner_depth)?;
10236                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10237                {
10238                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10239                }
10240                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10241                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10242                }
10243            }
10244
10245            next_offset += envelope_size;
10246            _next_ordinal_to_read += 1;
10247            if next_offset >= end_offset {
10248                return Ok(());
10249            }
10250
10251            // Decode unknown envelopes for gaps in ordinals.
10252            while _next_ordinal_to_read < 2 {
10253                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10254                _next_ordinal_to_read += 1;
10255                next_offset += envelope_size;
10256            }
10257
10258            let next_out_of_line = decoder.next_out_of_line();
10259            let handles_before = decoder.remaining_handles();
10260            if let Some((inlined, num_bytes, num_handles)) =
10261                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10262            {
10263                let member_inline_size =
10264                    <Nat64PacketCounters as fidl::encoding::TypeMarker>::inline_size(
10265                        decoder.context,
10266                    );
10267                if inlined != (member_inline_size <= 4) {
10268                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10269                }
10270                let inner_offset;
10271                let mut inner_depth = depth.clone();
10272                if inlined {
10273                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10274                    inner_offset = next_offset;
10275                } else {
10276                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10277                    inner_depth.increment()?;
10278                }
10279                let val_ref = self
10280                    .illegal_packet
10281                    .get_or_insert_with(|| fidl::new_empty!(Nat64PacketCounters, D));
10282                fidl::decode!(Nat64PacketCounters, D, val_ref, decoder, inner_offset, inner_depth)?;
10283                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10284                {
10285                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10286                }
10287                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10288                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10289                }
10290            }
10291
10292            next_offset += envelope_size;
10293            _next_ordinal_to_read += 1;
10294            if next_offset >= end_offset {
10295                return Ok(());
10296            }
10297
10298            // Decode unknown envelopes for gaps in ordinals.
10299            while _next_ordinal_to_read < 3 {
10300                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10301                _next_ordinal_to_read += 1;
10302                next_offset += envelope_size;
10303            }
10304
10305            let next_out_of_line = decoder.next_out_of_line();
10306            let handles_before = decoder.remaining_handles();
10307            if let Some((inlined, num_bytes, num_handles)) =
10308                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10309            {
10310                let member_inline_size =
10311                    <Nat64PacketCounters as fidl::encoding::TypeMarker>::inline_size(
10312                        decoder.context,
10313                    );
10314                if inlined != (member_inline_size <= 4) {
10315                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10316                }
10317                let inner_offset;
10318                let mut inner_depth = depth.clone();
10319                if inlined {
10320                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10321                    inner_offset = next_offset;
10322                } else {
10323                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10324                    inner_depth.increment()?;
10325                }
10326                let val_ref = self
10327                    .unsupported_protocol
10328                    .get_or_insert_with(|| fidl::new_empty!(Nat64PacketCounters, D));
10329                fidl::decode!(Nat64PacketCounters, D, val_ref, decoder, inner_offset, inner_depth)?;
10330                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10331                {
10332                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10333                }
10334                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10335                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10336                }
10337            }
10338
10339            next_offset += envelope_size;
10340            _next_ordinal_to_read += 1;
10341            if next_offset >= end_offset {
10342                return Ok(());
10343            }
10344
10345            // Decode unknown envelopes for gaps in ordinals.
10346            while _next_ordinal_to_read < 4 {
10347                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10348                _next_ordinal_to_read += 1;
10349                next_offset += envelope_size;
10350            }
10351
10352            let next_out_of_line = decoder.next_out_of_line();
10353            let handles_before = decoder.remaining_handles();
10354            if let Some((inlined, num_bytes, num_handles)) =
10355                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10356            {
10357                let member_inline_size =
10358                    <Nat64PacketCounters as fidl::encoding::TypeMarker>::inline_size(
10359                        decoder.context,
10360                    );
10361                if inlined != (member_inline_size <= 4) {
10362                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10363                }
10364                let inner_offset;
10365                let mut inner_depth = depth.clone();
10366                if inlined {
10367                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10368                    inner_offset = next_offset;
10369                } else {
10370                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10371                    inner_depth.increment()?;
10372                }
10373                let val_ref =
10374                    self.no_mapping.get_or_insert_with(|| fidl::new_empty!(Nat64PacketCounters, D));
10375                fidl::decode!(Nat64PacketCounters, D, val_ref, decoder, inner_offset, inner_depth)?;
10376                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10377                {
10378                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10379                }
10380                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10381                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10382                }
10383            }
10384
10385            next_offset += envelope_size;
10386
10387            // Decode the remaining unknown envelopes.
10388            while next_offset < end_offset {
10389                _next_ordinal_to_read += 1;
10390                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10391                next_offset += envelope_size;
10392            }
10393
10394            Ok(())
10395        }
10396    }
10397
10398    impl Nat64Info {
10399        #[inline(always)]
10400        fn max_ordinal_present(&self) -> u64 {
10401            if let Some(_) = self.nat64_protocol_counters {
10402                return 4;
10403            }
10404            if let Some(_) = self.nat64_error_counters {
10405                return 3;
10406            }
10407            if let Some(_) = self.nat64_mappings {
10408                return 2;
10409            }
10410            if let Some(_) = self.nat64_state {
10411                return 1;
10412            }
10413            0
10414        }
10415    }
10416
10417    impl fidl::encoding::ValueTypeMarker for Nat64Info {
10418        type Borrowed<'a> = &'a Self;
10419        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
10420            value
10421        }
10422    }
10423
10424    unsafe impl fidl::encoding::TypeMarker for Nat64Info {
10425        type Owned = Self;
10426
10427        #[inline(always)]
10428        fn inline_align(_context: fidl::encoding::Context) -> usize {
10429            8
10430        }
10431
10432        #[inline(always)]
10433        fn inline_size(_context: fidl::encoding::Context) -> usize {
10434            16
10435        }
10436    }
10437
10438    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Nat64Info, D>
10439        for &Nat64Info
10440    {
10441        unsafe fn encode(
10442            self,
10443            encoder: &mut fidl::encoding::Encoder<'_, D>,
10444            offset: usize,
10445            mut depth: fidl::encoding::Depth,
10446        ) -> fidl::Result<()> {
10447            encoder.debug_check_bounds::<Nat64Info>(offset);
10448            // Vector header
10449            let max_ordinal: u64 = self.max_ordinal_present();
10450            encoder.write_num(max_ordinal, offset);
10451            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
10452            // Calling encoder.out_of_line_offset(0) is not allowed.
10453            if max_ordinal == 0 {
10454                return Ok(());
10455            }
10456            depth.increment()?;
10457            let envelope_size = 8;
10458            let bytes_len = max_ordinal as usize * envelope_size;
10459            #[allow(unused_variables)]
10460            let offset = encoder.out_of_line_offset(bytes_len);
10461            let mut _prev_end_offset: usize = 0;
10462            if 1 > max_ordinal {
10463                return Ok(());
10464            }
10465
10466            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10467            // are envelope_size bytes.
10468            let cur_offset: usize = (1 - 1) * envelope_size;
10469
10470            // Zero reserved fields.
10471            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10472
10473            // Safety:
10474            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10475            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10476            //   envelope_size bytes, there is always sufficient room.
10477            fidl::encoding::encode_in_envelope_optional::<BorderRoutingNat64State, D>(
10478                self.nat64_state
10479                    .as_ref()
10480                    .map(<BorderRoutingNat64State as fidl::encoding::ValueTypeMarker>::borrow),
10481                encoder,
10482                offset + cur_offset,
10483                depth,
10484            )?;
10485
10486            _prev_end_offset = cur_offset + envelope_size;
10487            if 2 > max_ordinal {
10488                return Ok(());
10489            }
10490
10491            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10492            // are envelope_size bytes.
10493            let cur_offset: usize = (2 - 1) * envelope_size;
10494
10495            // Zero reserved fields.
10496            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10497
10498            // Safety:
10499            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10500            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10501            //   envelope_size bytes, there is always sufficient room.
10502            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<Nat64Mapping>, D>(
10503            self.nat64_mappings.as_ref().map(<fidl::encoding::UnboundedVector<Nat64Mapping> as fidl::encoding::ValueTypeMarker>::borrow),
10504            encoder, offset + cur_offset, depth
10505        )?;
10506
10507            _prev_end_offset = cur_offset + envelope_size;
10508            if 3 > max_ordinal {
10509                return Ok(());
10510            }
10511
10512            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10513            // are envelope_size bytes.
10514            let cur_offset: usize = (3 - 1) * envelope_size;
10515
10516            // Zero reserved fields.
10517            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10518
10519            // Safety:
10520            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10521            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10522            //   envelope_size bytes, there is always sufficient room.
10523            fidl::encoding::encode_in_envelope_optional::<Nat64ErrorCounters, D>(
10524                self.nat64_error_counters
10525                    .as_ref()
10526                    .map(<Nat64ErrorCounters as fidl::encoding::ValueTypeMarker>::borrow),
10527                encoder,
10528                offset + cur_offset,
10529                depth,
10530            )?;
10531
10532            _prev_end_offset = cur_offset + envelope_size;
10533            if 4 > max_ordinal {
10534                return Ok(());
10535            }
10536
10537            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10538            // are envelope_size bytes.
10539            let cur_offset: usize = (4 - 1) * envelope_size;
10540
10541            // Zero reserved fields.
10542            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10543
10544            // Safety:
10545            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10546            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10547            //   envelope_size bytes, there is always sufficient room.
10548            fidl::encoding::encode_in_envelope_optional::<Nat64ProtocolCounters, D>(
10549                self.nat64_protocol_counters
10550                    .as_ref()
10551                    .map(<Nat64ProtocolCounters as fidl::encoding::ValueTypeMarker>::borrow),
10552                encoder,
10553                offset + cur_offset,
10554                depth,
10555            )?;
10556
10557            _prev_end_offset = cur_offset + envelope_size;
10558
10559            Ok(())
10560        }
10561    }
10562
10563    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Nat64Info {
10564        #[inline(always)]
10565        fn new_empty() -> Self {
10566            Self::default()
10567        }
10568
10569        unsafe fn decode(
10570            &mut self,
10571            decoder: &mut fidl::encoding::Decoder<'_, D>,
10572            offset: usize,
10573            mut depth: fidl::encoding::Depth,
10574        ) -> fidl::Result<()> {
10575            decoder.debug_check_bounds::<Self>(offset);
10576            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
10577                None => return Err(fidl::Error::NotNullable),
10578                Some(len) => len,
10579            };
10580            // Calling decoder.out_of_line_offset(0) is not allowed.
10581            if len == 0 {
10582                return Ok(());
10583            };
10584            depth.increment()?;
10585            let envelope_size = 8;
10586            let bytes_len = len * envelope_size;
10587            let offset = decoder.out_of_line_offset(bytes_len)?;
10588            // Decode the envelope for each type.
10589            let mut _next_ordinal_to_read = 0;
10590            let mut next_offset = offset;
10591            let end_offset = offset + bytes_len;
10592            _next_ordinal_to_read += 1;
10593            if next_offset >= end_offset {
10594                return Ok(());
10595            }
10596
10597            // Decode unknown envelopes for gaps in ordinals.
10598            while _next_ordinal_to_read < 1 {
10599                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10600                _next_ordinal_to_read += 1;
10601                next_offset += envelope_size;
10602            }
10603
10604            let next_out_of_line = decoder.next_out_of_line();
10605            let handles_before = decoder.remaining_handles();
10606            if let Some((inlined, num_bytes, num_handles)) =
10607                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10608            {
10609                let member_inline_size =
10610                    <BorderRoutingNat64State as fidl::encoding::TypeMarker>::inline_size(
10611                        decoder.context,
10612                    );
10613                if inlined != (member_inline_size <= 4) {
10614                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10615                }
10616                let inner_offset;
10617                let mut inner_depth = depth.clone();
10618                if inlined {
10619                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10620                    inner_offset = next_offset;
10621                } else {
10622                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10623                    inner_depth.increment()?;
10624                }
10625                let val_ref = self
10626                    .nat64_state
10627                    .get_or_insert_with(|| fidl::new_empty!(BorderRoutingNat64State, D));
10628                fidl::decode!(
10629                    BorderRoutingNat64State,
10630                    D,
10631                    val_ref,
10632                    decoder,
10633                    inner_offset,
10634                    inner_depth
10635                )?;
10636                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10637                {
10638                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10639                }
10640                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10641                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10642                }
10643            }
10644
10645            next_offset += envelope_size;
10646            _next_ordinal_to_read += 1;
10647            if next_offset >= end_offset {
10648                return Ok(());
10649            }
10650
10651            // Decode unknown envelopes for gaps in ordinals.
10652            while _next_ordinal_to_read < 2 {
10653                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10654                _next_ordinal_to_read += 1;
10655                next_offset += envelope_size;
10656            }
10657
10658            let next_out_of_line = decoder.next_out_of_line();
10659            let handles_before = decoder.remaining_handles();
10660            if let Some((inlined, num_bytes, num_handles)) =
10661                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10662            {
10663                let member_inline_size = <fidl::encoding::UnboundedVector<Nat64Mapping> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
10664                if inlined != (member_inline_size <= 4) {
10665                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10666                }
10667                let inner_offset;
10668                let mut inner_depth = depth.clone();
10669                if inlined {
10670                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10671                    inner_offset = next_offset;
10672                } else {
10673                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10674                    inner_depth.increment()?;
10675                }
10676                let val_ref = self.nat64_mappings.get_or_insert_with(|| {
10677                    fidl::new_empty!(fidl::encoding::UnboundedVector<Nat64Mapping>, D)
10678                });
10679                fidl::decode!(
10680                    fidl::encoding::UnboundedVector<Nat64Mapping>,
10681                    D,
10682                    val_ref,
10683                    decoder,
10684                    inner_offset,
10685                    inner_depth
10686                )?;
10687                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10688                {
10689                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10690                }
10691                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10692                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10693                }
10694            }
10695
10696            next_offset += envelope_size;
10697            _next_ordinal_to_read += 1;
10698            if next_offset >= end_offset {
10699                return Ok(());
10700            }
10701
10702            // Decode unknown envelopes for gaps in ordinals.
10703            while _next_ordinal_to_read < 3 {
10704                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10705                _next_ordinal_to_read += 1;
10706                next_offset += envelope_size;
10707            }
10708
10709            let next_out_of_line = decoder.next_out_of_line();
10710            let handles_before = decoder.remaining_handles();
10711            if let Some((inlined, num_bytes, num_handles)) =
10712                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10713            {
10714                let member_inline_size =
10715                    <Nat64ErrorCounters as fidl::encoding::TypeMarker>::inline_size(
10716                        decoder.context,
10717                    );
10718                if inlined != (member_inline_size <= 4) {
10719                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10720                }
10721                let inner_offset;
10722                let mut inner_depth = depth.clone();
10723                if inlined {
10724                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10725                    inner_offset = next_offset;
10726                } else {
10727                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10728                    inner_depth.increment()?;
10729                }
10730                let val_ref = self
10731                    .nat64_error_counters
10732                    .get_or_insert_with(|| fidl::new_empty!(Nat64ErrorCounters, D));
10733                fidl::decode!(Nat64ErrorCounters, D, val_ref, decoder, inner_offset, inner_depth)?;
10734                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10735                {
10736                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10737                }
10738                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10739                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10740                }
10741            }
10742
10743            next_offset += envelope_size;
10744            _next_ordinal_to_read += 1;
10745            if next_offset >= end_offset {
10746                return Ok(());
10747            }
10748
10749            // Decode unknown envelopes for gaps in ordinals.
10750            while _next_ordinal_to_read < 4 {
10751                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10752                _next_ordinal_to_read += 1;
10753                next_offset += envelope_size;
10754            }
10755
10756            let next_out_of_line = decoder.next_out_of_line();
10757            let handles_before = decoder.remaining_handles();
10758            if let Some((inlined, num_bytes, num_handles)) =
10759                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10760            {
10761                let member_inline_size =
10762                    <Nat64ProtocolCounters as fidl::encoding::TypeMarker>::inline_size(
10763                        decoder.context,
10764                    );
10765                if inlined != (member_inline_size <= 4) {
10766                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10767                }
10768                let inner_offset;
10769                let mut inner_depth = depth.clone();
10770                if inlined {
10771                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10772                    inner_offset = next_offset;
10773                } else {
10774                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10775                    inner_depth.increment()?;
10776                }
10777                let val_ref = self
10778                    .nat64_protocol_counters
10779                    .get_or_insert_with(|| fidl::new_empty!(Nat64ProtocolCounters, D));
10780                fidl::decode!(
10781                    Nat64ProtocolCounters,
10782                    D,
10783                    val_ref,
10784                    decoder,
10785                    inner_offset,
10786                    inner_depth
10787                )?;
10788                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10789                {
10790                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10791                }
10792                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10793                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10794                }
10795            }
10796
10797            next_offset += envelope_size;
10798
10799            // Decode the remaining unknown envelopes.
10800            while next_offset < end_offset {
10801                _next_ordinal_to_read += 1;
10802                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10803                next_offset += envelope_size;
10804            }
10805
10806            Ok(())
10807        }
10808    }
10809
10810    impl Nat64Mapping {
10811        #[inline(always)]
10812        fn max_ordinal_present(&self) -> u64 {
10813            if let Some(_) = self.counters {
10814                return 5;
10815            }
10816            if let Some(_) = self.remaining_time_ms {
10817                return 4;
10818            }
10819            if let Some(_) = self.ip6_addr {
10820                return 3;
10821            }
10822            if let Some(_) = self.ip4_addr {
10823                return 2;
10824            }
10825            if let Some(_) = self.mapping_id {
10826                return 1;
10827            }
10828            0
10829        }
10830    }
10831
10832    impl fidl::encoding::ValueTypeMarker for Nat64Mapping {
10833        type Borrowed<'a> = &'a Self;
10834        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
10835            value
10836        }
10837    }
10838
10839    unsafe impl fidl::encoding::TypeMarker for Nat64Mapping {
10840        type Owned = Self;
10841
10842        #[inline(always)]
10843        fn inline_align(_context: fidl::encoding::Context) -> usize {
10844            8
10845        }
10846
10847        #[inline(always)]
10848        fn inline_size(_context: fidl::encoding::Context) -> usize {
10849            16
10850        }
10851    }
10852
10853    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Nat64Mapping, D>
10854        for &Nat64Mapping
10855    {
10856        unsafe fn encode(
10857            self,
10858            encoder: &mut fidl::encoding::Encoder<'_, D>,
10859            offset: usize,
10860            mut depth: fidl::encoding::Depth,
10861        ) -> fidl::Result<()> {
10862            encoder.debug_check_bounds::<Nat64Mapping>(offset);
10863            // Vector header
10864            let max_ordinal: u64 = self.max_ordinal_present();
10865            encoder.write_num(max_ordinal, offset);
10866            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
10867            // Calling encoder.out_of_line_offset(0) is not allowed.
10868            if max_ordinal == 0 {
10869                return Ok(());
10870            }
10871            depth.increment()?;
10872            let envelope_size = 8;
10873            let bytes_len = max_ordinal as usize * envelope_size;
10874            #[allow(unused_variables)]
10875            let offset = encoder.out_of_line_offset(bytes_len);
10876            let mut _prev_end_offset: usize = 0;
10877            if 1 > max_ordinal {
10878                return Ok(());
10879            }
10880
10881            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10882            // are envelope_size bytes.
10883            let cur_offset: usize = (1 - 1) * envelope_size;
10884
10885            // Zero reserved fields.
10886            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10887
10888            // Safety:
10889            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10890            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10891            //   envelope_size bytes, there is always sufficient room.
10892            fidl::encoding::encode_in_envelope_optional::<u64, D>(
10893                self.mapping_id.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
10894                encoder,
10895                offset + cur_offset,
10896                depth,
10897            )?;
10898
10899            _prev_end_offset = cur_offset + envelope_size;
10900            if 2 > max_ordinal {
10901                return Ok(());
10902            }
10903
10904            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10905            // are envelope_size bytes.
10906            let cur_offset: usize = (2 - 1) * envelope_size;
10907
10908            // Zero reserved fields.
10909            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10910
10911            // Safety:
10912            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10913            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10914            //   envelope_size bytes, there is always sufficient room.
10915            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<u8>, D>(
10916            self.ip4_addr.as_ref().map(<fidl::encoding::UnboundedVector<u8> as fidl::encoding::ValueTypeMarker>::borrow),
10917            encoder, offset + cur_offset, depth
10918        )?;
10919
10920            _prev_end_offset = cur_offset + envelope_size;
10921            if 3 > max_ordinal {
10922                return Ok(());
10923            }
10924
10925            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10926            // are envelope_size bytes.
10927            let cur_offset: usize = (3 - 1) * envelope_size;
10928
10929            // Zero reserved fields.
10930            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10931
10932            // Safety:
10933            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10934            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10935            //   envelope_size bytes, there is always sufficient room.
10936            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<u8>, D>(
10937            self.ip6_addr.as_ref().map(<fidl::encoding::UnboundedVector<u8> as fidl::encoding::ValueTypeMarker>::borrow),
10938            encoder, offset + cur_offset, depth
10939        )?;
10940
10941            _prev_end_offset = cur_offset + envelope_size;
10942            if 4 > max_ordinal {
10943                return Ok(());
10944            }
10945
10946            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10947            // are envelope_size bytes.
10948            let cur_offset: usize = (4 - 1) * envelope_size;
10949
10950            // Zero reserved fields.
10951            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10952
10953            // Safety:
10954            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10955            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10956            //   envelope_size bytes, there is always sufficient room.
10957            fidl::encoding::encode_in_envelope_optional::<u32, D>(
10958                self.remaining_time_ms
10959                    .as_ref()
10960                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
10961                encoder,
10962                offset + cur_offset,
10963                depth,
10964            )?;
10965
10966            _prev_end_offset = cur_offset + envelope_size;
10967            if 5 > max_ordinal {
10968                return Ok(());
10969            }
10970
10971            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10972            // are envelope_size bytes.
10973            let cur_offset: usize = (5 - 1) * envelope_size;
10974
10975            // Zero reserved fields.
10976            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10977
10978            // Safety:
10979            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10980            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10981            //   envelope_size bytes, there is always sufficient room.
10982            fidl::encoding::encode_in_envelope_optional::<Nat64ProtocolCounters, D>(
10983                self.counters
10984                    .as_ref()
10985                    .map(<Nat64ProtocolCounters as fidl::encoding::ValueTypeMarker>::borrow),
10986                encoder,
10987                offset + cur_offset,
10988                depth,
10989            )?;
10990
10991            _prev_end_offset = cur_offset + envelope_size;
10992
10993            Ok(())
10994        }
10995    }
10996
10997    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Nat64Mapping {
10998        #[inline(always)]
10999        fn new_empty() -> Self {
11000            Self::default()
11001        }
11002
11003        unsafe fn decode(
11004            &mut self,
11005            decoder: &mut fidl::encoding::Decoder<'_, D>,
11006            offset: usize,
11007            mut depth: fidl::encoding::Depth,
11008        ) -> fidl::Result<()> {
11009            decoder.debug_check_bounds::<Self>(offset);
11010            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
11011                None => return Err(fidl::Error::NotNullable),
11012                Some(len) => len,
11013            };
11014            // Calling decoder.out_of_line_offset(0) is not allowed.
11015            if len == 0 {
11016                return Ok(());
11017            };
11018            depth.increment()?;
11019            let envelope_size = 8;
11020            let bytes_len = len * envelope_size;
11021            let offset = decoder.out_of_line_offset(bytes_len)?;
11022            // Decode the envelope for each type.
11023            let mut _next_ordinal_to_read = 0;
11024            let mut next_offset = offset;
11025            let end_offset = offset + bytes_len;
11026            _next_ordinal_to_read += 1;
11027            if next_offset >= end_offset {
11028                return Ok(());
11029            }
11030
11031            // Decode unknown envelopes for gaps in ordinals.
11032            while _next_ordinal_to_read < 1 {
11033                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11034                _next_ordinal_to_read += 1;
11035                next_offset += envelope_size;
11036            }
11037
11038            let next_out_of_line = decoder.next_out_of_line();
11039            let handles_before = decoder.remaining_handles();
11040            if let Some((inlined, num_bytes, num_handles)) =
11041                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11042            {
11043                let member_inline_size =
11044                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
11045                if inlined != (member_inline_size <= 4) {
11046                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11047                }
11048                let inner_offset;
11049                let mut inner_depth = depth.clone();
11050                if inlined {
11051                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11052                    inner_offset = next_offset;
11053                } else {
11054                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11055                    inner_depth.increment()?;
11056                }
11057                let val_ref = self.mapping_id.get_or_insert_with(|| fidl::new_empty!(u64, D));
11058                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
11059                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11060                {
11061                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11062                }
11063                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11064                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11065                }
11066            }
11067
11068            next_offset += envelope_size;
11069            _next_ordinal_to_read += 1;
11070            if next_offset >= end_offset {
11071                return Ok(());
11072            }
11073
11074            // Decode unknown envelopes for gaps in ordinals.
11075            while _next_ordinal_to_read < 2 {
11076                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11077                _next_ordinal_to_read += 1;
11078                next_offset += envelope_size;
11079            }
11080
11081            let next_out_of_line = decoder.next_out_of_line();
11082            let handles_before = decoder.remaining_handles();
11083            if let Some((inlined, num_bytes, num_handles)) =
11084                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11085            {
11086                let member_inline_size = <fidl::encoding::UnboundedVector<u8> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
11087                if inlined != (member_inline_size <= 4) {
11088                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11089                }
11090                let inner_offset;
11091                let mut inner_depth = depth.clone();
11092                if inlined {
11093                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11094                    inner_offset = next_offset;
11095                } else {
11096                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11097                    inner_depth.increment()?;
11098                }
11099                let val_ref = self.ip4_addr.get_or_insert_with(|| {
11100                    fidl::new_empty!(fidl::encoding::UnboundedVector<u8>, D)
11101                });
11102                fidl::decode!(
11103                    fidl::encoding::UnboundedVector<u8>,
11104                    D,
11105                    val_ref,
11106                    decoder,
11107                    inner_offset,
11108                    inner_depth
11109                )?;
11110                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11111                {
11112                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11113                }
11114                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11115                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11116                }
11117            }
11118
11119            next_offset += envelope_size;
11120            _next_ordinal_to_read += 1;
11121            if next_offset >= end_offset {
11122                return Ok(());
11123            }
11124
11125            // Decode unknown envelopes for gaps in ordinals.
11126            while _next_ordinal_to_read < 3 {
11127                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11128                _next_ordinal_to_read += 1;
11129                next_offset += envelope_size;
11130            }
11131
11132            let next_out_of_line = decoder.next_out_of_line();
11133            let handles_before = decoder.remaining_handles();
11134            if let Some((inlined, num_bytes, num_handles)) =
11135                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11136            {
11137                let member_inline_size = <fidl::encoding::UnboundedVector<u8> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
11138                if inlined != (member_inline_size <= 4) {
11139                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11140                }
11141                let inner_offset;
11142                let mut inner_depth = depth.clone();
11143                if inlined {
11144                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11145                    inner_offset = next_offset;
11146                } else {
11147                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11148                    inner_depth.increment()?;
11149                }
11150                let val_ref = self.ip6_addr.get_or_insert_with(|| {
11151                    fidl::new_empty!(fidl::encoding::UnboundedVector<u8>, D)
11152                });
11153                fidl::decode!(
11154                    fidl::encoding::UnboundedVector<u8>,
11155                    D,
11156                    val_ref,
11157                    decoder,
11158                    inner_offset,
11159                    inner_depth
11160                )?;
11161                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11162                {
11163                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11164                }
11165                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11166                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11167                }
11168            }
11169
11170            next_offset += envelope_size;
11171            _next_ordinal_to_read += 1;
11172            if next_offset >= end_offset {
11173                return Ok(());
11174            }
11175
11176            // Decode unknown envelopes for gaps in ordinals.
11177            while _next_ordinal_to_read < 4 {
11178                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11179                _next_ordinal_to_read += 1;
11180                next_offset += envelope_size;
11181            }
11182
11183            let next_out_of_line = decoder.next_out_of_line();
11184            let handles_before = decoder.remaining_handles();
11185            if let Some((inlined, num_bytes, num_handles)) =
11186                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11187            {
11188                let member_inline_size =
11189                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
11190                if inlined != (member_inline_size <= 4) {
11191                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11192                }
11193                let inner_offset;
11194                let mut inner_depth = depth.clone();
11195                if inlined {
11196                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11197                    inner_offset = next_offset;
11198                } else {
11199                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11200                    inner_depth.increment()?;
11201                }
11202                let val_ref =
11203                    self.remaining_time_ms.get_or_insert_with(|| fidl::new_empty!(u32, D));
11204                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
11205                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11206                {
11207                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11208                }
11209                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11210                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11211                }
11212            }
11213
11214            next_offset += envelope_size;
11215            _next_ordinal_to_read += 1;
11216            if next_offset >= end_offset {
11217                return Ok(());
11218            }
11219
11220            // Decode unknown envelopes for gaps in ordinals.
11221            while _next_ordinal_to_read < 5 {
11222                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11223                _next_ordinal_to_read += 1;
11224                next_offset += envelope_size;
11225            }
11226
11227            let next_out_of_line = decoder.next_out_of_line();
11228            let handles_before = decoder.remaining_handles();
11229            if let Some((inlined, num_bytes, num_handles)) =
11230                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11231            {
11232                let member_inline_size =
11233                    <Nat64ProtocolCounters as fidl::encoding::TypeMarker>::inline_size(
11234                        decoder.context,
11235                    );
11236                if inlined != (member_inline_size <= 4) {
11237                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11238                }
11239                let inner_offset;
11240                let mut inner_depth = depth.clone();
11241                if inlined {
11242                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11243                    inner_offset = next_offset;
11244                } else {
11245                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11246                    inner_depth.increment()?;
11247                }
11248                let val_ref =
11249                    self.counters.get_or_insert_with(|| fidl::new_empty!(Nat64ProtocolCounters, D));
11250                fidl::decode!(
11251                    Nat64ProtocolCounters,
11252                    D,
11253                    val_ref,
11254                    decoder,
11255                    inner_offset,
11256                    inner_depth
11257                )?;
11258                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11259                {
11260                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11261                }
11262                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11263                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11264                }
11265            }
11266
11267            next_offset += envelope_size;
11268
11269            // Decode the remaining unknown envelopes.
11270            while next_offset < end_offset {
11271                _next_ordinal_to_read += 1;
11272                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11273                next_offset += envelope_size;
11274            }
11275
11276            Ok(())
11277        }
11278    }
11279
11280    impl Nat64PacketCounters {
11281        #[inline(always)]
11282        fn max_ordinal_present(&self) -> u64 {
11283            if let Some(_) = self.ipv6_to_ipv4_packets {
11284                return 2;
11285            }
11286            if let Some(_) = self.ipv4_to_ipv6_packets {
11287                return 1;
11288            }
11289            0
11290        }
11291    }
11292
11293    impl fidl::encoding::ValueTypeMarker for Nat64PacketCounters {
11294        type Borrowed<'a> = &'a Self;
11295        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
11296            value
11297        }
11298    }
11299
11300    unsafe impl fidl::encoding::TypeMarker for Nat64PacketCounters {
11301        type Owned = Self;
11302
11303        #[inline(always)]
11304        fn inline_align(_context: fidl::encoding::Context) -> usize {
11305            8
11306        }
11307
11308        #[inline(always)]
11309        fn inline_size(_context: fidl::encoding::Context) -> usize {
11310            16
11311        }
11312    }
11313
11314    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Nat64PacketCounters, D>
11315        for &Nat64PacketCounters
11316    {
11317        unsafe fn encode(
11318            self,
11319            encoder: &mut fidl::encoding::Encoder<'_, D>,
11320            offset: usize,
11321            mut depth: fidl::encoding::Depth,
11322        ) -> fidl::Result<()> {
11323            encoder.debug_check_bounds::<Nat64PacketCounters>(offset);
11324            // Vector header
11325            let max_ordinal: u64 = self.max_ordinal_present();
11326            encoder.write_num(max_ordinal, offset);
11327            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
11328            // Calling encoder.out_of_line_offset(0) is not allowed.
11329            if max_ordinal == 0 {
11330                return Ok(());
11331            }
11332            depth.increment()?;
11333            let envelope_size = 8;
11334            let bytes_len = max_ordinal as usize * envelope_size;
11335            #[allow(unused_variables)]
11336            let offset = encoder.out_of_line_offset(bytes_len);
11337            let mut _prev_end_offset: usize = 0;
11338            if 1 > max_ordinal {
11339                return Ok(());
11340            }
11341
11342            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11343            // are envelope_size bytes.
11344            let cur_offset: usize = (1 - 1) * envelope_size;
11345
11346            // Zero reserved fields.
11347            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11348
11349            // Safety:
11350            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11351            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11352            //   envelope_size bytes, there is always sufficient room.
11353            fidl::encoding::encode_in_envelope_optional::<u64, D>(
11354                self.ipv4_to_ipv6_packets
11355                    .as_ref()
11356                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
11357                encoder,
11358                offset + cur_offset,
11359                depth,
11360            )?;
11361
11362            _prev_end_offset = cur_offset + envelope_size;
11363            if 2 > max_ordinal {
11364                return Ok(());
11365            }
11366
11367            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11368            // are envelope_size bytes.
11369            let cur_offset: usize = (2 - 1) * envelope_size;
11370
11371            // Zero reserved fields.
11372            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11373
11374            // Safety:
11375            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11376            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11377            //   envelope_size bytes, there is always sufficient room.
11378            fidl::encoding::encode_in_envelope_optional::<u64, D>(
11379                self.ipv6_to_ipv4_packets
11380                    .as_ref()
11381                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
11382                encoder,
11383                offset + cur_offset,
11384                depth,
11385            )?;
11386
11387            _prev_end_offset = cur_offset + envelope_size;
11388
11389            Ok(())
11390        }
11391    }
11392
11393    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Nat64PacketCounters {
11394        #[inline(always)]
11395        fn new_empty() -> Self {
11396            Self::default()
11397        }
11398
11399        unsafe fn decode(
11400            &mut self,
11401            decoder: &mut fidl::encoding::Decoder<'_, D>,
11402            offset: usize,
11403            mut depth: fidl::encoding::Depth,
11404        ) -> fidl::Result<()> {
11405            decoder.debug_check_bounds::<Self>(offset);
11406            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
11407                None => return Err(fidl::Error::NotNullable),
11408                Some(len) => len,
11409            };
11410            // Calling decoder.out_of_line_offset(0) is not allowed.
11411            if len == 0 {
11412                return Ok(());
11413            };
11414            depth.increment()?;
11415            let envelope_size = 8;
11416            let bytes_len = len * envelope_size;
11417            let offset = decoder.out_of_line_offset(bytes_len)?;
11418            // Decode the envelope for each type.
11419            let mut _next_ordinal_to_read = 0;
11420            let mut next_offset = offset;
11421            let end_offset = offset + bytes_len;
11422            _next_ordinal_to_read += 1;
11423            if next_offset >= end_offset {
11424                return Ok(());
11425            }
11426
11427            // Decode unknown envelopes for gaps in ordinals.
11428            while _next_ordinal_to_read < 1 {
11429                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11430                _next_ordinal_to_read += 1;
11431                next_offset += envelope_size;
11432            }
11433
11434            let next_out_of_line = decoder.next_out_of_line();
11435            let handles_before = decoder.remaining_handles();
11436            if let Some((inlined, num_bytes, num_handles)) =
11437                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11438            {
11439                let member_inline_size =
11440                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
11441                if inlined != (member_inline_size <= 4) {
11442                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11443                }
11444                let inner_offset;
11445                let mut inner_depth = depth.clone();
11446                if inlined {
11447                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11448                    inner_offset = next_offset;
11449                } else {
11450                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11451                    inner_depth.increment()?;
11452                }
11453                let val_ref =
11454                    self.ipv4_to_ipv6_packets.get_or_insert_with(|| fidl::new_empty!(u64, D));
11455                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
11456                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11457                {
11458                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11459                }
11460                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11461                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11462                }
11463            }
11464
11465            next_offset += envelope_size;
11466            _next_ordinal_to_read += 1;
11467            if next_offset >= end_offset {
11468                return Ok(());
11469            }
11470
11471            // Decode unknown envelopes for gaps in ordinals.
11472            while _next_ordinal_to_read < 2 {
11473                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11474                _next_ordinal_to_read += 1;
11475                next_offset += envelope_size;
11476            }
11477
11478            let next_out_of_line = decoder.next_out_of_line();
11479            let handles_before = decoder.remaining_handles();
11480            if let Some((inlined, num_bytes, num_handles)) =
11481                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11482            {
11483                let member_inline_size =
11484                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
11485                if inlined != (member_inline_size <= 4) {
11486                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11487                }
11488                let inner_offset;
11489                let mut inner_depth = depth.clone();
11490                if inlined {
11491                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11492                    inner_offset = next_offset;
11493                } else {
11494                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11495                    inner_depth.increment()?;
11496                }
11497                let val_ref =
11498                    self.ipv6_to_ipv4_packets.get_or_insert_with(|| fidl::new_empty!(u64, D));
11499                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
11500                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11501                {
11502                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11503                }
11504                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11505                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11506                }
11507            }
11508
11509            next_offset += envelope_size;
11510
11511            // Decode the remaining unknown envelopes.
11512            while next_offset < end_offset {
11513                _next_ordinal_to_read += 1;
11514                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11515                next_offset += envelope_size;
11516            }
11517
11518            Ok(())
11519        }
11520    }
11521
11522    impl Nat64ProtocolCounters {
11523        #[inline(always)]
11524        fn max_ordinal_present(&self) -> u64 {
11525            if let Some(_) = self.total {
11526                return 4;
11527            }
11528            if let Some(_) = self.icmp {
11529                return 3;
11530            }
11531            if let Some(_) = self.udp {
11532                return 2;
11533            }
11534            if let Some(_) = self.tcp {
11535                return 1;
11536            }
11537            0
11538        }
11539    }
11540
11541    impl fidl::encoding::ValueTypeMarker for Nat64ProtocolCounters {
11542        type Borrowed<'a> = &'a Self;
11543        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
11544            value
11545        }
11546    }
11547
11548    unsafe impl fidl::encoding::TypeMarker for Nat64ProtocolCounters {
11549        type Owned = Self;
11550
11551        #[inline(always)]
11552        fn inline_align(_context: fidl::encoding::Context) -> usize {
11553            8
11554        }
11555
11556        #[inline(always)]
11557        fn inline_size(_context: fidl::encoding::Context) -> usize {
11558            16
11559        }
11560    }
11561
11562    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Nat64ProtocolCounters, D>
11563        for &Nat64ProtocolCounters
11564    {
11565        unsafe fn encode(
11566            self,
11567            encoder: &mut fidl::encoding::Encoder<'_, D>,
11568            offset: usize,
11569            mut depth: fidl::encoding::Depth,
11570        ) -> fidl::Result<()> {
11571            encoder.debug_check_bounds::<Nat64ProtocolCounters>(offset);
11572            // Vector header
11573            let max_ordinal: u64 = self.max_ordinal_present();
11574            encoder.write_num(max_ordinal, offset);
11575            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
11576            // Calling encoder.out_of_line_offset(0) is not allowed.
11577            if max_ordinal == 0 {
11578                return Ok(());
11579            }
11580            depth.increment()?;
11581            let envelope_size = 8;
11582            let bytes_len = max_ordinal as usize * envelope_size;
11583            #[allow(unused_variables)]
11584            let offset = encoder.out_of_line_offset(bytes_len);
11585            let mut _prev_end_offset: usize = 0;
11586            if 1 > max_ordinal {
11587                return Ok(());
11588            }
11589
11590            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11591            // are envelope_size bytes.
11592            let cur_offset: usize = (1 - 1) * envelope_size;
11593
11594            // Zero reserved fields.
11595            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11596
11597            // Safety:
11598            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11599            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11600            //   envelope_size bytes, there is always sufficient room.
11601            fidl::encoding::encode_in_envelope_optional::<Nat64TrafficCounters, D>(
11602                self.tcp
11603                    .as_ref()
11604                    .map(<Nat64TrafficCounters as fidl::encoding::ValueTypeMarker>::borrow),
11605                encoder,
11606                offset + cur_offset,
11607                depth,
11608            )?;
11609
11610            _prev_end_offset = cur_offset + envelope_size;
11611            if 2 > max_ordinal {
11612                return Ok(());
11613            }
11614
11615            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11616            // are envelope_size bytes.
11617            let cur_offset: usize = (2 - 1) * envelope_size;
11618
11619            // Zero reserved fields.
11620            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11621
11622            // Safety:
11623            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11624            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11625            //   envelope_size bytes, there is always sufficient room.
11626            fidl::encoding::encode_in_envelope_optional::<Nat64TrafficCounters, D>(
11627                self.udp
11628                    .as_ref()
11629                    .map(<Nat64TrafficCounters as fidl::encoding::ValueTypeMarker>::borrow),
11630                encoder,
11631                offset + cur_offset,
11632                depth,
11633            )?;
11634
11635            _prev_end_offset = cur_offset + envelope_size;
11636            if 3 > max_ordinal {
11637                return Ok(());
11638            }
11639
11640            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11641            // are envelope_size bytes.
11642            let cur_offset: usize = (3 - 1) * envelope_size;
11643
11644            // Zero reserved fields.
11645            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11646
11647            // Safety:
11648            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11649            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11650            //   envelope_size bytes, there is always sufficient room.
11651            fidl::encoding::encode_in_envelope_optional::<Nat64TrafficCounters, D>(
11652                self.icmp
11653                    .as_ref()
11654                    .map(<Nat64TrafficCounters as fidl::encoding::ValueTypeMarker>::borrow),
11655                encoder,
11656                offset + cur_offset,
11657                depth,
11658            )?;
11659
11660            _prev_end_offset = cur_offset + envelope_size;
11661            if 4 > max_ordinal {
11662                return Ok(());
11663            }
11664
11665            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11666            // are envelope_size bytes.
11667            let cur_offset: usize = (4 - 1) * envelope_size;
11668
11669            // Zero reserved fields.
11670            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11671
11672            // Safety:
11673            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11674            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11675            //   envelope_size bytes, there is always sufficient room.
11676            fidl::encoding::encode_in_envelope_optional::<Nat64TrafficCounters, D>(
11677                self.total
11678                    .as_ref()
11679                    .map(<Nat64TrafficCounters as fidl::encoding::ValueTypeMarker>::borrow),
11680                encoder,
11681                offset + cur_offset,
11682                depth,
11683            )?;
11684
11685            _prev_end_offset = cur_offset + envelope_size;
11686
11687            Ok(())
11688        }
11689    }
11690
11691    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Nat64ProtocolCounters {
11692        #[inline(always)]
11693        fn new_empty() -> Self {
11694            Self::default()
11695        }
11696
11697        unsafe fn decode(
11698            &mut self,
11699            decoder: &mut fidl::encoding::Decoder<'_, D>,
11700            offset: usize,
11701            mut depth: fidl::encoding::Depth,
11702        ) -> fidl::Result<()> {
11703            decoder.debug_check_bounds::<Self>(offset);
11704            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
11705                None => return Err(fidl::Error::NotNullable),
11706                Some(len) => len,
11707            };
11708            // Calling decoder.out_of_line_offset(0) is not allowed.
11709            if len == 0 {
11710                return Ok(());
11711            };
11712            depth.increment()?;
11713            let envelope_size = 8;
11714            let bytes_len = len * envelope_size;
11715            let offset = decoder.out_of_line_offset(bytes_len)?;
11716            // Decode the envelope for each type.
11717            let mut _next_ordinal_to_read = 0;
11718            let mut next_offset = offset;
11719            let end_offset = offset + bytes_len;
11720            _next_ordinal_to_read += 1;
11721            if next_offset >= end_offset {
11722                return Ok(());
11723            }
11724
11725            // Decode unknown envelopes for gaps in ordinals.
11726            while _next_ordinal_to_read < 1 {
11727                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11728                _next_ordinal_to_read += 1;
11729                next_offset += envelope_size;
11730            }
11731
11732            let next_out_of_line = decoder.next_out_of_line();
11733            let handles_before = decoder.remaining_handles();
11734            if let Some((inlined, num_bytes, num_handles)) =
11735                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11736            {
11737                let member_inline_size =
11738                    <Nat64TrafficCounters as fidl::encoding::TypeMarker>::inline_size(
11739                        decoder.context,
11740                    );
11741                if inlined != (member_inline_size <= 4) {
11742                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11743                }
11744                let inner_offset;
11745                let mut inner_depth = depth.clone();
11746                if inlined {
11747                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11748                    inner_offset = next_offset;
11749                } else {
11750                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11751                    inner_depth.increment()?;
11752                }
11753                let val_ref =
11754                    self.tcp.get_or_insert_with(|| fidl::new_empty!(Nat64TrafficCounters, D));
11755                fidl::decode!(
11756                    Nat64TrafficCounters,
11757                    D,
11758                    val_ref,
11759                    decoder,
11760                    inner_offset,
11761                    inner_depth
11762                )?;
11763                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11764                {
11765                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11766                }
11767                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11768                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11769                }
11770            }
11771
11772            next_offset += envelope_size;
11773            _next_ordinal_to_read += 1;
11774            if next_offset >= end_offset {
11775                return Ok(());
11776            }
11777
11778            // Decode unknown envelopes for gaps in ordinals.
11779            while _next_ordinal_to_read < 2 {
11780                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11781                _next_ordinal_to_read += 1;
11782                next_offset += envelope_size;
11783            }
11784
11785            let next_out_of_line = decoder.next_out_of_line();
11786            let handles_before = decoder.remaining_handles();
11787            if let Some((inlined, num_bytes, num_handles)) =
11788                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11789            {
11790                let member_inline_size =
11791                    <Nat64TrafficCounters as fidl::encoding::TypeMarker>::inline_size(
11792                        decoder.context,
11793                    );
11794                if inlined != (member_inline_size <= 4) {
11795                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11796                }
11797                let inner_offset;
11798                let mut inner_depth = depth.clone();
11799                if inlined {
11800                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11801                    inner_offset = next_offset;
11802                } else {
11803                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11804                    inner_depth.increment()?;
11805                }
11806                let val_ref =
11807                    self.udp.get_or_insert_with(|| fidl::new_empty!(Nat64TrafficCounters, D));
11808                fidl::decode!(
11809                    Nat64TrafficCounters,
11810                    D,
11811                    val_ref,
11812                    decoder,
11813                    inner_offset,
11814                    inner_depth
11815                )?;
11816                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11817                {
11818                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11819                }
11820                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11821                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11822                }
11823            }
11824
11825            next_offset += envelope_size;
11826            _next_ordinal_to_read += 1;
11827            if next_offset >= end_offset {
11828                return Ok(());
11829            }
11830
11831            // Decode unknown envelopes for gaps in ordinals.
11832            while _next_ordinal_to_read < 3 {
11833                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11834                _next_ordinal_to_read += 1;
11835                next_offset += envelope_size;
11836            }
11837
11838            let next_out_of_line = decoder.next_out_of_line();
11839            let handles_before = decoder.remaining_handles();
11840            if let Some((inlined, num_bytes, num_handles)) =
11841                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11842            {
11843                let member_inline_size =
11844                    <Nat64TrafficCounters as fidl::encoding::TypeMarker>::inline_size(
11845                        decoder.context,
11846                    );
11847                if inlined != (member_inline_size <= 4) {
11848                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11849                }
11850                let inner_offset;
11851                let mut inner_depth = depth.clone();
11852                if inlined {
11853                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11854                    inner_offset = next_offset;
11855                } else {
11856                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11857                    inner_depth.increment()?;
11858                }
11859                let val_ref =
11860                    self.icmp.get_or_insert_with(|| fidl::new_empty!(Nat64TrafficCounters, D));
11861                fidl::decode!(
11862                    Nat64TrafficCounters,
11863                    D,
11864                    val_ref,
11865                    decoder,
11866                    inner_offset,
11867                    inner_depth
11868                )?;
11869                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11870                {
11871                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11872                }
11873                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11874                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11875                }
11876            }
11877
11878            next_offset += envelope_size;
11879            _next_ordinal_to_read += 1;
11880            if next_offset >= end_offset {
11881                return Ok(());
11882            }
11883
11884            // Decode unknown envelopes for gaps in ordinals.
11885            while _next_ordinal_to_read < 4 {
11886                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11887                _next_ordinal_to_read += 1;
11888                next_offset += envelope_size;
11889            }
11890
11891            let next_out_of_line = decoder.next_out_of_line();
11892            let handles_before = decoder.remaining_handles();
11893            if let Some((inlined, num_bytes, num_handles)) =
11894                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11895            {
11896                let member_inline_size =
11897                    <Nat64TrafficCounters as fidl::encoding::TypeMarker>::inline_size(
11898                        decoder.context,
11899                    );
11900                if inlined != (member_inline_size <= 4) {
11901                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11902                }
11903                let inner_offset;
11904                let mut inner_depth = depth.clone();
11905                if inlined {
11906                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11907                    inner_offset = next_offset;
11908                } else {
11909                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11910                    inner_depth.increment()?;
11911                }
11912                let val_ref =
11913                    self.total.get_or_insert_with(|| fidl::new_empty!(Nat64TrafficCounters, D));
11914                fidl::decode!(
11915                    Nat64TrafficCounters,
11916                    D,
11917                    val_ref,
11918                    decoder,
11919                    inner_offset,
11920                    inner_depth
11921                )?;
11922                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11923                {
11924                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11925                }
11926                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11927                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11928                }
11929            }
11930
11931            next_offset += envelope_size;
11932
11933            // Decode the remaining unknown envelopes.
11934            while next_offset < end_offset {
11935                _next_ordinal_to_read += 1;
11936                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11937                next_offset += envelope_size;
11938            }
11939
11940            Ok(())
11941        }
11942    }
11943
11944    impl Nat64TrafficCounters {
11945        #[inline(always)]
11946        fn max_ordinal_present(&self) -> u64 {
11947            if let Some(_) = self.ipv6_to_ipv4_bytes {
11948                return 4;
11949            }
11950            if let Some(_) = self.ipv6_to_ipv4_packets {
11951                return 3;
11952            }
11953            if let Some(_) = self.ipv4_to_ipv6_bytes {
11954                return 2;
11955            }
11956            if let Some(_) = self.ipv4_to_ipv6_packets {
11957                return 1;
11958            }
11959            0
11960        }
11961    }
11962
11963    impl fidl::encoding::ValueTypeMarker for Nat64TrafficCounters {
11964        type Borrowed<'a> = &'a Self;
11965        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
11966            value
11967        }
11968    }
11969
11970    unsafe impl fidl::encoding::TypeMarker for Nat64TrafficCounters {
11971        type Owned = Self;
11972
11973        #[inline(always)]
11974        fn inline_align(_context: fidl::encoding::Context) -> usize {
11975            8
11976        }
11977
11978        #[inline(always)]
11979        fn inline_size(_context: fidl::encoding::Context) -> usize {
11980            16
11981        }
11982    }
11983
11984    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Nat64TrafficCounters, D>
11985        for &Nat64TrafficCounters
11986    {
11987        unsafe fn encode(
11988            self,
11989            encoder: &mut fidl::encoding::Encoder<'_, D>,
11990            offset: usize,
11991            mut depth: fidl::encoding::Depth,
11992        ) -> fidl::Result<()> {
11993            encoder.debug_check_bounds::<Nat64TrafficCounters>(offset);
11994            // Vector header
11995            let max_ordinal: u64 = self.max_ordinal_present();
11996            encoder.write_num(max_ordinal, offset);
11997            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
11998            // Calling encoder.out_of_line_offset(0) is not allowed.
11999            if max_ordinal == 0 {
12000                return Ok(());
12001            }
12002            depth.increment()?;
12003            let envelope_size = 8;
12004            let bytes_len = max_ordinal as usize * envelope_size;
12005            #[allow(unused_variables)]
12006            let offset = encoder.out_of_line_offset(bytes_len);
12007            let mut _prev_end_offset: usize = 0;
12008            if 1 > max_ordinal {
12009                return Ok(());
12010            }
12011
12012            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
12013            // are envelope_size bytes.
12014            let cur_offset: usize = (1 - 1) * envelope_size;
12015
12016            // Zero reserved fields.
12017            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
12018
12019            // Safety:
12020            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
12021            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
12022            //   envelope_size bytes, there is always sufficient room.
12023            fidl::encoding::encode_in_envelope_optional::<u64, D>(
12024                self.ipv4_to_ipv6_packets
12025                    .as_ref()
12026                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
12027                encoder,
12028                offset + cur_offset,
12029                depth,
12030            )?;
12031
12032            _prev_end_offset = cur_offset + envelope_size;
12033            if 2 > max_ordinal {
12034                return Ok(());
12035            }
12036
12037            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
12038            // are envelope_size bytes.
12039            let cur_offset: usize = (2 - 1) * envelope_size;
12040
12041            // Zero reserved fields.
12042            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
12043
12044            // Safety:
12045            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
12046            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
12047            //   envelope_size bytes, there is always sufficient room.
12048            fidl::encoding::encode_in_envelope_optional::<u64, D>(
12049                self.ipv4_to_ipv6_bytes
12050                    .as_ref()
12051                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
12052                encoder,
12053                offset + cur_offset,
12054                depth,
12055            )?;
12056
12057            _prev_end_offset = cur_offset + envelope_size;
12058            if 3 > max_ordinal {
12059                return Ok(());
12060            }
12061
12062            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
12063            // are envelope_size bytes.
12064            let cur_offset: usize = (3 - 1) * envelope_size;
12065
12066            // Zero reserved fields.
12067            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
12068
12069            // Safety:
12070            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
12071            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
12072            //   envelope_size bytes, there is always sufficient room.
12073            fidl::encoding::encode_in_envelope_optional::<u64, D>(
12074                self.ipv6_to_ipv4_packets
12075                    .as_ref()
12076                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
12077                encoder,
12078                offset + cur_offset,
12079                depth,
12080            )?;
12081
12082            _prev_end_offset = cur_offset + envelope_size;
12083            if 4 > max_ordinal {
12084                return Ok(());
12085            }
12086
12087            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
12088            // are envelope_size bytes.
12089            let cur_offset: usize = (4 - 1) * envelope_size;
12090
12091            // Zero reserved fields.
12092            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
12093
12094            // Safety:
12095            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
12096            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
12097            //   envelope_size bytes, there is always sufficient room.
12098            fidl::encoding::encode_in_envelope_optional::<u64, D>(
12099                self.ipv6_to_ipv4_bytes
12100                    .as_ref()
12101                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
12102                encoder,
12103                offset + cur_offset,
12104                depth,
12105            )?;
12106
12107            _prev_end_offset = cur_offset + envelope_size;
12108
12109            Ok(())
12110        }
12111    }
12112
12113    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Nat64TrafficCounters {
12114        #[inline(always)]
12115        fn new_empty() -> Self {
12116            Self::default()
12117        }
12118
12119        unsafe fn decode(
12120            &mut self,
12121            decoder: &mut fidl::encoding::Decoder<'_, D>,
12122            offset: usize,
12123            mut depth: fidl::encoding::Depth,
12124        ) -> fidl::Result<()> {
12125            decoder.debug_check_bounds::<Self>(offset);
12126            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
12127                None => return Err(fidl::Error::NotNullable),
12128                Some(len) => len,
12129            };
12130            // Calling decoder.out_of_line_offset(0) is not allowed.
12131            if len == 0 {
12132                return Ok(());
12133            };
12134            depth.increment()?;
12135            let envelope_size = 8;
12136            let bytes_len = len * envelope_size;
12137            let offset = decoder.out_of_line_offset(bytes_len)?;
12138            // Decode the envelope for each type.
12139            let mut _next_ordinal_to_read = 0;
12140            let mut next_offset = offset;
12141            let end_offset = offset + bytes_len;
12142            _next_ordinal_to_read += 1;
12143            if next_offset >= end_offset {
12144                return Ok(());
12145            }
12146
12147            // Decode unknown envelopes for gaps in ordinals.
12148            while _next_ordinal_to_read < 1 {
12149                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12150                _next_ordinal_to_read += 1;
12151                next_offset += envelope_size;
12152            }
12153
12154            let next_out_of_line = decoder.next_out_of_line();
12155            let handles_before = decoder.remaining_handles();
12156            if let Some((inlined, num_bytes, num_handles)) =
12157                fidl::encoding::decode_envelope_header(decoder, next_offset)?
12158            {
12159                let member_inline_size =
12160                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
12161                if inlined != (member_inline_size <= 4) {
12162                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
12163                }
12164                let inner_offset;
12165                let mut inner_depth = depth.clone();
12166                if inlined {
12167                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
12168                    inner_offset = next_offset;
12169                } else {
12170                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
12171                    inner_depth.increment()?;
12172                }
12173                let val_ref =
12174                    self.ipv4_to_ipv6_packets.get_or_insert_with(|| fidl::new_empty!(u64, D));
12175                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
12176                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
12177                {
12178                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
12179                }
12180                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
12181                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
12182                }
12183            }
12184
12185            next_offset += envelope_size;
12186            _next_ordinal_to_read += 1;
12187            if next_offset >= end_offset {
12188                return Ok(());
12189            }
12190
12191            // Decode unknown envelopes for gaps in ordinals.
12192            while _next_ordinal_to_read < 2 {
12193                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12194                _next_ordinal_to_read += 1;
12195                next_offset += envelope_size;
12196            }
12197
12198            let next_out_of_line = decoder.next_out_of_line();
12199            let handles_before = decoder.remaining_handles();
12200            if let Some((inlined, num_bytes, num_handles)) =
12201                fidl::encoding::decode_envelope_header(decoder, next_offset)?
12202            {
12203                let member_inline_size =
12204                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
12205                if inlined != (member_inline_size <= 4) {
12206                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
12207                }
12208                let inner_offset;
12209                let mut inner_depth = depth.clone();
12210                if inlined {
12211                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
12212                    inner_offset = next_offset;
12213                } else {
12214                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
12215                    inner_depth.increment()?;
12216                }
12217                let val_ref =
12218                    self.ipv4_to_ipv6_bytes.get_or_insert_with(|| fidl::new_empty!(u64, D));
12219                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
12220                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
12221                {
12222                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
12223                }
12224                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
12225                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
12226                }
12227            }
12228
12229            next_offset += envelope_size;
12230            _next_ordinal_to_read += 1;
12231            if next_offset >= end_offset {
12232                return Ok(());
12233            }
12234
12235            // Decode unknown envelopes for gaps in ordinals.
12236            while _next_ordinal_to_read < 3 {
12237                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12238                _next_ordinal_to_read += 1;
12239                next_offset += envelope_size;
12240            }
12241
12242            let next_out_of_line = decoder.next_out_of_line();
12243            let handles_before = decoder.remaining_handles();
12244            if let Some((inlined, num_bytes, num_handles)) =
12245                fidl::encoding::decode_envelope_header(decoder, next_offset)?
12246            {
12247                let member_inline_size =
12248                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
12249                if inlined != (member_inline_size <= 4) {
12250                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
12251                }
12252                let inner_offset;
12253                let mut inner_depth = depth.clone();
12254                if inlined {
12255                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
12256                    inner_offset = next_offset;
12257                } else {
12258                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
12259                    inner_depth.increment()?;
12260                }
12261                let val_ref =
12262                    self.ipv6_to_ipv4_packets.get_or_insert_with(|| fidl::new_empty!(u64, D));
12263                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
12264                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
12265                {
12266                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
12267                }
12268                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
12269                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
12270                }
12271            }
12272
12273            next_offset += envelope_size;
12274            _next_ordinal_to_read += 1;
12275            if next_offset >= end_offset {
12276                return Ok(());
12277            }
12278
12279            // Decode unknown envelopes for gaps in ordinals.
12280            while _next_ordinal_to_read < 4 {
12281                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12282                _next_ordinal_to_read += 1;
12283                next_offset += envelope_size;
12284            }
12285
12286            let next_out_of_line = decoder.next_out_of_line();
12287            let handles_before = decoder.remaining_handles();
12288            if let Some((inlined, num_bytes, num_handles)) =
12289                fidl::encoding::decode_envelope_header(decoder, next_offset)?
12290            {
12291                let member_inline_size =
12292                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
12293                if inlined != (member_inline_size <= 4) {
12294                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
12295                }
12296                let inner_offset;
12297                let mut inner_depth = depth.clone();
12298                if inlined {
12299                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
12300                    inner_offset = next_offset;
12301                } else {
12302                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
12303                    inner_depth.increment()?;
12304                }
12305                let val_ref =
12306                    self.ipv6_to_ipv4_bytes.get_or_insert_with(|| fidl::new_empty!(u64, D));
12307                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
12308                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
12309                {
12310                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
12311                }
12312                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
12313                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
12314                }
12315            }
12316
12317            next_offset += envelope_size;
12318
12319            // Decode the remaining unknown envelopes.
12320            while next_offset < end_offset {
12321                _next_ordinal_to_read += 1;
12322                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12323                next_offset += envelope_size;
12324            }
12325
12326            Ok(())
12327        }
12328    }
12329
12330    impl NetworkScanParameters {
12331        #[inline(always)]
12332        fn max_ordinal_present(&self) -> u64 {
12333            if let Some(_) = self.tx_power_dbm {
12334                return 2;
12335            }
12336            if let Some(_) = self.channels {
12337                return 1;
12338            }
12339            0
12340        }
12341    }
12342
12343    impl fidl::encoding::ValueTypeMarker for NetworkScanParameters {
12344        type Borrowed<'a> = &'a Self;
12345        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
12346            value
12347        }
12348    }
12349
12350    unsafe impl fidl::encoding::TypeMarker for NetworkScanParameters {
12351        type Owned = Self;
12352
12353        #[inline(always)]
12354        fn inline_align(_context: fidl::encoding::Context) -> usize {
12355            8
12356        }
12357
12358        #[inline(always)]
12359        fn inline_size(_context: fidl::encoding::Context) -> usize {
12360            16
12361        }
12362    }
12363
12364    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<NetworkScanParameters, D>
12365        for &NetworkScanParameters
12366    {
12367        unsafe fn encode(
12368            self,
12369            encoder: &mut fidl::encoding::Encoder<'_, D>,
12370            offset: usize,
12371            mut depth: fidl::encoding::Depth,
12372        ) -> fidl::Result<()> {
12373            encoder.debug_check_bounds::<NetworkScanParameters>(offset);
12374            // Vector header
12375            let max_ordinal: u64 = self.max_ordinal_present();
12376            encoder.write_num(max_ordinal, offset);
12377            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
12378            // Calling encoder.out_of_line_offset(0) is not allowed.
12379            if max_ordinal == 0 {
12380                return Ok(());
12381            }
12382            depth.increment()?;
12383            let envelope_size = 8;
12384            let bytes_len = max_ordinal as usize * envelope_size;
12385            #[allow(unused_variables)]
12386            let offset = encoder.out_of_line_offset(bytes_len);
12387            let mut _prev_end_offset: usize = 0;
12388            if 1 > max_ordinal {
12389                return Ok(());
12390            }
12391
12392            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
12393            // are envelope_size bytes.
12394            let cur_offset: usize = (1 - 1) * envelope_size;
12395
12396            // Zero reserved fields.
12397            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
12398
12399            // Safety:
12400            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
12401            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
12402            //   envelope_size bytes, there is always sufficient room.
12403            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u16, 200>, D>(
12404                self.channels.as_ref().map(
12405                    <fidl::encoding::Vector<u16, 200> as fidl::encoding::ValueTypeMarker>::borrow,
12406                ),
12407                encoder,
12408                offset + cur_offset,
12409                depth,
12410            )?;
12411
12412            _prev_end_offset = cur_offset + envelope_size;
12413            if 2 > max_ordinal {
12414                return Ok(());
12415            }
12416
12417            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
12418            // are envelope_size bytes.
12419            let cur_offset: usize = (2 - 1) * envelope_size;
12420
12421            // Zero reserved fields.
12422            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
12423
12424            // Safety:
12425            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
12426            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
12427            //   envelope_size bytes, there is always sufficient room.
12428            fidl::encoding::encode_in_envelope_optional::<i8, D>(
12429                self.tx_power_dbm.as_ref().map(<i8 as fidl::encoding::ValueTypeMarker>::borrow),
12430                encoder,
12431                offset + cur_offset,
12432                depth,
12433            )?;
12434
12435            _prev_end_offset = cur_offset + envelope_size;
12436
12437            Ok(())
12438        }
12439    }
12440
12441    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for NetworkScanParameters {
12442        #[inline(always)]
12443        fn new_empty() -> Self {
12444            Self::default()
12445        }
12446
12447        unsafe fn decode(
12448            &mut self,
12449            decoder: &mut fidl::encoding::Decoder<'_, D>,
12450            offset: usize,
12451            mut depth: fidl::encoding::Depth,
12452        ) -> fidl::Result<()> {
12453            decoder.debug_check_bounds::<Self>(offset);
12454            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
12455                None => return Err(fidl::Error::NotNullable),
12456                Some(len) => len,
12457            };
12458            // Calling decoder.out_of_line_offset(0) is not allowed.
12459            if len == 0 {
12460                return Ok(());
12461            };
12462            depth.increment()?;
12463            let envelope_size = 8;
12464            let bytes_len = len * envelope_size;
12465            let offset = decoder.out_of_line_offset(bytes_len)?;
12466            // Decode the envelope for each type.
12467            let mut _next_ordinal_to_read = 0;
12468            let mut next_offset = offset;
12469            let end_offset = offset + bytes_len;
12470            _next_ordinal_to_read += 1;
12471            if next_offset >= end_offset {
12472                return Ok(());
12473            }
12474
12475            // Decode unknown envelopes for gaps in ordinals.
12476            while _next_ordinal_to_read < 1 {
12477                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12478                _next_ordinal_to_read += 1;
12479                next_offset += envelope_size;
12480            }
12481
12482            let next_out_of_line = decoder.next_out_of_line();
12483            let handles_before = decoder.remaining_handles();
12484            if let Some((inlined, num_bytes, num_handles)) =
12485                fidl::encoding::decode_envelope_header(decoder, next_offset)?
12486            {
12487                let member_inline_size =
12488                    <fidl::encoding::Vector<u16, 200> as fidl::encoding::TypeMarker>::inline_size(
12489                        decoder.context,
12490                    );
12491                if inlined != (member_inline_size <= 4) {
12492                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
12493                }
12494                let inner_offset;
12495                let mut inner_depth = depth.clone();
12496                if inlined {
12497                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
12498                    inner_offset = next_offset;
12499                } else {
12500                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
12501                    inner_depth.increment()?;
12502                }
12503                let val_ref = self
12504                    .channels
12505                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u16, 200>, D));
12506                fidl::decode!(fidl::encoding::Vector<u16, 200>, D, val_ref, decoder, inner_offset, inner_depth)?;
12507                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
12508                {
12509                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
12510                }
12511                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
12512                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
12513                }
12514            }
12515
12516            next_offset += envelope_size;
12517            _next_ordinal_to_read += 1;
12518            if next_offset >= end_offset {
12519                return Ok(());
12520            }
12521
12522            // Decode unknown envelopes for gaps in ordinals.
12523            while _next_ordinal_to_read < 2 {
12524                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12525                _next_ordinal_to_read += 1;
12526                next_offset += envelope_size;
12527            }
12528
12529            let next_out_of_line = decoder.next_out_of_line();
12530            let handles_before = decoder.remaining_handles();
12531            if let Some((inlined, num_bytes, num_handles)) =
12532                fidl::encoding::decode_envelope_header(decoder, next_offset)?
12533            {
12534                let member_inline_size =
12535                    <i8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
12536                if inlined != (member_inline_size <= 4) {
12537                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
12538                }
12539                let inner_offset;
12540                let mut inner_depth = depth.clone();
12541                if inlined {
12542                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
12543                    inner_offset = next_offset;
12544                } else {
12545                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
12546                    inner_depth.increment()?;
12547                }
12548                let val_ref = self.tx_power_dbm.get_or_insert_with(|| fidl::new_empty!(i8, D));
12549                fidl::decode!(i8, D, val_ref, decoder, inner_offset, inner_depth)?;
12550                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
12551                {
12552                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
12553                }
12554                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
12555                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
12556                }
12557            }
12558
12559            next_offset += envelope_size;
12560
12561            // Decode the remaining unknown envelopes.
12562            while next_offset < end_offset {
12563                _next_ordinal_to_read += 1;
12564                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12565                next_offset += envelope_size;
12566            }
12567
12568            Ok(())
12569        }
12570    }
12571
12572    impl OnMeshPrefix {
12573        #[inline(always)]
12574        fn max_ordinal_present(&self) -> u64 {
12575            if let Some(_) = self.slaac_valid {
12576                return 5;
12577            }
12578            if let Some(_) = self.slaac_preferred {
12579                return 4;
12580            }
12581            if let Some(_) = self.stable {
12582                return 3;
12583            }
12584            if let Some(_) = self.default_route_preference {
12585                return 2;
12586            }
12587            if let Some(_) = self.subnet {
12588                return 1;
12589            }
12590            0
12591        }
12592    }
12593
12594    impl fidl::encoding::ValueTypeMarker for OnMeshPrefix {
12595        type Borrowed<'a> = &'a Self;
12596        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
12597            value
12598        }
12599    }
12600
12601    unsafe impl fidl::encoding::TypeMarker for OnMeshPrefix {
12602        type Owned = Self;
12603
12604        #[inline(always)]
12605        fn inline_align(_context: fidl::encoding::Context) -> usize {
12606            8
12607        }
12608
12609        #[inline(always)]
12610        fn inline_size(_context: fidl::encoding::Context) -> usize {
12611            16
12612        }
12613    }
12614
12615    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<OnMeshPrefix, D>
12616        for &OnMeshPrefix
12617    {
12618        unsafe fn encode(
12619            self,
12620            encoder: &mut fidl::encoding::Encoder<'_, D>,
12621            offset: usize,
12622            mut depth: fidl::encoding::Depth,
12623        ) -> fidl::Result<()> {
12624            encoder.debug_check_bounds::<OnMeshPrefix>(offset);
12625            // Vector header
12626            let max_ordinal: u64 = self.max_ordinal_present();
12627            encoder.write_num(max_ordinal, offset);
12628            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
12629            // Calling encoder.out_of_line_offset(0) is not allowed.
12630            if max_ordinal == 0 {
12631                return Ok(());
12632            }
12633            depth.increment()?;
12634            let envelope_size = 8;
12635            let bytes_len = max_ordinal as usize * envelope_size;
12636            #[allow(unused_variables)]
12637            let offset = encoder.out_of_line_offset(bytes_len);
12638            let mut _prev_end_offset: usize = 0;
12639            if 1 > max_ordinal {
12640                return Ok(());
12641            }
12642
12643            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
12644            // are envelope_size bytes.
12645            let cur_offset: usize = (1 - 1) * envelope_size;
12646
12647            // Zero reserved fields.
12648            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
12649
12650            // Safety:
12651            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
12652            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
12653            //   envelope_size bytes, there is always sufficient room.
12654            fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_net__common::Ipv6AddressWithPrefix, D>(
12655            self.subnet.as_ref().map(<fidl_fuchsia_net__common::Ipv6AddressWithPrefix as fidl::encoding::ValueTypeMarker>::borrow),
12656            encoder, offset + cur_offset, depth
12657        )?;
12658
12659            _prev_end_offset = cur_offset + envelope_size;
12660            if 2 > max_ordinal {
12661                return Ok(());
12662            }
12663
12664            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
12665            // are envelope_size bytes.
12666            let cur_offset: usize = (2 - 1) * envelope_size;
12667
12668            // Zero reserved fields.
12669            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
12670
12671            // Safety:
12672            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
12673            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
12674            //   envelope_size bytes, there is always sufficient room.
12675            fidl::encoding::encode_in_envelope_optional::<RoutePreference, D>(
12676                self.default_route_preference
12677                    .as_ref()
12678                    .map(<RoutePreference as fidl::encoding::ValueTypeMarker>::borrow),
12679                encoder,
12680                offset + cur_offset,
12681                depth,
12682            )?;
12683
12684            _prev_end_offset = cur_offset + envelope_size;
12685            if 3 > max_ordinal {
12686                return Ok(());
12687            }
12688
12689            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
12690            // are envelope_size bytes.
12691            let cur_offset: usize = (3 - 1) * envelope_size;
12692
12693            // Zero reserved fields.
12694            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
12695
12696            // Safety:
12697            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
12698            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
12699            //   envelope_size bytes, there is always sufficient room.
12700            fidl::encoding::encode_in_envelope_optional::<bool, D>(
12701                self.stable.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
12702                encoder,
12703                offset + cur_offset,
12704                depth,
12705            )?;
12706
12707            _prev_end_offset = cur_offset + envelope_size;
12708            if 4 > max_ordinal {
12709                return Ok(());
12710            }
12711
12712            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
12713            // are envelope_size bytes.
12714            let cur_offset: usize = (4 - 1) * envelope_size;
12715
12716            // Zero reserved fields.
12717            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
12718
12719            // Safety:
12720            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
12721            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
12722            //   envelope_size bytes, there is always sufficient room.
12723            fidl::encoding::encode_in_envelope_optional::<bool, D>(
12724                self.slaac_preferred
12725                    .as_ref()
12726                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
12727                encoder,
12728                offset + cur_offset,
12729                depth,
12730            )?;
12731
12732            _prev_end_offset = cur_offset + envelope_size;
12733            if 5 > max_ordinal {
12734                return Ok(());
12735            }
12736
12737            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
12738            // are envelope_size bytes.
12739            let cur_offset: usize = (5 - 1) * envelope_size;
12740
12741            // Zero reserved fields.
12742            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
12743
12744            // Safety:
12745            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
12746            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
12747            //   envelope_size bytes, there is always sufficient room.
12748            fidl::encoding::encode_in_envelope_optional::<bool, D>(
12749                self.slaac_valid.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
12750                encoder,
12751                offset + cur_offset,
12752                depth,
12753            )?;
12754
12755            _prev_end_offset = cur_offset + envelope_size;
12756
12757            Ok(())
12758        }
12759    }
12760
12761    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for OnMeshPrefix {
12762        #[inline(always)]
12763        fn new_empty() -> Self {
12764            Self::default()
12765        }
12766
12767        unsafe fn decode(
12768            &mut self,
12769            decoder: &mut fidl::encoding::Decoder<'_, D>,
12770            offset: usize,
12771            mut depth: fidl::encoding::Depth,
12772        ) -> fidl::Result<()> {
12773            decoder.debug_check_bounds::<Self>(offset);
12774            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
12775                None => return Err(fidl::Error::NotNullable),
12776                Some(len) => len,
12777            };
12778            // Calling decoder.out_of_line_offset(0) is not allowed.
12779            if len == 0 {
12780                return Ok(());
12781            };
12782            depth.increment()?;
12783            let envelope_size = 8;
12784            let bytes_len = len * envelope_size;
12785            let offset = decoder.out_of_line_offset(bytes_len)?;
12786            // Decode the envelope for each type.
12787            let mut _next_ordinal_to_read = 0;
12788            let mut next_offset = offset;
12789            let end_offset = offset + bytes_len;
12790            _next_ordinal_to_read += 1;
12791            if next_offset >= end_offset {
12792                return Ok(());
12793            }
12794
12795            // Decode unknown envelopes for gaps in ordinals.
12796            while _next_ordinal_to_read < 1 {
12797                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12798                _next_ordinal_to_read += 1;
12799                next_offset += envelope_size;
12800            }
12801
12802            let next_out_of_line = decoder.next_out_of_line();
12803            let handles_before = decoder.remaining_handles();
12804            if let Some((inlined, num_bytes, num_handles)) =
12805                fidl::encoding::decode_envelope_header(decoder, next_offset)?
12806            {
12807                let member_inline_size = <fidl_fuchsia_net__common::Ipv6AddressWithPrefix as fidl::encoding::TypeMarker>::inline_size(decoder.context);
12808                if inlined != (member_inline_size <= 4) {
12809                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
12810                }
12811                let inner_offset;
12812                let mut inner_depth = depth.clone();
12813                if inlined {
12814                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
12815                    inner_offset = next_offset;
12816                } else {
12817                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
12818                    inner_depth.increment()?;
12819                }
12820                let val_ref = self.subnet.get_or_insert_with(|| {
12821                    fidl::new_empty!(fidl_fuchsia_net__common::Ipv6AddressWithPrefix, D)
12822                });
12823                fidl::decode!(
12824                    fidl_fuchsia_net__common::Ipv6AddressWithPrefix,
12825                    D,
12826                    val_ref,
12827                    decoder,
12828                    inner_offset,
12829                    inner_depth
12830                )?;
12831                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
12832                {
12833                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
12834                }
12835                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
12836                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
12837                }
12838            }
12839
12840            next_offset += envelope_size;
12841            _next_ordinal_to_read += 1;
12842            if next_offset >= end_offset {
12843                return Ok(());
12844            }
12845
12846            // Decode unknown envelopes for gaps in ordinals.
12847            while _next_ordinal_to_read < 2 {
12848                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12849                _next_ordinal_to_read += 1;
12850                next_offset += envelope_size;
12851            }
12852
12853            let next_out_of_line = decoder.next_out_of_line();
12854            let handles_before = decoder.remaining_handles();
12855            if let Some((inlined, num_bytes, num_handles)) =
12856                fidl::encoding::decode_envelope_header(decoder, next_offset)?
12857            {
12858                let member_inline_size =
12859                    <RoutePreference as fidl::encoding::TypeMarker>::inline_size(decoder.context);
12860                if inlined != (member_inline_size <= 4) {
12861                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
12862                }
12863                let inner_offset;
12864                let mut inner_depth = depth.clone();
12865                if inlined {
12866                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
12867                    inner_offset = next_offset;
12868                } else {
12869                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
12870                    inner_depth.increment()?;
12871                }
12872                let val_ref = self
12873                    .default_route_preference
12874                    .get_or_insert_with(|| fidl::new_empty!(RoutePreference, D));
12875                fidl::decode!(RoutePreference, D, val_ref, decoder, inner_offset, inner_depth)?;
12876                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
12877                {
12878                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
12879                }
12880                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
12881                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
12882                }
12883            }
12884
12885            next_offset += envelope_size;
12886            _next_ordinal_to_read += 1;
12887            if next_offset >= end_offset {
12888                return Ok(());
12889            }
12890
12891            // Decode unknown envelopes for gaps in ordinals.
12892            while _next_ordinal_to_read < 3 {
12893                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12894                _next_ordinal_to_read += 1;
12895                next_offset += envelope_size;
12896            }
12897
12898            let next_out_of_line = decoder.next_out_of_line();
12899            let handles_before = decoder.remaining_handles();
12900            if let Some((inlined, num_bytes, num_handles)) =
12901                fidl::encoding::decode_envelope_header(decoder, next_offset)?
12902            {
12903                let member_inline_size =
12904                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
12905                if inlined != (member_inline_size <= 4) {
12906                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
12907                }
12908                let inner_offset;
12909                let mut inner_depth = depth.clone();
12910                if inlined {
12911                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
12912                    inner_offset = next_offset;
12913                } else {
12914                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
12915                    inner_depth.increment()?;
12916                }
12917                let val_ref = self.stable.get_or_insert_with(|| fidl::new_empty!(bool, D));
12918                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
12919                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
12920                {
12921                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
12922                }
12923                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
12924                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
12925                }
12926            }
12927
12928            next_offset += envelope_size;
12929            _next_ordinal_to_read += 1;
12930            if next_offset >= end_offset {
12931                return Ok(());
12932            }
12933
12934            // Decode unknown envelopes for gaps in ordinals.
12935            while _next_ordinal_to_read < 4 {
12936                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12937                _next_ordinal_to_read += 1;
12938                next_offset += envelope_size;
12939            }
12940
12941            let next_out_of_line = decoder.next_out_of_line();
12942            let handles_before = decoder.remaining_handles();
12943            if let Some((inlined, num_bytes, num_handles)) =
12944                fidl::encoding::decode_envelope_header(decoder, next_offset)?
12945            {
12946                let member_inline_size =
12947                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
12948                if inlined != (member_inline_size <= 4) {
12949                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
12950                }
12951                let inner_offset;
12952                let mut inner_depth = depth.clone();
12953                if inlined {
12954                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
12955                    inner_offset = next_offset;
12956                } else {
12957                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
12958                    inner_depth.increment()?;
12959                }
12960                let val_ref = self.slaac_preferred.get_or_insert_with(|| fidl::new_empty!(bool, D));
12961                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
12962                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
12963                {
12964                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
12965                }
12966                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
12967                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
12968                }
12969            }
12970
12971            next_offset += envelope_size;
12972            _next_ordinal_to_read += 1;
12973            if next_offset >= end_offset {
12974                return Ok(());
12975            }
12976
12977            // Decode unknown envelopes for gaps in ordinals.
12978            while _next_ordinal_to_read < 5 {
12979                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12980                _next_ordinal_to_read += 1;
12981                next_offset += envelope_size;
12982            }
12983
12984            let next_out_of_line = decoder.next_out_of_line();
12985            let handles_before = decoder.remaining_handles();
12986            if let Some((inlined, num_bytes, num_handles)) =
12987                fidl::encoding::decode_envelope_header(decoder, next_offset)?
12988            {
12989                let member_inline_size =
12990                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
12991                if inlined != (member_inline_size <= 4) {
12992                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
12993                }
12994                let inner_offset;
12995                let mut inner_depth = depth.clone();
12996                if inlined {
12997                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
12998                    inner_offset = next_offset;
12999                } else {
13000                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
13001                    inner_depth.increment()?;
13002                }
13003                let val_ref = self.slaac_valid.get_or_insert_with(|| fidl::new_empty!(bool, D));
13004                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
13005                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
13006                {
13007                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
13008                }
13009                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
13010                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
13011                }
13012            }
13013
13014            next_offset += envelope_size;
13015
13016            // Decode the remaining unknown envelopes.
13017            while next_offset < end_offset {
13018                _next_ordinal_to_read += 1;
13019                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
13020                next_offset += envelope_size;
13021            }
13022
13023            Ok(())
13024        }
13025    }
13026
13027    impl OperationalDataset {
13028        #[inline(always)]
13029        fn max_ordinal_present(&self) -> u64 {
13030            if let Some(_) = self.channel_mask {
13031                return 13;
13032            }
13033            if let Some(_) = self.security_policy {
13034                return 12;
13035            }
13036            if let Some(_) = self.pskc {
13037                return 11;
13038            }
13039            if let Some(_) = self.wakeup_channel {
13040                return 10;
13041            }
13042            if let Some(_) = self.channel {
13043                return 9;
13044            }
13045            if let Some(_) = self.pan_id {
13046                return 8;
13047            }
13048            if let Some(_) = self.delay {
13049                return 7;
13050            }
13051            if let Some(_) = self.mesh_local_prefix {
13052                return 6;
13053            }
13054            if let Some(_) = self.extended_pan_id {
13055                return 5;
13056            }
13057            if let Some(_) = self.network_name {
13058                return 4;
13059            }
13060            if let Some(_) = self.network_key {
13061                return 3;
13062            }
13063            if let Some(_) = self.pending_timestamp {
13064                return 2;
13065            }
13066            if let Some(_) = self.active_timestamp {
13067                return 1;
13068            }
13069            0
13070        }
13071    }
13072
13073    impl fidl::encoding::ValueTypeMarker for OperationalDataset {
13074        type Borrowed<'a> = &'a Self;
13075        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
13076            value
13077        }
13078    }
13079
13080    unsafe impl fidl::encoding::TypeMarker for OperationalDataset {
13081        type Owned = Self;
13082
13083        #[inline(always)]
13084        fn inline_align(_context: fidl::encoding::Context) -> usize {
13085            8
13086        }
13087
13088        #[inline(always)]
13089        fn inline_size(_context: fidl::encoding::Context) -> usize {
13090            16
13091        }
13092    }
13093
13094    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<OperationalDataset, D>
13095        for &OperationalDataset
13096    {
13097        unsafe fn encode(
13098            self,
13099            encoder: &mut fidl::encoding::Encoder<'_, D>,
13100            offset: usize,
13101            mut depth: fidl::encoding::Depth,
13102        ) -> fidl::Result<()> {
13103            encoder.debug_check_bounds::<OperationalDataset>(offset);
13104            // Vector header
13105            let max_ordinal: u64 = self.max_ordinal_present();
13106            encoder.write_num(max_ordinal, offset);
13107            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
13108            // Calling encoder.out_of_line_offset(0) is not allowed.
13109            if max_ordinal == 0 {
13110                return Ok(());
13111            }
13112            depth.increment()?;
13113            let envelope_size = 8;
13114            let bytes_len = max_ordinal as usize * envelope_size;
13115            #[allow(unused_variables)]
13116            let offset = encoder.out_of_line_offset(bytes_len);
13117            let mut _prev_end_offset: usize = 0;
13118            if 1 > max_ordinal {
13119                return Ok(());
13120            }
13121
13122            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13123            // are envelope_size bytes.
13124            let cur_offset: usize = (1 - 1) * envelope_size;
13125
13126            // Zero reserved fields.
13127            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13128
13129            // Safety:
13130            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13131            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13132            //   envelope_size bytes, there is always sufficient room.
13133            fidl::encoding::encode_in_envelope_optional::<i64, D>(
13134                self.active_timestamp
13135                    .as_ref()
13136                    .map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
13137                encoder,
13138                offset + cur_offset,
13139                depth,
13140            )?;
13141
13142            _prev_end_offset = cur_offset + envelope_size;
13143            if 2 > max_ordinal {
13144                return Ok(());
13145            }
13146
13147            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13148            // are envelope_size bytes.
13149            let cur_offset: usize = (2 - 1) * envelope_size;
13150
13151            // Zero reserved fields.
13152            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13153
13154            // Safety:
13155            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13156            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13157            //   envelope_size bytes, there is always sufficient room.
13158            fidl::encoding::encode_in_envelope_optional::<i64, D>(
13159                self.pending_timestamp
13160                    .as_ref()
13161                    .map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
13162                encoder,
13163                offset + cur_offset,
13164                depth,
13165            )?;
13166
13167            _prev_end_offset = cur_offset + envelope_size;
13168            if 3 > max_ordinal {
13169                return Ok(());
13170            }
13171
13172            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13173            // are envelope_size bytes.
13174            let cur_offset: usize = (3 - 1) * envelope_size;
13175
13176            // Zero reserved fields.
13177            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13178
13179            // Safety:
13180            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13181            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13182            //   envelope_size bytes, there is always sufficient room.
13183            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u8, 16>, D>(
13184                self.network_key.as_ref().map(
13185                    <fidl::encoding::Vector<u8, 16> as fidl::encoding::ValueTypeMarker>::borrow,
13186                ),
13187                encoder,
13188                offset + cur_offset,
13189                depth,
13190            )?;
13191
13192            _prev_end_offset = cur_offset + envelope_size;
13193            if 4 > max_ordinal {
13194                return Ok(());
13195            }
13196
13197            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13198            // are envelope_size bytes.
13199            let cur_offset: usize = (4 - 1) * envelope_size;
13200
13201            // Zero reserved fields.
13202            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13203
13204            // Safety:
13205            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13206            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13207            //   envelope_size bytes, there is always sufficient room.
13208            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u8, 17>, D>(
13209                self.network_name.as_ref().map(
13210                    <fidl::encoding::Vector<u8, 17> as fidl::encoding::ValueTypeMarker>::borrow,
13211                ),
13212                encoder,
13213                offset + cur_offset,
13214                depth,
13215            )?;
13216
13217            _prev_end_offset = cur_offset + envelope_size;
13218            if 5 > max_ordinal {
13219                return Ok(());
13220            }
13221
13222            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13223            // are envelope_size bytes.
13224            let cur_offset: usize = (5 - 1) * envelope_size;
13225
13226            // Zero reserved fields.
13227            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13228
13229            // Safety:
13230            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13231            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13232            //   envelope_size bytes, there is always sufficient room.
13233            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u8, 8>, D>(
13234                self.extended_pan_id.as_ref().map(
13235                    <fidl::encoding::Vector<u8, 8> as fidl::encoding::ValueTypeMarker>::borrow,
13236                ),
13237                encoder,
13238                offset + cur_offset,
13239                depth,
13240            )?;
13241
13242            _prev_end_offset = cur_offset + envelope_size;
13243            if 6 > max_ordinal {
13244                return Ok(());
13245            }
13246
13247            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13248            // are envelope_size bytes.
13249            let cur_offset: usize = (6 - 1) * envelope_size;
13250
13251            // Zero reserved fields.
13252            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13253
13254            // Safety:
13255            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13256            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13257            //   envelope_size bytes, there is always sufficient room.
13258            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u8, 8>, D>(
13259                self.mesh_local_prefix.as_ref().map(
13260                    <fidl::encoding::Vector<u8, 8> as fidl::encoding::ValueTypeMarker>::borrow,
13261                ),
13262                encoder,
13263                offset + cur_offset,
13264                depth,
13265            )?;
13266
13267            _prev_end_offset = cur_offset + envelope_size;
13268            if 7 > max_ordinal {
13269                return Ok(());
13270            }
13271
13272            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13273            // are envelope_size bytes.
13274            let cur_offset: usize = (7 - 1) * envelope_size;
13275
13276            // Zero reserved fields.
13277            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13278
13279            // Safety:
13280            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13281            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13282            //   envelope_size bytes, there is always sufficient room.
13283            fidl::encoding::encode_in_envelope_optional::<u32, D>(
13284                self.delay.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
13285                encoder,
13286                offset + cur_offset,
13287                depth,
13288            )?;
13289
13290            _prev_end_offset = cur_offset + envelope_size;
13291            if 8 > max_ordinal {
13292                return Ok(());
13293            }
13294
13295            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13296            // are envelope_size bytes.
13297            let cur_offset: usize = (8 - 1) * envelope_size;
13298
13299            // Zero reserved fields.
13300            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13301
13302            // Safety:
13303            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13304            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13305            //   envelope_size bytes, there is always sufficient room.
13306            fidl::encoding::encode_in_envelope_optional::<u16, D>(
13307                self.pan_id.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
13308                encoder,
13309                offset + cur_offset,
13310                depth,
13311            )?;
13312
13313            _prev_end_offset = cur_offset + envelope_size;
13314            if 9 > max_ordinal {
13315                return Ok(());
13316            }
13317
13318            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13319            // are envelope_size bytes.
13320            let cur_offset: usize = (9 - 1) * envelope_size;
13321
13322            // Zero reserved fields.
13323            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13324
13325            // Safety:
13326            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13327            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13328            //   envelope_size bytes, there is always sufficient room.
13329            fidl::encoding::encode_in_envelope_optional::<u16, D>(
13330                self.channel.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
13331                encoder,
13332                offset + cur_offset,
13333                depth,
13334            )?;
13335
13336            _prev_end_offset = cur_offset + envelope_size;
13337            if 10 > max_ordinal {
13338                return Ok(());
13339            }
13340
13341            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13342            // are envelope_size bytes.
13343            let cur_offset: usize = (10 - 1) * envelope_size;
13344
13345            // Zero reserved fields.
13346            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13347
13348            // Safety:
13349            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13350            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13351            //   envelope_size bytes, there is always sufficient room.
13352            fidl::encoding::encode_in_envelope_optional::<u16, D>(
13353                self.wakeup_channel.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
13354                encoder,
13355                offset + cur_offset,
13356                depth,
13357            )?;
13358
13359            _prev_end_offset = cur_offset + envelope_size;
13360            if 11 > max_ordinal {
13361                return Ok(());
13362            }
13363
13364            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13365            // are envelope_size bytes.
13366            let cur_offset: usize = (11 - 1) * envelope_size;
13367
13368            // Zero reserved fields.
13369            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13370
13371            // Safety:
13372            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13373            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13374            //   envelope_size bytes, there is always sufficient room.
13375            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u8, 16>, D>(
13376                self.pskc.as_ref().map(
13377                    <fidl::encoding::Vector<u8, 16> as fidl::encoding::ValueTypeMarker>::borrow,
13378                ),
13379                encoder,
13380                offset + cur_offset,
13381                depth,
13382            )?;
13383
13384            _prev_end_offset = cur_offset + envelope_size;
13385            if 12 > max_ordinal {
13386                return Ok(());
13387            }
13388
13389            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13390            // are envelope_size bytes.
13391            let cur_offset: usize = (12 - 1) * envelope_size;
13392
13393            // Zero reserved fields.
13394            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13395
13396            // Safety:
13397            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13398            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13399            //   envelope_size bytes, there is always sufficient room.
13400            fidl::encoding::encode_in_envelope_optional::<SecurityPolicy, D>(
13401                self.security_policy
13402                    .as_ref()
13403                    .map(<SecurityPolicy as fidl::encoding::ValueTypeMarker>::borrow),
13404                encoder,
13405                offset + cur_offset,
13406                depth,
13407            )?;
13408
13409            _prev_end_offset = cur_offset + envelope_size;
13410            if 13 > max_ordinal {
13411                return Ok(());
13412            }
13413
13414            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13415            // are envelope_size bytes.
13416            let cur_offset: usize = (13 - 1) * envelope_size;
13417
13418            // Zero reserved fields.
13419            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13420
13421            // Safety:
13422            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13423            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13424            //   envelope_size bytes, there is always sufficient room.
13425            fidl::encoding::encode_in_envelope_optional::<u32, D>(
13426                self.channel_mask.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
13427                encoder,
13428                offset + cur_offset,
13429                depth,
13430            )?;
13431
13432            _prev_end_offset = cur_offset + envelope_size;
13433
13434            Ok(())
13435        }
13436    }
13437
13438    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for OperationalDataset {
13439        #[inline(always)]
13440        fn new_empty() -> Self {
13441            Self::default()
13442        }
13443
13444        unsafe fn decode(
13445            &mut self,
13446            decoder: &mut fidl::encoding::Decoder<'_, D>,
13447            offset: usize,
13448            mut depth: fidl::encoding::Depth,
13449        ) -> fidl::Result<()> {
13450            decoder.debug_check_bounds::<Self>(offset);
13451            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
13452                None => return Err(fidl::Error::NotNullable),
13453                Some(len) => len,
13454            };
13455            // Calling decoder.out_of_line_offset(0) is not allowed.
13456            if len == 0 {
13457                return Ok(());
13458            };
13459            depth.increment()?;
13460            let envelope_size = 8;
13461            let bytes_len = len * envelope_size;
13462            let offset = decoder.out_of_line_offset(bytes_len)?;
13463            // Decode the envelope for each type.
13464            let mut _next_ordinal_to_read = 0;
13465            let mut next_offset = offset;
13466            let end_offset = offset + bytes_len;
13467            _next_ordinal_to_read += 1;
13468            if next_offset >= end_offset {
13469                return Ok(());
13470            }
13471
13472            // Decode unknown envelopes for gaps in ordinals.
13473            while _next_ordinal_to_read < 1 {
13474                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
13475                _next_ordinal_to_read += 1;
13476                next_offset += envelope_size;
13477            }
13478
13479            let next_out_of_line = decoder.next_out_of_line();
13480            let handles_before = decoder.remaining_handles();
13481            if let Some((inlined, num_bytes, num_handles)) =
13482                fidl::encoding::decode_envelope_header(decoder, next_offset)?
13483            {
13484                let member_inline_size =
13485                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
13486                if inlined != (member_inline_size <= 4) {
13487                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
13488                }
13489                let inner_offset;
13490                let mut inner_depth = depth.clone();
13491                if inlined {
13492                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
13493                    inner_offset = next_offset;
13494                } else {
13495                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
13496                    inner_depth.increment()?;
13497                }
13498                let val_ref = self.active_timestamp.get_or_insert_with(|| fidl::new_empty!(i64, D));
13499                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
13500                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
13501                {
13502                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
13503                }
13504                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
13505                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
13506                }
13507            }
13508
13509            next_offset += envelope_size;
13510            _next_ordinal_to_read += 1;
13511            if next_offset >= end_offset {
13512                return Ok(());
13513            }
13514
13515            // Decode unknown envelopes for gaps in ordinals.
13516            while _next_ordinal_to_read < 2 {
13517                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
13518                _next_ordinal_to_read += 1;
13519                next_offset += envelope_size;
13520            }
13521
13522            let next_out_of_line = decoder.next_out_of_line();
13523            let handles_before = decoder.remaining_handles();
13524            if let Some((inlined, num_bytes, num_handles)) =
13525                fidl::encoding::decode_envelope_header(decoder, next_offset)?
13526            {
13527                let member_inline_size =
13528                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
13529                if inlined != (member_inline_size <= 4) {
13530                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
13531                }
13532                let inner_offset;
13533                let mut inner_depth = depth.clone();
13534                if inlined {
13535                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
13536                    inner_offset = next_offset;
13537                } else {
13538                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
13539                    inner_depth.increment()?;
13540                }
13541                let val_ref =
13542                    self.pending_timestamp.get_or_insert_with(|| fidl::new_empty!(i64, D));
13543                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
13544                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
13545                {
13546                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
13547                }
13548                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
13549                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
13550                }
13551            }
13552
13553            next_offset += envelope_size;
13554            _next_ordinal_to_read += 1;
13555            if next_offset >= end_offset {
13556                return Ok(());
13557            }
13558
13559            // Decode unknown envelopes for gaps in ordinals.
13560            while _next_ordinal_to_read < 3 {
13561                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
13562                _next_ordinal_to_read += 1;
13563                next_offset += envelope_size;
13564            }
13565
13566            let next_out_of_line = decoder.next_out_of_line();
13567            let handles_before = decoder.remaining_handles();
13568            if let Some((inlined, num_bytes, num_handles)) =
13569                fidl::encoding::decode_envelope_header(decoder, next_offset)?
13570            {
13571                let member_inline_size =
13572                    <fidl::encoding::Vector<u8, 16> as fidl::encoding::TypeMarker>::inline_size(
13573                        decoder.context,
13574                    );
13575                if inlined != (member_inline_size <= 4) {
13576                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
13577                }
13578                let inner_offset;
13579                let mut inner_depth = depth.clone();
13580                if inlined {
13581                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
13582                    inner_offset = next_offset;
13583                } else {
13584                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
13585                    inner_depth.increment()?;
13586                }
13587                let val_ref = self
13588                    .network_key
13589                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u8, 16>, D));
13590                fidl::decode!(fidl::encoding::Vector<u8, 16>, D, val_ref, decoder, inner_offset, inner_depth)?;
13591                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
13592                {
13593                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
13594                }
13595                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
13596                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
13597                }
13598            }
13599
13600            next_offset += envelope_size;
13601            _next_ordinal_to_read += 1;
13602            if next_offset >= end_offset {
13603                return Ok(());
13604            }
13605
13606            // Decode unknown envelopes for gaps in ordinals.
13607            while _next_ordinal_to_read < 4 {
13608                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
13609                _next_ordinal_to_read += 1;
13610                next_offset += envelope_size;
13611            }
13612
13613            let next_out_of_line = decoder.next_out_of_line();
13614            let handles_before = decoder.remaining_handles();
13615            if let Some((inlined, num_bytes, num_handles)) =
13616                fidl::encoding::decode_envelope_header(decoder, next_offset)?
13617            {
13618                let member_inline_size =
13619                    <fidl::encoding::Vector<u8, 17> as fidl::encoding::TypeMarker>::inline_size(
13620                        decoder.context,
13621                    );
13622                if inlined != (member_inline_size <= 4) {
13623                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
13624                }
13625                let inner_offset;
13626                let mut inner_depth = depth.clone();
13627                if inlined {
13628                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
13629                    inner_offset = next_offset;
13630                } else {
13631                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
13632                    inner_depth.increment()?;
13633                }
13634                let val_ref = self
13635                    .network_name
13636                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u8, 17>, D));
13637                fidl::decode!(fidl::encoding::Vector<u8, 17>, D, val_ref, decoder, inner_offset, inner_depth)?;
13638                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
13639                {
13640                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
13641                }
13642                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
13643                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
13644                }
13645            }
13646
13647            next_offset += envelope_size;
13648            _next_ordinal_to_read += 1;
13649            if next_offset >= end_offset {
13650                return Ok(());
13651            }
13652
13653            // Decode unknown envelopes for gaps in ordinals.
13654            while _next_ordinal_to_read < 5 {
13655                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
13656                _next_ordinal_to_read += 1;
13657                next_offset += envelope_size;
13658            }
13659
13660            let next_out_of_line = decoder.next_out_of_line();
13661            let handles_before = decoder.remaining_handles();
13662            if let Some((inlined, num_bytes, num_handles)) =
13663                fidl::encoding::decode_envelope_header(decoder, next_offset)?
13664            {
13665                let member_inline_size =
13666                    <fidl::encoding::Vector<u8, 8> as fidl::encoding::TypeMarker>::inline_size(
13667                        decoder.context,
13668                    );
13669                if inlined != (member_inline_size <= 4) {
13670                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
13671                }
13672                let inner_offset;
13673                let mut inner_depth = depth.clone();
13674                if inlined {
13675                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
13676                    inner_offset = next_offset;
13677                } else {
13678                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
13679                    inner_depth.increment()?;
13680                }
13681                let val_ref = self
13682                    .extended_pan_id
13683                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u8, 8>, D));
13684                fidl::decode!(fidl::encoding::Vector<u8, 8>, D, val_ref, decoder, inner_offset, inner_depth)?;
13685                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
13686                {
13687                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
13688                }
13689                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
13690                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
13691                }
13692            }
13693
13694            next_offset += envelope_size;
13695            _next_ordinal_to_read += 1;
13696            if next_offset >= end_offset {
13697                return Ok(());
13698            }
13699
13700            // Decode unknown envelopes for gaps in ordinals.
13701            while _next_ordinal_to_read < 6 {
13702                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
13703                _next_ordinal_to_read += 1;
13704                next_offset += envelope_size;
13705            }
13706
13707            let next_out_of_line = decoder.next_out_of_line();
13708            let handles_before = decoder.remaining_handles();
13709            if let Some((inlined, num_bytes, num_handles)) =
13710                fidl::encoding::decode_envelope_header(decoder, next_offset)?
13711            {
13712                let member_inline_size =
13713                    <fidl::encoding::Vector<u8, 8> as fidl::encoding::TypeMarker>::inline_size(
13714                        decoder.context,
13715                    );
13716                if inlined != (member_inline_size <= 4) {
13717                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
13718                }
13719                let inner_offset;
13720                let mut inner_depth = depth.clone();
13721                if inlined {
13722                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
13723                    inner_offset = next_offset;
13724                } else {
13725                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
13726                    inner_depth.increment()?;
13727                }
13728                let val_ref = self
13729                    .mesh_local_prefix
13730                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u8, 8>, D));
13731                fidl::decode!(fidl::encoding::Vector<u8, 8>, D, val_ref, decoder, inner_offset, inner_depth)?;
13732                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
13733                {
13734                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
13735                }
13736                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
13737                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
13738                }
13739            }
13740
13741            next_offset += envelope_size;
13742            _next_ordinal_to_read += 1;
13743            if next_offset >= end_offset {
13744                return Ok(());
13745            }
13746
13747            // Decode unknown envelopes for gaps in ordinals.
13748            while _next_ordinal_to_read < 7 {
13749                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
13750                _next_ordinal_to_read += 1;
13751                next_offset += envelope_size;
13752            }
13753
13754            let next_out_of_line = decoder.next_out_of_line();
13755            let handles_before = decoder.remaining_handles();
13756            if let Some((inlined, num_bytes, num_handles)) =
13757                fidl::encoding::decode_envelope_header(decoder, next_offset)?
13758            {
13759                let member_inline_size =
13760                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
13761                if inlined != (member_inline_size <= 4) {
13762                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
13763                }
13764                let inner_offset;
13765                let mut inner_depth = depth.clone();
13766                if inlined {
13767                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
13768                    inner_offset = next_offset;
13769                } else {
13770                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
13771                    inner_depth.increment()?;
13772                }
13773                let val_ref = self.delay.get_or_insert_with(|| fidl::new_empty!(u32, D));
13774                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
13775                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
13776                {
13777                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
13778                }
13779                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
13780                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
13781                }
13782            }
13783
13784            next_offset += envelope_size;
13785            _next_ordinal_to_read += 1;
13786            if next_offset >= end_offset {
13787                return Ok(());
13788            }
13789
13790            // Decode unknown envelopes for gaps in ordinals.
13791            while _next_ordinal_to_read < 8 {
13792                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
13793                _next_ordinal_to_read += 1;
13794                next_offset += envelope_size;
13795            }
13796
13797            let next_out_of_line = decoder.next_out_of_line();
13798            let handles_before = decoder.remaining_handles();
13799            if let Some((inlined, num_bytes, num_handles)) =
13800                fidl::encoding::decode_envelope_header(decoder, next_offset)?
13801            {
13802                let member_inline_size =
13803                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
13804                if inlined != (member_inline_size <= 4) {
13805                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
13806                }
13807                let inner_offset;
13808                let mut inner_depth = depth.clone();
13809                if inlined {
13810                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
13811                    inner_offset = next_offset;
13812                } else {
13813                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
13814                    inner_depth.increment()?;
13815                }
13816                let val_ref = self.pan_id.get_or_insert_with(|| fidl::new_empty!(u16, D));
13817                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
13818                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
13819                {
13820                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
13821                }
13822                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
13823                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
13824                }
13825            }
13826
13827            next_offset += envelope_size;
13828            _next_ordinal_to_read += 1;
13829            if next_offset >= end_offset {
13830                return Ok(());
13831            }
13832
13833            // Decode unknown envelopes for gaps in ordinals.
13834            while _next_ordinal_to_read < 9 {
13835                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
13836                _next_ordinal_to_read += 1;
13837                next_offset += envelope_size;
13838            }
13839
13840            let next_out_of_line = decoder.next_out_of_line();
13841            let handles_before = decoder.remaining_handles();
13842            if let Some((inlined, num_bytes, num_handles)) =
13843                fidl::encoding::decode_envelope_header(decoder, next_offset)?
13844            {
13845                let member_inline_size =
13846                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
13847                if inlined != (member_inline_size <= 4) {
13848                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
13849                }
13850                let inner_offset;
13851                let mut inner_depth = depth.clone();
13852                if inlined {
13853                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
13854                    inner_offset = next_offset;
13855                } else {
13856                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
13857                    inner_depth.increment()?;
13858                }
13859                let val_ref = self.channel.get_or_insert_with(|| fidl::new_empty!(u16, D));
13860                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
13861                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
13862                {
13863                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
13864                }
13865                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
13866                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
13867                }
13868            }
13869
13870            next_offset += envelope_size;
13871            _next_ordinal_to_read += 1;
13872            if next_offset >= end_offset {
13873                return Ok(());
13874            }
13875
13876            // Decode unknown envelopes for gaps in ordinals.
13877            while _next_ordinal_to_read < 10 {
13878                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
13879                _next_ordinal_to_read += 1;
13880                next_offset += envelope_size;
13881            }
13882
13883            let next_out_of_line = decoder.next_out_of_line();
13884            let handles_before = decoder.remaining_handles();
13885            if let Some((inlined, num_bytes, num_handles)) =
13886                fidl::encoding::decode_envelope_header(decoder, next_offset)?
13887            {
13888                let member_inline_size =
13889                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
13890                if inlined != (member_inline_size <= 4) {
13891                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
13892                }
13893                let inner_offset;
13894                let mut inner_depth = depth.clone();
13895                if inlined {
13896                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
13897                    inner_offset = next_offset;
13898                } else {
13899                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
13900                    inner_depth.increment()?;
13901                }
13902                let val_ref = self.wakeup_channel.get_or_insert_with(|| fidl::new_empty!(u16, D));
13903                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
13904                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
13905                {
13906                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
13907                }
13908                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
13909                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
13910                }
13911            }
13912
13913            next_offset += envelope_size;
13914            _next_ordinal_to_read += 1;
13915            if next_offset >= end_offset {
13916                return Ok(());
13917            }
13918
13919            // Decode unknown envelopes for gaps in ordinals.
13920            while _next_ordinal_to_read < 11 {
13921                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
13922                _next_ordinal_to_read += 1;
13923                next_offset += envelope_size;
13924            }
13925
13926            let next_out_of_line = decoder.next_out_of_line();
13927            let handles_before = decoder.remaining_handles();
13928            if let Some((inlined, num_bytes, num_handles)) =
13929                fidl::encoding::decode_envelope_header(decoder, next_offset)?
13930            {
13931                let member_inline_size =
13932                    <fidl::encoding::Vector<u8, 16> as fidl::encoding::TypeMarker>::inline_size(
13933                        decoder.context,
13934                    );
13935                if inlined != (member_inline_size <= 4) {
13936                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
13937                }
13938                let inner_offset;
13939                let mut inner_depth = depth.clone();
13940                if inlined {
13941                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
13942                    inner_offset = next_offset;
13943                } else {
13944                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
13945                    inner_depth.increment()?;
13946                }
13947                let val_ref = self
13948                    .pskc
13949                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u8, 16>, D));
13950                fidl::decode!(fidl::encoding::Vector<u8, 16>, D, val_ref, decoder, inner_offset, inner_depth)?;
13951                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
13952                {
13953                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
13954                }
13955                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
13956                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
13957                }
13958            }
13959
13960            next_offset += envelope_size;
13961            _next_ordinal_to_read += 1;
13962            if next_offset >= end_offset {
13963                return Ok(());
13964            }
13965
13966            // Decode unknown envelopes for gaps in ordinals.
13967            while _next_ordinal_to_read < 12 {
13968                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
13969                _next_ordinal_to_read += 1;
13970                next_offset += envelope_size;
13971            }
13972
13973            let next_out_of_line = decoder.next_out_of_line();
13974            let handles_before = decoder.remaining_handles();
13975            if let Some((inlined, num_bytes, num_handles)) =
13976                fidl::encoding::decode_envelope_header(decoder, next_offset)?
13977            {
13978                let member_inline_size =
13979                    <SecurityPolicy as fidl::encoding::TypeMarker>::inline_size(decoder.context);
13980                if inlined != (member_inline_size <= 4) {
13981                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
13982                }
13983                let inner_offset;
13984                let mut inner_depth = depth.clone();
13985                if inlined {
13986                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
13987                    inner_offset = next_offset;
13988                } else {
13989                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
13990                    inner_depth.increment()?;
13991                }
13992                let val_ref =
13993                    self.security_policy.get_or_insert_with(|| fidl::new_empty!(SecurityPolicy, D));
13994                fidl::decode!(SecurityPolicy, D, val_ref, decoder, inner_offset, inner_depth)?;
13995                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
13996                {
13997                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
13998                }
13999                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14000                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14001                }
14002            }
14003
14004            next_offset += envelope_size;
14005            _next_ordinal_to_read += 1;
14006            if next_offset >= end_offset {
14007                return Ok(());
14008            }
14009
14010            // Decode unknown envelopes for gaps in ordinals.
14011            while _next_ordinal_to_read < 13 {
14012                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14013                _next_ordinal_to_read += 1;
14014                next_offset += envelope_size;
14015            }
14016
14017            let next_out_of_line = decoder.next_out_of_line();
14018            let handles_before = decoder.remaining_handles();
14019            if let Some((inlined, num_bytes, num_handles)) =
14020                fidl::encoding::decode_envelope_header(decoder, next_offset)?
14021            {
14022                let member_inline_size =
14023                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
14024                if inlined != (member_inline_size <= 4) {
14025                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
14026                }
14027                let inner_offset;
14028                let mut inner_depth = depth.clone();
14029                if inlined {
14030                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
14031                    inner_offset = next_offset;
14032                } else {
14033                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
14034                    inner_depth.increment()?;
14035                }
14036                let val_ref = self.channel_mask.get_or_insert_with(|| fidl::new_empty!(u32, D));
14037                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
14038                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14039                {
14040                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
14041                }
14042                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14043                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14044                }
14045            }
14046
14047            next_offset += envelope_size;
14048
14049            // Decode the remaining unknown envelopes.
14050            while next_offset < end_offset {
14051                _next_ordinal_to_read += 1;
14052                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14053                next_offset += envelope_size;
14054            }
14055
14056            Ok(())
14057        }
14058    }
14059
14060    impl PdProcessedRaInfo {
14061        #[inline(always)]
14062        fn max_ordinal_present(&self) -> u64 {
14063            if let Some(_) = self.last_platform_ra_msec {
14064                return 3;
14065            }
14066            if let Some(_) = self.num_platform_pio_processed {
14067                return 2;
14068            }
14069            if let Some(_) = self.num_platform_ra_received {
14070                return 1;
14071            }
14072            0
14073        }
14074    }
14075
14076    impl fidl::encoding::ValueTypeMarker for PdProcessedRaInfo {
14077        type Borrowed<'a> = &'a Self;
14078        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
14079            value
14080        }
14081    }
14082
14083    unsafe impl fidl::encoding::TypeMarker for PdProcessedRaInfo {
14084        type Owned = Self;
14085
14086        #[inline(always)]
14087        fn inline_align(_context: fidl::encoding::Context) -> usize {
14088            8
14089        }
14090
14091        #[inline(always)]
14092        fn inline_size(_context: fidl::encoding::Context) -> usize {
14093            16
14094        }
14095    }
14096
14097    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<PdProcessedRaInfo, D>
14098        for &PdProcessedRaInfo
14099    {
14100        unsafe fn encode(
14101            self,
14102            encoder: &mut fidl::encoding::Encoder<'_, D>,
14103            offset: usize,
14104            mut depth: fidl::encoding::Depth,
14105        ) -> fidl::Result<()> {
14106            encoder.debug_check_bounds::<PdProcessedRaInfo>(offset);
14107            // Vector header
14108            let max_ordinal: u64 = self.max_ordinal_present();
14109            encoder.write_num(max_ordinal, offset);
14110            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
14111            // Calling encoder.out_of_line_offset(0) is not allowed.
14112            if max_ordinal == 0 {
14113                return Ok(());
14114            }
14115            depth.increment()?;
14116            let envelope_size = 8;
14117            let bytes_len = max_ordinal as usize * envelope_size;
14118            #[allow(unused_variables)]
14119            let offset = encoder.out_of_line_offset(bytes_len);
14120            let mut _prev_end_offset: usize = 0;
14121            if 1 > max_ordinal {
14122                return Ok(());
14123            }
14124
14125            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
14126            // are envelope_size bytes.
14127            let cur_offset: usize = (1 - 1) * envelope_size;
14128
14129            // Zero reserved fields.
14130            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
14131
14132            // Safety:
14133            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
14134            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
14135            //   envelope_size bytes, there is always sufficient room.
14136            fidl::encoding::encode_in_envelope_optional::<u32, D>(
14137                self.num_platform_ra_received
14138                    .as_ref()
14139                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
14140                encoder,
14141                offset + cur_offset,
14142                depth,
14143            )?;
14144
14145            _prev_end_offset = cur_offset + envelope_size;
14146            if 2 > max_ordinal {
14147                return Ok(());
14148            }
14149
14150            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
14151            // are envelope_size bytes.
14152            let cur_offset: usize = (2 - 1) * envelope_size;
14153
14154            // Zero reserved fields.
14155            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
14156
14157            // Safety:
14158            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
14159            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
14160            //   envelope_size bytes, there is always sufficient room.
14161            fidl::encoding::encode_in_envelope_optional::<u32, D>(
14162                self.num_platform_pio_processed
14163                    .as_ref()
14164                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
14165                encoder,
14166                offset + cur_offset,
14167                depth,
14168            )?;
14169
14170            _prev_end_offset = cur_offset + envelope_size;
14171            if 3 > max_ordinal {
14172                return Ok(());
14173            }
14174
14175            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
14176            // are envelope_size bytes.
14177            let cur_offset: usize = (3 - 1) * envelope_size;
14178
14179            // Zero reserved fields.
14180            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
14181
14182            // Safety:
14183            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
14184            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
14185            //   envelope_size bytes, there is always sufficient room.
14186            fidl::encoding::encode_in_envelope_optional::<u32, D>(
14187                self.last_platform_ra_msec
14188                    .as_ref()
14189                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
14190                encoder,
14191                offset + cur_offset,
14192                depth,
14193            )?;
14194
14195            _prev_end_offset = cur_offset + envelope_size;
14196
14197            Ok(())
14198        }
14199    }
14200
14201    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for PdProcessedRaInfo {
14202        #[inline(always)]
14203        fn new_empty() -> Self {
14204            Self::default()
14205        }
14206
14207        unsafe fn decode(
14208            &mut self,
14209            decoder: &mut fidl::encoding::Decoder<'_, D>,
14210            offset: usize,
14211            mut depth: fidl::encoding::Depth,
14212        ) -> fidl::Result<()> {
14213            decoder.debug_check_bounds::<Self>(offset);
14214            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
14215                None => return Err(fidl::Error::NotNullable),
14216                Some(len) => len,
14217            };
14218            // Calling decoder.out_of_line_offset(0) is not allowed.
14219            if len == 0 {
14220                return Ok(());
14221            };
14222            depth.increment()?;
14223            let envelope_size = 8;
14224            let bytes_len = len * envelope_size;
14225            let offset = decoder.out_of_line_offset(bytes_len)?;
14226            // Decode the envelope for each type.
14227            let mut _next_ordinal_to_read = 0;
14228            let mut next_offset = offset;
14229            let end_offset = offset + bytes_len;
14230            _next_ordinal_to_read += 1;
14231            if next_offset >= end_offset {
14232                return Ok(());
14233            }
14234
14235            // Decode unknown envelopes for gaps in ordinals.
14236            while _next_ordinal_to_read < 1 {
14237                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14238                _next_ordinal_to_read += 1;
14239                next_offset += envelope_size;
14240            }
14241
14242            let next_out_of_line = decoder.next_out_of_line();
14243            let handles_before = decoder.remaining_handles();
14244            if let Some((inlined, num_bytes, num_handles)) =
14245                fidl::encoding::decode_envelope_header(decoder, next_offset)?
14246            {
14247                let member_inline_size =
14248                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
14249                if inlined != (member_inline_size <= 4) {
14250                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
14251                }
14252                let inner_offset;
14253                let mut inner_depth = depth.clone();
14254                if inlined {
14255                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
14256                    inner_offset = next_offset;
14257                } else {
14258                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
14259                    inner_depth.increment()?;
14260                }
14261                let val_ref =
14262                    self.num_platform_ra_received.get_or_insert_with(|| fidl::new_empty!(u32, D));
14263                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
14264                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14265                {
14266                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
14267                }
14268                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14269                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14270                }
14271            }
14272
14273            next_offset += envelope_size;
14274            _next_ordinal_to_read += 1;
14275            if next_offset >= end_offset {
14276                return Ok(());
14277            }
14278
14279            // Decode unknown envelopes for gaps in ordinals.
14280            while _next_ordinal_to_read < 2 {
14281                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14282                _next_ordinal_to_read += 1;
14283                next_offset += envelope_size;
14284            }
14285
14286            let next_out_of_line = decoder.next_out_of_line();
14287            let handles_before = decoder.remaining_handles();
14288            if let Some((inlined, num_bytes, num_handles)) =
14289                fidl::encoding::decode_envelope_header(decoder, next_offset)?
14290            {
14291                let member_inline_size =
14292                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
14293                if inlined != (member_inline_size <= 4) {
14294                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
14295                }
14296                let inner_offset;
14297                let mut inner_depth = depth.clone();
14298                if inlined {
14299                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
14300                    inner_offset = next_offset;
14301                } else {
14302                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
14303                    inner_depth.increment()?;
14304                }
14305                let val_ref =
14306                    self.num_platform_pio_processed.get_or_insert_with(|| fidl::new_empty!(u32, D));
14307                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
14308                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14309                {
14310                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
14311                }
14312                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14313                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14314                }
14315            }
14316
14317            next_offset += envelope_size;
14318            _next_ordinal_to_read += 1;
14319            if next_offset >= end_offset {
14320                return Ok(());
14321            }
14322
14323            // Decode unknown envelopes for gaps in ordinals.
14324            while _next_ordinal_to_read < 3 {
14325                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14326                _next_ordinal_to_read += 1;
14327                next_offset += envelope_size;
14328            }
14329
14330            let next_out_of_line = decoder.next_out_of_line();
14331            let handles_before = decoder.remaining_handles();
14332            if let Some((inlined, num_bytes, num_handles)) =
14333                fidl::encoding::decode_envelope_header(decoder, next_offset)?
14334            {
14335                let member_inline_size =
14336                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
14337                if inlined != (member_inline_size <= 4) {
14338                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
14339                }
14340                let inner_offset;
14341                let mut inner_depth = depth.clone();
14342                if inlined {
14343                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
14344                    inner_offset = next_offset;
14345                } else {
14346                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
14347                    inner_depth.increment()?;
14348                }
14349                let val_ref =
14350                    self.last_platform_ra_msec.get_or_insert_with(|| fidl::new_empty!(u32, D));
14351                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
14352                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14353                {
14354                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
14355                }
14356                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14357                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14358                }
14359            }
14360
14361            next_offset += envelope_size;
14362
14363            // Decode the remaining unknown envelopes.
14364            while next_offset < end_offset {
14365                _next_ordinal_to_read += 1;
14366                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14367                next_offset += envelope_size;
14368            }
14369
14370            Ok(())
14371        }
14372    }
14373
14374    impl RadioLinkInfo {
14375        #[inline(always)]
14376        fn max_ordinal_present(&self) -> u64 {
14377            if let Some(_) = self.preference {
14378                return 2;
14379            }
14380            if let Some(_) = self.link_type {
14381                return 1;
14382            }
14383            0
14384        }
14385    }
14386
14387    impl fidl::encoding::ValueTypeMarker for RadioLinkInfo {
14388        type Borrowed<'a> = &'a Self;
14389        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
14390            value
14391        }
14392    }
14393
14394    unsafe impl fidl::encoding::TypeMarker for RadioLinkInfo {
14395        type Owned = Self;
14396
14397        #[inline(always)]
14398        fn inline_align(_context: fidl::encoding::Context) -> usize {
14399            8
14400        }
14401
14402        #[inline(always)]
14403        fn inline_size(_context: fidl::encoding::Context) -> usize {
14404            16
14405        }
14406    }
14407
14408    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<RadioLinkInfo, D>
14409        for &RadioLinkInfo
14410    {
14411        unsafe fn encode(
14412            self,
14413            encoder: &mut fidl::encoding::Encoder<'_, D>,
14414            offset: usize,
14415            mut depth: fidl::encoding::Depth,
14416        ) -> fidl::Result<()> {
14417            encoder.debug_check_bounds::<RadioLinkInfo>(offset);
14418            // Vector header
14419            let max_ordinal: u64 = self.max_ordinal_present();
14420            encoder.write_num(max_ordinal, offset);
14421            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
14422            // Calling encoder.out_of_line_offset(0) is not allowed.
14423            if max_ordinal == 0 {
14424                return Ok(());
14425            }
14426            depth.increment()?;
14427            let envelope_size = 8;
14428            let bytes_len = max_ordinal as usize * envelope_size;
14429            #[allow(unused_variables)]
14430            let offset = encoder.out_of_line_offset(bytes_len);
14431            let mut _prev_end_offset: usize = 0;
14432            if 1 > max_ordinal {
14433                return Ok(());
14434            }
14435
14436            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
14437            // are envelope_size bytes.
14438            let cur_offset: usize = (1 - 1) * envelope_size;
14439
14440            // Zero reserved fields.
14441            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
14442
14443            // Safety:
14444            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
14445            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
14446            //   envelope_size bytes, there is always sufficient room.
14447            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<10>, D>(
14448                self.link_type.as_ref().map(
14449                    <fidl::encoding::BoundedString<10> as fidl::encoding::ValueTypeMarker>::borrow,
14450                ),
14451                encoder,
14452                offset + cur_offset,
14453                depth,
14454            )?;
14455
14456            _prev_end_offset = cur_offset + envelope_size;
14457            if 2 > max_ordinal {
14458                return Ok(());
14459            }
14460
14461            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
14462            // are envelope_size bytes.
14463            let cur_offset: usize = (2 - 1) * envelope_size;
14464
14465            // Zero reserved fields.
14466            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
14467
14468            // Safety:
14469            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
14470            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
14471            //   envelope_size bytes, there is always sufficient room.
14472            fidl::encoding::encode_in_envelope_optional::<u8, D>(
14473                self.preference.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
14474                encoder,
14475                offset + cur_offset,
14476                depth,
14477            )?;
14478
14479            _prev_end_offset = cur_offset + envelope_size;
14480
14481            Ok(())
14482        }
14483    }
14484
14485    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for RadioLinkInfo {
14486        #[inline(always)]
14487        fn new_empty() -> Self {
14488            Self::default()
14489        }
14490
14491        unsafe fn decode(
14492            &mut self,
14493            decoder: &mut fidl::encoding::Decoder<'_, D>,
14494            offset: usize,
14495            mut depth: fidl::encoding::Depth,
14496        ) -> fidl::Result<()> {
14497            decoder.debug_check_bounds::<Self>(offset);
14498            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
14499                None => return Err(fidl::Error::NotNullable),
14500                Some(len) => len,
14501            };
14502            // Calling decoder.out_of_line_offset(0) is not allowed.
14503            if len == 0 {
14504                return Ok(());
14505            };
14506            depth.increment()?;
14507            let envelope_size = 8;
14508            let bytes_len = len * envelope_size;
14509            let offset = decoder.out_of_line_offset(bytes_len)?;
14510            // Decode the envelope for each type.
14511            let mut _next_ordinal_to_read = 0;
14512            let mut next_offset = offset;
14513            let end_offset = offset + bytes_len;
14514            _next_ordinal_to_read += 1;
14515            if next_offset >= end_offset {
14516                return Ok(());
14517            }
14518
14519            // Decode unknown envelopes for gaps in ordinals.
14520            while _next_ordinal_to_read < 1 {
14521                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14522                _next_ordinal_to_read += 1;
14523                next_offset += envelope_size;
14524            }
14525
14526            let next_out_of_line = decoder.next_out_of_line();
14527            let handles_before = decoder.remaining_handles();
14528            if let Some((inlined, num_bytes, num_handles)) =
14529                fidl::encoding::decode_envelope_header(decoder, next_offset)?
14530            {
14531                let member_inline_size =
14532                    <fidl::encoding::BoundedString<10> as fidl::encoding::TypeMarker>::inline_size(
14533                        decoder.context,
14534                    );
14535                if inlined != (member_inline_size <= 4) {
14536                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
14537                }
14538                let inner_offset;
14539                let mut inner_depth = depth.clone();
14540                if inlined {
14541                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
14542                    inner_offset = next_offset;
14543                } else {
14544                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
14545                    inner_depth.increment()?;
14546                }
14547                let val_ref = self
14548                    .link_type
14549                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<10>, D));
14550                fidl::decode!(
14551                    fidl::encoding::BoundedString<10>,
14552                    D,
14553                    val_ref,
14554                    decoder,
14555                    inner_offset,
14556                    inner_depth
14557                )?;
14558                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14559                {
14560                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
14561                }
14562                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14563                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14564                }
14565            }
14566
14567            next_offset += envelope_size;
14568            _next_ordinal_to_read += 1;
14569            if next_offset >= end_offset {
14570                return Ok(());
14571            }
14572
14573            // Decode unknown envelopes for gaps in ordinals.
14574            while _next_ordinal_to_read < 2 {
14575                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14576                _next_ordinal_to_read += 1;
14577                next_offset += envelope_size;
14578            }
14579
14580            let next_out_of_line = decoder.next_out_of_line();
14581            let handles_before = decoder.remaining_handles();
14582            if let Some((inlined, num_bytes, num_handles)) =
14583                fidl::encoding::decode_envelope_header(decoder, next_offset)?
14584            {
14585                let member_inline_size =
14586                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
14587                if inlined != (member_inline_size <= 4) {
14588                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
14589                }
14590                let inner_offset;
14591                let mut inner_depth = depth.clone();
14592                if inlined {
14593                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
14594                    inner_offset = next_offset;
14595                } else {
14596                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
14597                    inner_depth.increment()?;
14598                }
14599                let val_ref = self.preference.get_or_insert_with(|| fidl::new_empty!(u8, D));
14600                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
14601                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14602                {
14603                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
14604                }
14605                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14606                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14607                }
14608            }
14609
14610            next_offset += envelope_size;
14611
14612            // Decode the remaining unknown envelopes.
14613            while next_offset < end_offset {
14614                _next_ordinal_to_read += 1;
14615                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14616                next_offset += envelope_size;
14617            }
14618
14619            Ok(())
14620        }
14621    }
14622
14623    impl RouterInfo {
14624        #[inline(always)]
14625        fn max_ordinal_present(&self) -> u64 {
14626            if let Some(_) = self.link_established {
14627                return 9;
14628            }
14629            if let Some(_) = self.age {
14630                return 8;
14631            }
14632            if let Some(_) = self.link_quality_out {
14633                return 7;
14634            }
14635            if let Some(_) = self.link_quality_in {
14636                return 6;
14637            }
14638            if let Some(_) = self.path_cost {
14639                return 5;
14640            }
14641            if let Some(_) = self.next_hop {
14642                return 4;
14643            }
14644            if let Some(_) = self.router_id {
14645                return 3;
14646            }
14647            if let Some(_) = self.thread_rloc {
14648                return 2;
14649            }
14650            if let Some(_) = self.extended_address {
14651                return 1;
14652            }
14653            0
14654        }
14655    }
14656
14657    impl fidl::encoding::ValueTypeMarker for RouterInfo {
14658        type Borrowed<'a> = &'a Self;
14659        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
14660            value
14661        }
14662    }
14663
14664    unsafe impl fidl::encoding::TypeMarker for RouterInfo {
14665        type Owned = Self;
14666
14667        #[inline(always)]
14668        fn inline_align(_context: fidl::encoding::Context) -> usize {
14669            8
14670        }
14671
14672        #[inline(always)]
14673        fn inline_size(_context: fidl::encoding::Context) -> usize {
14674            16
14675        }
14676    }
14677
14678    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<RouterInfo, D>
14679        for &RouterInfo
14680    {
14681        unsafe fn encode(
14682            self,
14683            encoder: &mut fidl::encoding::Encoder<'_, D>,
14684            offset: usize,
14685            mut depth: fidl::encoding::Depth,
14686        ) -> fidl::Result<()> {
14687            encoder.debug_check_bounds::<RouterInfo>(offset);
14688            // Vector header
14689            let max_ordinal: u64 = self.max_ordinal_present();
14690            encoder.write_num(max_ordinal, offset);
14691            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
14692            // Calling encoder.out_of_line_offset(0) is not allowed.
14693            if max_ordinal == 0 {
14694                return Ok(());
14695            }
14696            depth.increment()?;
14697            let envelope_size = 8;
14698            let bytes_len = max_ordinal as usize * envelope_size;
14699            #[allow(unused_variables)]
14700            let offset = encoder.out_of_line_offset(bytes_len);
14701            let mut _prev_end_offset: usize = 0;
14702            if 1 > max_ordinal {
14703                return Ok(());
14704            }
14705
14706            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
14707            // are envelope_size bytes.
14708            let cur_offset: usize = (1 - 1) * envelope_size;
14709
14710            // Zero reserved fields.
14711            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
14712
14713            // Safety:
14714            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
14715            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
14716            //   envelope_size bytes, there is always sufficient room.
14717            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u8, 8>, D>(
14718                self.extended_address.as_ref().map(
14719                    <fidl::encoding::Vector<u8, 8> as fidl::encoding::ValueTypeMarker>::borrow,
14720                ),
14721                encoder,
14722                offset + cur_offset,
14723                depth,
14724            )?;
14725
14726            _prev_end_offset = cur_offset + envelope_size;
14727            if 2 > max_ordinal {
14728                return Ok(());
14729            }
14730
14731            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
14732            // are envelope_size bytes.
14733            let cur_offset: usize = (2 - 1) * envelope_size;
14734
14735            // Zero reserved fields.
14736            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
14737
14738            // Safety:
14739            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
14740            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
14741            //   envelope_size bytes, there is always sufficient room.
14742            fidl::encoding::encode_in_envelope_optional::<u16, D>(
14743                self.thread_rloc.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
14744                encoder,
14745                offset + cur_offset,
14746                depth,
14747            )?;
14748
14749            _prev_end_offset = cur_offset + envelope_size;
14750            if 3 > max_ordinal {
14751                return Ok(());
14752            }
14753
14754            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
14755            // are envelope_size bytes.
14756            let cur_offset: usize = (3 - 1) * envelope_size;
14757
14758            // Zero reserved fields.
14759            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
14760
14761            // Safety:
14762            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
14763            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
14764            //   envelope_size bytes, there is always sufficient room.
14765            fidl::encoding::encode_in_envelope_optional::<u8, D>(
14766                self.router_id.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
14767                encoder,
14768                offset + cur_offset,
14769                depth,
14770            )?;
14771
14772            _prev_end_offset = cur_offset + envelope_size;
14773            if 4 > max_ordinal {
14774                return Ok(());
14775            }
14776
14777            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
14778            // are envelope_size bytes.
14779            let cur_offset: usize = (4 - 1) * envelope_size;
14780
14781            // Zero reserved fields.
14782            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
14783
14784            // Safety:
14785            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
14786            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
14787            //   envelope_size bytes, there is always sufficient room.
14788            fidl::encoding::encode_in_envelope_optional::<u8, D>(
14789                self.next_hop.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
14790                encoder,
14791                offset + cur_offset,
14792                depth,
14793            )?;
14794
14795            _prev_end_offset = cur_offset + envelope_size;
14796            if 5 > max_ordinal {
14797                return Ok(());
14798            }
14799
14800            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
14801            // are envelope_size bytes.
14802            let cur_offset: usize = (5 - 1) * envelope_size;
14803
14804            // Zero reserved fields.
14805            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
14806
14807            // Safety:
14808            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
14809            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
14810            //   envelope_size bytes, there is always sufficient room.
14811            fidl::encoding::encode_in_envelope_optional::<u8, D>(
14812                self.path_cost.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
14813                encoder,
14814                offset + cur_offset,
14815                depth,
14816            )?;
14817
14818            _prev_end_offset = cur_offset + envelope_size;
14819            if 6 > max_ordinal {
14820                return Ok(());
14821            }
14822
14823            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
14824            // are envelope_size bytes.
14825            let cur_offset: usize = (6 - 1) * envelope_size;
14826
14827            // Zero reserved fields.
14828            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
14829
14830            // Safety:
14831            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
14832            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
14833            //   envelope_size bytes, there is always sufficient room.
14834            fidl::encoding::encode_in_envelope_optional::<u8, D>(
14835                self.link_quality_in.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
14836                encoder,
14837                offset + cur_offset,
14838                depth,
14839            )?;
14840
14841            _prev_end_offset = cur_offset + envelope_size;
14842            if 7 > max_ordinal {
14843                return Ok(());
14844            }
14845
14846            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
14847            // are envelope_size bytes.
14848            let cur_offset: usize = (7 - 1) * envelope_size;
14849
14850            // Zero reserved fields.
14851            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
14852
14853            // Safety:
14854            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
14855            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
14856            //   envelope_size bytes, there is always sufficient room.
14857            fidl::encoding::encode_in_envelope_optional::<u8, D>(
14858                self.link_quality_out.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
14859                encoder,
14860                offset + cur_offset,
14861                depth,
14862            )?;
14863
14864            _prev_end_offset = cur_offset + envelope_size;
14865            if 8 > max_ordinal {
14866                return Ok(());
14867            }
14868
14869            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
14870            // are envelope_size bytes.
14871            let cur_offset: usize = (8 - 1) * envelope_size;
14872
14873            // Zero reserved fields.
14874            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
14875
14876            // Safety:
14877            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
14878            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
14879            //   envelope_size bytes, there is always sufficient room.
14880            fidl::encoding::encode_in_envelope_optional::<i64, D>(
14881                self.age.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
14882                encoder,
14883                offset + cur_offset,
14884                depth,
14885            )?;
14886
14887            _prev_end_offset = cur_offset + envelope_size;
14888            if 9 > max_ordinal {
14889                return Ok(());
14890            }
14891
14892            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
14893            // are envelope_size bytes.
14894            let cur_offset: usize = (9 - 1) * envelope_size;
14895
14896            // Zero reserved fields.
14897            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
14898
14899            // Safety:
14900            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
14901            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
14902            //   envelope_size bytes, there is always sufficient room.
14903            fidl::encoding::encode_in_envelope_optional::<bool, D>(
14904                self.link_established
14905                    .as_ref()
14906                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
14907                encoder,
14908                offset + cur_offset,
14909                depth,
14910            )?;
14911
14912            _prev_end_offset = cur_offset + envelope_size;
14913
14914            Ok(())
14915        }
14916    }
14917
14918    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for RouterInfo {
14919        #[inline(always)]
14920        fn new_empty() -> Self {
14921            Self::default()
14922        }
14923
14924        unsafe fn decode(
14925            &mut self,
14926            decoder: &mut fidl::encoding::Decoder<'_, D>,
14927            offset: usize,
14928            mut depth: fidl::encoding::Depth,
14929        ) -> fidl::Result<()> {
14930            decoder.debug_check_bounds::<Self>(offset);
14931            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
14932                None => return Err(fidl::Error::NotNullable),
14933                Some(len) => len,
14934            };
14935            // Calling decoder.out_of_line_offset(0) is not allowed.
14936            if len == 0 {
14937                return Ok(());
14938            };
14939            depth.increment()?;
14940            let envelope_size = 8;
14941            let bytes_len = len * envelope_size;
14942            let offset = decoder.out_of_line_offset(bytes_len)?;
14943            // Decode the envelope for each type.
14944            let mut _next_ordinal_to_read = 0;
14945            let mut next_offset = offset;
14946            let end_offset = offset + bytes_len;
14947            _next_ordinal_to_read += 1;
14948            if next_offset >= end_offset {
14949                return Ok(());
14950            }
14951
14952            // Decode unknown envelopes for gaps in ordinals.
14953            while _next_ordinal_to_read < 1 {
14954                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14955                _next_ordinal_to_read += 1;
14956                next_offset += envelope_size;
14957            }
14958
14959            let next_out_of_line = decoder.next_out_of_line();
14960            let handles_before = decoder.remaining_handles();
14961            if let Some((inlined, num_bytes, num_handles)) =
14962                fidl::encoding::decode_envelope_header(decoder, next_offset)?
14963            {
14964                let member_inline_size =
14965                    <fidl::encoding::Vector<u8, 8> as fidl::encoding::TypeMarker>::inline_size(
14966                        decoder.context,
14967                    );
14968                if inlined != (member_inline_size <= 4) {
14969                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
14970                }
14971                let inner_offset;
14972                let mut inner_depth = depth.clone();
14973                if inlined {
14974                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
14975                    inner_offset = next_offset;
14976                } else {
14977                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
14978                    inner_depth.increment()?;
14979                }
14980                let val_ref = self
14981                    .extended_address
14982                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u8, 8>, D));
14983                fidl::decode!(fidl::encoding::Vector<u8, 8>, D, val_ref, decoder, inner_offset, inner_depth)?;
14984                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14985                {
14986                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
14987                }
14988                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14989                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14990                }
14991            }
14992
14993            next_offset += envelope_size;
14994            _next_ordinal_to_read += 1;
14995            if next_offset >= end_offset {
14996                return Ok(());
14997            }
14998
14999            // Decode unknown envelopes for gaps in ordinals.
15000            while _next_ordinal_to_read < 2 {
15001                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15002                _next_ordinal_to_read += 1;
15003                next_offset += envelope_size;
15004            }
15005
15006            let next_out_of_line = decoder.next_out_of_line();
15007            let handles_before = decoder.remaining_handles();
15008            if let Some((inlined, num_bytes, num_handles)) =
15009                fidl::encoding::decode_envelope_header(decoder, next_offset)?
15010            {
15011                let member_inline_size =
15012                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
15013                if inlined != (member_inline_size <= 4) {
15014                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
15015                }
15016                let inner_offset;
15017                let mut inner_depth = depth.clone();
15018                if inlined {
15019                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
15020                    inner_offset = next_offset;
15021                } else {
15022                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
15023                    inner_depth.increment()?;
15024                }
15025                let val_ref = self.thread_rloc.get_or_insert_with(|| fidl::new_empty!(u16, D));
15026                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
15027                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
15028                {
15029                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
15030                }
15031                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
15032                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
15033                }
15034            }
15035
15036            next_offset += envelope_size;
15037            _next_ordinal_to_read += 1;
15038            if next_offset >= end_offset {
15039                return Ok(());
15040            }
15041
15042            // Decode unknown envelopes for gaps in ordinals.
15043            while _next_ordinal_to_read < 3 {
15044                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15045                _next_ordinal_to_read += 1;
15046                next_offset += envelope_size;
15047            }
15048
15049            let next_out_of_line = decoder.next_out_of_line();
15050            let handles_before = decoder.remaining_handles();
15051            if let Some((inlined, num_bytes, num_handles)) =
15052                fidl::encoding::decode_envelope_header(decoder, next_offset)?
15053            {
15054                let member_inline_size =
15055                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
15056                if inlined != (member_inline_size <= 4) {
15057                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
15058                }
15059                let inner_offset;
15060                let mut inner_depth = depth.clone();
15061                if inlined {
15062                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
15063                    inner_offset = next_offset;
15064                } else {
15065                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
15066                    inner_depth.increment()?;
15067                }
15068                let val_ref = self.router_id.get_or_insert_with(|| fidl::new_empty!(u8, D));
15069                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
15070                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
15071                {
15072                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
15073                }
15074                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
15075                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
15076                }
15077            }
15078
15079            next_offset += envelope_size;
15080            _next_ordinal_to_read += 1;
15081            if next_offset >= end_offset {
15082                return Ok(());
15083            }
15084
15085            // Decode unknown envelopes for gaps in ordinals.
15086            while _next_ordinal_to_read < 4 {
15087                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15088                _next_ordinal_to_read += 1;
15089                next_offset += envelope_size;
15090            }
15091
15092            let next_out_of_line = decoder.next_out_of_line();
15093            let handles_before = decoder.remaining_handles();
15094            if let Some((inlined, num_bytes, num_handles)) =
15095                fidl::encoding::decode_envelope_header(decoder, next_offset)?
15096            {
15097                let member_inline_size =
15098                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
15099                if inlined != (member_inline_size <= 4) {
15100                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
15101                }
15102                let inner_offset;
15103                let mut inner_depth = depth.clone();
15104                if inlined {
15105                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
15106                    inner_offset = next_offset;
15107                } else {
15108                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
15109                    inner_depth.increment()?;
15110                }
15111                let val_ref = self.next_hop.get_or_insert_with(|| fidl::new_empty!(u8, D));
15112                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
15113                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
15114                {
15115                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
15116                }
15117                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
15118                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
15119                }
15120            }
15121
15122            next_offset += envelope_size;
15123            _next_ordinal_to_read += 1;
15124            if next_offset >= end_offset {
15125                return Ok(());
15126            }
15127
15128            // Decode unknown envelopes for gaps in ordinals.
15129            while _next_ordinal_to_read < 5 {
15130                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15131                _next_ordinal_to_read += 1;
15132                next_offset += envelope_size;
15133            }
15134
15135            let next_out_of_line = decoder.next_out_of_line();
15136            let handles_before = decoder.remaining_handles();
15137            if let Some((inlined, num_bytes, num_handles)) =
15138                fidl::encoding::decode_envelope_header(decoder, next_offset)?
15139            {
15140                let member_inline_size =
15141                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
15142                if inlined != (member_inline_size <= 4) {
15143                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
15144                }
15145                let inner_offset;
15146                let mut inner_depth = depth.clone();
15147                if inlined {
15148                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
15149                    inner_offset = next_offset;
15150                } else {
15151                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
15152                    inner_depth.increment()?;
15153                }
15154                let val_ref = self.path_cost.get_or_insert_with(|| fidl::new_empty!(u8, D));
15155                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
15156                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
15157                {
15158                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
15159                }
15160                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
15161                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
15162                }
15163            }
15164
15165            next_offset += envelope_size;
15166            _next_ordinal_to_read += 1;
15167            if next_offset >= end_offset {
15168                return Ok(());
15169            }
15170
15171            // Decode unknown envelopes for gaps in ordinals.
15172            while _next_ordinal_to_read < 6 {
15173                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15174                _next_ordinal_to_read += 1;
15175                next_offset += envelope_size;
15176            }
15177
15178            let next_out_of_line = decoder.next_out_of_line();
15179            let handles_before = decoder.remaining_handles();
15180            if let Some((inlined, num_bytes, num_handles)) =
15181                fidl::encoding::decode_envelope_header(decoder, next_offset)?
15182            {
15183                let member_inline_size =
15184                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
15185                if inlined != (member_inline_size <= 4) {
15186                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
15187                }
15188                let inner_offset;
15189                let mut inner_depth = depth.clone();
15190                if inlined {
15191                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
15192                    inner_offset = next_offset;
15193                } else {
15194                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
15195                    inner_depth.increment()?;
15196                }
15197                let val_ref = self.link_quality_in.get_or_insert_with(|| fidl::new_empty!(u8, D));
15198                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
15199                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
15200                {
15201                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
15202                }
15203                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
15204                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
15205                }
15206            }
15207
15208            next_offset += envelope_size;
15209            _next_ordinal_to_read += 1;
15210            if next_offset >= end_offset {
15211                return Ok(());
15212            }
15213
15214            // Decode unknown envelopes for gaps in ordinals.
15215            while _next_ordinal_to_read < 7 {
15216                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15217                _next_ordinal_to_read += 1;
15218                next_offset += envelope_size;
15219            }
15220
15221            let next_out_of_line = decoder.next_out_of_line();
15222            let handles_before = decoder.remaining_handles();
15223            if let Some((inlined, num_bytes, num_handles)) =
15224                fidl::encoding::decode_envelope_header(decoder, next_offset)?
15225            {
15226                let member_inline_size =
15227                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
15228                if inlined != (member_inline_size <= 4) {
15229                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
15230                }
15231                let inner_offset;
15232                let mut inner_depth = depth.clone();
15233                if inlined {
15234                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
15235                    inner_offset = next_offset;
15236                } else {
15237                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
15238                    inner_depth.increment()?;
15239                }
15240                let val_ref = self.link_quality_out.get_or_insert_with(|| fidl::new_empty!(u8, D));
15241                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
15242                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
15243                {
15244                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
15245                }
15246                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
15247                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
15248                }
15249            }
15250
15251            next_offset += envelope_size;
15252            _next_ordinal_to_read += 1;
15253            if next_offset >= end_offset {
15254                return Ok(());
15255            }
15256
15257            // Decode unknown envelopes for gaps in ordinals.
15258            while _next_ordinal_to_read < 8 {
15259                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15260                _next_ordinal_to_read += 1;
15261                next_offset += envelope_size;
15262            }
15263
15264            let next_out_of_line = decoder.next_out_of_line();
15265            let handles_before = decoder.remaining_handles();
15266            if let Some((inlined, num_bytes, num_handles)) =
15267                fidl::encoding::decode_envelope_header(decoder, next_offset)?
15268            {
15269                let member_inline_size =
15270                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
15271                if inlined != (member_inline_size <= 4) {
15272                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
15273                }
15274                let inner_offset;
15275                let mut inner_depth = depth.clone();
15276                if inlined {
15277                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
15278                    inner_offset = next_offset;
15279                } else {
15280                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
15281                    inner_depth.increment()?;
15282                }
15283                let val_ref = self.age.get_or_insert_with(|| fidl::new_empty!(i64, D));
15284                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
15285                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
15286                {
15287                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
15288                }
15289                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
15290                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
15291                }
15292            }
15293
15294            next_offset += envelope_size;
15295            _next_ordinal_to_read += 1;
15296            if next_offset >= end_offset {
15297                return Ok(());
15298            }
15299
15300            // Decode unknown envelopes for gaps in ordinals.
15301            while _next_ordinal_to_read < 9 {
15302                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15303                _next_ordinal_to_read += 1;
15304                next_offset += envelope_size;
15305            }
15306
15307            let next_out_of_line = decoder.next_out_of_line();
15308            let handles_before = decoder.remaining_handles();
15309            if let Some((inlined, num_bytes, num_handles)) =
15310                fidl::encoding::decode_envelope_header(decoder, next_offset)?
15311            {
15312                let member_inline_size =
15313                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
15314                if inlined != (member_inline_size <= 4) {
15315                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
15316                }
15317                let inner_offset;
15318                let mut inner_depth = depth.clone();
15319                if inlined {
15320                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
15321                    inner_offset = next_offset;
15322                } else {
15323                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
15324                    inner_depth.increment()?;
15325                }
15326                let val_ref =
15327                    self.link_established.get_or_insert_with(|| fidl::new_empty!(bool, D));
15328                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
15329                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
15330                {
15331                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
15332                }
15333                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
15334                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
15335                }
15336            }
15337
15338            next_offset += envelope_size;
15339
15340            // Decode the remaining unknown envelopes.
15341            while next_offset < end_offset {
15342                _next_ordinal_to_read += 1;
15343                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15344                next_offset += envelope_size;
15345            }
15346
15347            Ok(())
15348        }
15349    }
15350
15351    impl SecurityPolicy {
15352        #[inline(always)]
15353        fn max_ordinal_present(&self) -> u64 {
15354            if let Some(_) = self.version_threshold_for_routing {
15355                return 10;
15356            }
15357            if let Some(_) = self.nonccm_routers_enabled {
15358                return 9;
15359            }
15360            if let Some(_) = self.toble_link_enabled {
15361                return 8;
15362            }
15363            if let Some(_) = self.network_key_provisioning_enabled {
15364                return 7;
15365            }
15366            if let Some(_) = self.autonomous_enrollment_enabled {
15367                return 6;
15368            }
15369            if let Some(_) = self.external_commissioning_enabled {
15370                return 5;
15371            }
15372            if let Some(_) = self.routers_enabled {
15373                return 4;
15374            }
15375            if let Some(_) = self.native_commissioning_enabled {
15376                return 3;
15377            }
15378            if let Some(_) = self.obtain_network_key_enabled {
15379                return 2;
15380            }
15381            if let Some(_) = self.rotation_time {
15382                return 1;
15383            }
15384            0
15385        }
15386    }
15387
15388    impl fidl::encoding::ValueTypeMarker for SecurityPolicy {
15389        type Borrowed<'a> = &'a Self;
15390        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
15391            value
15392        }
15393    }
15394
15395    unsafe impl fidl::encoding::TypeMarker for SecurityPolicy {
15396        type Owned = Self;
15397
15398        #[inline(always)]
15399        fn inline_align(_context: fidl::encoding::Context) -> usize {
15400            8
15401        }
15402
15403        #[inline(always)]
15404        fn inline_size(_context: fidl::encoding::Context) -> usize {
15405            16
15406        }
15407    }
15408
15409    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<SecurityPolicy, D>
15410        for &SecurityPolicy
15411    {
15412        unsafe fn encode(
15413            self,
15414            encoder: &mut fidl::encoding::Encoder<'_, D>,
15415            offset: usize,
15416            mut depth: fidl::encoding::Depth,
15417        ) -> fidl::Result<()> {
15418            encoder.debug_check_bounds::<SecurityPolicy>(offset);
15419            // Vector header
15420            let max_ordinal: u64 = self.max_ordinal_present();
15421            encoder.write_num(max_ordinal, offset);
15422            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
15423            // Calling encoder.out_of_line_offset(0) is not allowed.
15424            if max_ordinal == 0 {
15425                return Ok(());
15426            }
15427            depth.increment()?;
15428            let envelope_size = 8;
15429            let bytes_len = max_ordinal as usize * envelope_size;
15430            #[allow(unused_variables)]
15431            let offset = encoder.out_of_line_offset(bytes_len);
15432            let mut _prev_end_offset: usize = 0;
15433            if 1 > max_ordinal {
15434                return Ok(());
15435            }
15436
15437            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
15438            // are envelope_size bytes.
15439            let cur_offset: usize = (1 - 1) * envelope_size;
15440
15441            // Zero reserved fields.
15442            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
15443
15444            // Safety:
15445            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
15446            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
15447            //   envelope_size bytes, there is always sufficient room.
15448            fidl::encoding::encode_in_envelope_optional::<u16, D>(
15449                self.rotation_time.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
15450                encoder,
15451                offset + cur_offset,
15452                depth,
15453            )?;
15454
15455            _prev_end_offset = cur_offset + envelope_size;
15456            if 2 > max_ordinal {
15457                return Ok(());
15458            }
15459
15460            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
15461            // are envelope_size bytes.
15462            let cur_offset: usize = (2 - 1) * envelope_size;
15463
15464            // Zero reserved fields.
15465            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
15466
15467            // Safety:
15468            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
15469            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
15470            //   envelope_size bytes, there is always sufficient room.
15471            fidl::encoding::encode_in_envelope_optional::<bool, D>(
15472                self.obtain_network_key_enabled
15473                    .as_ref()
15474                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
15475                encoder,
15476                offset + cur_offset,
15477                depth,
15478            )?;
15479
15480            _prev_end_offset = cur_offset + envelope_size;
15481            if 3 > max_ordinal {
15482                return Ok(());
15483            }
15484
15485            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
15486            // are envelope_size bytes.
15487            let cur_offset: usize = (3 - 1) * envelope_size;
15488
15489            // Zero reserved fields.
15490            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
15491
15492            // Safety:
15493            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
15494            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
15495            //   envelope_size bytes, there is always sufficient room.
15496            fidl::encoding::encode_in_envelope_optional::<bool, D>(
15497                self.native_commissioning_enabled
15498                    .as_ref()
15499                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
15500                encoder,
15501                offset + cur_offset,
15502                depth,
15503            )?;
15504
15505            _prev_end_offset = cur_offset + envelope_size;
15506            if 4 > max_ordinal {
15507                return Ok(());
15508            }
15509
15510            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
15511            // are envelope_size bytes.
15512            let cur_offset: usize = (4 - 1) * envelope_size;
15513
15514            // Zero reserved fields.
15515            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
15516
15517            // Safety:
15518            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
15519            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
15520            //   envelope_size bytes, there is always sufficient room.
15521            fidl::encoding::encode_in_envelope_optional::<bool, D>(
15522                self.routers_enabled
15523                    .as_ref()
15524                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
15525                encoder,
15526                offset + cur_offset,
15527                depth,
15528            )?;
15529
15530            _prev_end_offset = cur_offset + envelope_size;
15531            if 5 > max_ordinal {
15532                return Ok(());
15533            }
15534
15535            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
15536            // are envelope_size bytes.
15537            let cur_offset: usize = (5 - 1) * envelope_size;
15538
15539            // Zero reserved fields.
15540            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
15541
15542            // Safety:
15543            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
15544            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
15545            //   envelope_size bytes, there is always sufficient room.
15546            fidl::encoding::encode_in_envelope_optional::<bool, D>(
15547                self.external_commissioning_enabled
15548                    .as_ref()
15549                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
15550                encoder,
15551                offset + cur_offset,
15552                depth,
15553            )?;
15554
15555            _prev_end_offset = cur_offset + envelope_size;
15556            if 6 > max_ordinal {
15557                return Ok(());
15558            }
15559
15560            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
15561            // are envelope_size bytes.
15562            let cur_offset: usize = (6 - 1) * envelope_size;
15563
15564            // Zero reserved fields.
15565            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
15566
15567            // Safety:
15568            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
15569            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
15570            //   envelope_size bytes, there is always sufficient room.
15571            fidl::encoding::encode_in_envelope_optional::<bool, D>(
15572                self.autonomous_enrollment_enabled
15573                    .as_ref()
15574                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
15575                encoder,
15576                offset + cur_offset,
15577                depth,
15578            )?;
15579
15580            _prev_end_offset = cur_offset + envelope_size;
15581            if 7 > max_ordinal {
15582                return Ok(());
15583            }
15584
15585            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
15586            // are envelope_size bytes.
15587            let cur_offset: usize = (7 - 1) * envelope_size;
15588
15589            // Zero reserved fields.
15590            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
15591
15592            // Safety:
15593            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
15594            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
15595            //   envelope_size bytes, there is always sufficient room.
15596            fidl::encoding::encode_in_envelope_optional::<bool, D>(
15597                self.network_key_provisioning_enabled
15598                    .as_ref()
15599                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
15600                encoder,
15601                offset + cur_offset,
15602                depth,
15603            )?;
15604
15605            _prev_end_offset = cur_offset + envelope_size;
15606            if 8 > max_ordinal {
15607                return Ok(());
15608            }
15609
15610            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
15611            // are envelope_size bytes.
15612            let cur_offset: usize = (8 - 1) * envelope_size;
15613
15614            // Zero reserved fields.
15615            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
15616
15617            // Safety:
15618            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
15619            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
15620            //   envelope_size bytes, there is always sufficient room.
15621            fidl::encoding::encode_in_envelope_optional::<bool, D>(
15622                self.toble_link_enabled
15623                    .as_ref()
15624                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
15625                encoder,
15626                offset + cur_offset,
15627                depth,
15628            )?;
15629
15630            _prev_end_offset = cur_offset + envelope_size;
15631            if 9 > max_ordinal {
15632                return Ok(());
15633            }
15634
15635            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
15636            // are envelope_size bytes.
15637            let cur_offset: usize = (9 - 1) * envelope_size;
15638
15639            // Zero reserved fields.
15640            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
15641
15642            // Safety:
15643            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
15644            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
15645            //   envelope_size bytes, there is always sufficient room.
15646            fidl::encoding::encode_in_envelope_optional::<bool, D>(
15647                self.nonccm_routers_enabled
15648                    .as_ref()
15649                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
15650                encoder,
15651                offset + cur_offset,
15652                depth,
15653            )?;
15654
15655            _prev_end_offset = cur_offset + envelope_size;
15656            if 10 > max_ordinal {
15657                return Ok(());
15658            }
15659
15660            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
15661            // are envelope_size bytes.
15662            let cur_offset: usize = (10 - 1) * envelope_size;
15663
15664            // Zero reserved fields.
15665            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
15666
15667            // Safety:
15668            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
15669            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
15670            //   envelope_size bytes, there is always sufficient room.
15671            fidl::encoding::encode_in_envelope_optional::<u8, D>(
15672                self.version_threshold_for_routing
15673                    .as_ref()
15674                    .map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
15675                encoder,
15676                offset + cur_offset,
15677                depth,
15678            )?;
15679
15680            _prev_end_offset = cur_offset + envelope_size;
15681
15682            Ok(())
15683        }
15684    }
15685
15686    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SecurityPolicy {
15687        #[inline(always)]
15688        fn new_empty() -> Self {
15689            Self::default()
15690        }
15691
15692        unsafe fn decode(
15693            &mut self,
15694            decoder: &mut fidl::encoding::Decoder<'_, D>,
15695            offset: usize,
15696            mut depth: fidl::encoding::Depth,
15697        ) -> fidl::Result<()> {
15698            decoder.debug_check_bounds::<Self>(offset);
15699            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
15700                None => return Err(fidl::Error::NotNullable),
15701                Some(len) => len,
15702            };
15703            // Calling decoder.out_of_line_offset(0) is not allowed.
15704            if len == 0 {
15705                return Ok(());
15706            };
15707            depth.increment()?;
15708            let envelope_size = 8;
15709            let bytes_len = len * envelope_size;
15710            let offset = decoder.out_of_line_offset(bytes_len)?;
15711            // Decode the envelope for each type.
15712            let mut _next_ordinal_to_read = 0;
15713            let mut next_offset = offset;
15714            let end_offset = offset + bytes_len;
15715            _next_ordinal_to_read += 1;
15716            if next_offset >= end_offset {
15717                return Ok(());
15718            }
15719
15720            // Decode unknown envelopes for gaps in ordinals.
15721            while _next_ordinal_to_read < 1 {
15722                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15723                _next_ordinal_to_read += 1;
15724                next_offset += envelope_size;
15725            }
15726
15727            let next_out_of_line = decoder.next_out_of_line();
15728            let handles_before = decoder.remaining_handles();
15729            if let Some((inlined, num_bytes, num_handles)) =
15730                fidl::encoding::decode_envelope_header(decoder, next_offset)?
15731            {
15732                let member_inline_size =
15733                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
15734                if inlined != (member_inline_size <= 4) {
15735                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
15736                }
15737                let inner_offset;
15738                let mut inner_depth = depth.clone();
15739                if inlined {
15740                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
15741                    inner_offset = next_offset;
15742                } else {
15743                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
15744                    inner_depth.increment()?;
15745                }
15746                let val_ref = self.rotation_time.get_or_insert_with(|| fidl::new_empty!(u16, D));
15747                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
15748                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
15749                {
15750                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
15751                }
15752                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
15753                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
15754                }
15755            }
15756
15757            next_offset += envelope_size;
15758            _next_ordinal_to_read += 1;
15759            if next_offset >= end_offset {
15760                return Ok(());
15761            }
15762
15763            // Decode unknown envelopes for gaps in ordinals.
15764            while _next_ordinal_to_read < 2 {
15765                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15766                _next_ordinal_to_read += 1;
15767                next_offset += envelope_size;
15768            }
15769
15770            let next_out_of_line = decoder.next_out_of_line();
15771            let handles_before = decoder.remaining_handles();
15772            if let Some((inlined, num_bytes, num_handles)) =
15773                fidl::encoding::decode_envelope_header(decoder, next_offset)?
15774            {
15775                let member_inline_size =
15776                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
15777                if inlined != (member_inline_size <= 4) {
15778                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
15779                }
15780                let inner_offset;
15781                let mut inner_depth = depth.clone();
15782                if inlined {
15783                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
15784                    inner_offset = next_offset;
15785                } else {
15786                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
15787                    inner_depth.increment()?;
15788                }
15789                let val_ref = self
15790                    .obtain_network_key_enabled
15791                    .get_or_insert_with(|| fidl::new_empty!(bool, D));
15792                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
15793                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
15794                {
15795                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
15796                }
15797                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
15798                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
15799                }
15800            }
15801
15802            next_offset += envelope_size;
15803            _next_ordinal_to_read += 1;
15804            if next_offset >= end_offset {
15805                return Ok(());
15806            }
15807
15808            // Decode unknown envelopes for gaps in ordinals.
15809            while _next_ordinal_to_read < 3 {
15810                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15811                _next_ordinal_to_read += 1;
15812                next_offset += envelope_size;
15813            }
15814
15815            let next_out_of_line = decoder.next_out_of_line();
15816            let handles_before = decoder.remaining_handles();
15817            if let Some((inlined, num_bytes, num_handles)) =
15818                fidl::encoding::decode_envelope_header(decoder, next_offset)?
15819            {
15820                let member_inline_size =
15821                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
15822                if inlined != (member_inline_size <= 4) {
15823                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
15824                }
15825                let inner_offset;
15826                let mut inner_depth = depth.clone();
15827                if inlined {
15828                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
15829                    inner_offset = next_offset;
15830                } else {
15831                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
15832                    inner_depth.increment()?;
15833                }
15834                let val_ref = self
15835                    .native_commissioning_enabled
15836                    .get_or_insert_with(|| fidl::new_empty!(bool, D));
15837                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
15838                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
15839                {
15840                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
15841                }
15842                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
15843                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
15844                }
15845            }
15846
15847            next_offset += envelope_size;
15848            _next_ordinal_to_read += 1;
15849            if next_offset >= end_offset {
15850                return Ok(());
15851            }
15852
15853            // Decode unknown envelopes for gaps in ordinals.
15854            while _next_ordinal_to_read < 4 {
15855                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15856                _next_ordinal_to_read += 1;
15857                next_offset += envelope_size;
15858            }
15859
15860            let next_out_of_line = decoder.next_out_of_line();
15861            let handles_before = decoder.remaining_handles();
15862            if let Some((inlined, num_bytes, num_handles)) =
15863                fidl::encoding::decode_envelope_header(decoder, next_offset)?
15864            {
15865                let member_inline_size =
15866                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
15867                if inlined != (member_inline_size <= 4) {
15868                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
15869                }
15870                let inner_offset;
15871                let mut inner_depth = depth.clone();
15872                if inlined {
15873                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
15874                    inner_offset = next_offset;
15875                } else {
15876                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
15877                    inner_depth.increment()?;
15878                }
15879                let val_ref = self.routers_enabled.get_or_insert_with(|| fidl::new_empty!(bool, D));
15880                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
15881                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
15882                {
15883                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
15884                }
15885                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
15886                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
15887                }
15888            }
15889
15890            next_offset += envelope_size;
15891            _next_ordinal_to_read += 1;
15892            if next_offset >= end_offset {
15893                return Ok(());
15894            }
15895
15896            // Decode unknown envelopes for gaps in ordinals.
15897            while _next_ordinal_to_read < 5 {
15898                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15899                _next_ordinal_to_read += 1;
15900                next_offset += envelope_size;
15901            }
15902
15903            let next_out_of_line = decoder.next_out_of_line();
15904            let handles_before = decoder.remaining_handles();
15905            if let Some((inlined, num_bytes, num_handles)) =
15906                fidl::encoding::decode_envelope_header(decoder, next_offset)?
15907            {
15908                let member_inline_size =
15909                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
15910                if inlined != (member_inline_size <= 4) {
15911                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
15912                }
15913                let inner_offset;
15914                let mut inner_depth = depth.clone();
15915                if inlined {
15916                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
15917                    inner_offset = next_offset;
15918                } else {
15919                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
15920                    inner_depth.increment()?;
15921                }
15922                let val_ref = self
15923                    .external_commissioning_enabled
15924                    .get_or_insert_with(|| fidl::new_empty!(bool, D));
15925                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
15926                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
15927                {
15928                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
15929                }
15930                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
15931                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
15932                }
15933            }
15934
15935            next_offset += envelope_size;
15936            _next_ordinal_to_read += 1;
15937            if next_offset >= end_offset {
15938                return Ok(());
15939            }
15940
15941            // Decode unknown envelopes for gaps in ordinals.
15942            while _next_ordinal_to_read < 6 {
15943                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15944                _next_ordinal_to_read += 1;
15945                next_offset += envelope_size;
15946            }
15947
15948            let next_out_of_line = decoder.next_out_of_line();
15949            let handles_before = decoder.remaining_handles();
15950            if let Some((inlined, num_bytes, num_handles)) =
15951                fidl::encoding::decode_envelope_header(decoder, next_offset)?
15952            {
15953                let member_inline_size =
15954                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
15955                if inlined != (member_inline_size <= 4) {
15956                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
15957                }
15958                let inner_offset;
15959                let mut inner_depth = depth.clone();
15960                if inlined {
15961                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
15962                    inner_offset = next_offset;
15963                } else {
15964                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
15965                    inner_depth.increment()?;
15966                }
15967                let val_ref = self
15968                    .autonomous_enrollment_enabled
15969                    .get_or_insert_with(|| fidl::new_empty!(bool, D));
15970                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
15971                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
15972                {
15973                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
15974                }
15975                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
15976                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
15977                }
15978            }
15979
15980            next_offset += envelope_size;
15981            _next_ordinal_to_read += 1;
15982            if next_offset >= end_offset {
15983                return Ok(());
15984            }
15985
15986            // Decode unknown envelopes for gaps in ordinals.
15987            while _next_ordinal_to_read < 7 {
15988                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15989                _next_ordinal_to_read += 1;
15990                next_offset += envelope_size;
15991            }
15992
15993            let next_out_of_line = decoder.next_out_of_line();
15994            let handles_before = decoder.remaining_handles();
15995            if let Some((inlined, num_bytes, num_handles)) =
15996                fidl::encoding::decode_envelope_header(decoder, next_offset)?
15997            {
15998                let member_inline_size =
15999                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
16000                if inlined != (member_inline_size <= 4) {
16001                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
16002                }
16003                let inner_offset;
16004                let mut inner_depth = depth.clone();
16005                if inlined {
16006                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
16007                    inner_offset = next_offset;
16008                } else {
16009                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
16010                    inner_depth.increment()?;
16011                }
16012                let val_ref = self
16013                    .network_key_provisioning_enabled
16014                    .get_or_insert_with(|| fidl::new_empty!(bool, D));
16015                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
16016                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
16017                {
16018                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
16019                }
16020                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
16021                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
16022                }
16023            }
16024
16025            next_offset += envelope_size;
16026            _next_ordinal_to_read += 1;
16027            if next_offset >= end_offset {
16028                return Ok(());
16029            }
16030
16031            // Decode unknown envelopes for gaps in ordinals.
16032            while _next_ordinal_to_read < 8 {
16033                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
16034                _next_ordinal_to_read += 1;
16035                next_offset += envelope_size;
16036            }
16037
16038            let next_out_of_line = decoder.next_out_of_line();
16039            let handles_before = decoder.remaining_handles();
16040            if let Some((inlined, num_bytes, num_handles)) =
16041                fidl::encoding::decode_envelope_header(decoder, next_offset)?
16042            {
16043                let member_inline_size =
16044                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
16045                if inlined != (member_inline_size <= 4) {
16046                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
16047                }
16048                let inner_offset;
16049                let mut inner_depth = depth.clone();
16050                if inlined {
16051                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
16052                    inner_offset = next_offset;
16053                } else {
16054                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
16055                    inner_depth.increment()?;
16056                }
16057                let val_ref =
16058                    self.toble_link_enabled.get_or_insert_with(|| fidl::new_empty!(bool, D));
16059                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
16060                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
16061                {
16062                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
16063                }
16064                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
16065                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
16066                }
16067            }
16068
16069            next_offset += envelope_size;
16070            _next_ordinal_to_read += 1;
16071            if next_offset >= end_offset {
16072                return Ok(());
16073            }
16074
16075            // Decode unknown envelopes for gaps in ordinals.
16076            while _next_ordinal_to_read < 9 {
16077                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
16078                _next_ordinal_to_read += 1;
16079                next_offset += envelope_size;
16080            }
16081
16082            let next_out_of_line = decoder.next_out_of_line();
16083            let handles_before = decoder.remaining_handles();
16084            if let Some((inlined, num_bytes, num_handles)) =
16085                fidl::encoding::decode_envelope_header(decoder, next_offset)?
16086            {
16087                let member_inline_size =
16088                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
16089                if inlined != (member_inline_size <= 4) {
16090                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
16091                }
16092                let inner_offset;
16093                let mut inner_depth = depth.clone();
16094                if inlined {
16095                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
16096                    inner_offset = next_offset;
16097                } else {
16098                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
16099                    inner_depth.increment()?;
16100                }
16101                let val_ref =
16102                    self.nonccm_routers_enabled.get_or_insert_with(|| fidl::new_empty!(bool, D));
16103                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
16104                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
16105                {
16106                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
16107                }
16108                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
16109                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
16110                }
16111            }
16112
16113            next_offset += envelope_size;
16114            _next_ordinal_to_read += 1;
16115            if next_offset >= end_offset {
16116                return Ok(());
16117            }
16118
16119            // Decode unknown envelopes for gaps in ordinals.
16120            while _next_ordinal_to_read < 10 {
16121                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
16122                _next_ordinal_to_read += 1;
16123                next_offset += envelope_size;
16124            }
16125
16126            let next_out_of_line = decoder.next_out_of_line();
16127            let handles_before = decoder.remaining_handles();
16128            if let Some((inlined, num_bytes, num_handles)) =
16129                fidl::encoding::decode_envelope_header(decoder, next_offset)?
16130            {
16131                let member_inline_size =
16132                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
16133                if inlined != (member_inline_size <= 4) {
16134                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
16135                }
16136                let inner_offset;
16137                let mut inner_depth = depth.clone();
16138                if inlined {
16139                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
16140                    inner_offset = next_offset;
16141                } else {
16142                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
16143                    inner_depth.increment()?;
16144                }
16145                let val_ref = self
16146                    .version_threshold_for_routing
16147                    .get_or_insert_with(|| fidl::new_empty!(u8, D));
16148                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
16149                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
16150                {
16151                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
16152                }
16153                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
16154                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
16155                }
16156            }
16157
16158            next_offset += envelope_size;
16159
16160            // Decode the remaining unknown envelopes.
16161            while next_offset < end_offset {
16162                _next_ordinal_to_read += 1;
16163                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
16164                next_offset += envelope_size;
16165            }
16166
16167            Ok(())
16168        }
16169    }
16170
16171    impl SrpServerHost {
16172        #[inline(always)]
16173        fn max_ordinal_present(&self) -> u64 {
16174            if let Some(_) = self.addresses {
16175                return 3;
16176            }
16177            if let Some(_) = self.deleted {
16178                return 2;
16179            }
16180            if let Some(_) = self.name {
16181                return 1;
16182            }
16183            0
16184        }
16185    }
16186
16187    impl fidl::encoding::ValueTypeMarker for SrpServerHost {
16188        type Borrowed<'a> = &'a Self;
16189        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
16190            value
16191        }
16192    }
16193
16194    unsafe impl fidl::encoding::TypeMarker for SrpServerHost {
16195        type Owned = Self;
16196
16197        #[inline(always)]
16198        fn inline_align(_context: fidl::encoding::Context) -> usize {
16199            8
16200        }
16201
16202        #[inline(always)]
16203        fn inline_size(_context: fidl::encoding::Context) -> usize {
16204            16
16205        }
16206    }
16207
16208    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<SrpServerHost, D>
16209        for &SrpServerHost
16210    {
16211        unsafe fn encode(
16212            self,
16213            encoder: &mut fidl::encoding::Encoder<'_, D>,
16214            offset: usize,
16215            mut depth: fidl::encoding::Depth,
16216        ) -> fidl::Result<()> {
16217            encoder.debug_check_bounds::<SrpServerHost>(offset);
16218            // Vector header
16219            let max_ordinal: u64 = self.max_ordinal_present();
16220            encoder.write_num(max_ordinal, offset);
16221            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
16222            // Calling encoder.out_of_line_offset(0) is not allowed.
16223            if max_ordinal == 0 {
16224                return Ok(());
16225            }
16226            depth.increment()?;
16227            let envelope_size = 8;
16228            let bytes_len = max_ordinal as usize * envelope_size;
16229            #[allow(unused_variables)]
16230            let offset = encoder.out_of_line_offset(bytes_len);
16231            let mut _prev_end_offset: usize = 0;
16232            if 1 > max_ordinal {
16233                return Ok(());
16234            }
16235
16236            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
16237            // are envelope_size bytes.
16238            let cur_offset: usize = (1 - 1) * envelope_size;
16239
16240            // Zero reserved fields.
16241            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
16242
16243            // Safety:
16244            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
16245            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
16246            //   envelope_size bytes, there is always sufficient room.
16247            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<255>, D>(
16248                self.name.as_ref().map(
16249                    <fidl::encoding::BoundedString<255> as fidl::encoding::ValueTypeMarker>::borrow,
16250                ),
16251                encoder,
16252                offset + cur_offset,
16253                depth,
16254            )?;
16255
16256            _prev_end_offset = cur_offset + envelope_size;
16257            if 2 > max_ordinal {
16258                return Ok(());
16259            }
16260
16261            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
16262            // are envelope_size bytes.
16263            let cur_offset: usize = (2 - 1) * envelope_size;
16264
16265            // Zero reserved fields.
16266            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
16267
16268            // Safety:
16269            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
16270            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
16271            //   envelope_size bytes, there is always sufficient room.
16272            fidl::encoding::encode_in_envelope_optional::<bool, D>(
16273                self.deleted.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
16274                encoder,
16275                offset + cur_offset,
16276                depth,
16277            )?;
16278
16279            _prev_end_offset = cur_offset + envelope_size;
16280            if 3 > max_ordinal {
16281                return Ok(());
16282            }
16283
16284            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
16285            // are envelope_size bytes.
16286            let cur_offset: usize = (3 - 1) * envelope_size;
16287
16288            // Zero reserved fields.
16289            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
16290
16291            // Safety:
16292            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
16293            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
16294            //   envelope_size bytes, there is always sufficient room.
16295            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<fidl_fuchsia_net__common::Ipv6Address, 16>, D>(
16296            self.addresses.as_ref().map(<fidl::encoding::Vector<fidl_fuchsia_net__common::Ipv6Address, 16> as fidl::encoding::ValueTypeMarker>::borrow),
16297            encoder, offset + cur_offset, depth
16298        )?;
16299
16300            _prev_end_offset = cur_offset + envelope_size;
16301
16302            Ok(())
16303        }
16304    }
16305
16306    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SrpServerHost {
16307        #[inline(always)]
16308        fn new_empty() -> Self {
16309            Self::default()
16310        }
16311
16312        unsafe fn decode(
16313            &mut self,
16314            decoder: &mut fidl::encoding::Decoder<'_, D>,
16315            offset: usize,
16316            mut depth: fidl::encoding::Depth,
16317        ) -> fidl::Result<()> {
16318            decoder.debug_check_bounds::<Self>(offset);
16319            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
16320                None => return Err(fidl::Error::NotNullable),
16321                Some(len) => len,
16322            };
16323            // Calling decoder.out_of_line_offset(0) is not allowed.
16324            if len == 0 {
16325                return Ok(());
16326            };
16327            depth.increment()?;
16328            let envelope_size = 8;
16329            let bytes_len = len * envelope_size;
16330            let offset = decoder.out_of_line_offset(bytes_len)?;
16331            // Decode the envelope for each type.
16332            let mut _next_ordinal_to_read = 0;
16333            let mut next_offset = offset;
16334            let end_offset = offset + bytes_len;
16335            _next_ordinal_to_read += 1;
16336            if next_offset >= end_offset {
16337                return Ok(());
16338            }
16339
16340            // Decode unknown envelopes for gaps in ordinals.
16341            while _next_ordinal_to_read < 1 {
16342                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
16343                _next_ordinal_to_read += 1;
16344                next_offset += envelope_size;
16345            }
16346
16347            let next_out_of_line = decoder.next_out_of_line();
16348            let handles_before = decoder.remaining_handles();
16349            if let Some((inlined, num_bytes, num_handles)) =
16350                fidl::encoding::decode_envelope_header(decoder, next_offset)?
16351            {
16352                let member_inline_size =
16353                    <fidl::encoding::BoundedString<255> as fidl::encoding::TypeMarker>::inline_size(
16354                        decoder.context,
16355                    );
16356                if inlined != (member_inline_size <= 4) {
16357                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
16358                }
16359                let inner_offset;
16360                let mut inner_depth = depth.clone();
16361                if inlined {
16362                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
16363                    inner_offset = next_offset;
16364                } else {
16365                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
16366                    inner_depth.increment()?;
16367                }
16368                let val_ref = self
16369                    .name
16370                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<255>, D));
16371                fidl::decode!(
16372                    fidl::encoding::BoundedString<255>,
16373                    D,
16374                    val_ref,
16375                    decoder,
16376                    inner_offset,
16377                    inner_depth
16378                )?;
16379                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
16380                {
16381                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
16382                }
16383                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
16384                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
16385                }
16386            }
16387
16388            next_offset += envelope_size;
16389            _next_ordinal_to_read += 1;
16390            if next_offset >= end_offset {
16391                return Ok(());
16392            }
16393
16394            // Decode unknown envelopes for gaps in ordinals.
16395            while _next_ordinal_to_read < 2 {
16396                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
16397                _next_ordinal_to_read += 1;
16398                next_offset += envelope_size;
16399            }
16400
16401            let next_out_of_line = decoder.next_out_of_line();
16402            let handles_before = decoder.remaining_handles();
16403            if let Some((inlined, num_bytes, num_handles)) =
16404                fidl::encoding::decode_envelope_header(decoder, next_offset)?
16405            {
16406                let member_inline_size =
16407                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
16408                if inlined != (member_inline_size <= 4) {
16409                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
16410                }
16411                let inner_offset;
16412                let mut inner_depth = depth.clone();
16413                if inlined {
16414                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
16415                    inner_offset = next_offset;
16416                } else {
16417                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
16418                    inner_depth.increment()?;
16419                }
16420                let val_ref = self.deleted.get_or_insert_with(|| fidl::new_empty!(bool, D));
16421                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
16422                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
16423                {
16424                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
16425                }
16426                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
16427                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
16428                }
16429            }
16430
16431            next_offset += envelope_size;
16432            _next_ordinal_to_read += 1;
16433            if next_offset >= end_offset {
16434                return Ok(());
16435            }
16436
16437            // Decode unknown envelopes for gaps in ordinals.
16438            while _next_ordinal_to_read < 3 {
16439                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
16440                _next_ordinal_to_read += 1;
16441                next_offset += envelope_size;
16442            }
16443
16444            let next_out_of_line = decoder.next_out_of_line();
16445            let handles_before = decoder.remaining_handles();
16446            if let Some((inlined, num_bytes, num_handles)) =
16447                fidl::encoding::decode_envelope_header(decoder, next_offset)?
16448            {
16449                let member_inline_size = <fidl::encoding::Vector<
16450                    fidl_fuchsia_net__common::Ipv6Address,
16451                    16,
16452                > as fidl::encoding::TypeMarker>::inline_size(
16453                    decoder.context
16454                );
16455                if inlined != (member_inline_size <= 4) {
16456                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
16457                }
16458                let inner_offset;
16459                let mut inner_depth = depth.clone();
16460                if inlined {
16461                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
16462                    inner_offset = next_offset;
16463                } else {
16464                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
16465                    inner_depth.increment()?;
16466                }
16467                let val_ref =
16468                self.addresses.get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<fidl_fuchsia_net__common::Ipv6Address, 16>, D));
16469                fidl::decode!(fidl::encoding::Vector<fidl_fuchsia_net__common::Ipv6Address, 16>, D, val_ref, decoder, inner_offset, inner_depth)?;
16470                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
16471                {
16472                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
16473                }
16474                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
16475                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
16476                }
16477            }
16478
16479            next_offset += envelope_size;
16480
16481            // Decode the remaining unknown envelopes.
16482            while next_offset < end_offset {
16483                _next_ordinal_to_read += 1;
16484                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
16485                next_offset += envelope_size;
16486            }
16487
16488            Ok(())
16489        }
16490    }
16491
16492    impl SrpServerInfo {
16493        #[inline(always)]
16494        fn max_ordinal_present(&self) -> u64 {
16495            if let Some(_) = self.services {
16496                return 8;
16497            }
16498            if let Some(_) = self.hosts {
16499                return 7;
16500            }
16501            if let Some(_) = self.services_registration {
16502                return 6;
16503            }
16504            if let Some(_) = self.hosts_registration {
16505                return 5;
16506            }
16507            if let Some(_) = self.response_counters {
16508                return 4;
16509            }
16510            if let Some(_) = self.address_mode {
16511                return 3;
16512            }
16513            if let Some(_) = self.port {
16514                return 2;
16515            }
16516            if let Some(_) = self.state {
16517                return 1;
16518            }
16519            0
16520        }
16521    }
16522
16523    impl fidl::encoding::ValueTypeMarker for SrpServerInfo {
16524        type Borrowed<'a> = &'a Self;
16525        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
16526            value
16527        }
16528    }
16529
16530    unsafe impl fidl::encoding::TypeMarker for SrpServerInfo {
16531        type Owned = Self;
16532
16533        #[inline(always)]
16534        fn inline_align(_context: fidl::encoding::Context) -> usize {
16535            8
16536        }
16537
16538        #[inline(always)]
16539        fn inline_size(_context: fidl::encoding::Context) -> usize {
16540            16
16541        }
16542    }
16543
16544    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<SrpServerInfo, D>
16545        for &SrpServerInfo
16546    {
16547        unsafe fn encode(
16548            self,
16549            encoder: &mut fidl::encoding::Encoder<'_, D>,
16550            offset: usize,
16551            mut depth: fidl::encoding::Depth,
16552        ) -> fidl::Result<()> {
16553            encoder.debug_check_bounds::<SrpServerInfo>(offset);
16554            // Vector header
16555            let max_ordinal: u64 = self.max_ordinal_present();
16556            encoder.write_num(max_ordinal, offset);
16557            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
16558            // Calling encoder.out_of_line_offset(0) is not allowed.
16559            if max_ordinal == 0 {
16560                return Ok(());
16561            }
16562            depth.increment()?;
16563            let envelope_size = 8;
16564            let bytes_len = max_ordinal as usize * envelope_size;
16565            #[allow(unused_variables)]
16566            let offset = encoder.out_of_line_offset(bytes_len);
16567            let mut _prev_end_offset: usize = 0;
16568            if 1 > max_ordinal {
16569                return Ok(());
16570            }
16571
16572            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
16573            // are envelope_size bytes.
16574            let cur_offset: usize = (1 - 1) * envelope_size;
16575
16576            // Zero reserved fields.
16577            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
16578
16579            // Safety:
16580            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
16581            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
16582            //   envelope_size bytes, there is always sufficient room.
16583            fidl::encoding::encode_in_envelope_optional::<SrpServerState, D>(
16584                self.state
16585                    .as_ref()
16586                    .map(<SrpServerState as fidl::encoding::ValueTypeMarker>::borrow),
16587                encoder,
16588                offset + cur_offset,
16589                depth,
16590            )?;
16591
16592            _prev_end_offset = cur_offset + envelope_size;
16593            if 2 > max_ordinal {
16594                return Ok(());
16595            }
16596
16597            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
16598            // are envelope_size bytes.
16599            let cur_offset: usize = (2 - 1) * envelope_size;
16600
16601            // Zero reserved fields.
16602            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
16603
16604            // Safety:
16605            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
16606            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
16607            //   envelope_size bytes, there is always sufficient room.
16608            fidl::encoding::encode_in_envelope_optional::<u16, D>(
16609                self.port.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
16610                encoder,
16611                offset + cur_offset,
16612                depth,
16613            )?;
16614
16615            _prev_end_offset = cur_offset + envelope_size;
16616            if 3 > max_ordinal {
16617                return Ok(());
16618            }
16619
16620            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
16621            // are envelope_size bytes.
16622            let cur_offset: usize = (3 - 1) * envelope_size;
16623
16624            // Zero reserved fields.
16625            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
16626
16627            // Safety:
16628            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
16629            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
16630            //   envelope_size bytes, there is always sufficient room.
16631            fidl::encoding::encode_in_envelope_optional::<SrpServerAddressMode, D>(
16632                self.address_mode
16633                    .as_ref()
16634                    .map(<SrpServerAddressMode as fidl::encoding::ValueTypeMarker>::borrow),
16635                encoder,
16636                offset + cur_offset,
16637                depth,
16638            )?;
16639
16640            _prev_end_offset = cur_offset + envelope_size;
16641            if 4 > max_ordinal {
16642                return Ok(());
16643            }
16644
16645            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
16646            // are envelope_size bytes.
16647            let cur_offset: usize = (4 - 1) * envelope_size;
16648
16649            // Zero reserved fields.
16650            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
16651
16652            // Safety:
16653            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
16654            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
16655            //   envelope_size bytes, there is always sufficient room.
16656            fidl::encoding::encode_in_envelope_optional::<SrpServerResponseCounters, D>(
16657                self.response_counters
16658                    .as_ref()
16659                    .map(<SrpServerResponseCounters as fidl::encoding::ValueTypeMarker>::borrow),
16660                encoder,
16661                offset + cur_offset,
16662                depth,
16663            )?;
16664
16665            _prev_end_offset = cur_offset + envelope_size;
16666            if 5 > max_ordinal {
16667                return Ok(());
16668            }
16669
16670            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
16671            // are envelope_size bytes.
16672            let cur_offset: usize = (5 - 1) * envelope_size;
16673
16674            // Zero reserved fields.
16675            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
16676
16677            // Safety:
16678            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
16679            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
16680            //   envelope_size bytes, there is always sufficient room.
16681            fidl::encoding::encode_in_envelope_optional::<SrpServerRegistration, D>(
16682                self.hosts_registration
16683                    .as_ref()
16684                    .map(<SrpServerRegistration as fidl::encoding::ValueTypeMarker>::borrow),
16685                encoder,
16686                offset + cur_offset,
16687                depth,
16688            )?;
16689
16690            _prev_end_offset = cur_offset + envelope_size;
16691            if 6 > max_ordinal {
16692                return Ok(());
16693            }
16694
16695            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
16696            // are envelope_size bytes.
16697            let cur_offset: usize = (6 - 1) * envelope_size;
16698
16699            // Zero reserved fields.
16700            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
16701
16702            // Safety:
16703            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
16704            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
16705            //   envelope_size bytes, there is always sufficient room.
16706            fidl::encoding::encode_in_envelope_optional::<SrpServerRegistration, D>(
16707                self.services_registration
16708                    .as_ref()
16709                    .map(<SrpServerRegistration as fidl::encoding::ValueTypeMarker>::borrow),
16710                encoder,
16711                offset + cur_offset,
16712                depth,
16713            )?;
16714
16715            _prev_end_offset = cur_offset + envelope_size;
16716            if 7 > max_ordinal {
16717                return Ok(());
16718            }
16719
16720            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
16721            // are envelope_size bytes.
16722            let cur_offset: usize = (7 - 1) * envelope_size;
16723
16724            // Zero reserved fields.
16725            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
16726
16727            // Safety:
16728            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
16729            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
16730            //   envelope_size bytes, there is always sufficient room.
16731            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<SrpServerHost, 64>, D>(
16732            self.hosts.as_ref().map(<fidl::encoding::Vector<SrpServerHost, 64> as fidl::encoding::ValueTypeMarker>::borrow),
16733            encoder, offset + cur_offset, depth
16734        )?;
16735
16736            _prev_end_offset = cur_offset + envelope_size;
16737            if 8 > max_ordinal {
16738                return Ok(());
16739            }
16740
16741            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
16742            // are envelope_size bytes.
16743            let cur_offset: usize = (8 - 1) * envelope_size;
16744
16745            // Zero reserved fields.
16746            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
16747
16748            // Safety:
16749            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
16750            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
16751            //   envelope_size bytes, there is always sufficient room.
16752            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<SrpServerService, 64>, D>(
16753            self.services.as_ref().map(<fidl::encoding::Vector<SrpServerService, 64> as fidl::encoding::ValueTypeMarker>::borrow),
16754            encoder, offset + cur_offset, depth
16755        )?;
16756
16757            _prev_end_offset = cur_offset + envelope_size;
16758
16759            Ok(())
16760        }
16761    }
16762
16763    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SrpServerInfo {
16764        #[inline(always)]
16765        fn new_empty() -> Self {
16766            Self::default()
16767        }
16768
16769        unsafe fn decode(
16770            &mut self,
16771            decoder: &mut fidl::encoding::Decoder<'_, D>,
16772            offset: usize,
16773            mut depth: fidl::encoding::Depth,
16774        ) -> fidl::Result<()> {
16775            decoder.debug_check_bounds::<Self>(offset);
16776            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
16777                None => return Err(fidl::Error::NotNullable),
16778                Some(len) => len,
16779            };
16780            // Calling decoder.out_of_line_offset(0) is not allowed.
16781            if len == 0 {
16782                return Ok(());
16783            };
16784            depth.increment()?;
16785            let envelope_size = 8;
16786            let bytes_len = len * envelope_size;
16787            let offset = decoder.out_of_line_offset(bytes_len)?;
16788            // Decode the envelope for each type.
16789            let mut _next_ordinal_to_read = 0;
16790            let mut next_offset = offset;
16791            let end_offset = offset + bytes_len;
16792            _next_ordinal_to_read += 1;
16793            if next_offset >= end_offset {
16794                return Ok(());
16795            }
16796
16797            // Decode unknown envelopes for gaps in ordinals.
16798            while _next_ordinal_to_read < 1 {
16799                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
16800                _next_ordinal_to_read += 1;
16801                next_offset += envelope_size;
16802            }
16803
16804            let next_out_of_line = decoder.next_out_of_line();
16805            let handles_before = decoder.remaining_handles();
16806            if let Some((inlined, num_bytes, num_handles)) =
16807                fidl::encoding::decode_envelope_header(decoder, next_offset)?
16808            {
16809                let member_inline_size =
16810                    <SrpServerState as fidl::encoding::TypeMarker>::inline_size(decoder.context);
16811                if inlined != (member_inline_size <= 4) {
16812                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
16813                }
16814                let inner_offset;
16815                let mut inner_depth = depth.clone();
16816                if inlined {
16817                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
16818                    inner_offset = next_offset;
16819                } else {
16820                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
16821                    inner_depth.increment()?;
16822                }
16823                let val_ref = self.state.get_or_insert_with(|| fidl::new_empty!(SrpServerState, D));
16824                fidl::decode!(SrpServerState, D, val_ref, decoder, inner_offset, inner_depth)?;
16825                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
16826                {
16827                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
16828                }
16829                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
16830                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
16831                }
16832            }
16833
16834            next_offset += envelope_size;
16835            _next_ordinal_to_read += 1;
16836            if next_offset >= end_offset {
16837                return Ok(());
16838            }
16839
16840            // Decode unknown envelopes for gaps in ordinals.
16841            while _next_ordinal_to_read < 2 {
16842                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
16843                _next_ordinal_to_read += 1;
16844                next_offset += envelope_size;
16845            }
16846
16847            let next_out_of_line = decoder.next_out_of_line();
16848            let handles_before = decoder.remaining_handles();
16849            if let Some((inlined, num_bytes, num_handles)) =
16850                fidl::encoding::decode_envelope_header(decoder, next_offset)?
16851            {
16852                let member_inline_size =
16853                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
16854                if inlined != (member_inline_size <= 4) {
16855                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
16856                }
16857                let inner_offset;
16858                let mut inner_depth = depth.clone();
16859                if inlined {
16860                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
16861                    inner_offset = next_offset;
16862                } else {
16863                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
16864                    inner_depth.increment()?;
16865                }
16866                let val_ref = self.port.get_or_insert_with(|| fidl::new_empty!(u16, D));
16867                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
16868                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
16869                {
16870                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
16871                }
16872                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
16873                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
16874                }
16875            }
16876
16877            next_offset += envelope_size;
16878            _next_ordinal_to_read += 1;
16879            if next_offset >= end_offset {
16880                return Ok(());
16881            }
16882
16883            // Decode unknown envelopes for gaps in ordinals.
16884            while _next_ordinal_to_read < 3 {
16885                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
16886                _next_ordinal_to_read += 1;
16887                next_offset += envelope_size;
16888            }
16889
16890            let next_out_of_line = decoder.next_out_of_line();
16891            let handles_before = decoder.remaining_handles();
16892            if let Some((inlined, num_bytes, num_handles)) =
16893                fidl::encoding::decode_envelope_header(decoder, next_offset)?
16894            {
16895                let member_inline_size =
16896                    <SrpServerAddressMode as fidl::encoding::TypeMarker>::inline_size(
16897                        decoder.context,
16898                    );
16899                if inlined != (member_inline_size <= 4) {
16900                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
16901                }
16902                let inner_offset;
16903                let mut inner_depth = depth.clone();
16904                if inlined {
16905                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
16906                    inner_offset = next_offset;
16907                } else {
16908                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
16909                    inner_depth.increment()?;
16910                }
16911                let val_ref = self
16912                    .address_mode
16913                    .get_or_insert_with(|| fidl::new_empty!(SrpServerAddressMode, D));
16914                fidl::decode!(
16915                    SrpServerAddressMode,
16916                    D,
16917                    val_ref,
16918                    decoder,
16919                    inner_offset,
16920                    inner_depth
16921                )?;
16922                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
16923                {
16924                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
16925                }
16926                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
16927                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
16928                }
16929            }
16930
16931            next_offset += envelope_size;
16932            _next_ordinal_to_read += 1;
16933            if next_offset >= end_offset {
16934                return Ok(());
16935            }
16936
16937            // Decode unknown envelopes for gaps in ordinals.
16938            while _next_ordinal_to_read < 4 {
16939                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
16940                _next_ordinal_to_read += 1;
16941                next_offset += envelope_size;
16942            }
16943
16944            let next_out_of_line = decoder.next_out_of_line();
16945            let handles_before = decoder.remaining_handles();
16946            if let Some((inlined, num_bytes, num_handles)) =
16947                fidl::encoding::decode_envelope_header(decoder, next_offset)?
16948            {
16949                let member_inline_size =
16950                    <SrpServerResponseCounters as fidl::encoding::TypeMarker>::inline_size(
16951                        decoder.context,
16952                    );
16953                if inlined != (member_inline_size <= 4) {
16954                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
16955                }
16956                let inner_offset;
16957                let mut inner_depth = depth.clone();
16958                if inlined {
16959                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
16960                    inner_offset = next_offset;
16961                } else {
16962                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
16963                    inner_depth.increment()?;
16964                }
16965                let val_ref = self
16966                    .response_counters
16967                    .get_or_insert_with(|| fidl::new_empty!(SrpServerResponseCounters, D));
16968                fidl::decode!(
16969                    SrpServerResponseCounters,
16970                    D,
16971                    val_ref,
16972                    decoder,
16973                    inner_offset,
16974                    inner_depth
16975                )?;
16976                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
16977                {
16978                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
16979                }
16980                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
16981                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
16982                }
16983            }
16984
16985            next_offset += envelope_size;
16986            _next_ordinal_to_read += 1;
16987            if next_offset >= end_offset {
16988                return Ok(());
16989            }
16990
16991            // Decode unknown envelopes for gaps in ordinals.
16992            while _next_ordinal_to_read < 5 {
16993                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
16994                _next_ordinal_to_read += 1;
16995                next_offset += envelope_size;
16996            }
16997
16998            let next_out_of_line = decoder.next_out_of_line();
16999            let handles_before = decoder.remaining_handles();
17000            if let Some((inlined, num_bytes, num_handles)) =
17001                fidl::encoding::decode_envelope_header(decoder, next_offset)?
17002            {
17003                let member_inline_size =
17004                    <SrpServerRegistration as fidl::encoding::TypeMarker>::inline_size(
17005                        decoder.context,
17006                    );
17007                if inlined != (member_inline_size <= 4) {
17008                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
17009                }
17010                let inner_offset;
17011                let mut inner_depth = depth.clone();
17012                if inlined {
17013                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
17014                    inner_offset = next_offset;
17015                } else {
17016                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
17017                    inner_depth.increment()?;
17018                }
17019                let val_ref = self
17020                    .hosts_registration
17021                    .get_or_insert_with(|| fidl::new_empty!(SrpServerRegistration, D));
17022                fidl::decode!(
17023                    SrpServerRegistration,
17024                    D,
17025                    val_ref,
17026                    decoder,
17027                    inner_offset,
17028                    inner_depth
17029                )?;
17030                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
17031                {
17032                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
17033                }
17034                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
17035                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
17036                }
17037            }
17038
17039            next_offset += envelope_size;
17040            _next_ordinal_to_read += 1;
17041            if next_offset >= end_offset {
17042                return Ok(());
17043            }
17044
17045            // Decode unknown envelopes for gaps in ordinals.
17046            while _next_ordinal_to_read < 6 {
17047                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
17048                _next_ordinal_to_read += 1;
17049                next_offset += envelope_size;
17050            }
17051
17052            let next_out_of_line = decoder.next_out_of_line();
17053            let handles_before = decoder.remaining_handles();
17054            if let Some((inlined, num_bytes, num_handles)) =
17055                fidl::encoding::decode_envelope_header(decoder, next_offset)?
17056            {
17057                let member_inline_size =
17058                    <SrpServerRegistration as fidl::encoding::TypeMarker>::inline_size(
17059                        decoder.context,
17060                    );
17061                if inlined != (member_inline_size <= 4) {
17062                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
17063                }
17064                let inner_offset;
17065                let mut inner_depth = depth.clone();
17066                if inlined {
17067                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
17068                    inner_offset = next_offset;
17069                } else {
17070                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
17071                    inner_depth.increment()?;
17072                }
17073                let val_ref = self
17074                    .services_registration
17075                    .get_or_insert_with(|| fidl::new_empty!(SrpServerRegistration, D));
17076                fidl::decode!(
17077                    SrpServerRegistration,
17078                    D,
17079                    val_ref,
17080                    decoder,
17081                    inner_offset,
17082                    inner_depth
17083                )?;
17084                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
17085                {
17086                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
17087                }
17088                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
17089                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
17090                }
17091            }
17092
17093            next_offset += envelope_size;
17094            _next_ordinal_to_read += 1;
17095            if next_offset >= end_offset {
17096                return Ok(());
17097            }
17098
17099            // Decode unknown envelopes for gaps in ordinals.
17100            while _next_ordinal_to_read < 7 {
17101                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
17102                _next_ordinal_to_read += 1;
17103                next_offset += envelope_size;
17104            }
17105
17106            let next_out_of_line = decoder.next_out_of_line();
17107            let handles_before = decoder.remaining_handles();
17108            if let Some((inlined, num_bytes, num_handles)) =
17109                fidl::encoding::decode_envelope_header(decoder, next_offset)?
17110            {
17111                let member_inline_size = <fidl::encoding::Vector<SrpServerHost, 64> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
17112                if inlined != (member_inline_size <= 4) {
17113                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
17114                }
17115                let inner_offset;
17116                let mut inner_depth = depth.clone();
17117                if inlined {
17118                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
17119                    inner_offset = next_offset;
17120                } else {
17121                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
17122                    inner_depth.increment()?;
17123                }
17124                let val_ref = self.hosts.get_or_insert_with(
17125                    || fidl::new_empty!(fidl::encoding::Vector<SrpServerHost, 64>, D),
17126                );
17127                fidl::decode!(fidl::encoding::Vector<SrpServerHost, 64>, D, val_ref, decoder, inner_offset, inner_depth)?;
17128                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
17129                {
17130                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
17131                }
17132                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
17133                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
17134                }
17135            }
17136
17137            next_offset += envelope_size;
17138            _next_ordinal_to_read += 1;
17139            if next_offset >= end_offset {
17140                return Ok(());
17141            }
17142
17143            // Decode unknown envelopes for gaps in ordinals.
17144            while _next_ordinal_to_read < 8 {
17145                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
17146                _next_ordinal_to_read += 1;
17147                next_offset += envelope_size;
17148            }
17149
17150            let next_out_of_line = decoder.next_out_of_line();
17151            let handles_before = decoder.remaining_handles();
17152            if let Some((inlined, num_bytes, num_handles)) =
17153                fidl::encoding::decode_envelope_header(decoder, next_offset)?
17154            {
17155                let member_inline_size = <fidl::encoding::Vector<SrpServerService, 64> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
17156                if inlined != (member_inline_size <= 4) {
17157                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
17158                }
17159                let inner_offset;
17160                let mut inner_depth = depth.clone();
17161                if inlined {
17162                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
17163                    inner_offset = next_offset;
17164                } else {
17165                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
17166                    inner_depth.increment()?;
17167                }
17168                let val_ref = self.services.get_or_insert_with(
17169                    || fidl::new_empty!(fidl::encoding::Vector<SrpServerService, 64>, D),
17170                );
17171                fidl::decode!(fidl::encoding::Vector<SrpServerService, 64>, D, val_ref, decoder, inner_offset, inner_depth)?;
17172                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
17173                {
17174                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
17175                }
17176                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
17177                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
17178                }
17179            }
17180
17181            next_offset += envelope_size;
17182
17183            // Decode the remaining unknown envelopes.
17184            while next_offset < end_offset {
17185                _next_ordinal_to_read += 1;
17186                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
17187                next_offset += envelope_size;
17188            }
17189
17190            Ok(())
17191        }
17192    }
17193
17194    impl SrpServerRegistration {
17195        #[inline(always)]
17196        fn max_ordinal_present(&self) -> u64 {
17197            if let Some(_) = self.remaining_key_lease_time_total {
17198                return 6;
17199            }
17200            if let Some(_) = self.remaining_lease_time_total {
17201                return 5;
17202            }
17203            if let Some(_) = self.key_lease_time_total {
17204                return 4;
17205            }
17206            if let Some(_) = self.lease_time_total {
17207                return 3;
17208            }
17209            if let Some(_) = self.deleted_count {
17210                return 2;
17211            }
17212            if let Some(_) = self.fresh_count {
17213                return 1;
17214            }
17215            0
17216        }
17217    }
17218
17219    impl fidl::encoding::ValueTypeMarker for SrpServerRegistration {
17220        type Borrowed<'a> = &'a Self;
17221        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
17222            value
17223        }
17224    }
17225
17226    unsafe impl fidl::encoding::TypeMarker for SrpServerRegistration {
17227        type Owned = Self;
17228
17229        #[inline(always)]
17230        fn inline_align(_context: fidl::encoding::Context) -> usize {
17231            8
17232        }
17233
17234        #[inline(always)]
17235        fn inline_size(_context: fidl::encoding::Context) -> usize {
17236            16
17237        }
17238    }
17239
17240    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<SrpServerRegistration, D>
17241        for &SrpServerRegistration
17242    {
17243        unsafe fn encode(
17244            self,
17245            encoder: &mut fidl::encoding::Encoder<'_, D>,
17246            offset: usize,
17247            mut depth: fidl::encoding::Depth,
17248        ) -> fidl::Result<()> {
17249            encoder.debug_check_bounds::<SrpServerRegistration>(offset);
17250            // Vector header
17251            let max_ordinal: u64 = self.max_ordinal_present();
17252            encoder.write_num(max_ordinal, offset);
17253            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
17254            // Calling encoder.out_of_line_offset(0) is not allowed.
17255            if max_ordinal == 0 {
17256                return Ok(());
17257            }
17258            depth.increment()?;
17259            let envelope_size = 8;
17260            let bytes_len = max_ordinal as usize * envelope_size;
17261            #[allow(unused_variables)]
17262            let offset = encoder.out_of_line_offset(bytes_len);
17263            let mut _prev_end_offset: usize = 0;
17264            if 1 > max_ordinal {
17265                return Ok(());
17266            }
17267
17268            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
17269            // are envelope_size bytes.
17270            let cur_offset: usize = (1 - 1) * envelope_size;
17271
17272            // Zero reserved fields.
17273            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
17274
17275            // Safety:
17276            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
17277            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
17278            //   envelope_size bytes, there is always sufficient room.
17279            fidl::encoding::encode_in_envelope_optional::<u32, D>(
17280                self.fresh_count.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
17281                encoder,
17282                offset + cur_offset,
17283                depth,
17284            )?;
17285
17286            _prev_end_offset = cur_offset + envelope_size;
17287            if 2 > max_ordinal {
17288                return Ok(());
17289            }
17290
17291            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
17292            // are envelope_size bytes.
17293            let cur_offset: usize = (2 - 1) * envelope_size;
17294
17295            // Zero reserved fields.
17296            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
17297
17298            // Safety:
17299            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
17300            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
17301            //   envelope_size bytes, there is always sufficient room.
17302            fidl::encoding::encode_in_envelope_optional::<u32, D>(
17303                self.deleted_count.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
17304                encoder,
17305                offset + cur_offset,
17306                depth,
17307            )?;
17308
17309            _prev_end_offset = cur_offset + envelope_size;
17310            if 3 > max_ordinal {
17311                return Ok(());
17312            }
17313
17314            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
17315            // are envelope_size bytes.
17316            let cur_offset: usize = (3 - 1) * envelope_size;
17317
17318            // Zero reserved fields.
17319            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
17320
17321            // Safety:
17322            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
17323            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
17324            //   envelope_size bytes, there is always sufficient room.
17325            fidl::encoding::encode_in_envelope_optional::<i64, D>(
17326                self.lease_time_total
17327                    .as_ref()
17328                    .map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
17329                encoder,
17330                offset + cur_offset,
17331                depth,
17332            )?;
17333
17334            _prev_end_offset = cur_offset + envelope_size;
17335            if 4 > max_ordinal {
17336                return Ok(());
17337            }
17338
17339            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
17340            // are envelope_size bytes.
17341            let cur_offset: usize = (4 - 1) * envelope_size;
17342
17343            // Zero reserved fields.
17344            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
17345
17346            // Safety:
17347            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
17348            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
17349            //   envelope_size bytes, there is always sufficient room.
17350            fidl::encoding::encode_in_envelope_optional::<i64, D>(
17351                self.key_lease_time_total
17352                    .as_ref()
17353                    .map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
17354                encoder,
17355                offset + cur_offset,
17356                depth,
17357            )?;
17358
17359            _prev_end_offset = cur_offset + envelope_size;
17360            if 5 > max_ordinal {
17361                return Ok(());
17362            }
17363
17364            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
17365            // are envelope_size bytes.
17366            let cur_offset: usize = (5 - 1) * envelope_size;
17367
17368            // Zero reserved fields.
17369            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
17370
17371            // Safety:
17372            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
17373            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
17374            //   envelope_size bytes, there is always sufficient room.
17375            fidl::encoding::encode_in_envelope_optional::<i64, D>(
17376                self.remaining_lease_time_total
17377                    .as_ref()
17378                    .map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
17379                encoder,
17380                offset + cur_offset,
17381                depth,
17382            )?;
17383
17384            _prev_end_offset = cur_offset + envelope_size;
17385            if 6 > max_ordinal {
17386                return Ok(());
17387            }
17388
17389            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
17390            // are envelope_size bytes.
17391            let cur_offset: usize = (6 - 1) * envelope_size;
17392
17393            // Zero reserved fields.
17394            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
17395
17396            // Safety:
17397            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
17398            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
17399            //   envelope_size bytes, there is always sufficient room.
17400            fidl::encoding::encode_in_envelope_optional::<i64, D>(
17401                self.remaining_key_lease_time_total
17402                    .as_ref()
17403                    .map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
17404                encoder,
17405                offset + cur_offset,
17406                depth,
17407            )?;
17408
17409            _prev_end_offset = cur_offset + envelope_size;
17410
17411            Ok(())
17412        }
17413    }
17414
17415    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SrpServerRegistration {
17416        #[inline(always)]
17417        fn new_empty() -> Self {
17418            Self::default()
17419        }
17420
17421        unsafe fn decode(
17422            &mut self,
17423            decoder: &mut fidl::encoding::Decoder<'_, D>,
17424            offset: usize,
17425            mut depth: fidl::encoding::Depth,
17426        ) -> fidl::Result<()> {
17427            decoder.debug_check_bounds::<Self>(offset);
17428            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
17429                None => return Err(fidl::Error::NotNullable),
17430                Some(len) => len,
17431            };
17432            // Calling decoder.out_of_line_offset(0) is not allowed.
17433            if len == 0 {
17434                return Ok(());
17435            };
17436            depth.increment()?;
17437            let envelope_size = 8;
17438            let bytes_len = len * envelope_size;
17439            let offset = decoder.out_of_line_offset(bytes_len)?;
17440            // Decode the envelope for each type.
17441            let mut _next_ordinal_to_read = 0;
17442            let mut next_offset = offset;
17443            let end_offset = offset + bytes_len;
17444            _next_ordinal_to_read += 1;
17445            if next_offset >= end_offset {
17446                return Ok(());
17447            }
17448
17449            // Decode unknown envelopes for gaps in ordinals.
17450            while _next_ordinal_to_read < 1 {
17451                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
17452                _next_ordinal_to_read += 1;
17453                next_offset += envelope_size;
17454            }
17455
17456            let next_out_of_line = decoder.next_out_of_line();
17457            let handles_before = decoder.remaining_handles();
17458            if let Some((inlined, num_bytes, num_handles)) =
17459                fidl::encoding::decode_envelope_header(decoder, next_offset)?
17460            {
17461                let member_inline_size =
17462                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
17463                if inlined != (member_inline_size <= 4) {
17464                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
17465                }
17466                let inner_offset;
17467                let mut inner_depth = depth.clone();
17468                if inlined {
17469                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
17470                    inner_offset = next_offset;
17471                } else {
17472                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
17473                    inner_depth.increment()?;
17474                }
17475                let val_ref = self.fresh_count.get_or_insert_with(|| fidl::new_empty!(u32, D));
17476                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
17477                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
17478                {
17479                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
17480                }
17481                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
17482                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
17483                }
17484            }
17485
17486            next_offset += envelope_size;
17487            _next_ordinal_to_read += 1;
17488            if next_offset >= end_offset {
17489                return Ok(());
17490            }
17491
17492            // Decode unknown envelopes for gaps in ordinals.
17493            while _next_ordinal_to_read < 2 {
17494                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
17495                _next_ordinal_to_read += 1;
17496                next_offset += envelope_size;
17497            }
17498
17499            let next_out_of_line = decoder.next_out_of_line();
17500            let handles_before = decoder.remaining_handles();
17501            if let Some((inlined, num_bytes, num_handles)) =
17502                fidl::encoding::decode_envelope_header(decoder, next_offset)?
17503            {
17504                let member_inline_size =
17505                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
17506                if inlined != (member_inline_size <= 4) {
17507                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
17508                }
17509                let inner_offset;
17510                let mut inner_depth = depth.clone();
17511                if inlined {
17512                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
17513                    inner_offset = next_offset;
17514                } else {
17515                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
17516                    inner_depth.increment()?;
17517                }
17518                let val_ref = self.deleted_count.get_or_insert_with(|| fidl::new_empty!(u32, D));
17519                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
17520                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
17521                {
17522                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
17523                }
17524                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
17525                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
17526                }
17527            }
17528
17529            next_offset += envelope_size;
17530            _next_ordinal_to_read += 1;
17531            if next_offset >= end_offset {
17532                return Ok(());
17533            }
17534
17535            // Decode unknown envelopes for gaps in ordinals.
17536            while _next_ordinal_to_read < 3 {
17537                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
17538                _next_ordinal_to_read += 1;
17539                next_offset += envelope_size;
17540            }
17541
17542            let next_out_of_line = decoder.next_out_of_line();
17543            let handles_before = decoder.remaining_handles();
17544            if let Some((inlined, num_bytes, num_handles)) =
17545                fidl::encoding::decode_envelope_header(decoder, next_offset)?
17546            {
17547                let member_inline_size =
17548                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
17549                if inlined != (member_inline_size <= 4) {
17550                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
17551                }
17552                let inner_offset;
17553                let mut inner_depth = depth.clone();
17554                if inlined {
17555                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
17556                    inner_offset = next_offset;
17557                } else {
17558                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
17559                    inner_depth.increment()?;
17560                }
17561                let val_ref = self.lease_time_total.get_or_insert_with(|| fidl::new_empty!(i64, D));
17562                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
17563                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
17564                {
17565                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
17566                }
17567                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
17568                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
17569                }
17570            }
17571
17572            next_offset += envelope_size;
17573            _next_ordinal_to_read += 1;
17574            if next_offset >= end_offset {
17575                return Ok(());
17576            }
17577
17578            // Decode unknown envelopes for gaps in ordinals.
17579            while _next_ordinal_to_read < 4 {
17580                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
17581                _next_ordinal_to_read += 1;
17582                next_offset += envelope_size;
17583            }
17584
17585            let next_out_of_line = decoder.next_out_of_line();
17586            let handles_before = decoder.remaining_handles();
17587            if let Some((inlined, num_bytes, num_handles)) =
17588                fidl::encoding::decode_envelope_header(decoder, next_offset)?
17589            {
17590                let member_inline_size =
17591                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
17592                if inlined != (member_inline_size <= 4) {
17593                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
17594                }
17595                let inner_offset;
17596                let mut inner_depth = depth.clone();
17597                if inlined {
17598                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
17599                    inner_offset = next_offset;
17600                } else {
17601                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
17602                    inner_depth.increment()?;
17603                }
17604                let val_ref =
17605                    self.key_lease_time_total.get_or_insert_with(|| fidl::new_empty!(i64, D));
17606                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
17607                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
17608                {
17609                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
17610                }
17611                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
17612                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
17613                }
17614            }
17615
17616            next_offset += envelope_size;
17617            _next_ordinal_to_read += 1;
17618            if next_offset >= end_offset {
17619                return Ok(());
17620            }
17621
17622            // Decode unknown envelopes for gaps in ordinals.
17623            while _next_ordinal_to_read < 5 {
17624                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
17625                _next_ordinal_to_read += 1;
17626                next_offset += envelope_size;
17627            }
17628
17629            let next_out_of_line = decoder.next_out_of_line();
17630            let handles_before = decoder.remaining_handles();
17631            if let Some((inlined, num_bytes, num_handles)) =
17632                fidl::encoding::decode_envelope_header(decoder, next_offset)?
17633            {
17634                let member_inline_size =
17635                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
17636                if inlined != (member_inline_size <= 4) {
17637                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
17638                }
17639                let inner_offset;
17640                let mut inner_depth = depth.clone();
17641                if inlined {
17642                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
17643                    inner_offset = next_offset;
17644                } else {
17645                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
17646                    inner_depth.increment()?;
17647                }
17648                let val_ref =
17649                    self.remaining_lease_time_total.get_or_insert_with(|| fidl::new_empty!(i64, D));
17650                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
17651                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
17652                {
17653                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
17654                }
17655                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
17656                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
17657                }
17658            }
17659
17660            next_offset += envelope_size;
17661            _next_ordinal_to_read += 1;
17662            if next_offset >= end_offset {
17663                return Ok(());
17664            }
17665
17666            // Decode unknown envelopes for gaps in ordinals.
17667            while _next_ordinal_to_read < 6 {
17668                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
17669                _next_ordinal_to_read += 1;
17670                next_offset += envelope_size;
17671            }
17672
17673            let next_out_of_line = decoder.next_out_of_line();
17674            let handles_before = decoder.remaining_handles();
17675            if let Some((inlined, num_bytes, num_handles)) =
17676                fidl::encoding::decode_envelope_header(decoder, next_offset)?
17677            {
17678                let member_inline_size =
17679                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
17680                if inlined != (member_inline_size <= 4) {
17681                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
17682                }
17683                let inner_offset;
17684                let mut inner_depth = depth.clone();
17685                if inlined {
17686                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
17687                    inner_offset = next_offset;
17688                } else {
17689                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
17690                    inner_depth.increment()?;
17691                }
17692                let val_ref = self
17693                    .remaining_key_lease_time_total
17694                    .get_or_insert_with(|| fidl::new_empty!(i64, D));
17695                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
17696                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
17697                {
17698                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
17699                }
17700                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
17701                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
17702                }
17703            }
17704
17705            next_offset += envelope_size;
17706
17707            // Decode the remaining unknown envelopes.
17708            while next_offset < end_offset {
17709                _next_ordinal_to_read += 1;
17710                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
17711                next_offset += envelope_size;
17712            }
17713
17714            Ok(())
17715        }
17716    }
17717
17718    impl SrpServerResponseCounters {
17719        #[inline(always)]
17720        fn max_ordinal_present(&self) -> u64 {
17721            if let Some(_) = self.other_response {
17722                return 6;
17723            }
17724            if let Some(_) = self.refused_response {
17725                return 5;
17726            }
17727            if let Some(_) = self.name_exists_response {
17728                return 4;
17729            }
17730            if let Some(_) = self.format_error_response {
17731                return 3;
17732            }
17733            if let Some(_) = self.server_failure_response {
17734                return 2;
17735            }
17736            if let Some(_) = self.success_response {
17737                return 1;
17738            }
17739            0
17740        }
17741    }
17742
17743    impl fidl::encoding::ValueTypeMarker for SrpServerResponseCounters {
17744        type Borrowed<'a> = &'a Self;
17745        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
17746            value
17747        }
17748    }
17749
17750    unsafe impl fidl::encoding::TypeMarker for SrpServerResponseCounters {
17751        type Owned = Self;
17752
17753        #[inline(always)]
17754        fn inline_align(_context: fidl::encoding::Context) -> usize {
17755            8
17756        }
17757
17758        #[inline(always)]
17759        fn inline_size(_context: fidl::encoding::Context) -> usize {
17760            16
17761        }
17762    }
17763
17764    unsafe impl<D: fidl::encoding::ResourceDialect>
17765        fidl::encoding::Encode<SrpServerResponseCounters, D> for &SrpServerResponseCounters
17766    {
17767        unsafe fn encode(
17768            self,
17769            encoder: &mut fidl::encoding::Encoder<'_, D>,
17770            offset: usize,
17771            mut depth: fidl::encoding::Depth,
17772        ) -> fidl::Result<()> {
17773            encoder.debug_check_bounds::<SrpServerResponseCounters>(offset);
17774            // Vector header
17775            let max_ordinal: u64 = self.max_ordinal_present();
17776            encoder.write_num(max_ordinal, offset);
17777            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
17778            // Calling encoder.out_of_line_offset(0) is not allowed.
17779            if max_ordinal == 0 {
17780                return Ok(());
17781            }
17782            depth.increment()?;
17783            let envelope_size = 8;
17784            let bytes_len = max_ordinal as usize * envelope_size;
17785            #[allow(unused_variables)]
17786            let offset = encoder.out_of_line_offset(bytes_len);
17787            let mut _prev_end_offset: usize = 0;
17788            if 1 > max_ordinal {
17789                return Ok(());
17790            }
17791
17792            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
17793            // are envelope_size bytes.
17794            let cur_offset: usize = (1 - 1) * envelope_size;
17795
17796            // Zero reserved fields.
17797            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
17798
17799            // Safety:
17800            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
17801            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
17802            //   envelope_size bytes, there is always sufficient room.
17803            fidl::encoding::encode_in_envelope_optional::<u32, D>(
17804                self.success_response
17805                    .as_ref()
17806                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
17807                encoder,
17808                offset + cur_offset,
17809                depth,
17810            )?;
17811
17812            _prev_end_offset = cur_offset + envelope_size;
17813            if 2 > max_ordinal {
17814                return Ok(());
17815            }
17816
17817            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
17818            // are envelope_size bytes.
17819            let cur_offset: usize = (2 - 1) * envelope_size;
17820
17821            // Zero reserved fields.
17822            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
17823
17824            // Safety:
17825            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
17826            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
17827            //   envelope_size bytes, there is always sufficient room.
17828            fidl::encoding::encode_in_envelope_optional::<u32, D>(
17829                self.server_failure_response
17830                    .as_ref()
17831                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
17832                encoder,
17833                offset + cur_offset,
17834                depth,
17835            )?;
17836
17837            _prev_end_offset = cur_offset + envelope_size;
17838            if 3 > max_ordinal {
17839                return Ok(());
17840            }
17841
17842            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
17843            // are envelope_size bytes.
17844            let cur_offset: usize = (3 - 1) * envelope_size;
17845
17846            // Zero reserved fields.
17847            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
17848
17849            // Safety:
17850            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
17851            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
17852            //   envelope_size bytes, there is always sufficient room.
17853            fidl::encoding::encode_in_envelope_optional::<u32, D>(
17854                self.format_error_response
17855                    .as_ref()
17856                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
17857                encoder,
17858                offset + cur_offset,
17859                depth,
17860            )?;
17861
17862            _prev_end_offset = cur_offset + envelope_size;
17863            if 4 > max_ordinal {
17864                return Ok(());
17865            }
17866
17867            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
17868            // are envelope_size bytes.
17869            let cur_offset: usize = (4 - 1) * envelope_size;
17870
17871            // Zero reserved fields.
17872            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
17873
17874            // Safety:
17875            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
17876            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
17877            //   envelope_size bytes, there is always sufficient room.
17878            fidl::encoding::encode_in_envelope_optional::<u32, D>(
17879                self.name_exists_response
17880                    .as_ref()
17881                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
17882                encoder,
17883                offset + cur_offset,
17884                depth,
17885            )?;
17886
17887            _prev_end_offset = cur_offset + envelope_size;
17888            if 5 > max_ordinal {
17889                return Ok(());
17890            }
17891
17892            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
17893            // are envelope_size bytes.
17894            let cur_offset: usize = (5 - 1) * envelope_size;
17895
17896            // Zero reserved fields.
17897            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
17898
17899            // Safety:
17900            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
17901            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
17902            //   envelope_size bytes, there is always sufficient room.
17903            fidl::encoding::encode_in_envelope_optional::<u32, D>(
17904                self.refused_response
17905                    .as_ref()
17906                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
17907                encoder,
17908                offset + cur_offset,
17909                depth,
17910            )?;
17911
17912            _prev_end_offset = cur_offset + envelope_size;
17913            if 6 > max_ordinal {
17914                return Ok(());
17915            }
17916
17917            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
17918            // are envelope_size bytes.
17919            let cur_offset: usize = (6 - 1) * envelope_size;
17920
17921            // Zero reserved fields.
17922            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
17923
17924            // Safety:
17925            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
17926            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
17927            //   envelope_size bytes, there is always sufficient room.
17928            fidl::encoding::encode_in_envelope_optional::<u32, D>(
17929                self.other_response.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
17930                encoder,
17931                offset + cur_offset,
17932                depth,
17933            )?;
17934
17935            _prev_end_offset = cur_offset + envelope_size;
17936
17937            Ok(())
17938        }
17939    }
17940
17941    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
17942        for SrpServerResponseCounters
17943    {
17944        #[inline(always)]
17945        fn new_empty() -> Self {
17946            Self::default()
17947        }
17948
17949        unsafe fn decode(
17950            &mut self,
17951            decoder: &mut fidl::encoding::Decoder<'_, D>,
17952            offset: usize,
17953            mut depth: fidl::encoding::Depth,
17954        ) -> fidl::Result<()> {
17955            decoder.debug_check_bounds::<Self>(offset);
17956            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
17957                None => return Err(fidl::Error::NotNullable),
17958                Some(len) => len,
17959            };
17960            // Calling decoder.out_of_line_offset(0) is not allowed.
17961            if len == 0 {
17962                return Ok(());
17963            };
17964            depth.increment()?;
17965            let envelope_size = 8;
17966            let bytes_len = len * envelope_size;
17967            let offset = decoder.out_of_line_offset(bytes_len)?;
17968            // Decode the envelope for each type.
17969            let mut _next_ordinal_to_read = 0;
17970            let mut next_offset = offset;
17971            let end_offset = offset + bytes_len;
17972            _next_ordinal_to_read += 1;
17973            if next_offset >= end_offset {
17974                return Ok(());
17975            }
17976
17977            // Decode unknown envelopes for gaps in ordinals.
17978            while _next_ordinal_to_read < 1 {
17979                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
17980                _next_ordinal_to_read += 1;
17981                next_offset += envelope_size;
17982            }
17983
17984            let next_out_of_line = decoder.next_out_of_line();
17985            let handles_before = decoder.remaining_handles();
17986            if let Some((inlined, num_bytes, num_handles)) =
17987                fidl::encoding::decode_envelope_header(decoder, next_offset)?
17988            {
17989                let member_inline_size =
17990                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
17991                if inlined != (member_inline_size <= 4) {
17992                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
17993                }
17994                let inner_offset;
17995                let mut inner_depth = depth.clone();
17996                if inlined {
17997                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
17998                    inner_offset = next_offset;
17999                } else {
18000                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
18001                    inner_depth.increment()?;
18002                }
18003                let val_ref = self.success_response.get_or_insert_with(|| fidl::new_empty!(u32, D));
18004                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
18005                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
18006                {
18007                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
18008                }
18009                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
18010                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
18011                }
18012            }
18013
18014            next_offset += envelope_size;
18015            _next_ordinal_to_read += 1;
18016            if next_offset >= end_offset {
18017                return Ok(());
18018            }
18019
18020            // Decode unknown envelopes for gaps in ordinals.
18021            while _next_ordinal_to_read < 2 {
18022                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
18023                _next_ordinal_to_read += 1;
18024                next_offset += envelope_size;
18025            }
18026
18027            let next_out_of_line = decoder.next_out_of_line();
18028            let handles_before = decoder.remaining_handles();
18029            if let Some((inlined, num_bytes, num_handles)) =
18030                fidl::encoding::decode_envelope_header(decoder, next_offset)?
18031            {
18032                let member_inline_size =
18033                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
18034                if inlined != (member_inline_size <= 4) {
18035                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
18036                }
18037                let inner_offset;
18038                let mut inner_depth = depth.clone();
18039                if inlined {
18040                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
18041                    inner_offset = next_offset;
18042                } else {
18043                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
18044                    inner_depth.increment()?;
18045                }
18046                let val_ref =
18047                    self.server_failure_response.get_or_insert_with(|| fidl::new_empty!(u32, D));
18048                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
18049                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
18050                {
18051                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
18052                }
18053                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
18054                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
18055                }
18056            }
18057
18058            next_offset += envelope_size;
18059            _next_ordinal_to_read += 1;
18060            if next_offset >= end_offset {
18061                return Ok(());
18062            }
18063
18064            // Decode unknown envelopes for gaps in ordinals.
18065            while _next_ordinal_to_read < 3 {
18066                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
18067                _next_ordinal_to_read += 1;
18068                next_offset += envelope_size;
18069            }
18070
18071            let next_out_of_line = decoder.next_out_of_line();
18072            let handles_before = decoder.remaining_handles();
18073            if let Some((inlined, num_bytes, num_handles)) =
18074                fidl::encoding::decode_envelope_header(decoder, next_offset)?
18075            {
18076                let member_inline_size =
18077                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
18078                if inlined != (member_inline_size <= 4) {
18079                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
18080                }
18081                let inner_offset;
18082                let mut inner_depth = depth.clone();
18083                if inlined {
18084                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
18085                    inner_offset = next_offset;
18086                } else {
18087                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
18088                    inner_depth.increment()?;
18089                }
18090                let val_ref =
18091                    self.format_error_response.get_or_insert_with(|| fidl::new_empty!(u32, D));
18092                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
18093                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
18094                {
18095                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
18096                }
18097                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
18098                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
18099                }
18100            }
18101
18102            next_offset += envelope_size;
18103            _next_ordinal_to_read += 1;
18104            if next_offset >= end_offset {
18105                return Ok(());
18106            }
18107
18108            // Decode unknown envelopes for gaps in ordinals.
18109            while _next_ordinal_to_read < 4 {
18110                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
18111                _next_ordinal_to_read += 1;
18112                next_offset += envelope_size;
18113            }
18114
18115            let next_out_of_line = decoder.next_out_of_line();
18116            let handles_before = decoder.remaining_handles();
18117            if let Some((inlined, num_bytes, num_handles)) =
18118                fidl::encoding::decode_envelope_header(decoder, next_offset)?
18119            {
18120                let member_inline_size =
18121                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
18122                if inlined != (member_inline_size <= 4) {
18123                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
18124                }
18125                let inner_offset;
18126                let mut inner_depth = depth.clone();
18127                if inlined {
18128                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
18129                    inner_offset = next_offset;
18130                } else {
18131                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
18132                    inner_depth.increment()?;
18133                }
18134                let val_ref =
18135                    self.name_exists_response.get_or_insert_with(|| fidl::new_empty!(u32, D));
18136                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
18137                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
18138                {
18139                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
18140                }
18141                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
18142                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
18143                }
18144            }
18145
18146            next_offset += envelope_size;
18147            _next_ordinal_to_read += 1;
18148            if next_offset >= end_offset {
18149                return Ok(());
18150            }
18151
18152            // Decode unknown envelopes for gaps in ordinals.
18153            while _next_ordinal_to_read < 5 {
18154                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
18155                _next_ordinal_to_read += 1;
18156                next_offset += envelope_size;
18157            }
18158
18159            let next_out_of_line = decoder.next_out_of_line();
18160            let handles_before = decoder.remaining_handles();
18161            if let Some((inlined, num_bytes, num_handles)) =
18162                fidl::encoding::decode_envelope_header(decoder, next_offset)?
18163            {
18164                let member_inline_size =
18165                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
18166                if inlined != (member_inline_size <= 4) {
18167                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
18168                }
18169                let inner_offset;
18170                let mut inner_depth = depth.clone();
18171                if inlined {
18172                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
18173                    inner_offset = next_offset;
18174                } else {
18175                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
18176                    inner_depth.increment()?;
18177                }
18178                let val_ref = self.refused_response.get_or_insert_with(|| fidl::new_empty!(u32, D));
18179                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
18180                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
18181                {
18182                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
18183                }
18184                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
18185                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
18186                }
18187            }
18188
18189            next_offset += envelope_size;
18190            _next_ordinal_to_read += 1;
18191            if next_offset >= end_offset {
18192                return Ok(());
18193            }
18194
18195            // Decode unknown envelopes for gaps in ordinals.
18196            while _next_ordinal_to_read < 6 {
18197                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
18198                _next_ordinal_to_read += 1;
18199                next_offset += envelope_size;
18200            }
18201
18202            let next_out_of_line = decoder.next_out_of_line();
18203            let handles_before = decoder.remaining_handles();
18204            if let Some((inlined, num_bytes, num_handles)) =
18205                fidl::encoding::decode_envelope_header(decoder, next_offset)?
18206            {
18207                let member_inline_size =
18208                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
18209                if inlined != (member_inline_size <= 4) {
18210                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
18211                }
18212                let inner_offset;
18213                let mut inner_depth = depth.clone();
18214                if inlined {
18215                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
18216                    inner_offset = next_offset;
18217                } else {
18218                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
18219                    inner_depth.increment()?;
18220                }
18221                let val_ref = self.other_response.get_or_insert_with(|| fidl::new_empty!(u32, D));
18222                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
18223                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
18224                {
18225                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
18226                }
18227                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
18228                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
18229                }
18230            }
18231
18232            next_offset += envelope_size;
18233
18234            // Decode the remaining unknown envelopes.
18235            while next_offset < end_offset {
18236                _next_ordinal_to_read += 1;
18237                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
18238                next_offset += envelope_size;
18239            }
18240
18241            Ok(())
18242        }
18243    }
18244
18245    impl SrpServerService {
18246        #[inline(always)]
18247        fn max_ordinal_present(&self) -> u64 {
18248            if let Some(_) = self.host {
18249                return 11;
18250            }
18251            if let Some(_) = self.txt_data {
18252                return 10;
18253            }
18254            if let Some(_) = self.key_lease {
18255                return 9;
18256            }
18257            if let Some(_) = self.lease {
18258                return 8;
18259            }
18260            if let Some(_) = self.ttl {
18261                return 7;
18262            }
18263            if let Some(_) = self.weight {
18264                return 6;
18265            }
18266            if let Some(_) = self.priority {
18267                return 5;
18268            }
18269            if let Some(_) = self.port {
18270                return 4;
18271            }
18272            if let Some(_) = self.subtypes {
18273                return 3;
18274            }
18275            if let Some(_) = self.deleted {
18276                return 2;
18277            }
18278            if let Some(_) = self.instance_name {
18279                return 1;
18280            }
18281            0
18282        }
18283    }
18284
18285    impl fidl::encoding::ValueTypeMarker for SrpServerService {
18286        type Borrowed<'a> = &'a Self;
18287        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
18288            value
18289        }
18290    }
18291
18292    unsafe impl fidl::encoding::TypeMarker for SrpServerService {
18293        type Owned = Self;
18294
18295        #[inline(always)]
18296        fn inline_align(_context: fidl::encoding::Context) -> usize {
18297            8
18298        }
18299
18300        #[inline(always)]
18301        fn inline_size(_context: fidl::encoding::Context) -> usize {
18302            16
18303        }
18304    }
18305
18306    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<SrpServerService, D>
18307        for &SrpServerService
18308    {
18309        unsafe fn encode(
18310            self,
18311            encoder: &mut fidl::encoding::Encoder<'_, D>,
18312            offset: usize,
18313            mut depth: fidl::encoding::Depth,
18314        ) -> fidl::Result<()> {
18315            encoder.debug_check_bounds::<SrpServerService>(offset);
18316            // Vector header
18317            let max_ordinal: u64 = self.max_ordinal_present();
18318            encoder.write_num(max_ordinal, offset);
18319            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
18320            // Calling encoder.out_of_line_offset(0) is not allowed.
18321            if max_ordinal == 0 {
18322                return Ok(());
18323            }
18324            depth.increment()?;
18325            let envelope_size = 8;
18326            let bytes_len = max_ordinal as usize * envelope_size;
18327            #[allow(unused_variables)]
18328            let offset = encoder.out_of_line_offset(bytes_len);
18329            let mut _prev_end_offset: usize = 0;
18330            if 1 > max_ordinal {
18331                return Ok(());
18332            }
18333
18334            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
18335            // are envelope_size bytes.
18336            let cur_offset: usize = (1 - 1) * envelope_size;
18337
18338            // Zero reserved fields.
18339            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
18340
18341            // Safety:
18342            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
18343            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
18344            //   envelope_size bytes, there is always sufficient room.
18345            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<255>, D>(
18346                self.instance_name.as_ref().map(
18347                    <fidl::encoding::BoundedString<255> as fidl::encoding::ValueTypeMarker>::borrow,
18348                ),
18349                encoder,
18350                offset + cur_offset,
18351                depth,
18352            )?;
18353
18354            _prev_end_offset = cur_offset + envelope_size;
18355            if 2 > max_ordinal {
18356                return Ok(());
18357            }
18358
18359            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
18360            // are envelope_size bytes.
18361            let cur_offset: usize = (2 - 1) * envelope_size;
18362
18363            // Zero reserved fields.
18364            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
18365
18366            // Safety:
18367            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
18368            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
18369            //   envelope_size bytes, there is always sufficient room.
18370            fidl::encoding::encode_in_envelope_optional::<bool, D>(
18371                self.deleted.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
18372                encoder,
18373                offset + cur_offset,
18374                depth,
18375            )?;
18376
18377            _prev_end_offset = cur_offset + envelope_size;
18378            if 3 > max_ordinal {
18379                return Ok(());
18380            }
18381
18382            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
18383            // are envelope_size bytes.
18384            let cur_offset: usize = (3 - 1) * envelope_size;
18385
18386            // Zero reserved fields.
18387            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
18388
18389            // Safety:
18390            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
18391            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
18392            //   envelope_size bytes, there is always sufficient room.
18393            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<fidl::encoding::BoundedString<63>, 6>, D>(
18394            self.subtypes.as_ref().map(<fidl::encoding::Vector<fidl::encoding::BoundedString<63>, 6> as fidl::encoding::ValueTypeMarker>::borrow),
18395            encoder, offset + cur_offset, depth
18396        )?;
18397
18398            _prev_end_offset = cur_offset + envelope_size;
18399            if 4 > max_ordinal {
18400                return Ok(());
18401            }
18402
18403            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
18404            // are envelope_size bytes.
18405            let cur_offset: usize = (4 - 1) * envelope_size;
18406
18407            // Zero reserved fields.
18408            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
18409
18410            // Safety:
18411            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
18412            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
18413            //   envelope_size bytes, there is always sufficient room.
18414            fidl::encoding::encode_in_envelope_optional::<u16, D>(
18415                self.port.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
18416                encoder,
18417                offset + cur_offset,
18418                depth,
18419            )?;
18420
18421            _prev_end_offset = cur_offset + envelope_size;
18422            if 5 > max_ordinal {
18423                return Ok(());
18424            }
18425
18426            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
18427            // are envelope_size bytes.
18428            let cur_offset: usize = (5 - 1) * envelope_size;
18429
18430            // Zero reserved fields.
18431            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
18432
18433            // Safety:
18434            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
18435            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
18436            //   envelope_size bytes, there is always sufficient room.
18437            fidl::encoding::encode_in_envelope_optional::<u16, D>(
18438                self.priority.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
18439                encoder,
18440                offset + cur_offset,
18441                depth,
18442            )?;
18443
18444            _prev_end_offset = cur_offset + envelope_size;
18445            if 6 > max_ordinal {
18446                return Ok(());
18447            }
18448
18449            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
18450            // are envelope_size bytes.
18451            let cur_offset: usize = (6 - 1) * envelope_size;
18452
18453            // Zero reserved fields.
18454            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
18455
18456            // Safety:
18457            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
18458            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
18459            //   envelope_size bytes, there is always sufficient room.
18460            fidl::encoding::encode_in_envelope_optional::<u16, D>(
18461                self.weight.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
18462                encoder,
18463                offset + cur_offset,
18464                depth,
18465            )?;
18466
18467            _prev_end_offset = cur_offset + envelope_size;
18468            if 7 > max_ordinal {
18469                return Ok(());
18470            }
18471
18472            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
18473            // are envelope_size bytes.
18474            let cur_offset: usize = (7 - 1) * envelope_size;
18475
18476            // Zero reserved fields.
18477            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
18478
18479            // Safety:
18480            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
18481            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
18482            //   envelope_size bytes, there is always sufficient room.
18483            fidl::encoding::encode_in_envelope_optional::<i64, D>(
18484                self.ttl.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
18485                encoder,
18486                offset + cur_offset,
18487                depth,
18488            )?;
18489
18490            _prev_end_offset = cur_offset + envelope_size;
18491            if 8 > max_ordinal {
18492                return Ok(());
18493            }
18494
18495            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
18496            // are envelope_size bytes.
18497            let cur_offset: usize = (8 - 1) * envelope_size;
18498
18499            // Zero reserved fields.
18500            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
18501
18502            // Safety:
18503            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
18504            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
18505            //   envelope_size bytes, there is always sufficient room.
18506            fidl::encoding::encode_in_envelope_optional::<i64, D>(
18507                self.lease.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
18508                encoder,
18509                offset + cur_offset,
18510                depth,
18511            )?;
18512
18513            _prev_end_offset = cur_offset + envelope_size;
18514            if 9 > max_ordinal {
18515                return Ok(());
18516            }
18517
18518            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
18519            // are envelope_size bytes.
18520            let cur_offset: usize = (9 - 1) * envelope_size;
18521
18522            // Zero reserved fields.
18523            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
18524
18525            // Safety:
18526            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
18527            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
18528            //   envelope_size bytes, there is always sufficient room.
18529            fidl::encoding::encode_in_envelope_optional::<i64, D>(
18530                self.key_lease.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
18531                encoder,
18532                offset + cur_offset,
18533                depth,
18534            )?;
18535
18536            _prev_end_offset = cur_offset + envelope_size;
18537            if 10 > max_ordinal {
18538                return Ok(());
18539            }
18540
18541            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
18542            // are envelope_size bytes.
18543            let cur_offset: usize = (10 - 1) * envelope_size;
18544
18545            // Zero reserved fields.
18546            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
18547
18548            // Safety:
18549            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
18550            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
18551            //   envelope_size bytes, there is always sufficient room.
18552            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<DnsTxtEntry>, D>(
18553            self.txt_data.as_ref().map(<fidl::encoding::UnboundedVector<DnsTxtEntry> as fidl::encoding::ValueTypeMarker>::borrow),
18554            encoder, offset + cur_offset, depth
18555        )?;
18556
18557            _prev_end_offset = cur_offset + envelope_size;
18558            if 11 > max_ordinal {
18559                return Ok(());
18560            }
18561
18562            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
18563            // are envelope_size bytes.
18564            let cur_offset: usize = (11 - 1) * envelope_size;
18565
18566            // Zero reserved fields.
18567            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
18568
18569            // Safety:
18570            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
18571            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
18572            //   envelope_size bytes, there is always sufficient room.
18573            fidl::encoding::encode_in_envelope_optional::<SrpServerHost, D>(
18574                self.host.as_ref().map(<SrpServerHost as fidl::encoding::ValueTypeMarker>::borrow),
18575                encoder,
18576                offset + cur_offset,
18577                depth,
18578            )?;
18579
18580            _prev_end_offset = cur_offset + envelope_size;
18581
18582            Ok(())
18583        }
18584    }
18585
18586    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SrpServerService {
18587        #[inline(always)]
18588        fn new_empty() -> Self {
18589            Self::default()
18590        }
18591
18592        unsafe fn decode(
18593            &mut self,
18594            decoder: &mut fidl::encoding::Decoder<'_, D>,
18595            offset: usize,
18596            mut depth: fidl::encoding::Depth,
18597        ) -> fidl::Result<()> {
18598            decoder.debug_check_bounds::<Self>(offset);
18599            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
18600                None => return Err(fidl::Error::NotNullable),
18601                Some(len) => len,
18602            };
18603            // Calling decoder.out_of_line_offset(0) is not allowed.
18604            if len == 0 {
18605                return Ok(());
18606            };
18607            depth.increment()?;
18608            let envelope_size = 8;
18609            let bytes_len = len * envelope_size;
18610            let offset = decoder.out_of_line_offset(bytes_len)?;
18611            // Decode the envelope for each type.
18612            let mut _next_ordinal_to_read = 0;
18613            let mut next_offset = offset;
18614            let end_offset = offset + bytes_len;
18615            _next_ordinal_to_read += 1;
18616            if next_offset >= end_offset {
18617                return Ok(());
18618            }
18619
18620            // Decode unknown envelopes for gaps in ordinals.
18621            while _next_ordinal_to_read < 1 {
18622                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
18623                _next_ordinal_to_read += 1;
18624                next_offset += envelope_size;
18625            }
18626
18627            let next_out_of_line = decoder.next_out_of_line();
18628            let handles_before = decoder.remaining_handles();
18629            if let Some((inlined, num_bytes, num_handles)) =
18630                fidl::encoding::decode_envelope_header(decoder, next_offset)?
18631            {
18632                let member_inline_size =
18633                    <fidl::encoding::BoundedString<255> as fidl::encoding::TypeMarker>::inline_size(
18634                        decoder.context,
18635                    );
18636                if inlined != (member_inline_size <= 4) {
18637                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
18638                }
18639                let inner_offset;
18640                let mut inner_depth = depth.clone();
18641                if inlined {
18642                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
18643                    inner_offset = next_offset;
18644                } else {
18645                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
18646                    inner_depth.increment()?;
18647                }
18648                let val_ref = self
18649                    .instance_name
18650                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<255>, D));
18651                fidl::decode!(
18652                    fidl::encoding::BoundedString<255>,
18653                    D,
18654                    val_ref,
18655                    decoder,
18656                    inner_offset,
18657                    inner_depth
18658                )?;
18659                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
18660                {
18661                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
18662                }
18663                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
18664                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
18665                }
18666            }
18667
18668            next_offset += envelope_size;
18669            _next_ordinal_to_read += 1;
18670            if next_offset >= end_offset {
18671                return Ok(());
18672            }
18673
18674            // Decode unknown envelopes for gaps in ordinals.
18675            while _next_ordinal_to_read < 2 {
18676                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
18677                _next_ordinal_to_read += 1;
18678                next_offset += envelope_size;
18679            }
18680
18681            let next_out_of_line = decoder.next_out_of_line();
18682            let handles_before = decoder.remaining_handles();
18683            if let Some((inlined, num_bytes, num_handles)) =
18684                fidl::encoding::decode_envelope_header(decoder, next_offset)?
18685            {
18686                let member_inline_size =
18687                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
18688                if inlined != (member_inline_size <= 4) {
18689                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
18690                }
18691                let inner_offset;
18692                let mut inner_depth = depth.clone();
18693                if inlined {
18694                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
18695                    inner_offset = next_offset;
18696                } else {
18697                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
18698                    inner_depth.increment()?;
18699                }
18700                let val_ref = self.deleted.get_or_insert_with(|| fidl::new_empty!(bool, D));
18701                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
18702                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
18703                {
18704                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
18705                }
18706                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
18707                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
18708                }
18709            }
18710
18711            next_offset += envelope_size;
18712            _next_ordinal_to_read += 1;
18713            if next_offset >= end_offset {
18714                return Ok(());
18715            }
18716
18717            // Decode unknown envelopes for gaps in ordinals.
18718            while _next_ordinal_to_read < 3 {
18719                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
18720                _next_ordinal_to_read += 1;
18721                next_offset += envelope_size;
18722            }
18723
18724            let next_out_of_line = decoder.next_out_of_line();
18725            let handles_before = decoder.remaining_handles();
18726            if let Some((inlined, num_bytes, num_handles)) =
18727                fidl::encoding::decode_envelope_header(decoder, next_offset)?
18728            {
18729                let member_inline_size = <fidl::encoding::Vector<
18730                    fidl::encoding::BoundedString<63>,
18731                    6,
18732                > as fidl::encoding::TypeMarker>::inline_size(
18733                    decoder.context
18734                );
18735                if inlined != (member_inline_size <= 4) {
18736                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
18737                }
18738                let inner_offset;
18739                let mut inner_depth = depth.clone();
18740                if inlined {
18741                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
18742                    inner_offset = next_offset;
18743                } else {
18744                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
18745                    inner_depth.increment()?;
18746                }
18747                let val_ref = self.subtypes.get_or_insert_with(|| {
18748                    fidl::new_empty!(
18749                        fidl::encoding::Vector<fidl::encoding::BoundedString<63>, 6>,
18750                        D
18751                    )
18752                });
18753                fidl::decode!(
18754                    fidl::encoding::Vector<fidl::encoding::BoundedString<63>, 6>,
18755                    D,
18756                    val_ref,
18757                    decoder,
18758                    inner_offset,
18759                    inner_depth
18760                )?;
18761                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
18762                {
18763                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
18764                }
18765                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
18766                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
18767                }
18768            }
18769
18770            next_offset += envelope_size;
18771            _next_ordinal_to_read += 1;
18772            if next_offset >= end_offset {
18773                return Ok(());
18774            }
18775
18776            // Decode unknown envelopes for gaps in ordinals.
18777            while _next_ordinal_to_read < 4 {
18778                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
18779                _next_ordinal_to_read += 1;
18780                next_offset += envelope_size;
18781            }
18782
18783            let next_out_of_line = decoder.next_out_of_line();
18784            let handles_before = decoder.remaining_handles();
18785            if let Some((inlined, num_bytes, num_handles)) =
18786                fidl::encoding::decode_envelope_header(decoder, next_offset)?
18787            {
18788                let member_inline_size =
18789                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
18790                if inlined != (member_inline_size <= 4) {
18791                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
18792                }
18793                let inner_offset;
18794                let mut inner_depth = depth.clone();
18795                if inlined {
18796                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
18797                    inner_offset = next_offset;
18798                } else {
18799                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
18800                    inner_depth.increment()?;
18801                }
18802                let val_ref = self.port.get_or_insert_with(|| fidl::new_empty!(u16, D));
18803                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
18804                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
18805                {
18806                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
18807                }
18808                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
18809                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
18810                }
18811            }
18812
18813            next_offset += envelope_size;
18814            _next_ordinal_to_read += 1;
18815            if next_offset >= end_offset {
18816                return Ok(());
18817            }
18818
18819            // Decode unknown envelopes for gaps in ordinals.
18820            while _next_ordinal_to_read < 5 {
18821                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
18822                _next_ordinal_to_read += 1;
18823                next_offset += envelope_size;
18824            }
18825
18826            let next_out_of_line = decoder.next_out_of_line();
18827            let handles_before = decoder.remaining_handles();
18828            if let Some((inlined, num_bytes, num_handles)) =
18829                fidl::encoding::decode_envelope_header(decoder, next_offset)?
18830            {
18831                let member_inline_size =
18832                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
18833                if inlined != (member_inline_size <= 4) {
18834                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
18835                }
18836                let inner_offset;
18837                let mut inner_depth = depth.clone();
18838                if inlined {
18839                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
18840                    inner_offset = next_offset;
18841                } else {
18842                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
18843                    inner_depth.increment()?;
18844                }
18845                let val_ref = self.priority.get_or_insert_with(|| fidl::new_empty!(u16, D));
18846                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
18847                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
18848                {
18849                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
18850                }
18851                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
18852                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
18853                }
18854            }
18855
18856            next_offset += envelope_size;
18857            _next_ordinal_to_read += 1;
18858            if next_offset >= end_offset {
18859                return Ok(());
18860            }
18861
18862            // Decode unknown envelopes for gaps in ordinals.
18863            while _next_ordinal_to_read < 6 {
18864                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
18865                _next_ordinal_to_read += 1;
18866                next_offset += envelope_size;
18867            }
18868
18869            let next_out_of_line = decoder.next_out_of_line();
18870            let handles_before = decoder.remaining_handles();
18871            if let Some((inlined, num_bytes, num_handles)) =
18872                fidl::encoding::decode_envelope_header(decoder, next_offset)?
18873            {
18874                let member_inline_size =
18875                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
18876                if inlined != (member_inline_size <= 4) {
18877                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
18878                }
18879                let inner_offset;
18880                let mut inner_depth = depth.clone();
18881                if inlined {
18882                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
18883                    inner_offset = next_offset;
18884                } else {
18885                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
18886                    inner_depth.increment()?;
18887                }
18888                let val_ref = self.weight.get_or_insert_with(|| fidl::new_empty!(u16, D));
18889                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
18890                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
18891                {
18892                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
18893                }
18894                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
18895                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
18896                }
18897            }
18898
18899            next_offset += envelope_size;
18900            _next_ordinal_to_read += 1;
18901            if next_offset >= end_offset {
18902                return Ok(());
18903            }
18904
18905            // Decode unknown envelopes for gaps in ordinals.
18906            while _next_ordinal_to_read < 7 {
18907                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
18908                _next_ordinal_to_read += 1;
18909                next_offset += envelope_size;
18910            }
18911
18912            let next_out_of_line = decoder.next_out_of_line();
18913            let handles_before = decoder.remaining_handles();
18914            if let Some((inlined, num_bytes, num_handles)) =
18915                fidl::encoding::decode_envelope_header(decoder, next_offset)?
18916            {
18917                let member_inline_size =
18918                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
18919                if inlined != (member_inline_size <= 4) {
18920                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
18921                }
18922                let inner_offset;
18923                let mut inner_depth = depth.clone();
18924                if inlined {
18925                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
18926                    inner_offset = next_offset;
18927                } else {
18928                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
18929                    inner_depth.increment()?;
18930                }
18931                let val_ref = self.ttl.get_or_insert_with(|| fidl::new_empty!(i64, D));
18932                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
18933                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
18934                {
18935                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
18936                }
18937                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
18938                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
18939                }
18940            }
18941
18942            next_offset += envelope_size;
18943            _next_ordinal_to_read += 1;
18944            if next_offset >= end_offset {
18945                return Ok(());
18946            }
18947
18948            // Decode unknown envelopes for gaps in ordinals.
18949            while _next_ordinal_to_read < 8 {
18950                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
18951                _next_ordinal_to_read += 1;
18952                next_offset += envelope_size;
18953            }
18954
18955            let next_out_of_line = decoder.next_out_of_line();
18956            let handles_before = decoder.remaining_handles();
18957            if let Some((inlined, num_bytes, num_handles)) =
18958                fidl::encoding::decode_envelope_header(decoder, next_offset)?
18959            {
18960                let member_inline_size =
18961                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
18962                if inlined != (member_inline_size <= 4) {
18963                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
18964                }
18965                let inner_offset;
18966                let mut inner_depth = depth.clone();
18967                if inlined {
18968                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
18969                    inner_offset = next_offset;
18970                } else {
18971                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
18972                    inner_depth.increment()?;
18973                }
18974                let val_ref = self.lease.get_or_insert_with(|| fidl::new_empty!(i64, D));
18975                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
18976                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
18977                {
18978                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
18979                }
18980                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
18981                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
18982                }
18983            }
18984
18985            next_offset += envelope_size;
18986            _next_ordinal_to_read += 1;
18987            if next_offset >= end_offset {
18988                return Ok(());
18989            }
18990
18991            // Decode unknown envelopes for gaps in ordinals.
18992            while _next_ordinal_to_read < 9 {
18993                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
18994                _next_ordinal_to_read += 1;
18995                next_offset += envelope_size;
18996            }
18997
18998            let next_out_of_line = decoder.next_out_of_line();
18999            let handles_before = decoder.remaining_handles();
19000            if let Some((inlined, num_bytes, num_handles)) =
19001                fidl::encoding::decode_envelope_header(decoder, next_offset)?
19002            {
19003                let member_inline_size =
19004                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
19005                if inlined != (member_inline_size <= 4) {
19006                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
19007                }
19008                let inner_offset;
19009                let mut inner_depth = depth.clone();
19010                if inlined {
19011                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
19012                    inner_offset = next_offset;
19013                } else {
19014                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
19015                    inner_depth.increment()?;
19016                }
19017                let val_ref = self.key_lease.get_or_insert_with(|| fidl::new_empty!(i64, D));
19018                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
19019                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
19020                {
19021                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
19022                }
19023                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
19024                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
19025                }
19026            }
19027
19028            next_offset += envelope_size;
19029            _next_ordinal_to_read += 1;
19030            if next_offset >= end_offset {
19031                return Ok(());
19032            }
19033
19034            // Decode unknown envelopes for gaps in ordinals.
19035            while _next_ordinal_to_read < 10 {
19036                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
19037                _next_ordinal_to_read += 1;
19038                next_offset += envelope_size;
19039            }
19040
19041            let next_out_of_line = decoder.next_out_of_line();
19042            let handles_before = decoder.remaining_handles();
19043            if let Some((inlined, num_bytes, num_handles)) =
19044                fidl::encoding::decode_envelope_header(decoder, next_offset)?
19045            {
19046                let member_inline_size = <fidl::encoding::UnboundedVector<DnsTxtEntry> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
19047                if inlined != (member_inline_size <= 4) {
19048                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
19049                }
19050                let inner_offset;
19051                let mut inner_depth = depth.clone();
19052                if inlined {
19053                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
19054                    inner_offset = next_offset;
19055                } else {
19056                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
19057                    inner_depth.increment()?;
19058                }
19059                let val_ref = self.txt_data.get_or_insert_with(|| {
19060                    fidl::new_empty!(fidl::encoding::UnboundedVector<DnsTxtEntry>, D)
19061                });
19062                fidl::decode!(
19063                    fidl::encoding::UnboundedVector<DnsTxtEntry>,
19064                    D,
19065                    val_ref,
19066                    decoder,
19067                    inner_offset,
19068                    inner_depth
19069                )?;
19070                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
19071                {
19072                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
19073                }
19074                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
19075                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
19076                }
19077            }
19078
19079            next_offset += envelope_size;
19080            _next_ordinal_to_read += 1;
19081            if next_offset >= end_offset {
19082                return Ok(());
19083            }
19084
19085            // Decode unknown envelopes for gaps in ordinals.
19086            while _next_ordinal_to_read < 11 {
19087                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
19088                _next_ordinal_to_read += 1;
19089                next_offset += envelope_size;
19090            }
19091
19092            let next_out_of_line = decoder.next_out_of_line();
19093            let handles_before = decoder.remaining_handles();
19094            if let Some((inlined, num_bytes, num_handles)) =
19095                fidl::encoding::decode_envelope_header(decoder, next_offset)?
19096            {
19097                let member_inline_size =
19098                    <SrpServerHost as fidl::encoding::TypeMarker>::inline_size(decoder.context);
19099                if inlined != (member_inline_size <= 4) {
19100                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
19101                }
19102                let inner_offset;
19103                let mut inner_depth = depth.clone();
19104                if inlined {
19105                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
19106                    inner_offset = next_offset;
19107                } else {
19108                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
19109                    inner_depth.increment()?;
19110                }
19111                let val_ref = self.host.get_or_insert_with(|| fidl::new_empty!(SrpServerHost, D));
19112                fidl::decode!(SrpServerHost, D, val_ref, decoder, inner_offset, inner_depth)?;
19113                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
19114                {
19115                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
19116                }
19117                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
19118                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
19119                }
19120            }
19121
19122            next_offset += envelope_size;
19123
19124            // Decode the remaining unknown envelopes.
19125            while next_offset < end_offset {
19126                _next_ordinal_to_read += 1;
19127                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
19128                next_offset += envelope_size;
19129            }
19130
19131            Ok(())
19132        }
19133    }
19134
19135    impl Telemetry {
19136        #[inline(always)]
19137        fn max_ordinal_present(&self) -> u64 {
19138            if let Some(_) = self.router_info {
19139                return 32;
19140            }
19141            if let Some(_) = self.multiradio_neighbor_info {
19142                return 31;
19143            }
19144            if let Some(_) = self.active_dataset {
19145                return 30;
19146            }
19147            if let Some(_) = self.border_routing_routers {
19148                return 29;
19149            }
19150            if let Some(_) = self.border_routing_peers {
19151                return 28;
19152            }
19153            if let Some(_) = self.extended_pan_id {
19154                return 27;
19155            }
19156            if let Some(_) = self.multi_ail_detected {
19157                return 26;
19158            }
19159            if let Some(_) = self.border_agent_counters {
19160                return 25;
19161            }
19162            if let Some(_) = self.link_metrics_entries {
19163                return 24;
19164            }
19165            if let Some(_) = self.dhcp6pd_info {
19166                return 23;
19167            }
19168            if let Some(_) = self.upstream_dns_info {
19169                return 22;
19170            }
19171            if let Some(_) = self.trel_peers_info {
19172                return 21;
19173            }
19174            if let Some(_) = self.trel_counters {
19175                return 20;
19176            }
19177            if let Some(_) = self.nat64_info {
19178                return 19;
19179            }
19180            if let Some(_) = self.uptime {
19181                return 18;
19182            }
19183            if let Some(_) = self.leader_data {
19184                return 17;
19185            }
19186            if let Some(_) = self.dnssd_counters {
19187                return 16;
19188            }
19189            if let Some(_) = self.srp_server_info {
19190                return 15;
19191            }
19192            if let Some(_) = self.thread_border_routing_counters {
19193                return 14;
19194            }
19195            if let Some(_) = self.thread_stable_network_data {
19196                return 13;
19197            }
19198            if let Some(_) = self.thread_network_data {
19199                return 12;
19200            }
19201            if let Some(_) = self.thread_stable_network_data_version {
19202                return 11;
19203            }
19204            if let Some(_) = self.thread_network_data_version {
19205                return 10;
19206            }
19207            if let Some(_) = self.thread_rloc {
19208                return 9;
19209            }
19210            if let Some(_) = self.thread_router_id {
19211                return 8;
19212            }
19213            if let Some(_) = self.thread_link_mode {
19214                return 7;
19215            }
19216            if let Some(_) = self.rcp_version {
19217                return 6;
19218            }
19219            if let Some(_) = self.stack_version {
19220                return 5;
19221            }
19222            if let Some(_) = self.partition_id {
19223                return 4;
19224            }
19225            if let Some(_) = self.channel_index {
19226                return 3;
19227            }
19228            if let Some(_) = self.tx_power {
19229                return 2;
19230            }
19231            if let Some(_) = self.rssi {
19232                return 1;
19233            }
19234            0
19235        }
19236    }
19237
19238    impl fidl::encoding::ValueTypeMarker for Telemetry {
19239        type Borrowed<'a> = &'a Self;
19240        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
19241            value
19242        }
19243    }
19244
19245    unsafe impl fidl::encoding::TypeMarker for Telemetry {
19246        type Owned = Self;
19247
19248        #[inline(always)]
19249        fn inline_align(_context: fidl::encoding::Context) -> usize {
19250            8
19251        }
19252
19253        #[inline(always)]
19254        fn inline_size(_context: fidl::encoding::Context) -> usize {
19255            16
19256        }
19257    }
19258
19259    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Telemetry, D>
19260        for &Telemetry
19261    {
19262        unsafe fn encode(
19263            self,
19264            encoder: &mut fidl::encoding::Encoder<'_, D>,
19265            offset: usize,
19266            mut depth: fidl::encoding::Depth,
19267        ) -> fidl::Result<()> {
19268            encoder.debug_check_bounds::<Telemetry>(offset);
19269            // Vector header
19270            let max_ordinal: u64 = self.max_ordinal_present();
19271            encoder.write_num(max_ordinal, offset);
19272            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
19273            // Calling encoder.out_of_line_offset(0) is not allowed.
19274            if max_ordinal == 0 {
19275                return Ok(());
19276            }
19277            depth.increment()?;
19278            let envelope_size = 8;
19279            let bytes_len = max_ordinal as usize * envelope_size;
19280            #[allow(unused_variables)]
19281            let offset = encoder.out_of_line_offset(bytes_len);
19282            let mut _prev_end_offset: usize = 0;
19283            if 1 > max_ordinal {
19284                return Ok(());
19285            }
19286
19287            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
19288            // are envelope_size bytes.
19289            let cur_offset: usize = (1 - 1) * envelope_size;
19290
19291            // Zero reserved fields.
19292            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
19293
19294            // Safety:
19295            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
19296            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
19297            //   envelope_size bytes, there is always sufficient room.
19298            fidl::encoding::encode_in_envelope_optional::<i8, D>(
19299                self.rssi.as_ref().map(<i8 as fidl::encoding::ValueTypeMarker>::borrow),
19300                encoder,
19301                offset + cur_offset,
19302                depth,
19303            )?;
19304
19305            _prev_end_offset = cur_offset + envelope_size;
19306            if 2 > max_ordinal {
19307                return Ok(());
19308            }
19309
19310            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
19311            // are envelope_size bytes.
19312            let cur_offset: usize = (2 - 1) * envelope_size;
19313
19314            // Zero reserved fields.
19315            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
19316
19317            // Safety:
19318            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
19319            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
19320            //   envelope_size bytes, there is always sufficient room.
19321            fidl::encoding::encode_in_envelope_optional::<i8, D>(
19322                self.tx_power.as_ref().map(<i8 as fidl::encoding::ValueTypeMarker>::borrow),
19323                encoder,
19324                offset + cur_offset,
19325                depth,
19326            )?;
19327
19328            _prev_end_offset = cur_offset + envelope_size;
19329            if 3 > max_ordinal {
19330                return Ok(());
19331            }
19332
19333            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
19334            // are envelope_size bytes.
19335            let cur_offset: usize = (3 - 1) * envelope_size;
19336
19337            // Zero reserved fields.
19338            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
19339
19340            // Safety:
19341            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
19342            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
19343            //   envelope_size bytes, there is always sufficient room.
19344            fidl::encoding::encode_in_envelope_optional::<u16, D>(
19345                self.channel_index.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
19346                encoder,
19347                offset + cur_offset,
19348                depth,
19349            )?;
19350
19351            _prev_end_offset = cur_offset + envelope_size;
19352            if 4 > max_ordinal {
19353                return Ok(());
19354            }
19355
19356            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
19357            // are envelope_size bytes.
19358            let cur_offset: usize = (4 - 1) * envelope_size;
19359
19360            // Zero reserved fields.
19361            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
19362
19363            // Safety:
19364            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
19365            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
19366            //   envelope_size bytes, there is always sufficient room.
19367            fidl::encoding::encode_in_envelope_optional::<u32, D>(
19368                self.partition_id.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
19369                encoder,
19370                offset + cur_offset,
19371                depth,
19372            )?;
19373
19374            _prev_end_offset = cur_offset + envelope_size;
19375            if 5 > max_ordinal {
19376                return Ok(());
19377            }
19378
19379            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
19380            // are envelope_size bytes.
19381            let cur_offset: usize = (5 - 1) * envelope_size;
19382
19383            // Zero reserved fields.
19384            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
19385
19386            // Safety:
19387            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
19388            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
19389            //   envelope_size bytes, there is always sufficient room.
19390            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<256>, D>(
19391                self.stack_version.as_ref().map(
19392                    <fidl::encoding::BoundedString<256> as fidl::encoding::ValueTypeMarker>::borrow,
19393                ),
19394                encoder,
19395                offset + cur_offset,
19396                depth,
19397            )?;
19398
19399            _prev_end_offset = cur_offset + envelope_size;
19400            if 6 > max_ordinal {
19401                return Ok(());
19402            }
19403
19404            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
19405            // are envelope_size bytes.
19406            let cur_offset: usize = (6 - 1) * envelope_size;
19407
19408            // Zero reserved fields.
19409            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
19410
19411            // Safety:
19412            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
19413            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
19414            //   envelope_size bytes, there is always sufficient room.
19415            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<256>, D>(
19416                self.rcp_version.as_ref().map(
19417                    <fidl::encoding::BoundedString<256> as fidl::encoding::ValueTypeMarker>::borrow,
19418                ),
19419                encoder,
19420                offset + cur_offset,
19421                depth,
19422            )?;
19423
19424            _prev_end_offset = cur_offset + envelope_size;
19425            if 7 > max_ordinal {
19426                return Ok(());
19427            }
19428
19429            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
19430            // are envelope_size bytes.
19431            let cur_offset: usize = (7 - 1) * envelope_size;
19432
19433            // Zero reserved fields.
19434            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
19435
19436            // Safety:
19437            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
19438            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
19439            //   envelope_size bytes, there is always sufficient room.
19440            fidl::encoding::encode_in_envelope_optional::<u8, D>(
19441                self.thread_link_mode.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
19442                encoder,
19443                offset + cur_offset,
19444                depth,
19445            )?;
19446
19447            _prev_end_offset = cur_offset + envelope_size;
19448            if 8 > max_ordinal {
19449                return Ok(());
19450            }
19451
19452            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
19453            // are envelope_size bytes.
19454            let cur_offset: usize = (8 - 1) * envelope_size;
19455
19456            // Zero reserved fields.
19457            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
19458
19459            // Safety:
19460            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
19461            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
19462            //   envelope_size bytes, there is always sufficient room.
19463            fidl::encoding::encode_in_envelope_optional::<u8, D>(
19464                self.thread_router_id.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
19465                encoder,
19466                offset + cur_offset,
19467                depth,
19468            )?;
19469
19470            _prev_end_offset = cur_offset + envelope_size;
19471            if 9 > max_ordinal {
19472                return Ok(());
19473            }
19474
19475            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
19476            // are envelope_size bytes.
19477            let cur_offset: usize = (9 - 1) * envelope_size;
19478
19479            // Zero reserved fields.
19480            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
19481
19482            // Safety:
19483            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
19484            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
19485            //   envelope_size bytes, there is always sufficient room.
19486            fidl::encoding::encode_in_envelope_optional::<u16, D>(
19487                self.thread_rloc.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
19488                encoder,
19489                offset + cur_offset,
19490                depth,
19491            )?;
19492
19493            _prev_end_offset = cur_offset + envelope_size;
19494            if 10 > max_ordinal {
19495                return Ok(());
19496            }
19497
19498            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
19499            // are envelope_size bytes.
19500            let cur_offset: usize = (10 - 1) * envelope_size;
19501
19502            // Zero reserved fields.
19503            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
19504
19505            // Safety:
19506            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
19507            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
19508            //   envelope_size bytes, there is always sufficient room.
19509            fidl::encoding::encode_in_envelope_optional::<u8, D>(
19510                self.thread_network_data_version
19511                    .as_ref()
19512                    .map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
19513                encoder,
19514                offset + cur_offset,
19515                depth,
19516            )?;
19517
19518            _prev_end_offset = cur_offset + envelope_size;
19519            if 11 > max_ordinal {
19520                return Ok(());
19521            }
19522
19523            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
19524            // are envelope_size bytes.
19525            let cur_offset: usize = (11 - 1) * envelope_size;
19526
19527            // Zero reserved fields.
19528            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
19529
19530            // Safety:
19531            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
19532            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
19533            //   envelope_size bytes, there is always sufficient room.
19534            fidl::encoding::encode_in_envelope_optional::<u8, D>(
19535                self.thread_stable_network_data_version
19536                    .as_ref()
19537                    .map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
19538                encoder,
19539                offset + cur_offset,
19540                depth,
19541            )?;
19542
19543            _prev_end_offset = cur_offset + envelope_size;
19544            if 12 > max_ordinal {
19545                return Ok(());
19546            }
19547
19548            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
19549            // are envelope_size bytes.
19550            let cur_offset: usize = (12 - 1) * envelope_size;
19551
19552            // Zero reserved fields.
19553            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
19554
19555            // Safety:
19556            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
19557            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
19558            //   envelope_size bytes, there is always sufficient room.
19559            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u8, 255>, D>(
19560                self.thread_network_data.as_ref().map(
19561                    <fidl::encoding::Vector<u8, 255> as fidl::encoding::ValueTypeMarker>::borrow,
19562                ),
19563                encoder,
19564                offset + cur_offset,
19565                depth,
19566            )?;
19567
19568            _prev_end_offset = cur_offset + envelope_size;
19569            if 13 > max_ordinal {
19570                return Ok(());
19571            }
19572
19573            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
19574            // are envelope_size bytes.
19575            let cur_offset: usize = (13 - 1) * envelope_size;
19576
19577            // Zero reserved fields.
19578            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
19579
19580            // Safety:
19581            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
19582            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
19583            //   envelope_size bytes, there is always sufficient room.
19584            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u8, 255>, D>(
19585                self.thread_stable_network_data.as_ref().map(
19586                    <fidl::encoding::Vector<u8, 255> as fidl::encoding::ValueTypeMarker>::borrow,
19587                ),
19588                encoder,
19589                offset + cur_offset,
19590                depth,
19591            )?;
19592
19593            _prev_end_offset = cur_offset + envelope_size;
19594            if 14 > max_ordinal {
19595                return Ok(());
19596            }
19597
19598            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
19599            // are envelope_size bytes.
19600            let cur_offset: usize = (14 - 1) * envelope_size;
19601
19602            // Zero reserved fields.
19603            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
19604
19605            // Safety:
19606            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
19607            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
19608            //   envelope_size bytes, there is always sufficient room.
19609            fidl::encoding::encode_in_envelope_optional::<BorderRoutingCounters, D>(
19610                self.thread_border_routing_counters
19611                    .as_ref()
19612                    .map(<BorderRoutingCounters as fidl::encoding::ValueTypeMarker>::borrow),
19613                encoder,
19614                offset + cur_offset,
19615                depth,
19616            )?;
19617
19618            _prev_end_offset = cur_offset + envelope_size;
19619            if 15 > max_ordinal {
19620                return Ok(());
19621            }
19622
19623            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
19624            // are envelope_size bytes.
19625            let cur_offset: usize = (15 - 1) * envelope_size;
19626
19627            // Zero reserved fields.
19628            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
19629
19630            // Safety:
19631            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
19632            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
19633            //   envelope_size bytes, there is always sufficient room.
19634            fidl::encoding::encode_in_envelope_optional::<SrpServerInfo, D>(
19635                self.srp_server_info
19636                    .as_ref()
19637                    .map(<SrpServerInfo as fidl::encoding::ValueTypeMarker>::borrow),
19638                encoder,
19639                offset + cur_offset,
19640                depth,
19641            )?;
19642
19643            _prev_end_offset = cur_offset + envelope_size;
19644            if 16 > max_ordinal {
19645                return Ok(());
19646            }
19647
19648            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
19649            // are envelope_size bytes.
19650            let cur_offset: usize = (16 - 1) * envelope_size;
19651
19652            // Zero reserved fields.
19653            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
19654
19655            // Safety:
19656            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
19657            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
19658            //   envelope_size bytes, there is always sufficient room.
19659            fidl::encoding::encode_in_envelope_optional::<DnssdCounters, D>(
19660                self.dnssd_counters
19661                    .as_ref()
19662                    .map(<DnssdCounters as fidl::encoding::ValueTypeMarker>::borrow),
19663                encoder,
19664                offset + cur_offset,
19665                depth,
19666            )?;
19667
19668            _prev_end_offset = cur_offset + envelope_size;
19669            if 17 > max_ordinal {
19670                return Ok(());
19671            }
19672
19673            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
19674            // are envelope_size bytes.
19675            let cur_offset: usize = (17 - 1) * envelope_size;
19676
19677            // Zero reserved fields.
19678            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
19679
19680            // Safety:
19681            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
19682            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
19683            //   envelope_size bytes, there is always sufficient room.
19684            fidl::encoding::encode_in_envelope_optional::<LeaderData, D>(
19685                self.leader_data
19686                    .as_ref()
19687                    .map(<LeaderData as fidl::encoding::ValueTypeMarker>::borrow),
19688                encoder,
19689                offset + cur_offset,
19690                depth,
19691            )?;
19692
19693            _prev_end_offset = cur_offset + envelope_size;
19694            if 18 > max_ordinal {
19695                return Ok(());
19696            }
19697
19698            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
19699            // are envelope_size bytes.
19700            let cur_offset: usize = (18 - 1) * envelope_size;
19701
19702            // Zero reserved fields.
19703            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
19704
19705            // Safety:
19706            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
19707            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
19708            //   envelope_size bytes, there is always sufficient room.
19709            fidl::encoding::encode_in_envelope_optional::<i64, D>(
19710                self.uptime.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
19711                encoder,
19712                offset + cur_offset,
19713                depth,
19714            )?;
19715
19716            _prev_end_offset = cur_offset + envelope_size;
19717            if 19 > max_ordinal {
19718                return Ok(());
19719            }
19720
19721            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
19722            // are envelope_size bytes.
19723            let cur_offset: usize = (19 - 1) * envelope_size;
19724
19725            // Zero reserved fields.
19726            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
19727
19728            // Safety:
19729            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
19730            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
19731            //   envelope_size bytes, there is always sufficient room.
19732            fidl::encoding::encode_in_envelope_optional::<Nat64Info, D>(
19733                self.nat64_info
19734                    .as_ref()
19735                    .map(<Nat64Info as fidl::encoding::ValueTypeMarker>::borrow),
19736                encoder,
19737                offset + cur_offset,
19738                depth,
19739            )?;
19740
19741            _prev_end_offset = cur_offset + envelope_size;
19742            if 20 > max_ordinal {
19743                return Ok(());
19744            }
19745
19746            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
19747            // are envelope_size bytes.
19748            let cur_offset: usize = (20 - 1) * envelope_size;
19749
19750            // Zero reserved fields.
19751            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
19752
19753            // Safety:
19754            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
19755            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
19756            //   envelope_size bytes, there is always sufficient room.
19757            fidl::encoding::encode_in_envelope_optional::<TrelCounters, D>(
19758                self.trel_counters
19759                    .as_ref()
19760                    .map(<TrelCounters as fidl::encoding::ValueTypeMarker>::borrow),
19761                encoder,
19762                offset + cur_offset,
19763                depth,
19764            )?;
19765
19766            _prev_end_offset = cur_offset + envelope_size;
19767            if 21 > max_ordinal {
19768                return Ok(());
19769            }
19770
19771            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
19772            // are envelope_size bytes.
19773            let cur_offset: usize = (21 - 1) * envelope_size;
19774
19775            // Zero reserved fields.
19776            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
19777
19778            // Safety:
19779            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
19780            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
19781            //   envelope_size bytes, there is always sufficient room.
19782            fidl::encoding::encode_in_envelope_optional::<TrelPeersInfo, D>(
19783                self.trel_peers_info
19784                    .as_ref()
19785                    .map(<TrelPeersInfo as fidl::encoding::ValueTypeMarker>::borrow),
19786                encoder,
19787                offset + cur_offset,
19788                depth,
19789            )?;
19790
19791            _prev_end_offset = cur_offset + envelope_size;
19792            if 22 > max_ordinal {
19793                return Ok(());
19794            }
19795
19796            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
19797            // are envelope_size bytes.
19798            let cur_offset: usize = (22 - 1) * envelope_size;
19799
19800            // Zero reserved fields.
19801            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
19802
19803            // Safety:
19804            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
19805            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
19806            //   envelope_size bytes, there is always sufficient room.
19807            fidl::encoding::encode_in_envelope_optional::<UpstreamDnsInfo, D>(
19808                self.upstream_dns_info
19809                    .as_ref()
19810                    .map(<UpstreamDnsInfo as fidl::encoding::ValueTypeMarker>::borrow),
19811                encoder,
19812                offset + cur_offset,
19813                depth,
19814            )?;
19815
19816            _prev_end_offset = cur_offset + envelope_size;
19817            if 23 > max_ordinal {
19818                return Ok(());
19819            }
19820
19821            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
19822            // are envelope_size bytes.
19823            let cur_offset: usize = (23 - 1) * envelope_size;
19824
19825            // Zero reserved fields.
19826            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
19827
19828            // Safety:
19829            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
19830            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
19831            //   envelope_size bytes, there is always sufficient room.
19832            fidl::encoding::encode_in_envelope_optional::<Dhcp6PdInfo, D>(
19833                self.dhcp6pd_info
19834                    .as_ref()
19835                    .map(<Dhcp6PdInfo as fidl::encoding::ValueTypeMarker>::borrow),
19836                encoder,
19837                offset + cur_offset,
19838                depth,
19839            )?;
19840
19841            _prev_end_offset = cur_offset + envelope_size;
19842            if 24 > max_ordinal {
19843                return Ok(());
19844            }
19845
19846            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
19847            // are envelope_size bytes.
19848            let cur_offset: usize = (24 - 1) * envelope_size;
19849
19850            // Zero reserved fields.
19851            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
19852
19853            // Safety:
19854            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
19855            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
19856            //   envelope_size bytes, there is always sufficient room.
19857            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<LinkMetricsEntry, 64>, D>(
19858            self.link_metrics_entries.as_ref().map(<fidl::encoding::Vector<LinkMetricsEntry, 64> as fidl::encoding::ValueTypeMarker>::borrow),
19859            encoder, offset + cur_offset, depth
19860        )?;
19861
19862            _prev_end_offset = cur_offset + envelope_size;
19863            if 25 > max_ordinal {
19864                return Ok(());
19865            }
19866
19867            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
19868            // are envelope_size bytes.
19869            let cur_offset: usize = (25 - 1) * envelope_size;
19870
19871            // Zero reserved fields.
19872            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
19873
19874            // Safety:
19875            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
19876            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
19877            //   envelope_size bytes, there is always sufficient room.
19878            fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_lowpan_device__common::BorderAgentCounters, D>(
19879            self.border_agent_counters.as_ref().map(<fidl_fuchsia_lowpan_device__common::BorderAgentCounters as fidl::encoding::ValueTypeMarker>::borrow),
19880            encoder, offset + cur_offset, depth
19881        )?;
19882
19883            _prev_end_offset = cur_offset + envelope_size;
19884            if 26 > max_ordinal {
19885                return Ok(());
19886            }
19887
19888            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
19889            // are envelope_size bytes.
19890            let cur_offset: usize = (26 - 1) * envelope_size;
19891
19892            // Zero reserved fields.
19893            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
19894
19895            // Safety:
19896            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
19897            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
19898            //   envelope_size bytes, there is always sufficient room.
19899            fidl::encoding::encode_in_envelope_optional::<bool, D>(
19900                self.multi_ail_detected
19901                    .as_ref()
19902                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
19903                encoder,
19904                offset + cur_offset,
19905                depth,
19906            )?;
19907
19908            _prev_end_offset = cur_offset + envelope_size;
19909            if 27 > max_ordinal {
19910                return Ok(());
19911            }
19912
19913            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
19914            // are envelope_size bytes.
19915            let cur_offset: usize = (27 - 1) * envelope_size;
19916
19917            // Zero reserved fields.
19918            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
19919
19920            // Safety:
19921            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
19922            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
19923            //   envelope_size bytes, there is always sufficient room.
19924            fidl::encoding::encode_in_envelope_optional::<u64, D>(
19925                self.extended_pan_id.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
19926                encoder,
19927                offset + cur_offset,
19928                depth,
19929            )?;
19930
19931            _prev_end_offset = cur_offset + envelope_size;
19932            if 28 > max_ordinal {
19933                return Ok(());
19934            }
19935
19936            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
19937            // are envelope_size bytes.
19938            let cur_offset: usize = (28 - 1) * envelope_size;
19939
19940            // Zero reserved fields.
19941            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
19942
19943            // Safety:
19944            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
19945            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
19946            //   envelope_size bytes, there is always sufficient room.
19947            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<BorderRoutingPeer, 64>, D>(
19948            self.border_routing_peers.as_ref().map(<fidl::encoding::Vector<BorderRoutingPeer, 64> as fidl::encoding::ValueTypeMarker>::borrow),
19949            encoder, offset + cur_offset, depth
19950        )?;
19951
19952            _prev_end_offset = cur_offset + envelope_size;
19953            if 29 > max_ordinal {
19954                return Ok(());
19955            }
19956
19957            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
19958            // are envelope_size bytes.
19959            let cur_offset: usize = (29 - 1) * envelope_size;
19960
19961            // Zero reserved fields.
19962            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
19963
19964            // Safety:
19965            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
19966            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
19967            //   envelope_size bytes, there is always sufficient room.
19968            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<BorderRoutingRouter, 64>, D>(
19969            self.border_routing_routers.as_ref().map(<fidl::encoding::Vector<BorderRoutingRouter, 64> as fidl::encoding::ValueTypeMarker>::borrow),
19970            encoder, offset + cur_offset, depth
19971        )?;
19972
19973            _prev_end_offset = cur_offset + envelope_size;
19974            if 30 > max_ordinal {
19975                return Ok(());
19976            }
19977
19978            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
19979            // are envelope_size bytes.
19980            let cur_offset: usize = (30 - 1) * envelope_size;
19981
19982            // Zero reserved fields.
19983            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
19984
19985            // Safety:
19986            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
19987            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
19988            //   envelope_size bytes, there is always sufficient room.
19989            fidl::encoding::encode_in_envelope_optional::<OperationalDataset, D>(
19990                self.active_dataset
19991                    .as_ref()
19992                    .map(<OperationalDataset as fidl::encoding::ValueTypeMarker>::borrow),
19993                encoder,
19994                offset + cur_offset,
19995                depth,
19996            )?;
19997
19998            _prev_end_offset = cur_offset + envelope_size;
19999            if 31 > max_ordinal {
20000                return Ok(());
20001            }
20002
20003            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
20004            // are envelope_size bytes.
20005            let cur_offset: usize = (31 - 1) * envelope_size;
20006
20007            // Zero reserved fields.
20008            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
20009
20010            // Safety:
20011            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
20012            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
20013            //   envelope_size bytes, there is always sufficient room.
20014            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<MultiRadioNeighborInfo, 64>, D>(
20015            self.multiradio_neighbor_info.as_ref().map(<fidl::encoding::Vector<MultiRadioNeighborInfo, 64> as fidl::encoding::ValueTypeMarker>::borrow),
20016            encoder, offset + cur_offset, depth
20017        )?;
20018
20019            _prev_end_offset = cur_offset + envelope_size;
20020            if 32 > max_ordinal {
20021                return Ok(());
20022            }
20023
20024            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
20025            // are envelope_size bytes.
20026            let cur_offset: usize = (32 - 1) * envelope_size;
20027
20028            // Zero reserved fields.
20029            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
20030
20031            // Safety:
20032            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
20033            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
20034            //   envelope_size bytes, there is always sufficient room.
20035            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<RouterInfo, 64>, D>(
20036            self.router_info.as_ref().map(<fidl::encoding::Vector<RouterInfo, 64> as fidl::encoding::ValueTypeMarker>::borrow),
20037            encoder, offset + cur_offset, depth
20038        )?;
20039
20040            _prev_end_offset = cur_offset + envelope_size;
20041
20042            Ok(())
20043        }
20044    }
20045
20046    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Telemetry {
20047        #[inline(always)]
20048        fn new_empty() -> Self {
20049            Self::default()
20050        }
20051
20052        unsafe fn decode(
20053            &mut self,
20054            decoder: &mut fidl::encoding::Decoder<'_, D>,
20055            offset: usize,
20056            mut depth: fidl::encoding::Depth,
20057        ) -> fidl::Result<()> {
20058            decoder.debug_check_bounds::<Self>(offset);
20059            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
20060                None => return Err(fidl::Error::NotNullable),
20061                Some(len) => len,
20062            };
20063            // Calling decoder.out_of_line_offset(0) is not allowed.
20064            if len == 0 {
20065                return Ok(());
20066            };
20067            depth.increment()?;
20068            let envelope_size = 8;
20069            let bytes_len = len * envelope_size;
20070            let offset = decoder.out_of_line_offset(bytes_len)?;
20071            // Decode the envelope for each type.
20072            let mut _next_ordinal_to_read = 0;
20073            let mut next_offset = offset;
20074            let end_offset = offset + bytes_len;
20075            _next_ordinal_to_read += 1;
20076            if next_offset >= end_offset {
20077                return Ok(());
20078            }
20079
20080            // Decode unknown envelopes for gaps in ordinals.
20081            while _next_ordinal_to_read < 1 {
20082                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
20083                _next_ordinal_to_read += 1;
20084                next_offset += envelope_size;
20085            }
20086
20087            let next_out_of_line = decoder.next_out_of_line();
20088            let handles_before = decoder.remaining_handles();
20089            if let Some((inlined, num_bytes, num_handles)) =
20090                fidl::encoding::decode_envelope_header(decoder, next_offset)?
20091            {
20092                let member_inline_size =
20093                    <i8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
20094                if inlined != (member_inline_size <= 4) {
20095                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
20096                }
20097                let inner_offset;
20098                let mut inner_depth = depth.clone();
20099                if inlined {
20100                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
20101                    inner_offset = next_offset;
20102                } else {
20103                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
20104                    inner_depth.increment()?;
20105                }
20106                let val_ref = self.rssi.get_or_insert_with(|| fidl::new_empty!(i8, D));
20107                fidl::decode!(i8, D, val_ref, decoder, inner_offset, inner_depth)?;
20108                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
20109                {
20110                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
20111                }
20112                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
20113                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
20114                }
20115            }
20116
20117            next_offset += envelope_size;
20118            _next_ordinal_to_read += 1;
20119            if next_offset >= end_offset {
20120                return Ok(());
20121            }
20122
20123            // Decode unknown envelopes for gaps in ordinals.
20124            while _next_ordinal_to_read < 2 {
20125                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
20126                _next_ordinal_to_read += 1;
20127                next_offset += envelope_size;
20128            }
20129
20130            let next_out_of_line = decoder.next_out_of_line();
20131            let handles_before = decoder.remaining_handles();
20132            if let Some((inlined, num_bytes, num_handles)) =
20133                fidl::encoding::decode_envelope_header(decoder, next_offset)?
20134            {
20135                let member_inline_size =
20136                    <i8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
20137                if inlined != (member_inline_size <= 4) {
20138                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
20139                }
20140                let inner_offset;
20141                let mut inner_depth = depth.clone();
20142                if inlined {
20143                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
20144                    inner_offset = next_offset;
20145                } else {
20146                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
20147                    inner_depth.increment()?;
20148                }
20149                let val_ref = self.tx_power.get_or_insert_with(|| fidl::new_empty!(i8, D));
20150                fidl::decode!(i8, D, val_ref, decoder, inner_offset, inner_depth)?;
20151                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
20152                {
20153                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
20154                }
20155                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
20156                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
20157                }
20158            }
20159
20160            next_offset += envelope_size;
20161            _next_ordinal_to_read += 1;
20162            if next_offset >= end_offset {
20163                return Ok(());
20164            }
20165
20166            // Decode unknown envelopes for gaps in ordinals.
20167            while _next_ordinal_to_read < 3 {
20168                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
20169                _next_ordinal_to_read += 1;
20170                next_offset += envelope_size;
20171            }
20172
20173            let next_out_of_line = decoder.next_out_of_line();
20174            let handles_before = decoder.remaining_handles();
20175            if let Some((inlined, num_bytes, num_handles)) =
20176                fidl::encoding::decode_envelope_header(decoder, next_offset)?
20177            {
20178                let member_inline_size =
20179                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
20180                if inlined != (member_inline_size <= 4) {
20181                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
20182                }
20183                let inner_offset;
20184                let mut inner_depth = depth.clone();
20185                if inlined {
20186                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
20187                    inner_offset = next_offset;
20188                } else {
20189                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
20190                    inner_depth.increment()?;
20191                }
20192                let val_ref = self.channel_index.get_or_insert_with(|| fidl::new_empty!(u16, D));
20193                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
20194                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
20195                {
20196                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
20197                }
20198                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
20199                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
20200                }
20201            }
20202
20203            next_offset += envelope_size;
20204            _next_ordinal_to_read += 1;
20205            if next_offset >= end_offset {
20206                return Ok(());
20207            }
20208
20209            // Decode unknown envelopes for gaps in ordinals.
20210            while _next_ordinal_to_read < 4 {
20211                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
20212                _next_ordinal_to_read += 1;
20213                next_offset += envelope_size;
20214            }
20215
20216            let next_out_of_line = decoder.next_out_of_line();
20217            let handles_before = decoder.remaining_handles();
20218            if let Some((inlined, num_bytes, num_handles)) =
20219                fidl::encoding::decode_envelope_header(decoder, next_offset)?
20220            {
20221                let member_inline_size =
20222                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
20223                if inlined != (member_inline_size <= 4) {
20224                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
20225                }
20226                let inner_offset;
20227                let mut inner_depth = depth.clone();
20228                if inlined {
20229                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
20230                    inner_offset = next_offset;
20231                } else {
20232                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
20233                    inner_depth.increment()?;
20234                }
20235                let val_ref = self.partition_id.get_or_insert_with(|| fidl::new_empty!(u32, D));
20236                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
20237                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
20238                {
20239                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
20240                }
20241                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
20242                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
20243                }
20244            }
20245
20246            next_offset += envelope_size;
20247            _next_ordinal_to_read += 1;
20248            if next_offset >= end_offset {
20249                return Ok(());
20250            }
20251
20252            // Decode unknown envelopes for gaps in ordinals.
20253            while _next_ordinal_to_read < 5 {
20254                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
20255                _next_ordinal_to_read += 1;
20256                next_offset += envelope_size;
20257            }
20258
20259            let next_out_of_line = decoder.next_out_of_line();
20260            let handles_before = decoder.remaining_handles();
20261            if let Some((inlined, num_bytes, num_handles)) =
20262                fidl::encoding::decode_envelope_header(decoder, next_offset)?
20263            {
20264                let member_inline_size =
20265                    <fidl::encoding::BoundedString<256> as fidl::encoding::TypeMarker>::inline_size(
20266                        decoder.context,
20267                    );
20268                if inlined != (member_inline_size <= 4) {
20269                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
20270                }
20271                let inner_offset;
20272                let mut inner_depth = depth.clone();
20273                if inlined {
20274                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
20275                    inner_offset = next_offset;
20276                } else {
20277                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
20278                    inner_depth.increment()?;
20279                }
20280                let val_ref = self
20281                    .stack_version
20282                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<256>, D));
20283                fidl::decode!(
20284                    fidl::encoding::BoundedString<256>,
20285                    D,
20286                    val_ref,
20287                    decoder,
20288                    inner_offset,
20289                    inner_depth
20290                )?;
20291                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
20292                {
20293                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
20294                }
20295                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
20296                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
20297                }
20298            }
20299
20300            next_offset += envelope_size;
20301            _next_ordinal_to_read += 1;
20302            if next_offset >= end_offset {
20303                return Ok(());
20304            }
20305
20306            // Decode unknown envelopes for gaps in ordinals.
20307            while _next_ordinal_to_read < 6 {
20308                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
20309                _next_ordinal_to_read += 1;
20310                next_offset += envelope_size;
20311            }
20312
20313            let next_out_of_line = decoder.next_out_of_line();
20314            let handles_before = decoder.remaining_handles();
20315            if let Some((inlined, num_bytes, num_handles)) =
20316                fidl::encoding::decode_envelope_header(decoder, next_offset)?
20317            {
20318                let member_inline_size =
20319                    <fidl::encoding::BoundedString<256> as fidl::encoding::TypeMarker>::inline_size(
20320                        decoder.context,
20321                    );
20322                if inlined != (member_inline_size <= 4) {
20323                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
20324                }
20325                let inner_offset;
20326                let mut inner_depth = depth.clone();
20327                if inlined {
20328                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
20329                    inner_offset = next_offset;
20330                } else {
20331                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
20332                    inner_depth.increment()?;
20333                }
20334                let val_ref = self
20335                    .rcp_version
20336                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<256>, D));
20337                fidl::decode!(
20338                    fidl::encoding::BoundedString<256>,
20339                    D,
20340                    val_ref,
20341                    decoder,
20342                    inner_offset,
20343                    inner_depth
20344                )?;
20345                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
20346                {
20347                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
20348                }
20349                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
20350                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
20351                }
20352            }
20353
20354            next_offset += envelope_size;
20355            _next_ordinal_to_read += 1;
20356            if next_offset >= end_offset {
20357                return Ok(());
20358            }
20359
20360            // Decode unknown envelopes for gaps in ordinals.
20361            while _next_ordinal_to_read < 7 {
20362                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
20363                _next_ordinal_to_read += 1;
20364                next_offset += envelope_size;
20365            }
20366
20367            let next_out_of_line = decoder.next_out_of_line();
20368            let handles_before = decoder.remaining_handles();
20369            if let Some((inlined, num_bytes, num_handles)) =
20370                fidl::encoding::decode_envelope_header(decoder, next_offset)?
20371            {
20372                let member_inline_size =
20373                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
20374                if inlined != (member_inline_size <= 4) {
20375                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
20376                }
20377                let inner_offset;
20378                let mut inner_depth = depth.clone();
20379                if inlined {
20380                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
20381                    inner_offset = next_offset;
20382                } else {
20383                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
20384                    inner_depth.increment()?;
20385                }
20386                let val_ref = self.thread_link_mode.get_or_insert_with(|| fidl::new_empty!(u8, D));
20387                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
20388                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
20389                {
20390                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
20391                }
20392                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
20393                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
20394                }
20395            }
20396
20397            next_offset += envelope_size;
20398            _next_ordinal_to_read += 1;
20399            if next_offset >= end_offset {
20400                return Ok(());
20401            }
20402
20403            // Decode unknown envelopes for gaps in ordinals.
20404            while _next_ordinal_to_read < 8 {
20405                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
20406                _next_ordinal_to_read += 1;
20407                next_offset += envelope_size;
20408            }
20409
20410            let next_out_of_line = decoder.next_out_of_line();
20411            let handles_before = decoder.remaining_handles();
20412            if let Some((inlined, num_bytes, num_handles)) =
20413                fidl::encoding::decode_envelope_header(decoder, next_offset)?
20414            {
20415                let member_inline_size =
20416                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
20417                if inlined != (member_inline_size <= 4) {
20418                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
20419                }
20420                let inner_offset;
20421                let mut inner_depth = depth.clone();
20422                if inlined {
20423                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
20424                    inner_offset = next_offset;
20425                } else {
20426                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
20427                    inner_depth.increment()?;
20428                }
20429                let val_ref = self.thread_router_id.get_or_insert_with(|| fidl::new_empty!(u8, D));
20430                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
20431                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
20432                {
20433                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
20434                }
20435                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
20436                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
20437                }
20438            }
20439
20440            next_offset += envelope_size;
20441            _next_ordinal_to_read += 1;
20442            if next_offset >= end_offset {
20443                return Ok(());
20444            }
20445
20446            // Decode unknown envelopes for gaps in ordinals.
20447            while _next_ordinal_to_read < 9 {
20448                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
20449                _next_ordinal_to_read += 1;
20450                next_offset += envelope_size;
20451            }
20452
20453            let next_out_of_line = decoder.next_out_of_line();
20454            let handles_before = decoder.remaining_handles();
20455            if let Some((inlined, num_bytes, num_handles)) =
20456                fidl::encoding::decode_envelope_header(decoder, next_offset)?
20457            {
20458                let member_inline_size =
20459                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
20460                if inlined != (member_inline_size <= 4) {
20461                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
20462                }
20463                let inner_offset;
20464                let mut inner_depth = depth.clone();
20465                if inlined {
20466                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
20467                    inner_offset = next_offset;
20468                } else {
20469                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
20470                    inner_depth.increment()?;
20471                }
20472                let val_ref = self.thread_rloc.get_or_insert_with(|| fidl::new_empty!(u16, D));
20473                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
20474                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
20475                {
20476                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
20477                }
20478                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
20479                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
20480                }
20481            }
20482
20483            next_offset += envelope_size;
20484            _next_ordinal_to_read += 1;
20485            if next_offset >= end_offset {
20486                return Ok(());
20487            }
20488
20489            // Decode unknown envelopes for gaps in ordinals.
20490            while _next_ordinal_to_read < 10 {
20491                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
20492                _next_ordinal_to_read += 1;
20493                next_offset += envelope_size;
20494            }
20495
20496            let next_out_of_line = decoder.next_out_of_line();
20497            let handles_before = decoder.remaining_handles();
20498            if let Some((inlined, num_bytes, num_handles)) =
20499                fidl::encoding::decode_envelope_header(decoder, next_offset)?
20500            {
20501                let member_inline_size =
20502                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
20503                if inlined != (member_inline_size <= 4) {
20504                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
20505                }
20506                let inner_offset;
20507                let mut inner_depth = depth.clone();
20508                if inlined {
20509                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
20510                    inner_offset = next_offset;
20511                } else {
20512                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
20513                    inner_depth.increment()?;
20514                }
20515                let val_ref =
20516                    self.thread_network_data_version.get_or_insert_with(|| fidl::new_empty!(u8, D));
20517                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
20518                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
20519                {
20520                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
20521                }
20522                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
20523                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
20524                }
20525            }
20526
20527            next_offset += envelope_size;
20528            _next_ordinal_to_read += 1;
20529            if next_offset >= end_offset {
20530                return Ok(());
20531            }
20532
20533            // Decode unknown envelopes for gaps in ordinals.
20534            while _next_ordinal_to_read < 11 {
20535                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
20536                _next_ordinal_to_read += 1;
20537                next_offset += envelope_size;
20538            }
20539
20540            let next_out_of_line = decoder.next_out_of_line();
20541            let handles_before = decoder.remaining_handles();
20542            if let Some((inlined, num_bytes, num_handles)) =
20543                fidl::encoding::decode_envelope_header(decoder, next_offset)?
20544            {
20545                let member_inline_size =
20546                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
20547                if inlined != (member_inline_size <= 4) {
20548                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
20549                }
20550                let inner_offset;
20551                let mut inner_depth = depth.clone();
20552                if inlined {
20553                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
20554                    inner_offset = next_offset;
20555                } else {
20556                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
20557                    inner_depth.increment()?;
20558                }
20559                let val_ref = self
20560                    .thread_stable_network_data_version
20561                    .get_or_insert_with(|| fidl::new_empty!(u8, D));
20562                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
20563                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
20564                {
20565                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
20566                }
20567                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
20568                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
20569                }
20570            }
20571
20572            next_offset += envelope_size;
20573            _next_ordinal_to_read += 1;
20574            if next_offset >= end_offset {
20575                return Ok(());
20576            }
20577
20578            // Decode unknown envelopes for gaps in ordinals.
20579            while _next_ordinal_to_read < 12 {
20580                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
20581                _next_ordinal_to_read += 1;
20582                next_offset += envelope_size;
20583            }
20584
20585            let next_out_of_line = decoder.next_out_of_line();
20586            let handles_before = decoder.remaining_handles();
20587            if let Some((inlined, num_bytes, num_handles)) =
20588                fidl::encoding::decode_envelope_header(decoder, next_offset)?
20589            {
20590                let member_inline_size =
20591                    <fidl::encoding::Vector<u8, 255> as fidl::encoding::TypeMarker>::inline_size(
20592                        decoder.context,
20593                    );
20594                if inlined != (member_inline_size <= 4) {
20595                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
20596                }
20597                let inner_offset;
20598                let mut inner_depth = depth.clone();
20599                if inlined {
20600                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
20601                    inner_offset = next_offset;
20602                } else {
20603                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
20604                    inner_depth.increment()?;
20605                }
20606                let val_ref = self
20607                    .thread_network_data
20608                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u8, 255>, D));
20609                fidl::decode!(fidl::encoding::Vector<u8, 255>, D, val_ref, decoder, inner_offset, inner_depth)?;
20610                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
20611                {
20612                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
20613                }
20614                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
20615                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
20616                }
20617            }
20618
20619            next_offset += envelope_size;
20620            _next_ordinal_to_read += 1;
20621            if next_offset >= end_offset {
20622                return Ok(());
20623            }
20624
20625            // Decode unknown envelopes for gaps in ordinals.
20626            while _next_ordinal_to_read < 13 {
20627                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
20628                _next_ordinal_to_read += 1;
20629                next_offset += envelope_size;
20630            }
20631
20632            let next_out_of_line = decoder.next_out_of_line();
20633            let handles_before = decoder.remaining_handles();
20634            if let Some((inlined, num_bytes, num_handles)) =
20635                fidl::encoding::decode_envelope_header(decoder, next_offset)?
20636            {
20637                let member_inline_size =
20638                    <fidl::encoding::Vector<u8, 255> as fidl::encoding::TypeMarker>::inline_size(
20639                        decoder.context,
20640                    );
20641                if inlined != (member_inline_size <= 4) {
20642                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
20643                }
20644                let inner_offset;
20645                let mut inner_depth = depth.clone();
20646                if inlined {
20647                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
20648                    inner_offset = next_offset;
20649                } else {
20650                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
20651                    inner_depth.increment()?;
20652                }
20653                let val_ref = self
20654                    .thread_stable_network_data
20655                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u8, 255>, D));
20656                fidl::decode!(fidl::encoding::Vector<u8, 255>, D, val_ref, decoder, inner_offset, inner_depth)?;
20657                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
20658                {
20659                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
20660                }
20661                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
20662                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
20663                }
20664            }
20665
20666            next_offset += envelope_size;
20667            _next_ordinal_to_read += 1;
20668            if next_offset >= end_offset {
20669                return Ok(());
20670            }
20671
20672            // Decode unknown envelopes for gaps in ordinals.
20673            while _next_ordinal_to_read < 14 {
20674                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
20675                _next_ordinal_to_read += 1;
20676                next_offset += envelope_size;
20677            }
20678
20679            let next_out_of_line = decoder.next_out_of_line();
20680            let handles_before = decoder.remaining_handles();
20681            if let Some((inlined, num_bytes, num_handles)) =
20682                fidl::encoding::decode_envelope_header(decoder, next_offset)?
20683            {
20684                let member_inline_size =
20685                    <BorderRoutingCounters as fidl::encoding::TypeMarker>::inline_size(
20686                        decoder.context,
20687                    );
20688                if inlined != (member_inline_size <= 4) {
20689                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
20690                }
20691                let inner_offset;
20692                let mut inner_depth = depth.clone();
20693                if inlined {
20694                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
20695                    inner_offset = next_offset;
20696                } else {
20697                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
20698                    inner_depth.increment()?;
20699                }
20700                let val_ref = self
20701                    .thread_border_routing_counters
20702                    .get_or_insert_with(|| fidl::new_empty!(BorderRoutingCounters, D));
20703                fidl::decode!(
20704                    BorderRoutingCounters,
20705                    D,
20706                    val_ref,
20707                    decoder,
20708                    inner_offset,
20709                    inner_depth
20710                )?;
20711                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
20712                {
20713                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
20714                }
20715                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
20716                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
20717                }
20718            }
20719
20720            next_offset += envelope_size;
20721            _next_ordinal_to_read += 1;
20722            if next_offset >= end_offset {
20723                return Ok(());
20724            }
20725
20726            // Decode unknown envelopes for gaps in ordinals.
20727            while _next_ordinal_to_read < 15 {
20728                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
20729                _next_ordinal_to_read += 1;
20730                next_offset += envelope_size;
20731            }
20732
20733            let next_out_of_line = decoder.next_out_of_line();
20734            let handles_before = decoder.remaining_handles();
20735            if let Some((inlined, num_bytes, num_handles)) =
20736                fidl::encoding::decode_envelope_header(decoder, next_offset)?
20737            {
20738                let member_inline_size =
20739                    <SrpServerInfo as fidl::encoding::TypeMarker>::inline_size(decoder.context);
20740                if inlined != (member_inline_size <= 4) {
20741                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
20742                }
20743                let inner_offset;
20744                let mut inner_depth = depth.clone();
20745                if inlined {
20746                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
20747                    inner_offset = next_offset;
20748                } else {
20749                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
20750                    inner_depth.increment()?;
20751                }
20752                let val_ref =
20753                    self.srp_server_info.get_or_insert_with(|| fidl::new_empty!(SrpServerInfo, D));
20754                fidl::decode!(SrpServerInfo, D, val_ref, decoder, inner_offset, inner_depth)?;
20755                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
20756                {
20757                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
20758                }
20759                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
20760                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
20761                }
20762            }
20763
20764            next_offset += envelope_size;
20765            _next_ordinal_to_read += 1;
20766            if next_offset >= end_offset {
20767                return Ok(());
20768            }
20769
20770            // Decode unknown envelopes for gaps in ordinals.
20771            while _next_ordinal_to_read < 16 {
20772                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
20773                _next_ordinal_to_read += 1;
20774                next_offset += envelope_size;
20775            }
20776
20777            let next_out_of_line = decoder.next_out_of_line();
20778            let handles_before = decoder.remaining_handles();
20779            if let Some((inlined, num_bytes, num_handles)) =
20780                fidl::encoding::decode_envelope_header(decoder, next_offset)?
20781            {
20782                let member_inline_size =
20783                    <DnssdCounters as fidl::encoding::TypeMarker>::inline_size(decoder.context);
20784                if inlined != (member_inline_size <= 4) {
20785                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
20786                }
20787                let inner_offset;
20788                let mut inner_depth = depth.clone();
20789                if inlined {
20790                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
20791                    inner_offset = next_offset;
20792                } else {
20793                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
20794                    inner_depth.increment()?;
20795                }
20796                let val_ref =
20797                    self.dnssd_counters.get_or_insert_with(|| fidl::new_empty!(DnssdCounters, D));
20798                fidl::decode!(DnssdCounters, D, val_ref, decoder, inner_offset, inner_depth)?;
20799                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
20800                {
20801                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
20802                }
20803                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
20804                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
20805                }
20806            }
20807
20808            next_offset += envelope_size;
20809            _next_ordinal_to_read += 1;
20810            if next_offset >= end_offset {
20811                return Ok(());
20812            }
20813
20814            // Decode unknown envelopes for gaps in ordinals.
20815            while _next_ordinal_to_read < 17 {
20816                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
20817                _next_ordinal_to_read += 1;
20818                next_offset += envelope_size;
20819            }
20820
20821            let next_out_of_line = decoder.next_out_of_line();
20822            let handles_before = decoder.remaining_handles();
20823            if let Some((inlined, num_bytes, num_handles)) =
20824                fidl::encoding::decode_envelope_header(decoder, next_offset)?
20825            {
20826                let member_inline_size =
20827                    <LeaderData as fidl::encoding::TypeMarker>::inline_size(decoder.context);
20828                if inlined != (member_inline_size <= 4) {
20829                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
20830                }
20831                let inner_offset;
20832                let mut inner_depth = depth.clone();
20833                if inlined {
20834                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
20835                    inner_offset = next_offset;
20836                } else {
20837                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
20838                    inner_depth.increment()?;
20839                }
20840                let val_ref =
20841                    self.leader_data.get_or_insert_with(|| fidl::new_empty!(LeaderData, D));
20842                fidl::decode!(LeaderData, D, val_ref, decoder, inner_offset, inner_depth)?;
20843                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
20844                {
20845                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
20846                }
20847                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
20848                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
20849                }
20850            }
20851
20852            next_offset += envelope_size;
20853            _next_ordinal_to_read += 1;
20854            if next_offset >= end_offset {
20855                return Ok(());
20856            }
20857
20858            // Decode unknown envelopes for gaps in ordinals.
20859            while _next_ordinal_to_read < 18 {
20860                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
20861                _next_ordinal_to_read += 1;
20862                next_offset += envelope_size;
20863            }
20864
20865            let next_out_of_line = decoder.next_out_of_line();
20866            let handles_before = decoder.remaining_handles();
20867            if let Some((inlined, num_bytes, num_handles)) =
20868                fidl::encoding::decode_envelope_header(decoder, next_offset)?
20869            {
20870                let member_inline_size =
20871                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
20872                if inlined != (member_inline_size <= 4) {
20873                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
20874                }
20875                let inner_offset;
20876                let mut inner_depth = depth.clone();
20877                if inlined {
20878                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
20879                    inner_offset = next_offset;
20880                } else {
20881                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
20882                    inner_depth.increment()?;
20883                }
20884                let val_ref = self.uptime.get_or_insert_with(|| fidl::new_empty!(i64, D));
20885                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
20886                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
20887                {
20888                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
20889                }
20890                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
20891                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
20892                }
20893            }
20894
20895            next_offset += envelope_size;
20896            _next_ordinal_to_read += 1;
20897            if next_offset >= end_offset {
20898                return Ok(());
20899            }
20900
20901            // Decode unknown envelopes for gaps in ordinals.
20902            while _next_ordinal_to_read < 19 {
20903                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
20904                _next_ordinal_to_read += 1;
20905                next_offset += envelope_size;
20906            }
20907
20908            let next_out_of_line = decoder.next_out_of_line();
20909            let handles_before = decoder.remaining_handles();
20910            if let Some((inlined, num_bytes, num_handles)) =
20911                fidl::encoding::decode_envelope_header(decoder, next_offset)?
20912            {
20913                let member_inline_size =
20914                    <Nat64Info as fidl::encoding::TypeMarker>::inline_size(decoder.context);
20915                if inlined != (member_inline_size <= 4) {
20916                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
20917                }
20918                let inner_offset;
20919                let mut inner_depth = depth.clone();
20920                if inlined {
20921                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
20922                    inner_offset = next_offset;
20923                } else {
20924                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
20925                    inner_depth.increment()?;
20926                }
20927                let val_ref = self.nat64_info.get_or_insert_with(|| fidl::new_empty!(Nat64Info, D));
20928                fidl::decode!(Nat64Info, D, val_ref, decoder, inner_offset, inner_depth)?;
20929                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
20930                {
20931                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
20932                }
20933                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
20934                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
20935                }
20936            }
20937
20938            next_offset += envelope_size;
20939            _next_ordinal_to_read += 1;
20940            if next_offset >= end_offset {
20941                return Ok(());
20942            }
20943
20944            // Decode unknown envelopes for gaps in ordinals.
20945            while _next_ordinal_to_read < 20 {
20946                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
20947                _next_ordinal_to_read += 1;
20948                next_offset += envelope_size;
20949            }
20950
20951            let next_out_of_line = decoder.next_out_of_line();
20952            let handles_before = decoder.remaining_handles();
20953            if let Some((inlined, num_bytes, num_handles)) =
20954                fidl::encoding::decode_envelope_header(decoder, next_offset)?
20955            {
20956                let member_inline_size =
20957                    <TrelCounters as fidl::encoding::TypeMarker>::inline_size(decoder.context);
20958                if inlined != (member_inline_size <= 4) {
20959                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
20960                }
20961                let inner_offset;
20962                let mut inner_depth = depth.clone();
20963                if inlined {
20964                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
20965                    inner_offset = next_offset;
20966                } else {
20967                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
20968                    inner_depth.increment()?;
20969                }
20970                let val_ref =
20971                    self.trel_counters.get_or_insert_with(|| fidl::new_empty!(TrelCounters, D));
20972                fidl::decode!(TrelCounters, D, val_ref, decoder, inner_offset, inner_depth)?;
20973                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
20974                {
20975                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
20976                }
20977                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
20978                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
20979                }
20980            }
20981
20982            next_offset += envelope_size;
20983            _next_ordinal_to_read += 1;
20984            if next_offset >= end_offset {
20985                return Ok(());
20986            }
20987
20988            // Decode unknown envelopes for gaps in ordinals.
20989            while _next_ordinal_to_read < 21 {
20990                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
20991                _next_ordinal_to_read += 1;
20992                next_offset += envelope_size;
20993            }
20994
20995            let next_out_of_line = decoder.next_out_of_line();
20996            let handles_before = decoder.remaining_handles();
20997            if let Some((inlined, num_bytes, num_handles)) =
20998                fidl::encoding::decode_envelope_header(decoder, next_offset)?
20999            {
21000                let member_inline_size =
21001                    <TrelPeersInfo as fidl::encoding::TypeMarker>::inline_size(decoder.context);
21002                if inlined != (member_inline_size <= 4) {
21003                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
21004                }
21005                let inner_offset;
21006                let mut inner_depth = depth.clone();
21007                if inlined {
21008                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
21009                    inner_offset = next_offset;
21010                } else {
21011                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
21012                    inner_depth.increment()?;
21013                }
21014                let val_ref =
21015                    self.trel_peers_info.get_or_insert_with(|| fidl::new_empty!(TrelPeersInfo, D));
21016                fidl::decode!(TrelPeersInfo, D, val_ref, decoder, inner_offset, inner_depth)?;
21017                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
21018                {
21019                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
21020                }
21021                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
21022                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
21023                }
21024            }
21025
21026            next_offset += envelope_size;
21027            _next_ordinal_to_read += 1;
21028            if next_offset >= end_offset {
21029                return Ok(());
21030            }
21031
21032            // Decode unknown envelopes for gaps in ordinals.
21033            while _next_ordinal_to_read < 22 {
21034                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
21035                _next_ordinal_to_read += 1;
21036                next_offset += envelope_size;
21037            }
21038
21039            let next_out_of_line = decoder.next_out_of_line();
21040            let handles_before = decoder.remaining_handles();
21041            if let Some((inlined, num_bytes, num_handles)) =
21042                fidl::encoding::decode_envelope_header(decoder, next_offset)?
21043            {
21044                let member_inline_size =
21045                    <UpstreamDnsInfo as fidl::encoding::TypeMarker>::inline_size(decoder.context);
21046                if inlined != (member_inline_size <= 4) {
21047                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
21048                }
21049                let inner_offset;
21050                let mut inner_depth = depth.clone();
21051                if inlined {
21052                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
21053                    inner_offset = next_offset;
21054                } else {
21055                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
21056                    inner_depth.increment()?;
21057                }
21058                let val_ref = self
21059                    .upstream_dns_info
21060                    .get_or_insert_with(|| fidl::new_empty!(UpstreamDnsInfo, D));
21061                fidl::decode!(UpstreamDnsInfo, D, val_ref, decoder, inner_offset, inner_depth)?;
21062                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
21063                {
21064                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
21065                }
21066                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
21067                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
21068                }
21069            }
21070
21071            next_offset += envelope_size;
21072            _next_ordinal_to_read += 1;
21073            if next_offset >= end_offset {
21074                return Ok(());
21075            }
21076
21077            // Decode unknown envelopes for gaps in ordinals.
21078            while _next_ordinal_to_read < 23 {
21079                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
21080                _next_ordinal_to_read += 1;
21081                next_offset += envelope_size;
21082            }
21083
21084            let next_out_of_line = decoder.next_out_of_line();
21085            let handles_before = decoder.remaining_handles();
21086            if let Some((inlined, num_bytes, num_handles)) =
21087                fidl::encoding::decode_envelope_header(decoder, next_offset)?
21088            {
21089                let member_inline_size =
21090                    <Dhcp6PdInfo as fidl::encoding::TypeMarker>::inline_size(decoder.context);
21091                if inlined != (member_inline_size <= 4) {
21092                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
21093                }
21094                let inner_offset;
21095                let mut inner_depth = depth.clone();
21096                if inlined {
21097                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
21098                    inner_offset = next_offset;
21099                } else {
21100                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
21101                    inner_depth.increment()?;
21102                }
21103                let val_ref =
21104                    self.dhcp6pd_info.get_or_insert_with(|| fidl::new_empty!(Dhcp6PdInfo, D));
21105                fidl::decode!(Dhcp6PdInfo, D, val_ref, decoder, inner_offset, inner_depth)?;
21106                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
21107                {
21108                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
21109                }
21110                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
21111                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
21112                }
21113            }
21114
21115            next_offset += envelope_size;
21116            _next_ordinal_to_read += 1;
21117            if next_offset >= end_offset {
21118                return Ok(());
21119            }
21120
21121            // Decode unknown envelopes for gaps in ordinals.
21122            while _next_ordinal_to_read < 24 {
21123                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
21124                _next_ordinal_to_read += 1;
21125                next_offset += envelope_size;
21126            }
21127
21128            let next_out_of_line = decoder.next_out_of_line();
21129            let handles_before = decoder.remaining_handles();
21130            if let Some((inlined, num_bytes, num_handles)) =
21131                fidl::encoding::decode_envelope_header(decoder, next_offset)?
21132            {
21133                let member_inline_size = <fidl::encoding::Vector<LinkMetricsEntry, 64> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
21134                if inlined != (member_inline_size <= 4) {
21135                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
21136                }
21137                let inner_offset;
21138                let mut inner_depth = depth.clone();
21139                if inlined {
21140                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
21141                    inner_offset = next_offset;
21142                } else {
21143                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
21144                    inner_depth.increment()?;
21145                }
21146                let val_ref = self.link_metrics_entries.get_or_insert_with(
21147                    || fidl::new_empty!(fidl::encoding::Vector<LinkMetricsEntry, 64>, D),
21148                );
21149                fidl::decode!(fidl::encoding::Vector<LinkMetricsEntry, 64>, D, val_ref, decoder, inner_offset, inner_depth)?;
21150                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
21151                {
21152                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
21153                }
21154                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
21155                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
21156                }
21157            }
21158
21159            next_offset += envelope_size;
21160            _next_ordinal_to_read += 1;
21161            if next_offset >= end_offset {
21162                return Ok(());
21163            }
21164
21165            // Decode unknown envelopes for gaps in ordinals.
21166            while _next_ordinal_to_read < 25 {
21167                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
21168                _next_ordinal_to_read += 1;
21169                next_offset += envelope_size;
21170            }
21171
21172            let next_out_of_line = decoder.next_out_of_line();
21173            let handles_before = decoder.remaining_handles();
21174            if let Some((inlined, num_bytes, num_handles)) =
21175                fidl::encoding::decode_envelope_header(decoder, next_offset)?
21176            {
21177                let member_inline_size = <fidl_fuchsia_lowpan_device__common::BorderAgentCounters as fidl::encoding::TypeMarker>::inline_size(decoder.context);
21178                if inlined != (member_inline_size <= 4) {
21179                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
21180                }
21181                let inner_offset;
21182                let mut inner_depth = depth.clone();
21183                if inlined {
21184                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
21185                    inner_offset = next_offset;
21186                } else {
21187                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
21188                    inner_depth.increment()?;
21189                }
21190                let val_ref = self.border_agent_counters.get_or_insert_with(|| {
21191                    fidl::new_empty!(fidl_fuchsia_lowpan_device__common::BorderAgentCounters, D)
21192                });
21193                fidl::decode!(
21194                    fidl_fuchsia_lowpan_device__common::BorderAgentCounters,
21195                    D,
21196                    val_ref,
21197                    decoder,
21198                    inner_offset,
21199                    inner_depth
21200                )?;
21201                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
21202                {
21203                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
21204                }
21205                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
21206                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
21207                }
21208            }
21209
21210            next_offset += envelope_size;
21211            _next_ordinal_to_read += 1;
21212            if next_offset >= end_offset {
21213                return Ok(());
21214            }
21215
21216            // Decode unknown envelopes for gaps in ordinals.
21217            while _next_ordinal_to_read < 26 {
21218                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
21219                _next_ordinal_to_read += 1;
21220                next_offset += envelope_size;
21221            }
21222
21223            let next_out_of_line = decoder.next_out_of_line();
21224            let handles_before = decoder.remaining_handles();
21225            if let Some((inlined, num_bytes, num_handles)) =
21226                fidl::encoding::decode_envelope_header(decoder, next_offset)?
21227            {
21228                let member_inline_size =
21229                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
21230                if inlined != (member_inline_size <= 4) {
21231                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
21232                }
21233                let inner_offset;
21234                let mut inner_depth = depth.clone();
21235                if inlined {
21236                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
21237                    inner_offset = next_offset;
21238                } else {
21239                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
21240                    inner_depth.increment()?;
21241                }
21242                let val_ref =
21243                    self.multi_ail_detected.get_or_insert_with(|| fidl::new_empty!(bool, D));
21244                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
21245                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
21246                {
21247                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
21248                }
21249                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
21250                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
21251                }
21252            }
21253
21254            next_offset += envelope_size;
21255            _next_ordinal_to_read += 1;
21256            if next_offset >= end_offset {
21257                return Ok(());
21258            }
21259
21260            // Decode unknown envelopes for gaps in ordinals.
21261            while _next_ordinal_to_read < 27 {
21262                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
21263                _next_ordinal_to_read += 1;
21264                next_offset += envelope_size;
21265            }
21266
21267            let next_out_of_line = decoder.next_out_of_line();
21268            let handles_before = decoder.remaining_handles();
21269            if let Some((inlined, num_bytes, num_handles)) =
21270                fidl::encoding::decode_envelope_header(decoder, next_offset)?
21271            {
21272                let member_inline_size =
21273                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
21274                if inlined != (member_inline_size <= 4) {
21275                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
21276                }
21277                let inner_offset;
21278                let mut inner_depth = depth.clone();
21279                if inlined {
21280                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
21281                    inner_offset = next_offset;
21282                } else {
21283                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
21284                    inner_depth.increment()?;
21285                }
21286                let val_ref = self.extended_pan_id.get_or_insert_with(|| fidl::new_empty!(u64, D));
21287                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
21288                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
21289                {
21290                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
21291                }
21292                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
21293                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
21294                }
21295            }
21296
21297            next_offset += envelope_size;
21298            _next_ordinal_to_read += 1;
21299            if next_offset >= end_offset {
21300                return Ok(());
21301            }
21302
21303            // Decode unknown envelopes for gaps in ordinals.
21304            while _next_ordinal_to_read < 28 {
21305                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
21306                _next_ordinal_to_read += 1;
21307                next_offset += envelope_size;
21308            }
21309
21310            let next_out_of_line = decoder.next_out_of_line();
21311            let handles_before = decoder.remaining_handles();
21312            if let Some((inlined, num_bytes, num_handles)) =
21313                fidl::encoding::decode_envelope_header(decoder, next_offset)?
21314            {
21315                let member_inline_size = <fidl::encoding::Vector<BorderRoutingPeer, 64> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
21316                if inlined != (member_inline_size <= 4) {
21317                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
21318                }
21319                let inner_offset;
21320                let mut inner_depth = depth.clone();
21321                if inlined {
21322                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
21323                    inner_offset = next_offset;
21324                } else {
21325                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
21326                    inner_depth.increment()?;
21327                }
21328                let val_ref = self.border_routing_peers.get_or_insert_with(
21329                    || fidl::new_empty!(fidl::encoding::Vector<BorderRoutingPeer, 64>, D),
21330                );
21331                fidl::decode!(fidl::encoding::Vector<BorderRoutingPeer, 64>, D, val_ref, decoder, inner_offset, inner_depth)?;
21332                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
21333                {
21334                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
21335                }
21336                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
21337                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
21338                }
21339            }
21340
21341            next_offset += envelope_size;
21342            _next_ordinal_to_read += 1;
21343            if next_offset >= end_offset {
21344                return Ok(());
21345            }
21346
21347            // Decode unknown envelopes for gaps in ordinals.
21348            while _next_ordinal_to_read < 29 {
21349                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
21350                _next_ordinal_to_read += 1;
21351                next_offset += envelope_size;
21352            }
21353
21354            let next_out_of_line = decoder.next_out_of_line();
21355            let handles_before = decoder.remaining_handles();
21356            if let Some((inlined, num_bytes, num_handles)) =
21357                fidl::encoding::decode_envelope_header(decoder, next_offset)?
21358            {
21359                let member_inline_size = <fidl::encoding::Vector<BorderRoutingRouter, 64> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
21360                if inlined != (member_inline_size <= 4) {
21361                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
21362                }
21363                let inner_offset;
21364                let mut inner_depth = depth.clone();
21365                if inlined {
21366                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
21367                    inner_offset = next_offset;
21368                } else {
21369                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
21370                    inner_depth.increment()?;
21371                }
21372                let val_ref = self.border_routing_routers.get_or_insert_with(
21373                    || fidl::new_empty!(fidl::encoding::Vector<BorderRoutingRouter, 64>, D),
21374                );
21375                fidl::decode!(fidl::encoding::Vector<BorderRoutingRouter, 64>, D, val_ref, decoder, inner_offset, inner_depth)?;
21376                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
21377                {
21378                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
21379                }
21380                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
21381                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
21382                }
21383            }
21384
21385            next_offset += envelope_size;
21386            _next_ordinal_to_read += 1;
21387            if next_offset >= end_offset {
21388                return Ok(());
21389            }
21390
21391            // Decode unknown envelopes for gaps in ordinals.
21392            while _next_ordinal_to_read < 30 {
21393                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
21394                _next_ordinal_to_read += 1;
21395                next_offset += envelope_size;
21396            }
21397
21398            let next_out_of_line = decoder.next_out_of_line();
21399            let handles_before = decoder.remaining_handles();
21400            if let Some((inlined, num_bytes, num_handles)) =
21401                fidl::encoding::decode_envelope_header(decoder, next_offset)?
21402            {
21403                let member_inline_size =
21404                    <OperationalDataset as fidl::encoding::TypeMarker>::inline_size(
21405                        decoder.context,
21406                    );
21407                if inlined != (member_inline_size <= 4) {
21408                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
21409                }
21410                let inner_offset;
21411                let mut inner_depth = depth.clone();
21412                if inlined {
21413                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
21414                    inner_offset = next_offset;
21415                } else {
21416                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
21417                    inner_depth.increment()?;
21418                }
21419                let val_ref = self
21420                    .active_dataset
21421                    .get_or_insert_with(|| fidl::new_empty!(OperationalDataset, D));
21422                fidl::decode!(OperationalDataset, D, val_ref, decoder, inner_offset, inner_depth)?;
21423                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
21424                {
21425                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
21426                }
21427                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
21428                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
21429                }
21430            }
21431
21432            next_offset += envelope_size;
21433            _next_ordinal_to_read += 1;
21434            if next_offset >= end_offset {
21435                return Ok(());
21436            }
21437
21438            // Decode unknown envelopes for gaps in ordinals.
21439            while _next_ordinal_to_read < 31 {
21440                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
21441                _next_ordinal_to_read += 1;
21442                next_offset += envelope_size;
21443            }
21444
21445            let next_out_of_line = decoder.next_out_of_line();
21446            let handles_before = decoder.remaining_handles();
21447            if let Some((inlined, num_bytes, num_handles)) =
21448                fidl::encoding::decode_envelope_header(decoder, next_offset)?
21449            {
21450                let member_inline_size = <fidl::encoding::Vector<MultiRadioNeighborInfo, 64> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
21451                if inlined != (member_inline_size <= 4) {
21452                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
21453                }
21454                let inner_offset;
21455                let mut inner_depth = depth.clone();
21456                if inlined {
21457                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
21458                    inner_offset = next_offset;
21459                } else {
21460                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
21461                    inner_depth.increment()?;
21462                }
21463                let val_ref = self.multiradio_neighbor_info.get_or_insert_with(
21464                    || fidl::new_empty!(fidl::encoding::Vector<MultiRadioNeighborInfo, 64>, D),
21465                );
21466                fidl::decode!(fidl::encoding::Vector<MultiRadioNeighborInfo, 64>, D, val_ref, decoder, inner_offset, inner_depth)?;
21467                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
21468                {
21469                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
21470                }
21471                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
21472                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
21473                }
21474            }
21475
21476            next_offset += envelope_size;
21477            _next_ordinal_to_read += 1;
21478            if next_offset >= end_offset {
21479                return Ok(());
21480            }
21481
21482            // Decode unknown envelopes for gaps in ordinals.
21483            while _next_ordinal_to_read < 32 {
21484                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
21485                _next_ordinal_to_read += 1;
21486                next_offset += envelope_size;
21487            }
21488
21489            let next_out_of_line = decoder.next_out_of_line();
21490            let handles_before = decoder.remaining_handles();
21491            if let Some((inlined, num_bytes, num_handles)) =
21492                fidl::encoding::decode_envelope_header(decoder, next_offset)?
21493            {
21494                let member_inline_size = <fidl::encoding::Vector<RouterInfo, 64> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
21495                if inlined != (member_inline_size <= 4) {
21496                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
21497                }
21498                let inner_offset;
21499                let mut inner_depth = depth.clone();
21500                if inlined {
21501                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
21502                    inner_offset = next_offset;
21503                } else {
21504                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
21505                    inner_depth.increment()?;
21506                }
21507                let val_ref = self.router_info.get_or_insert_with(
21508                    || fidl::new_empty!(fidl::encoding::Vector<RouterInfo, 64>, D),
21509                );
21510                fidl::decode!(fidl::encoding::Vector<RouterInfo, 64>, D, val_ref, decoder, inner_offset, inner_depth)?;
21511                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
21512                {
21513                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
21514                }
21515                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
21516                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
21517                }
21518            }
21519
21520            next_offset += envelope_size;
21521
21522            // Decode the remaining unknown envelopes.
21523            while next_offset < end_offset {
21524                _next_ordinal_to_read += 1;
21525                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
21526                next_offset += envelope_size;
21527            }
21528
21529            Ok(())
21530        }
21531    }
21532
21533    impl TrelCounters {
21534        #[inline(always)]
21535        fn max_ordinal_present(&self) -> u64 {
21536            if let Some(_) = self.tx_packets {
21537                return 5;
21538            }
21539            if let Some(_) = self.tx_failure {
21540                return 4;
21541            }
21542            if let Some(_) = self.tx_bytes {
21543                return 3;
21544            }
21545            if let Some(_) = self.rx_packets {
21546                return 2;
21547            }
21548            if let Some(_) = self.rx_bytes {
21549                return 1;
21550            }
21551            0
21552        }
21553    }
21554
21555    impl fidl::encoding::ValueTypeMarker for TrelCounters {
21556        type Borrowed<'a> = &'a Self;
21557        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
21558            value
21559        }
21560    }
21561
21562    unsafe impl fidl::encoding::TypeMarker for TrelCounters {
21563        type Owned = Self;
21564
21565        #[inline(always)]
21566        fn inline_align(_context: fidl::encoding::Context) -> usize {
21567            8
21568        }
21569
21570        #[inline(always)]
21571        fn inline_size(_context: fidl::encoding::Context) -> usize {
21572            16
21573        }
21574    }
21575
21576    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<TrelCounters, D>
21577        for &TrelCounters
21578    {
21579        unsafe fn encode(
21580            self,
21581            encoder: &mut fidl::encoding::Encoder<'_, D>,
21582            offset: usize,
21583            mut depth: fidl::encoding::Depth,
21584        ) -> fidl::Result<()> {
21585            encoder.debug_check_bounds::<TrelCounters>(offset);
21586            // Vector header
21587            let max_ordinal: u64 = self.max_ordinal_present();
21588            encoder.write_num(max_ordinal, offset);
21589            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
21590            // Calling encoder.out_of_line_offset(0) is not allowed.
21591            if max_ordinal == 0 {
21592                return Ok(());
21593            }
21594            depth.increment()?;
21595            let envelope_size = 8;
21596            let bytes_len = max_ordinal as usize * envelope_size;
21597            #[allow(unused_variables)]
21598            let offset = encoder.out_of_line_offset(bytes_len);
21599            let mut _prev_end_offset: usize = 0;
21600            if 1 > max_ordinal {
21601                return Ok(());
21602            }
21603
21604            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
21605            // are envelope_size bytes.
21606            let cur_offset: usize = (1 - 1) * envelope_size;
21607
21608            // Zero reserved fields.
21609            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
21610
21611            // Safety:
21612            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
21613            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
21614            //   envelope_size bytes, there is always sufficient room.
21615            fidl::encoding::encode_in_envelope_optional::<u64, D>(
21616                self.rx_bytes.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
21617                encoder,
21618                offset + cur_offset,
21619                depth,
21620            )?;
21621
21622            _prev_end_offset = cur_offset + envelope_size;
21623            if 2 > max_ordinal {
21624                return Ok(());
21625            }
21626
21627            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
21628            // are envelope_size bytes.
21629            let cur_offset: usize = (2 - 1) * envelope_size;
21630
21631            // Zero reserved fields.
21632            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
21633
21634            // Safety:
21635            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
21636            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
21637            //   envelope_size bytes, there is always sufficient room.
21638            fidl::encoding::encode_in_envelope_optional::<u64, D>(
21639                self.rx_packets.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
21640                encoder,
21641                offset + cur_offset,
21642                depth,
21643            )?;
21644
21645            _prev_end_offset = cur_offset + envelope_size;
21646            if 3 > max_ordinal {
21647                return Ok(());
21648            }
21649
21650            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
21651            // are envelope_size bytes.
21652            let cur_offset: usize = (3 - 1) * envelope_size;
21653
21654            // Zero reserved fields.
21655            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
21656
21657            // Safety:
21658            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
21659            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
21660            //   envelope_size bytes, there is always sufficient room.
21661            fidl::encoding::encode_in_envelope_optional::<u64, D>(
21662                self.tx_bytes.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
21663                encoder,
21664                offset + cur_offset,
21665                depth,
21666            )?;
21667
21668            _prev_end_offset = cur_offset + envelope_size;
21669            if 4 > max_ordinal {
21670                return Ok(());
21671            }
21672
21673            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
21674            // are envelope_size bytes.
21675            let cur_offset: usize = (4 - 1) * envelope_size;
21676
21677            // Zero reserved fields.
21678            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
21679
21680            // Safety:
21681            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
21682            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
21683            //   envelope_size bytes, there is always sufficient room.
21684            fidl::encoding::encode_in_envelope_optional::<u64, D>(
21685                self.tx_failure.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
21686                encoder,
21687                offset + cur_offset,
21688                depth,
21689            )?;
21690
21691            _prev_end_offset = cur_offset + envelope_size;
21692            if 5 > max_ordinal {
21693                return Ok(());
21694            }
21695
21696            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
21697            // are envelope_size bytes.
21698            let cur_offset: usize = (5 - 1) * envelope_size;
21699
21700            // Zero reserved fields.
21701            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
21702
21703            // Safety:
21704            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
21705            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
21706            //   envelope_size bytes, there is always sufficient room.
21707            fidl::encoding::encode_in_envelope_optional::<u64, D>(
21708                self.tx_packets.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
21709                encoder,
21710                offset + cur_offset,
21711                depth,
21712            )?;
21713
21714            _prev_end_offset = cur_offset + envelope_size;
21715
21716            Ok(())
21717        }
21718    }
21719
21720    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for TrelCounters {
21721        #[inline(always)]
21722        fn new_empty() -> Self {
21723            Self::default()
21724        }
21725
21726        unsafe fn decode(
21727            &mut self,
21728            decoder: &mut fidl::encoding::Decoder<'_, D>,
21729            offset: usize,
21730            mut depth: fidl::encoding::Depth,
21731        ) -> fidl::Result<()> {
21732            decoder.debug_check_bounds::<Self>(offset);
21733            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
21734                None => return Err(fidl::Error::NotNullable),
21735                Some(len) => len,
21736            };
21737            // Calling decoder.out_of_line_offset(0) is not allowed.
21738            if len == 0 {
21739                return Ok(());
21740            };
21741            depth.increment()?;
21742            let envelope_size = 8;
21743            let bytes_len = len * envelope_size;
21744            let offset = decoder.out_of_line_offset(bytes_len)?;
21745            // Decode the envelope for each type.
21746            let mut _next_ordinal_to_read = 0;
21747            let mut next_offset = offset;
21748            let end_offset = offset + bytes_len;
21749            _next_ordinal_to_read += 1;
21750            if next_offset >= end_offset {
21751                return Ok(());
21752            }
21753
21754            // Decode unknown envelopes for gaps in ordinals.
21755            while _next_ordinal_to_read < 1 {
21756                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
21757                _next_ordinal_to_read += 1;
21758                next_offset += envelope_size;
21759            }
21760
21761            let next_out_of_line = decoder.next_out_of_line();
21762            let handles_before = decoder.remaining_handles();
21763            if let Some((inlined, num_bytes, num_handles)) =
21764                fidl::encoding::decode_envelope_header(decoder, next_offset)?
21765            {
21766                let member_inline_size =
21767                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
21768                if inlined != (member_inline_size <= 4) {
21769                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
21770                }
21771                let inner_offset;
21772                let mut inner_depth = depth.clone();
21773                if inlined {
21774                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
21775                    inner_offset = next_offset;
21776                } else {
21777                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
21778                    inner_depth.increment()?;
21779                }
21780                let val_ref = self.rx_bytes.get_or_insert_with(|| fidl::new_empty!(u64, D));
21781                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
21782                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
21783                {
21784                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
21785                }
21786                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
21787                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
21788                }
21789            }
21790
21791            next_offset += envelope_size;
21792            _next_ordinal_to_read += 1;
21793            if next_offset >= end_offset {
21794                return Ok(());
21795            }
21796
21797            // Decode unknown envelopes for gaps in ordinals.
21798            while _next_ordinal_to_read < 2 {
21799                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
21800                _next_ordinal_to_read += 1;
21801                next_offset += envelope_size;
21802            }
21803
21804            let next_out_of_line = decoder.next_out_of_line();
21805            let handles_before = decoder.remaining_handles();
21806            if let Some((inlined, num_bytes, num_handles)) =
21807                fidl::encoding::decode_envelope_header(decoder, next_offset)?
21808            {
21809                let member_inline_size =
21810                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
21811                if inlined != (member_inline_size <= 4) {
21812                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
21813                }
21814                let inner_offset;
21815                let mut inner_depth = depth.clone();
21816                if inlined {
21817                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
21818                    inner_offset = next_offset;
21819                } else {
21820                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
21821                    inner_depth.increment()?;
21822                }
21823                let val_ref = self.rx_packets.get_or_insert_with(|| fidl::new_empty!(u64, D));
21824                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
21825                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
21826                {
21827                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
21828                }
21829                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
21830                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
21831                }
21832            }
21833
21834            next_offset += envelope_size;
21835            _next_ordinal_to_read += 1;
21836            if next_offset >= end_offset {
21837                return Ok(());
21838            }
21839
21840            // Decode unknown envelopes for gaps in ordinals.
21841            while _next_ordinal_to_read < 3 {
21842                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
21843                _next_ordinal_to_read += 1;
21844                next_offset += envelope_size;
21845            }
21846
21847            let next_out_of_line = decoder.next_out_of_line();
21848            let handles_before = decoder.remaining_handles();
21849            if let Some((inlined, num_bytes, num_handles)) =
21850                fidl::encoding::decode_envelope_header(decoder, next_offset)?
21851            {
21852                let member_inline_size =
21853                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
21854                if inlined != (member_inline_size <= 4) {
21855                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
21856                }
21857                let inner_offset;
21858                let mut inner_depth = depth.clone();
21859                if inlined {
21860                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
21861                    inner_offset = next_offset;
21862                } else {
21863                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
21864                    inner_depth.increment()?;
21865                }
21866                let val_ref = self.tx_bytes.get_or_insert_with(|| fidl::new_empty!(u64, D));
21867                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
21868                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
21869                {
21870                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
21871                }
21872                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
21873                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
21874                }
21875            }
21876
21877            next_offset += envelope_size;
21878            _next_ordinal_to_read += 1;
21879            if next_offset >= end_offset {
21880                return Ok(());
21881            }
21882
21883            // Decode unknown envelopes for gaps in ordinals.
21884            while _next_ordinal_to_read < 4 {
21885                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
21886                _next_ordinal_to_read += 1;
21887                next_offset += envelope_size;
21888            }
21889
21890            let next_out_of_line = decoder.next_out_of_line();
21891            let handles_before = decoder.remaining_handles();
21892            if let Some((inlined, num_bytes, num_handles)) =
21893                fidl::encoding::decode_envelope_header(decoder, next_offset)?
21894            {
21895                let member_inline_size =
21896                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
21897                if inlined != (member_inline_size <= 4) {
21898                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
21899                }
21900                let inner_offset;
21901                let mut inner_depth = depth.clone();
21902                if inlined {
21903                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
21904                    inner_offset = next_offset;
21905                } else {
21906                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
21907                    inner_depth.increment()?;
21908                }
21909                let val_ref = self.tx_failure.get_or_insert_with(|| fidl::new_empty!(u64, D));
21910                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
21911                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
21912                {
21913                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
21914                }
21915                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
21916                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
21917                }
21918            }
21919
21920            next_offset += envelope_size;
21921            _next_ordinal_to_read += 1;
21922            if next_offset >= end_offset {
21923                return Ok(());
21924            }
21925
21926            // Decode unknown envelopes for gaps in ordinals.
21927            while _next_ordinal_to_read < 5 {
21928                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
21929                _next_ordinal_to_read += 1;
21930                next_offset += envelope_size;
21931            }
21932
21933            let next_out_of_line = decoder.next_out_of_line();
21934            let handles_before = decoder.remaining_handles();
21935            if let Some((inlined, num_bytes, num_handles)) =
21936                fidl::encoding::decode_envelope_header(decoder, next_offset)?
21937            {
21938                let member_inline_size =
21939                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
21940                if inlined != (member_inline_size <= 4) {
21941                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
21942                }
21943                let inner_offset;
21944                let mut inner_depth = depth.clone();
21945                if inlined {
21946                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
21947                    inner_offset = next_offset;
21948                } else {
21949                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
21950                    inner_depth.increment()?;
21951                }
21952                let val_ref = self.tx_packets.get_or_insert_with(|| fidl::new_empty!(u64, D));
21953                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
21954                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
21955                {
21956                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
21957                }
21958                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
21959                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
21960                }
21961            }
21962
21963            next_offset += envelope_size;
21964
21965            // Decode the remaining unknown envelopes.
21966            while next_offset < end_offset {
21967                _next_ordinal_to_read += 1;
21968                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
21969                next_offset += envelope_size;
21970            }
21971
21972            Ok(())
21973        }
21974    }
21975
21976    impl TrelPeersInfo {
21977        #[inline(always)]
21978        fn max_ordinal_present(&self) -> u64 {
21979            if let Some(_) = self.num_trel_peers {
21980                return 1;
21981            }
21982            0
21983        }
21984    }
21985
21986    impl fidl::encoding::ValueTypeMarker for TrelPeersInfo {
21987        type Borrowed<'a> = &'a Self;
21988        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
21989            value
21990        }
21991    }
21992
21993    unsafe impl fidl::encoding::TypeMarker for TrelPeersInfo {
21994        type Owned = Self;
21995
21996        #[inline(always)]
21997        fn inline_align(_context: fidl::encoding::Context) -> usize {
21998            8
21999        }
22000
22001        #[inline(always)]
22002        fn inline_size(_context: fidl::encoding::Context) -> usize {
22003            16
22004        }
22005    }
22006
22007    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<TrelPeersInfo, D>
22008        for &TrelPeersInfo
22009    {
22010        unsafe fn encode(
22011            self,
22012            encoder: &mut fidl::encoding::Encoder<'_, D>,
22013            offset: usize,
22014            mut depth: fidl::encoding::Depth,
22015        ) -> fidl::Result<()> {
22016            encoder.debug_check_bounds::<TrelPeersInfo>(offset);
22017            // Vector header
22018            let max_ordinal: u64 = self.max_ordinal_present();
22019            encoder.write_num(max_ordinal, offset);
22020            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
22021            // Calling encoder.out_of_line_offset(0) is not allowed.
22022            if max_ordinal == 0 {
22023                return Ok(());
22024            }
22025            depth.increment()?;
22026            let envelope_size = 8;
22027            let bytes_len = max_ordinal as usize * envelope_size;
22028            #[allow(unused_variables)]
22029            let offset = encoder.out_of_line_offset(bytes_len);
22030            let mut _prev_end_offset: usize = 0;
22031            if 1 > max_ordinal {
22032                return Ok(());
22033            }
22034
22035            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
22036            // are envelope_size bytes.
22037            let cur_offset: usize = (1 - 1) * envelope_size;
22038
22039            // Zero reserved fields.
22040            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
22041
22042            // Safety:
22043            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
22044            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
22045            //   envelope_size bytes, there is always sufficient room.
22046            fidl::encoding::encode_in_envelope_optional::<u16, D>(
22047                self.num_trel_peers.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
22048                encoder,
22049                offset + cur_offset,
22050                depth,
22051            )?;
22052
22053            _prev_end_offset = cur_offset + envelope_size;
22054
22055            Ok(())
22056        }
22057    }
22058
22059    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for TrelPeersInfo {
22060        #[inline(always)]
22061        fn new_empty() -> Self {
22062            Self::default()
22063        }
22064
22065        unsafe fn decode(
22066            &mut self,
22067            decoder: &mut fidl::encoding::Decoder<'_, D>,
22068            offset: usize,
22069            mut depth: fidl::encoding::Depth,
22070        ) -> fidl::Result<()> {
22071            decoder.debug_check_bounds::<Self>(offset);
22072            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
22073                None => return Err(fidl::Error::NotNullable),
22074                Some(len) => len,
22075            };
22076            // Calling decoder.out_of_line_offset(0) is not allowed.
22077            if len == 0 {
22078                return Ok(());
22079            };
22080            depth.increment()?;
22081            let envelope_size = 8;
22082            let bytes_len = len * envelope_size;
22083            let offset = decoder.out_of_line_offset(bytes_len)?;
22084            // Decode the envelope for each type.
22085            let mut _next_ordinal_to_read = 0;
22086            let mut next_offset = offset;
22087            let end_offset = offset + bytes_len;
22088            _next_ordinal_to_read += 1;
22089            if next_offset >= end_offset {
22090                return Ok(());
22091            }
22092
22093            // Decode unknown envelopes for gaps in ordinals.
22094            while _next_ordinal_to_read < 1 {
22095                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
22096                _next_ordinal_to_read += 1;
22097                next_offset += envelope_size;
22098            }
22099
22100            let next_out_of_line = decoder.next_out_of_line();
22101            let handles_before = decoder.remaining_handles();
22102            if let Some((inlined, num_bytes, num_handles)) =
22103                fidl::encoding::decode_envelope_header(decoder, next_offset)?
22104            {
22105                let member_inline_size =
22106                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
22107                if inlined != (member_inline_size <= 4) {
22108                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
22109                }
22110                let inner_offset;
22111                let mut inner_depth = depth.clone();
22112                if inlined {
22113                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
22114                    inner_offset = next_offset;
22115                } else {
22116                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
22117                    inner_depth.increment()?;
22118                }
22119                let val_ref = self.num_trel_peers.get_or_insert_with(|| fidl::new_empty!(u16, D));
22120                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
22121                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
22122                {
22123                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
22124                }
22125                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
22126                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
22127                }
22128            }
22129
22130            next_offset += envelope_size;
22131
22132            // Decode the remaining unknown envelopes.
22133            while next_offset < end_offset {
22134                _next_ordinal_to_read += 1;
22135                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
22136                next_offset += envelope_size;
22137            }
22138
22139            Ok(())
22140        }
22141    }
22142
22143    impl UpstreamDnsCounters {
22144        #[inline(always)]
22145        fn max_ordinal_present(&self) -> u64 {
22146            if let Some(_) = self.failures {
22147                return 3;
22148            }
22149            if let Some(_) = self.responses {
22150                return 2;
22151            }
22152            if let Some(_) = self.queries {
22153                return 1;
22154            }
22155            0
22156        }
22157    }
22158
22159    impl fidl::encoding::ValueTypeMarker for UpstreamDnsCounters {
22160        type Borrowed<'a> = &'a Self;
22161        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
22162            value
22163        }
22164    }
22165
22166    unsafe impl fidl::encoding::TypeMarker for UpstreamDnsCounters {
22167        type Owned = Self;
22168
22169        #[inline(always)]
22170        fn inline_align(_context: fidl::encoding::Context) -> usize {
22171            8
22172        }
22173
22174        #[inline(always)]
22175        fn inline_size(_context: fidl::encoding::Context) -> usize {
22176            16
22177        }
22178    }
22179
22180    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<UpstreamDnsCounters, D>
22181        for &UpstreamDnsCounters
22182    {
22183        unsafe fn encode(
22184            self,
22185            encoder: &mut fidl::encoding::Encoder<'_, D>,
22186            offset: usize,
22187            mut depth: fidl::encoding::Depth,
22188        ) -> fidl::Result<()> {
22189            encoder.debug_check_bounds::<UpstreamDnsCounters>(offset);
22190            // Vector header
22191            let max_ordinal: u64 = self.max_ordinal_present();
22192            encoder.write_num(max_ordinal, offset);
22193            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
22194            // Calling encoder.out_of_line_offset(0) is not allowed.
22195            if max_ordinal == 0 {
22196                return Ok(());
22197            }
22198            depth.increment()?;
22199            let envelope_size = 8;
22200            let bytes_len = max_ordinal as usize * envelope_size;
22201            #[allow(unused_variables)]
22202            let offset = encoder.out_of_line_offset(bytes_len);
22203            let mut _prev_end_offset: usize = 0;
22204            if 1 > max_ordinal {
22205                return Ok(());
22206            }
22207
22208            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
22209            // are envelope_size bytes.
22210            let cur_offset: usize = (1 - 1) * envelope_size;
22211
22212            // Zero reserved fields.
22213            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
22214
22215            // Safety:
22216            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
22217            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
22218            //   envelope_size bytes, there is always sufficient room.
22219            fidl::encoding::encode_in_envelope_optional::<u32, D>(
22220                self.queries.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
22221                encoder,
22222                offset + cur_offset,
22223                depth,
22224            )?;
22225
22226            _prev_end_offset = cur_offset + envelope_size;
22227            if 2 > max_ordinal {
22228                return Ok(());
22229            }
22230
22231            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
22232            // are envelope_size bytes.
22233            let cur_offset: usize = (2 - 1) * envelope_size;
22234
22235            // Zero reserved fields.
22236            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
22237
22238            // Safety:
22239            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
22240            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
22241            //   envelope_size bytes, there is always sufficient room.
22242            fidl::encoding::encode_in_envelope_optional::<u32, D>(
22243                self.responses.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
22244                encoder,
22245                offset + cur_offset,
22246                depth,
22247            )?;
22248
22249            _prev_end_offset = cur_offset + envelope_size;
22250            if 3 > max_ordinal {
22251                return Ok(());
22252            }
22253
22254            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
22255            // are envelope_size bytes.
22256            let cur_offset: usize = (3 - 1) * envelope_size;
22257
22258            // Zero reserved fields.
22259            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
22260
22261            // Safety:
22262            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
22263            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
22264            //   envelope_size bytes, there is always sufficient room.
22265            fidl::encoding::encode_in_envelope_optional::<u32, D>(
22266                self.failures.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
22267                encoder,
22268                offset + cur_offset,
22269                depth,
22270            )?;
22271
22272            _prev_end_offset = cur_offset + envelope_size;
22273
22274            Ok(())
22275        }
22276    }
22277
22278    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for UpstreamDnsCounters {
22279        #[inline(always)]
22280        fn new_empty() -> Self {
22281            Self::default()
22282        }
22283
22284        unsafe fn decode(
22285            &mut self,
22286            decoder: &mut fidl::encoding::Decoder<'_, D>,
22287            offset: usize,
22288            mut depth: fidl::encoding::Depth,
22289        ) -> fidl::Result<()> {
22290            decoder.debug_check_bounds::<Self>(offset);
22291            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
22292                None => return Err(fidl::Error::NotNullable),
22293                Some(len) => len,
22294            };
22295            // Calling decoder.out_of_line_offset(0) is not allowed.
22296            if len == 0 {
22297                return Ok(());
22298            };
22299            depth.increment()?;
22300            let envelope_size = 8;
22301            let bytes_len = len * envelope_size;
22302            let offset = decoder.out_of_line_offset(bytes_len)?;
22303            // Decode the envelope for each type.
22304            let mut _next_ordinal_to_read = 0;
22305            let mut next_offset = offset;
22306            let end_offset = offset + bytes_len;
22307            _next_ordinal_to_read += 1;
22308            if next_offset >= end_offset {
22309                return Ok(());
22310            }
22311
22312            // Decode unknown envelopes for gaps in ordinals.
22313            while _next_ordinal_to_read < 1 {
22314                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
22315                _next_ordinal_to_read += 1;
22316                next_offset += envelope_size;
22317            }
22318
22319            let next_out_of_line = decoder.next_out_of_line();
22320            let handles_before = decoder.remaining_handles();
22321            if let Some((inlined, num_bytes, num_handles)) =
22322                fidl::encoding::decode_envelope_header(decoder, next_offset)?
22323            {
22324                let member_inline_size =
22325                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
22326                if inlined != (member_inline_size <= 4) {
22327                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
22328                }
22329                let inner_offset;
22330                let mut inner_depth = depth.clone();
22331                if inlined {
22332                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
22333                    inner_offset = next_offset;
22334                } else {
22335                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
22336                    inner_depth.increment()?;
22337                }
22338                let val_ref = self.queries.get_or_insert_with(|| fidl::new_empty!(u32, D));
22339                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
22340                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
22341                {
22342                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
22343                }
22344                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
22345                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
22346                }
22347            }
22348
22349            next_offset += envelope_size;
22350            _next_ordinal_to_read += 1;
22351            if next_offset >= end_offset {
22352                return Ok(());
22353            }
22354
22355            // Decode unknown envelopes for gaps in ordinals.
22356            while _next_ordinal_to_read < 2 {
22357                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
22358                _next_ordinal_to_read += 1;
22359                next_offset += envelope_size;
22360            }
22361
22362            let next_out_of_line = decoder.next_out_of_line();
22363            let handles_before = decoder.remaining_handles();
22364            if let Some((inlined, num_bytes, num_handles)) =
22365                fidl::encoding::decode_envelope_header(decoder, next_offset)?
22366            {
22367                let member_inline_size =
22368                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
22369                if inlined != (member_inline_size <= 4) {
22370                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
22371                }
22372                let inner_offset;
22373                let mut inner_depth = depth.clone();
22374                if inlined {
22375                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
22376                    inner_offset = next_offset;
22377                } else {
22378                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
22379                    inner_depth.increment()?;
22380                }
22381                let val_ref = self.responses.get_or_insert_with(|| fidl::new_empty!(u32, D));
22382                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
22383                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
22384                {
22385                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
22386                }
22387                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
22388                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
22389                }
22390            }
22391
22392            next_offset += envelope_size;
22393            _next_ordinal_to_read += 1;
22394            if next_offset >= end_offset {
22395                return Ok(());
22396            }
22397
22398            // Decode unknown envelopes for gaps in ordinals.
22399            while _next_ordinal_to_read < 3 {
22400                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
22401                _next_ordinal_to_read += 1;
22402                next_offset += envelope_size;
22403            }
22404
22405            let next_out_of_line = decoder.next_out_of_line();
22406            let handles_before = decoder.remaining_handles();
22407            if let Some((inlined, num_bytes, num_handles)) =
22408                fidl::encoding::decode_envelope_header(decoder, next_offset)?
22409            {
22410                let member_inline_size =
22411                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
22412                if inlined != (member_inline_size <= 4) {
22413                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
22414                }
22415                let inner_offset;
22416                let mut inner_depth = depth.clone();
22417                if inlined {
22418                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
22419                    inner_offset = next_offset;
22420                } else {
22421                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
22422                    inner_depth.increment()?;
22423                }
22424                let val_ref = self.failures.get_or_insert_with(|| fidl::new_empty!(u32, D));
22425                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
22426                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
22427                {
22428                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
22429                }
22430                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
22431                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
22432                }
22433            }
22434
22435            next_offset += envelope_size;
22436
22437            // Decode the remaining unknown envelopes.
22438            while next_offset < end_offset {
22439                _next_ordinal_to_read += 1;
22440                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
22441                next_offset += envelope_size;
22442            }
22443
22444            Ok(())
22445        }
22446    }
22447
22448    impl UpstreamDnsInfo {
22449        #[inline(always)]
22450        fn max_ordinal_present(&self) -> u64 {
22451            if let Some(_) = self.upstream_dns_query_state {
22452                return 1;
22453            }
22454            0
22455        }
22456    }
22457
22458    impl fidl::encoding::ValueTypeMarker for UpstreamDnsInfo {
22459        type Borrowed<'a> = &'a Self;
22460        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
22461            value
22462        }
22463    }
22464
22465    unsafe impl fidl::encoding::TypeMarker for UpstreamDnsInfo {
22466        type Owned = Self;
22467
22468        #[inline(always)]
22469        fn inline_align(_context: fidl::encoding::Context) -> usize {
22470            8
22471        }
22472
22473        #[inline(always)]
22474        fn inline_size(_context: fidl::encoding::Context) -> usize {
22475            16
22476        }
22477    }
22478
22479    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<UpstreamDnsInfo, D>
22480        for &UpstreamDnsInfo
22481    {
22482        unsafe fn encode(
22483            self,
22484            encoder: &mut fidl::encoding::Encoder<'_, D>,
22485            offset: usize,
22486            mut depth: fidl::encoding::Depth,
22487        ) -> fidl::Result<()> {
22488            encoder.debug_check_bounds::<UpstreamDnsInfo>(offset);
22489            // Vector header
22490            let max_ordinal: u64 = self.max_ordinal_present();
22491            encoder.write_num(max_ordinal, offset);
22492            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
22493            // Calling encoder.out_of_line_offset(0) is not allowed.
22494            if max_ordinal == 0 {
22495                return Ok(());
22496            }
22497            depth.increment()?;
22498            let envelope_size = 8;
22499            let bytes_len = max_ordinal as usize * envelope_size;
22500            #[allow(unused_variables)]
22501            let offset = encoder.out_of_line_offset(bytes_len);
22502            let mut _prev_end_offset: usize = 0;
22503            if 1 > max_ordinal {
22504                return Ok(());
22505            }
22506
22507            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
22508            // are envelope_size bytes.
22509            let cur_offset: usize = (1 - 1) * envelope_size;
22510
22511            // Zero reserved fields.
22512            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
22513
22514            // Safety:
22515            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
22516            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
22517            //   envelope_size bytes, there is always sufficient room.
22518            fidl::encoding::encode_in_envelope_optional::<UpstreamDnsQueryState, D>(
22519                self.upstream_dns_query_state
22520                    .as_ref()
22521                    .map(<UpstreamDnsQueryState as fidl::encoding::ValueTypeMarker>::borrow),
22522                encoder,
22523                offset + cur_offset,
22524                depth,
22525            )?;
22526
22527            _prev_end_offset = cur_offset + envelope_size;
22528
22529            Ok(())
22530        }
22531    }
22532
22533    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for UpstreamDnsInfo {
22534        #[inline(always)]
22535        fn new_empty() -> Self {
22536            Self::default()
22537        }
22538
22539        unsafe fn decode(
22540            &mut self,
22541            decoder: &mut fidl::encoding::Decoder<'_, D>,
22542            offset: usize,
22543            mut depth: fidl::encoding::Depth,
22544        ) -> fidl::Result<()> {
22545            decoder.debug_check_bounds::<Self>(offset);
22546            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
22547                None => return Err(fidl::Error::NotNullable),
22548                Some(len) => len,
22549            };
22550            // Calling decoder.out_of_line_offset(0) is not allowed.
22551            if len == 0 {
22552                return Ok(());
22553            };
22554            depth.increment()?;
22555            let envelope_size = 8;
22556            let bytes_len = len * envelope_size;
22557            let offset = decoder.out_of_line_offset(bytes_len)?;
22558            // Decode the envelope for each type.
22559            let mut _next_ordinal_to_read = 0;
22560            let mut next_offset = offset;
22561            let end_offset = offset + bytes_len;
22562            _next_ordinal_to_read += 1;
22563            if next_offset >= end_offset {
22564                return Ok(());
22565            }
22566
22567            // Decode unknown envelopes for gaps in ordinals.
22568            while _next_ordinal_to_read < 1 {
22569                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
22570                _next_ordinal_to_read += 1;
22571                next_offset += envelope_size;
22572            }
22573
22574            let next_out_of_line = decoder.next_out_of_line();
22575            let handles_before = decoder.remaining_handles();
22576            if let Some((inlined, num_bytes, num_handles)) =
22577                fidl::encoding::decode_envelope_header(decoder, next_offset)?
22578            {
22579                let member_inline_size =
22580                    <UpstreamDnsQueryState as fidl::encoding::TypeMarker>::inline_size(
22581                        decoder.context,
22582                    );
22583                if inlined != (member_inline_size <= 4) {
22584                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
22585                }
22586                let inner_offset;
22587                let mut inner_depth = depth.clone();
22588                if inlined {
22589                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
22590                    inner_offset = next_offset;
22591                } else {
22592                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
22593                    inner_depth.increment()?;
22594                }
22595                let val_ref = self
22596                    .upstream_dns_query_state
22597                    .get_or_insert_with(|| fidl::new_empty!(UpstreamDnsQueryState, D));
22598                fidl::decode!(
22599                    UpstreamDnsQueryState,
22600                    D,
22601                    val_ref,
22602                    decoder,
22603                    inner_offset,
22604                    inner_depth
22605                )?;
22606                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
22607                {
22608                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
22609                }
22610                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
22611                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
22612                }
22613            }
22614
22615            next_offset += envelope_size;
22616
22617            // Decode the remaining unknown envelopes.
22618            while next_offset < end_offset {
22619                _next_ordinal_to_read += 1;
22620                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
22621                next_offset += envelope_size;
22622            }
22623
22624            Ok(())
22625        }
22626    }
22627
22628    impl fidl::encoding::ValueTypeMarker for JoinParams {
22629        type Borrowed<'a> = &'a Self;
22630        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
22631            value
22632        }
22633    }
22634
22635    unsafe impl fidl::encoding::TypeMarker for JoinParams {
22636        type Owned = Self;
22637
22638        #[inline(always)]
22639        fn inline_align(_context: fidl::encoding::Context) -> usize {
22640            8
22641        }
22642
22643        #[inline(always)]
22644        fn inline_size(_context: fidl::encoding::Context) -> usize {
22645            16
22646        }
22647    }
22648
22649    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<JoinParams, D>
22650        for &JoinParams
22651    {
22652        #[inline]
22653        unsafe fn encode(
22654            self,
22655            encoder: &mut fidl::encoding::Encoder<'_, D>,
22656            offset: usize,
22657            _depth: fidl::encoding::Depth,
22658        ) -> fidl::Result<()> {
22659            encoder.debug_check_bounds::<JoinParams>(offset);
22660            encoder.write_num::<u64>(self.ordinal(), offset);
22661            match self {
22662            JoinParams::ProvisioningParameter(ref val) => {
22663                fidl::encoding::encode_in_envelope::<fidl_fuchsia_lowpan_device__common::ProvisioningParams, D>(
22664                    <fidl_fuchsia_lowpan_device__common::ProvisioningParams as fidl::encoding::ValueTypeMarker>::borrow(val),
22665                    encoder, offset + 8, _depth
22666                )
22667            }
22668            JoinParams::JoinerParameter(ref val) => {
22669                fidl::encoding::encode_in_envelope::<JoinerCommissioningParams, D>(
22670                    <JoinerCommissioningParams as fidl::encoding::ValueTypeMarker>::borrow(val),
22671                    encoder, offset + 8, _depth
22672                )
22673            }
22674            JoinParams::__SourceBreaking { .. } => Err(fidl::Error::UnknownUnionTag),
22675        }
22676        }
22677    }
22678
22679    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for JoinParams {
22680        #[inline(always)]
22681        fn new_empty() -> Self {
22682            Self::__SourceBreaking { unknown_ordinal: 0 }
22683        }
22684
22685        #[inline]
22686        unsafe fn decode(
22687            &mut self,
22688            decoder: &mut fidl::encoding::Decoder<'_, D>,
22689            offset: usize,
22690            mut depth: fidl::encoding::Depth,
22691        ) -> fidl::Result<()> {
22692            decoder.debug_check_bounds::<Self>(offset);
22693            #[allow(unused_variables)]
22694            let next_out_of_line = decoder.next_out_of_line();
22695            let handles_before = decoder.remaining_handles();
22696            let (ordinal, inlined, num_bytes, num_handles) =
22697                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
22698
22699            let member_inline_size = match ordinal {
22700            1 => <fidl_fuchsia_lowpan_device__common::ProvisioningParams as fidl::encoding::TypeMarker>::inline_size(decoder.context),
22701            2 => <JoinerCommissioningParams as fidl::encoding::TypeMarker>::inline_size(decoder.context),
22702            0 => return Err(fidl::Error::UnknownUnionTag),
22703            _ => num_bytes as usize,
22704        };
22705
22706            if inlined != (member_inline_size <= 4) {
22707                return Err(fidl::Error::InvalidInlineBitInEnvelope);
22708            }
22709            let _inner_offset;
22710            if inlined {
22711                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
22712                _inner_offset = offset + 8;
22713            } else {
22714                depth.increment()?;
22715                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
22716            }
22717            match ordinal {
22718                1 => {
22719                    #[allow(irrefutable_let_patterns)]
22720                    if let JoinParams::ProvisioningParameter(_) = self {
22721                        // Do nothing, read the value into the object
22722                    } else {
22723                        // Initialize `self` to the right variant
22724                        *self = JoinParams::ProvisioningParameter(fidl::new_empty!(
22725                            fidl_fuchsia_lowpan_device__common::ProvisioningParams,
22726                            D
22727                        ));
22728                    }
22729                    #[allow(irrefutable_let_patterns)]
22730                    if let JoinParams::ProvisioningParameter(ref mut val) = self {
22731                        fidl::decode!(
22732                            fidl_fuchsia_lowpan_device__common::ProvisioningParams,
22733                            D,
22734                            val,
22735                            decoder,
22736                            _inner_offset,
22737                            depth
22738                        )?;
22739                    } else {
22740                        unreachable!()
22741                    }
22742                }
22743                2 => {
22744                    #[allow(irrefutable_let_patterns)]
22745                    if let JoinParams::JoinerParameter(_) = self {
22746                        // Do nothing, read the value into the object
22747                    } else {
22748                        // Initialize `self` to the right variant
22749                        *self = JoinParams::JoinerParameter(fidl::new_empty!(
22750                            JoinerCommissioningParams,
22751                            D
22752                        ));
22753                    }
22754                    #[allow(irrefutable_let_patterns)]
22755                    if let JoinParams::JoinerParameter(ref mut val) = self {
22756                        fidl::decode!(
22757                            JoinerCommissioningParams,
22758                            D,
22759                            val,
22760                            decoder,
22761                            _inner_offset,
22762                            depth
22763                        )?;
22764                    } else {
22765                        unreachable!()
22766                    }
22767                }
22768                #[allow(deprecated)]
22769                ordinal => {
22770                    for _ in 0..num_handles {
22771                        decoder.drop_next_handle()?;
22772                    }
22773                    *self = JoinParams::__SourceBreaking { unknown_ordinal: ordinal };
22774                }
22775            }
22776            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
22777                return Err(fidl::Error::InvalidNumBytesInEnvelope);
22778            }
22779            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
22780                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
22781            }
22782            Ok(())
22783        }
22784    }
22785
22786    impl fidl::encoding::ValueTypeMarker for ProvisioningProgress {
22787        type Borrowed<'a> = &'a Self;
22788        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
22789            value
22790        }
22791    }
22792
22793    unsafe impl fidl::encoding::TypeMarker for ProvisioningProgress {
22794        type Owned = Self;
22795
22796        #[inline(always)]
22797        fn inline_align(_context: fidl::encoding::Context) -> usize {
22798            8
22799        }
22800
22801        #[inline(always)]
22802        fn inline_size(_context: fidl::encoding::Context) -> usize {
22803            16
22804        }
22805    }
22806
22807    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<ProvisioningProgress, D>
22808        for &ProvisioningProgress
22809    {
22810        #[inline]
22811        unsafe fn encode(
22812            self,
22813            encoder: &mut fidl::encoding::Encoder<'_, D>,
22814            offset: usize,
22815            _depth: fidl::encoding::Depth,
22816        ) -> fidl::Result<()> {
22817            encoder.debug_check_bounds::<ProvisioningProgress>(offset);
22818            encoder.write_num::<u64>(self.ordinal(), offset);
22819            match self {
22820            ProvisioningProgress::Progress(ref val) => {
22821                fidl::encoding::encode_in_envelope::<f32, D>(
22822                    <f32 as fidl::encoding::ValueTypeMarker>::borrow(val),
22823                    encoder, offset + 8, _depth
22824                )
22825            }
22826            ProvisioningProgress::Identity(ref val) => {
22827                fidl::encoding::encode_in_envelope::<fidl_fuchsia_lowpan_device__common::Identity, D>(
22828                    <fidl_fuchsia_lowpan_device__common::Identity as fidl::encoding::ValueTypeMarker>::borrow(val),
22829                    encoder, offset + 8, _depth
22830                )
22831            }
22832            ProvisioningProgress::__SourceBreaking { .. } => Err(fidl::Error::UnknownUnionTag),
22833        }
22834        }
22835    }
22836
22837    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ProvisioningProgress {
22838        #[inline(always)]
22839        fn new_empty() -> Self {
22840            Self::__SourceBreaking { unknown_ordinal: 0 }
22841        }
22842
22843        #[inline]
22844        unsafe fn decode(
22845            &mut self,
22846            decoder: &mut fidl::encoding::Decoder<'_, D>,
22847            offset: usize,
22848            mut depth: fidl::encoding::Depth,
22849        ) -> fidl::Result<()> {
22850            decoder.debug_check_bounds::<Self>(offset);
22851            #[allow(unused_variables)]
22852            let next_out_of_line = decoder.next_out_of_line();
22853            let handles_before = decoder.remaining_handles();
22854            let (ordinal, inlined, num_bytes, num_handles) =
22855                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
22856
22857            let member_inline_size = match ordinal {
22858            1 => <f32 as fidl::encoding::TypeMarker>::inline_size(decoder.context),
22859            2 => <fidl_fuchsia_lowpan_device__common::Identity as fidl::encoding::TypeMarker>::inline_size(decoder.context),
22860            0 => return Err(fidl::Error::UnknownUnionTag),
22861            _ => num_bytes as usize,
22862        };
22863
22864            if inlined != (member_inline_size <= 4) {
22865                return Err(fidl::Error::InvalidInlineBitInEnvelope);
22866            }
22867            let _inner_offset;
22868            if inlined {
22869                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
22870                _inner_offset = offset + 8;
22871            } else {
22872                depth.increment()?;
22873                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
22874            }
22875            match ordinal {
22876                1 => {
22877                    #[allow(irrefutable_let_patterns)]
22878                    if let ProvisioningProgress::Progress(_) = self {
22879                        // Do nothing, read the value into the object
22880                    } else {
22881                        // Initialize `self` to the right variant
22882                        *self = ProvisioningProgress::Progress(fidl::new_empty!(f32, D));
22883                    }
22884                    #[allow(irrefutable_let_patterns)]
22885                    if let ProvisioningProgress::Progress(ref mut val) = self {
22886                        fidl::decode!(f32, D, val, decoder, _inner_offset, depth)?;
22887                    } else {
22888                        unreachable!()
22889                    }
22890                }
22891                2 => {
22892                    #[allow(irrefutable_let_patterns)]
22893                    if let ProvisioningProgress::Identity(_) = self {
22894                        // Do nothing, read the value into the object
22895                    } else {
22896                        // Initialize `self` to the right variant
22897                        *self = ProvisioningProgress::Identity(fidl::new_empty!(
22898                            fidl_fuchsia_lowpan_device__common::Identity,
22899                            D
22900                        ));
22901                    }
22902                    #[allow(irrefutable_let_patterns)]
22903                    if let ProvisioningProgress::Identity(ref mut val) = self {
22904                        fidl::decode!(
22905                            fidl_fuchsia_lowpan_device__common::Identity,
22906                            D,
22907                            val,
22908                            decoder,
22909                            _inner_offset,
22910                            depth
22911                        )?;
22912                    } else {
22913                        unreachable!()
22914                    }
22915                }
22916                #[allow(deprecated)]
22917                ordinal => {
22918                    for _ in 0..num_handles {
22919                        decoder.drop_next_handle()?;
22920                    }
22921                    *self = ProvisioningProgress::__SourceBreaking { unknown_ordinal: ordinal };
22922                }
22923            }
22924            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
22925                return Err(fidl::Error::InvalidNumBytesInEnvelope);
22926            }
22927            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
22928                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
22929            }
22930            Ok(())
22931        }
22932    }
22933}