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#[derive(Clone, Debug, Default, PartialEq)]
922pub struct Nat64ErrorCounters {
923    /// Packet drop for unknown reasons
924    pub unknown: Option<Nat64PacketCounters>,
925    /// Packet drop due to failed to parse the datagram
926    pub illegal_packet: Option<Nat64PacketCounters>,
927    /// Packet drop due to unsupported IP protocol
928    pub unsupported_protocol: Option<Nat64PacketCounters>,
929    /// Packet drop due to no mappings found or mapping pool exhausted
930    pub no_mapping: Option<Nat64PacketCounters>,
931    #[doc(hidden)]
932    pub __source_breaking: fidl::marker::SourceBreaking,
933}
934
935impl fidl::Persistable for Nat64ErrorCounters {}
936
937#[derive(Clone, Debug, Default, PartialEq)]
938pub struct Nat64Info {
939    /// NAT64 border routing state
940    pub nat64_state: Option<BorderRoutingNat64State>,
941    /// NAT64 mapping
942    pub nat64_mappings: Option<Vec<Nat64Mapping>>,
943    /// NAT64 error counters
944    pub nat64_error_counters: Option<Nat64ErrorCounters>,
945    /// NAT64 protocol counters
946    pub nat64_protocol_counters: Option<Nat64ProtocolCounters>,
947    #[doc(hidden)]
948    pub __source_breaking: fidl::marker::SourceBreaking,
949}
950
951impl fidl::Persistable for Nat64Info {}
952
953/// Information about the mappings of NAT64 translator
954#[derive(Clone, Debug, Default, PartialEq)]
955pub struct Nat64Mapping {
956    /// The unique id for a mapping session
957    pub mapping_id: Option<u64>,
958    /// The IPv4 address of the mapping
959    pub ip4_addr: Option<Vec<u8>>,
960    /// The IPv6 address of the mapping
961    pub ip6_addr: Option<Vec<u8>>,
962    /// Remaining time before expiry in milliseconds
963    pub remaining_time_ms: Option<u32>,
964    /// Nat64 Counters
965    pub counters: Option<Nat64ProtocolCounters>,
966    #[doc(hidden)]
967    pub __source_breaking: fidl::marker::SourceBreaking,
968}
969
970impl fidl::Persistable for Nat64Mapping {}
971
972#[derive(Clone, Debug, Default, PartialEq)]
973pub struct Nat64PacketCounters {
974    /// Number of packets translated from IPv4 to IPv6
975    pub ipv4_to_ipv6_packets: Option<u64>,
976    /// Number of packets translated from IPv6 to IPv4
977    pub ipv6_to_ipv4_packets: Option<u64>,
978    #[doc(hidden)]
979    pub __source_breaking: fidl::marker::SourceBreaking,
980}
981
982impl fidl::Persistable for Nat64PacketCounters {}
983
984#[derive(Clone, Debug, Default, PartialEq)]
985pub struct Nat64ProtocolCounters {
986    /// TCP counters
987    pub tcp: Option<Nat64TrafficCounters>,
988    /// UDP counters
989    pub udp: Option<Nat64TrafficCounters>,
990    /// ICMP counters
991    pub icmp: Option<Nat64TrafficCounters>,
992    /// Total counters
993    pub total: Option<Nat64TrafficCounters>,
994    #[doc(hidden)]
995    pub __source_breaking: fidl::marker::SourceBreaking,
996}
997
998impl fidl::Persistable for Nat64ProtocolCounters {}
999
1000#[derive(Clone, Debug, Default, PartialEq)]
1001pub struct Nat64TrafficCounters {
1002    /// Number of packets translated from IPv4 to IPv6
1003    pub ipv4_to_ipv6_packets: Option<u64>,
1004    /// Sum of size of packets translated from IPv4 to IPv6
1005    pub ipv4_to_ipv6_bytes: Option<u64>,
1006    /// Number of packets translated from IPv6 to IPv4
1007    pub ipv6_to_ipv4_packets: Option<u64>,
1008    /// Sum of size of packets translated from IPv6 to IPv4
1009    pub ipv6_to_ipv4_bytes: Option<u64>,
1010    #[doc(hidden)]
1011    pub __source_breaking: fidl::marker::SourceBreaking,
1012}
1013
1014impl fidl::Persistable for Nat64TrafficCounters {}
1015
1016/// Describes the parameters of a network scan.
1017#[derive(Clone, Debug, Default, PartialEq)]
1018pub struct NetworkScanParameters {
1019    /// Subset of channels to scan.
1020    ///
1021    /// If unspecified, all channels will be scanned.
1022    pub channels: Option<Vec<u16>>,
1023    /// Transmit power (in dBm to the antenna) for transmitting
1024    /// beacon requests.
1025    ///
1026    /// Note that hardware limitations may cause the actual
1027    /// used transmit power to differ from what is specified.
1028    /// In that case the used transmit power will always be
1029    /// the highest available transmit power that is less than
1030    /// the specified transmit power. If the desired transmit
1031    /// power is lower than the lowest transmit power supported
1032    /// by the hardware, then that will be used instead.
1033    pub tx_power_dbm: Option<i8>,
1034    #[doc(hidden)]
1035    pub __source_breaking: fidl::marker::SourceBreaking,
1036}
1037
1038impl fidl::Persistable for NetworkScanParameters {}
1039
1040/// LoWPAN On-Mesh Prefix.
1041///
1042/// Informed by the Thread 1.1.1 Specification, section 5.13.2.
1043#[derive(Clone, Debug, Default, PartialEq)]
1044pub struct OnMeshPrefix {
1045    /// Subnet to advertise for devices to use on the network. Required.
1046    pub subnet: Option<fidl_fuchsia_net__common::Ipv6AddressWithPrefix>,
1047    /// If present, indicates that this device is offering a default route
1048    /// as well as indicating the what preference this default
1049    /// route should be given relative to other devices offering default
1050    /// routes. If not present, no default route is advertised.
1051    ///
1052    /// Based on `P_default` and `P_preference` from Section 5.13.2 of the
1053    /// Thread 1.1.1 Specification.
1054    pub default_route_preference: Option<RoutePreference>,
1055    /// True if the route is expected to be available for at least Thread's
1056    /// `MIN_STABLE_LIFETIME`; otherwise `false`. If not present, assumed to
1057    /// be `false`.
1058    ///
1059    /// The Thread specification defines `MIN_STABLE_LIFETIME` as 168 hours.
1060    ///
1061    /// Based on `P_stable` from Section 5.13.2 of the
1062    /// Thread 1.1.1 Specification.
1063    pub stable: Option<bool>,
1064    /// True if network devices are allowed to use previously configured
1065    /// addresses using this prefix. If not present, assumed to be `false`.
1066    ///
1067    /// "SLAAC" referrs to StateLess Address Auto Configuration, described in
1068    /// [RFC4862](https://tools.ietf.org/html/rfc4862).
1069    ///
1070    /// Based on `P_slaac_preferred` from Section 5.13.2 of the
1071    /// Thread 1.1.1 Specification.
1072    pub slaac_preferred: Option<bool>,
1073    /// True if network devices are allowed to autoconfigure addresses using
1074    /// this prefix. If not present, assumed to be `false`.
1075    ///
1076    /// "SLAAC" referrs to StateLess Address Auto Configuration, described in
1077    /// [RFC4862](https://tools.ietf.org/html/rfc4862).
1078    ///
1079    /// Based on `P_slaac_valid` from Section 5.13.2 of the
1080    /// Thread 1.1.1 Specification.
1081    pub slaac_valid: Option<bool>,
1082    #[doc(hidden)]
1083    pub __source_breaking: fidl::marker::SourceBreaking,
1084}
1085
1086impl fidl::Persistable for OnMeshPrefix {}
1087
1088/// Represents an Thread Active or Pending Operational Dataset.
1089#[derive(Clone, Debug, Default, PartialEq)]
1090pub struct OperationalDataset {
1091    /// Active Timestamp.
1092    ///
1093    /// Required.
1094    pub active_timestamp: Option<i64>,
1095    /// Pending Timestamp.
1096    ///
1097    /// Required.
1098    pub pending_timestamp: Option<i64>,
1099    /// Network Key.
1100    ///
1101    /// Required.
1102    pub network_key: Option<Vec<u8>>,
1103    /// Network Name.
1104    ///
1105    /// Required.
1106    pub network_name: Option<Vec<u8>>,
1107    /// Extended PAN ID.
1108    ///
1109    /// Required.
1110    pub extended_pan_id: Option<Vec<u8>>,
1111    /// Mesh Local Prefix.
1112    ///
1113    /// Required.
1114    pub mesh_local_prefix: Option<Vec<u8>>,
1115    /// Delay Timer.
1116    ///
1117    /// Required.
1118    pub delay: Option<u32>,
1119    /// PAN ID.
1120    ///
1121    /// Required.
1122    pub pan_id: Option<u16>,
1123    /// Channel.
1124    ///
1125    /// Required.
1126    pub channel: Option<u16>,
1127    /// Wake-up Channel.
1128    ///
1129    /// Required.
1130    pub wakeup_channel: Option<u16>,
1131    /// PSKc.
1132    ///
1133    /// Required.
1134    pub pskc: Option<Vec<u8>>,
1135    /// Security Policy.
1136    ///
1137    /// Required.
1138    pub security_policy: Option<SecurityPolicy>,
1139    /// Channel Mask.
1140    ///
1141    /// Required.
1142    pub channel_mask: Option<u32>,
1143    #[doc(hidden)]
1144    pub __source_breaking: fidl::marker::SourceBreaking,
1145}
1146
1147impl fidl::Persistable for OperationalDataset {}
1148
1149/// Platform counters related to processed RA info when DHCPv6 PD is enabled.
1150#[derive(Clone, Debug, Default, PartialEq)]
1151pub struct PdProcessedRaInfo {
1152    /// The number of platform generated RA handled by ApplyPlatformGeneratedRa.
1153    ///
1154    /// Required.
1155    pub num_platform_ra_received: Option<u32>,
1156    /// The number of PIO processed for adding OMR prefixes.
1157    ///
1158    /// Required.
1159    pub num_platform_pio_processed: Option<u32>,
1160    /// The duration since the last processed RA message.
1161    ///
1162    /// Required.
1163    pub last_platform_ra_msec: Option<u32>,
1164    #[doc(hidden)]
1165    pub __source_breaking: fidl::marker::SourceBreaking,
1166}
1167
1168impl fidl::Persistable for PdProcessedRaInfo {}
1169
1170/// Represents the Thread Security Policy.
1171#[derive(Clone, Debug, Default, PartialEq)]
1172pub struct SecurityPolicy {
1173    /// Key Rotation time value, in uints of hours.
1174    ///
1175    /// Required.
1176    pub rotation_time: Option<u16>,
1177    /// Whether Obtaining the Network Key for out-of-band commissioning is enabled.
1178    ///
1179    /// Required.
1180    pub obtain_network_key_enabled: Option<bool>,
1181    /// Whether Native Commissioning using PSKc is allowed.
1182    ///
1183    /// Required.
1184    pub native_commissioning_enabled: Option<bool>,
1185    /// Whether Thread 1.0/1.1.x Routers are enabled.
1186    ///
1187    /// Required.
1188    pub routers_enabled: Option<bool>,
1189    /// Whether External Commissioner authentication is allowed.
1190    ///
1191    /// Required.
1192    pub external_commissioning_enabled: Option<bool>,
1193    /// Whether Autonomous Enrollment is enabled.
1194    ///
1195    /// Required.
1196    pub autonomous_enrollment_enabled: Option<bool>,
1197    /// Whether Network Key Provisioning is enabled.
1198    ///
1199    /// Required.
1200    pub network_key_provisioning_enabled: Option<bool>,
1201    /// Whether ToBLE link is enabled.
1202    ///
1203    /// Required.
1204    pub toble_link_enabled: Option<bool>,
1205    /// Whether Non-CCM Routers enabled.
1206    ///
1207    /// Required.
1208    pub nonccm_routers_enabled: Option<bool>,
1209    /// The Version-threshold for Routing.
1210    ///
1211    /// Required.
1212    pub version_threshold_for_routing: Option<u8>,
1213    #[doc(hidden)]
1214    pub __source_breaking: fidl::marker::SourceBreaking,
1215}
1216
1217impl fidl::Persistable for SecurityPolicy {}
1218
1219/// Represents a SRP service host.
1220#[derive(Clone, Debug, Default, PartialEq)]
1221pub struct SrpServerHost {
1222    /// The full name of host.
1223    ///
1224    /// Required.
1225    pub name: Option<String>,
1226    /// Whether the SRP service host has been deleted.
1227    ///
1228    /// Required.
1229    pub deleted: Option<bool>,
1230    /// The IPv6 addresses of the SPR service host.
1231    ///
1232    /// Required.
1233    pub addresses: Option<Vec<fidl_fuchsia_net__common::Ipv6Address>>,
1234    #[doc(hidden)]
1235    pub __source_breaking: fidl::marker::SourceBreaking,
1236}
1237
1238impl fidl::Persistable for SrpServerHost {}
1239
1240/// State information about the SRP server.
1241#[derive(Clone, Debug, Default, PartialEq)]
1242pub struct SrpServerInfo {
1243    /// The operational state of the SRP server.
1244    ///
1245    /// Required.
1246    pub state: Option<SrpServerState>,
1247    /// The port the SRP server is listening to.
1248    ///
1249    /// Optional. The port may be omitted when `state` is `DISABLED`.
1250    pub port: Option<u16>,
1251    /// The address mode of the SRP server.
1252    ///
1253    /// Required.
1254    pub address_mode: Option<SrpServerAddressMode>,
1255    /// The response counters of the SRP server.
1256    ///
1257    /// Required.
1258    pub response_counters: Option<SrpServerResponseCounters>,
1259    /// The registration information of SRP hosts.
1260    ///
1261    /// Required.
1262    pub hosts_registration: Option<SrpServerRegistration>,
1263    /// The registration information of SRP services.
1264    ///
1265    /// Required.
1266    pub services_registration: Option<SrpServerRegistration>,
1267    /// The detailed registration information of SRP hosts.
1268    ///
1269    /// Required.
1270    pub hosts: Option<Vec<SrpServerHost>>,
1271    /// The detailed registration information of SRP services.
1272    ///
1273    /// Required.
1274    pub services: Option<Vec<SrpServerService>>,
1275    #[doc(hidden)]
1276    pub __source_breaking: fidl::marker::SourceBreaking,
1277}
1278
1279impl fidl::Persistable for SrpServerInfo {}
1280
1281/// Registration information about the SRP server.
1282#[derive(Clone, Debug, Default, PartialEq)]
1283pub struct SrpServerRegistration {
1284    /// Number of hosts/services that have not been deleted.
1285    ///
1286    /// Required.
1287    pub fresh_count: Option<u32>,
1288    /// Number of hosts/services that have been deleted.
1289    ///
1290    /// Required.
1291    pub deleted_count: Option<u32>,
1292    /// Total lease time.
1293    ///
1294    /// Required.
1295    pub lease_time_total: Option<i64>,
1296    /// Total key lease time.
1297    ///
1298    /// Required.
1299    pub key_lease_time_total: Option<i64>,
1300    /// Total remaining lease time.
1301    ///
1302    /// Required.
1303    pub remaining_lease_time_total: Option<i64>,
1304    /// Total remaining key lease time.
1305    ///
1306    /// Required.
1307    pub remaining_key_lease_time_total: Option<i64>,
1308    #[doc(hidden)]
1309    pub __source_breaking: fidl::marker::SourceBreaking,
1310}
1311
1312impl fidl::Persistable for SrpServerRegistration {}
1313
1314#[derive(Clone, Debug, Default, PartialEq)]
1315pub struct SrpServerResponseCounters {
1316    /// The number of successful responses.
1317    ///
1318    /// Required.
1319    pub success_response: Option<u32>,
1320    /// The number of 'server failure' responses.
1321    ///
1322    /// Required.
1323    pub server_failure_response: Option<u32>,
1324    /// The number of 'format error' responses.
1325    ///
1326    /// Required.
1327    pub format_error_response: Option<u32>,
1328    /// The number of 'name exists' responses.
1329    ///
1330    /// Required.
1331    pub name_exists_response: Option<u32>,
1332    /// The number of 'refused' responses.
1333    ///
1334    /// Required.
1335    pub refused_response: Option<u32>,
1336    /// The number of 'other' responses.
1337    ///
1338    /// Required.
1339    pub other_response: Option<u32>,
1340    #[doc(hidden)]
1341    pub __source_breaking: fidl::marker::SourceBreaking,
1342}
1343
1344impl fidl::Persistable for SrpServerResponseCounters {}
1345
1346/// Represents a SRP service.
1347#[derive(Clone, Debug, Default, PartialEq)]
1348pub struct SrpServerService {
1349    /// The full service instance name of the service.
1350    ///
1351    /// Required.
1352    pub instance_name: Option<String>,
1353    /// Whether the SRP service host has been deleted.
1354    ///
1355    /// Required.
1356    pub deleted: Option<bool>,
1357    /// The sub-type service name (full name) of the service.
1358    ///
1359    /// The maximum number of service subtype labels in the SRP service is 6,
1360    /// see OPENTHREAD_CONFIG_SRP_CLIENT_BUFFERS_SERVICE_MAX_SUB_TYPES.
1361    ///
1362    /// The maximum length for a single DNS label (sub-type) is 63 characters.
1363    ///
1364    /// Required.
1365    pub subtypes: Option<Vec<String>>,
1366    /// The port of the service instance.
1367    ///
1368    /// Required.
1369    pub port: Option<u16>,
1370    /// The priority of the service instance.
1371    ///
1372    /// Required.
1373    pub priority: Option<u16>,
1374    /// The weight of the service instance.
1375    ///
1376    /// Required.
1377    pub weight: Option<u16>,
1378    /// The TTL of the service instance.
1379    ///
1380    /// Required.
1381    pub ttl: Option<i64>,
1382    /// The lease time of a service.
1383    ///
1384    /// Required.
1385    pub lease: Option<i64>,
1386    /// The key lease time of a host/service.
1387    ///
1388    /// Required.
1389    pub key_lease: Option<i64>,
1390    /// The TXT record data.
1391    ///
1392    /// Required.
1393    pub txt_data: Option<Vec<DnsTxtEntry>>,
1394    /// The information of a service host.
1395    ///
1396    /// Required.
1397    pub host: Option<SrpServerHost>,
1398    #[doc(hidden)]
1399    pub __source_breaking: fidl::marker::SourceBreaking,
1400}
1401
1402impl fidl::Persistable for SrpServerService {}
1403
1404/// LoWPAN Interface Telemetry Information.
1405///
1406/// The fields in this table are used for providing low-level telemetry and information about the
1407/// LoWPAN interface for debugging and statistics purposes.
1408///
1409/// All fields are optional.
1410#[derive(Clone, Debug, Default, PartialEq)]
1411pub struct Telemetry {
1412    /// The current RSSI of the radio.
1413    pub rssi: Option<i8>,
1414    /// The configured transmit power of the radio.
1415    pub tx_power: Option<i8>,
1416    /// The current channel index of the radio.
1417    pub channel_index: Option<u16>,
1418    /// The partition ID of the currently associated network partition.
1419    pub partition_id: Option<u32>,
1420    /// The version string describing the underlying mesh stack.
1421    pub stack_version: Option<String>,
1422    /// The version string describing the underlying radio control firmware.
1423    pub rcp_version: Option<String>,
1424    /// Thread link mode byte.
1425    ///
1426    /// Only present on Thread networks.
1427    ///
1428    /// Defined by section 4.5.2 of the Thread 1.1.1 specification ("Mode TLV").
1429    pub thread_link_mode: Option<u8>,
1430    /// The router ID of this device in the currently associated network.
1431    ///
1432    /// Only present on Thread networks.
1433    pub thread_router_id: Option<u8>,
1434    /// The current RLOC16 address of this node.
1435    ///
1436    /// Only present on Thread networks.
1437    pub thread_rloc: Option<u16>,
1438    /// The full network data version.
1439    ///
1440    /// Only present on Thread networks.
1441    pub thread_network_data_version: Option<u8>,
1442    /// The stable network data version.
1443    ///
1444    /// Only present on Thread networks.
1445    pub thread_stable_network_data_version: Option<u8>,
1446    /// The current Thread network data, in raw binary form, as defined in section 5.13 of
1447    /// the Thread 1.1.1 specification.
1448    ///
1449    /// Only present on Thread networks.
1450    pub thread_network_data: Option<Vec<u8>>,
1451    /// The current Thread stable network data, in raw binary form, as defined in section 5.13 of
1452    /// the Thread 1.1.1 specification.
1453    ///
1454    /// Only present on Thread networks.
1455    pub thread_stable_network_data: Option<Vec<u8>>,
1456    /// The counters associated with border routing messages.
1457    ///
1458    /// Only present on Thread networks.
1459    pub thread_border_routing_counters: Option<BorderRoutingCounters>,
1460    /// The SRP server information.
1461    ///
1462    /// Only present on Thread networks.
1463    pub srp_server_info: Option<SrpServerInfo>,
1464    /// The DNS-SD server counters.
1465    ///
1466    /// Only present on Thread networks.
1467    pub dnssd_counters: Option<DnssdCounters>,
1468    /// The data associated with the leader of the currently associated Thread network.
1469    ///
1470    /// Only present on Thread networks.
1471    pub leader_data: Option<LeaderData>,
1472    /// The uptime of the current instance.
1473    ///
1474    /// Required.
1475    pub uptime: Option<i64>,
1476    /// Information about the NAT64
1477    ///
1478    /// Only present on Thread networks.
1479    pub nat64_info: Option<Nat64Info>,
1480    /// Information about the TREL interface, if available.
1481    ///
1482    /// Only present on Thread networks.
1483    pub trel_counters: Option<TrelCounters>,
1484    /// Information about the TREL peers, if available.
1485    ///
1486    /// Only present on Thread networks.
1487    pub trel_peers_info: Option<TrelPeersInfo>,
1488    /// Information about the Upstream DNS feature, if available.
1489    ///
1490    /// Only present on Thread networks.
1491    pub upstream_dns_info: Option<UpstreamDnsInfo>,
1492    /// Information about the DHCPv6 PD feature, if available.
1493    ///
1494    /// Only present on Thread networks.
1495    pub dhcp6pd_info: Option<Dhcp6PdInfo>,
1496    /// Link Metrics Manager related info, if available.
1497    ///
1498    /// Only present on Thread networks.
1499    pub link_metrics_entries: Option<Vec<LinkMetricsEntry>>,
1500    /// Counters related to border agent functionality.
1501    ///
1502    /// Only present on Thread networks.
1503    pub border_agent_counters: Option<fidl_fuchsia_lowpan_device__common::BorderAgentCounters>,
1504    /// Whether multi-AIL (Adjacent Infrastructure Link) scenario is detected.
1505    ///
1506    /// Only present on Thread networks.
1507    pub multi_ail_detected: Option<bool>,
1508    /// The Extended PAN ID of the currently associated Thread network. This 8-byte unique
1509    /// identifier is used to distinguish different Thread networks.
1510    ///
1511    /// Only present on Thread networks.
1512    pub extended_pan_id: Option<u64>,
1513    /// Thread Border Routing peers information.
1514    ///
1515    /// Only present on Thread networks.
1516    pub border_routing_peers: Option<Vec<BorderRoutingPeer>>,
1517    /// Thread Border Routing discovered routers by Border Routing Manager on the infrastructure link.
1518    ///
1519    /// Only present on Thread networks.
1520    pub border_routing_routers: Option<Vec<BorderRoutingRouter>>,
1521    /// Thread Active Operational Dataset.
1522    ///
1523    /// Only present on Thread networks.
1524    pub active_dataset: Option<OperationalDataset>,
1525    #[doc(hidden)]
1526    pub __source_breaking: fidl::marker::SourceBreaking,
1527}
1528
1529impl fidl::Persistable for Telemetry {}
1530
1531/// Represents a group of TREL related counters in the platform layer.
1532///
1533/// Derived from [`otPlatTrelCounters`](https://openthread.io/reference/struct/ot-plat-trel-counters).
1534#[derive(Clone, Debug, Default, PartialEq)]
1535pub struct TrelCounters {
1536    /// Sum of size of packets received through TREL.
1537    pub rx_bytes: Option<u64>,
1538    /// Number of packets received through TREL.
1539    pub rx_packets: Option<u64>,
1540    /// Sum of size of packets successfully transmitted through TREL.
1541    pub tx_bytes: Option<u64>,
1542    /// Number of packet transmission failures through TREL.
1543    pub tx_failure: Option<u64>,
1544    /// Number of packets successfully transmitted through TREL.
1545    pub tx_packets: Option<u64>,
1546    #[doc(hidden)]
1547    pub __source_breaking: fidl::marker::SourceBreaking,
1548}
1549
1550impl fidl::Persistable for TrelCounters {}
1551
1552/// Represents the TREL peer related info.
1553///
1554/// The info is available in OpenThread via https://openthread.io/reference/group/api-trel
1555/// More fields may be added per request.
1556#[derive(Clone, Debug, Default, PartialEq)]
1557pub struct TrelPeersInfo {
1558    /// Number of TREL peers for this Thread Border Router.
1559    ///
1560    /// Required.
1561    pub num_trel_peers: Option<u16>,
1562    #[doc(hidden)]
1563    pub __source_breaking: fidl::marker::SourceBreaking,
1564}
1565
1566impl fidl::Persistable for TrelPeersInfo {}
1567
1568/// Represents the count of queries, responses, failures handled by upstream DNS server
1569///
1570/// Derived from `otUpstreamDnsCounters`(https://openthread.io/reference/group/api-dnssd-server)
1571#[derive(Clone, Debug, Default, PartialEq)]
1572pub struct UpstreamDnsCounters {
1573    /// The number of queries forwarded
1574    ///
1575    /// Required.
1576    pub queries: Option<u32>,
1577    /// The number of responses forwarded
1578    ///
1579    /// Required.
1580    pub responses: Option<u32>,
1581    /// The number of upstream DNS failures
1582    ///
1583    /// Required.
1584    pub failures: Option<u32>,
1585    #[doc(hidden)]
1586    pub __source_breaking: fidl::marker::SourceBreaking,
1587}
1588
1589impl fidl::Persistable for UpstreamDnsCounters {}
1590
1591/// Represents the Upstream DNS related info.
1592///
1593/// The info is available in OpenThread via https://openthread.io/reference/group/api-dnssd-server
1594/// More fields may be added per request.
1595#[derive(Clone, Debug, Default, PartialEq)]
1596pub struct UpstreamDnsInfo {
1597    /// State of upstream DNS query.
1598    ///
1599    /// Required.
1600    pub upstream_dns_query_state: Option<UpstreamDnsQueryState>,
1601    #[doc(hidden)]
1602    pub __source_breaking: fidl::marker::SourceBreaking,
1603}
1604
1605impl fidl::Persistable for UpstreamDnsInfo {}
1606
1607/// Parameters for DeviceExtra::JoinNetwork command.
1608#[derive(Clone, Debug)]
1609pub enum JoinParams {
1610    /// Attempts to find and join a known pre-existing network.
1611    ProvisioningParameter(fidl_fuchsia_lowpan_device__common::ProvisioningParams),
1612    /// Attempts to find and join an unknown pre-existing network
1613    /// that is configured to accept and provision devices with
1614    /// the given shared secret, or PSKd. This allows new devices to
1615    /// join existing networks without knowing the credentials for
1616    /// the specific network.
1617    JoinerParameter(JoinerCommissioningParams),
1618    #[doc(hidden)]
1619    __SourceBreaking { unknown_ordinal: u64 },
1620}
1621
1622/// Pattern that matches an unknown `JoinParams` member.
1623#[macro_export]
1624macro_rules! JoinParamsUnknown {
1625    () => {
1626        _
1627    };
1628}
1629
1630// Custom PartialEq so that unknown variants are not equal to themselves.
1631impl PartialEq for JoinParams {
1632    fn eq(&self, other: &Self) -> bool {
1633        match (self, other) {
1634            (Self::ProvisioningParameter(x), Self::ProvisioningParameter(y)) => *x == *y,
1635            (Self::JoinerParameter(x), Self::JoinerParameter(y)) => *x == *y,
1636            _ => false,
1637        }
1638    }
1639}
1640
1641impl JoinParams {
1642    #[inline]
1643    pub fn ordinal(&self) -> u64 {
1644        match *self {
1645            Self::ProvisioningParameter(_) => 1,
1646            Self::JoinerParameter(_) => 2,
1647            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
1648        }
1649    }
1650
1651    #[inline]
1652    pub fn unknown_variant_for_testing() -> Self {
1653        Self::__SourceBreaking { unknown_ordinal: 0 }
1654    }
1655
1656    #[inline]
1657    pub fn is_unknown(&self) -> bool {
1658        match self {
1659            Self::__SourceBreaking { .. } => true,
1660            _ => false,
1661        }
1662    }
1663}
1664
1665impl fidl::Persistable for JoinParams {}
1666
1667/// Indicates the current status of the form/join operation.
1668///
1669/// Returned by [`ProvisioningMonitor.WatchProgress`].
1670#[derive(Clone, Debug)]
1671pub enum ProvisioningProgress {
1672    /// Approximate percent complete indication for a user interface.
1673    Progress(f32),
1674    /// The final Identity when the operation has completed successfully.
1675    Identity(fidl_fuchsia_lowpan_device__common::Identity),
1676    #[doc(hidden)]
1677    __SourceBreaking { unknown_ordinal: u64 },
1678}
1679
1680/// Pattern that matches an unknown `ProvisioningProgress` member.
1681#[macro_export]
1682macro_rules! ProvisioningProgressUnknown {
1683    () => {
1684        _
1685    };
1686}
1687
1688// Custom PartialEq so that unknown variants are not equal to themselves.
1689impl PartialEq for ProvisioningProgress {
1690    fn eq(&self, other: &Self) -> bool {
1691        match (self, other) {
1692            (Self::Progress(x), Self::Progress(y)) => *x == *y,
1693            (Self::Identity(x), Self::Identity(y)) => *x == *y,
1694            _ => false,
1695        }
1696    }
1697}
1698
1699impl ProvisioningProgress {
1700    #[inline]
1701    pub fn ordinal(&self) -> u64 {
1702        match *self {
1703            Self::Progress(_) => 1,
1704            Self::Identity(_) => 2,
1705            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
1706        }
1707    }
1708
1709    #[inline]
1710    pub fn unknown_variant_for_testing() -> Self {
1711        Self::__SourceBreaking { unknown_ordinal: 0 }
1712    }
1713
1714    #[inline]
1715    pub fn is_unknown(&self) -> bool {
1716        match self {
1717            Self::__SourceBreaking { .. } => true,
1718            _ => false,
1719        }
1720    }
1721}
1722
1723impl fidl::Persistable for ProvisioningProgress {}
1724
1725pub mod beacon_info_stream_ordinals {
1726    pub const NEXT: u64 = 0x367a557363a340b6;
1727}
1728
1729pub mod device_ordinals {
1730    pub const GET_SUPPORTED_CHANNELS: u64 = 0x2d8b969a9bd70f23;
1731}
1732
1733pub mod device_connector_ordinals {
1734    pub const CONNECT: u64 = 0x296896c9304836cd;
1735}
1736
1737pub mod device_extra_ordinals {
1738    pub const FORM_NETWORK: u64 = 0x6a8135f84bfc90e;
1739    pub const JOIN_NETWORK: u64 = 0x3ea583bab79f81c0;
1740    pub const START_NETWORK_SCAN: u64 = 0x6288c73b79188b40;
1741}
1742
1743pub mod device_extra_connector_ordinals {
1744    pub const CONNECT: u64 = 0x3fcb37e4226c81e9;
1745}
1746
1747pub mod device_route_ordinals {
1748    pub const REGISTER_ON_MESH_PREFIX: u64 = 0x2c4135231eb97f61;
1749    pub const UNREGISTER_ON_MESH_PREFIX: u64 = 0x82d5184028b797f;
1750    pub const REGISTER_EXTERNAL_ROUTE: u64 = 0x75f70f0fc34a5a73;
1751    pub const UNREGISTER_EXTERNAL_ROUTE: u64 = 0x3769be353b1d7088;
1752}
1753
1754pub mod device_route_connector_ordinals {
1755    pub const CONNECT: u64 = 0x19cd5fdcb971f4ac;
1756}
1757
1758pub mod device_route_extra_ordinals {
1759    pub const GET_LOCAL_ON_MESH_PREFIXES: u64 = 0xf192c43311c811;
1760    pub const GET_LOCAL_EXTERNAL_ROUTES: u64 = 0x5a688c2e62c766a6;
1761}
1762
1763pub mod device_route_extra_connector_ordinals {
1764    pub const CONNECT: u64 = 0x12f72df7b1348fe2;
1765}
1766
1767pub mod legacy_joining_ordinals {
1768    pub const MAKE_JOINABLE: u64 = 0x1739a6ae36d5c5aa;
1769}
1770
1771pub mod legacy_joining_connector_ordinals {
1772    pub const CONNECT: u64 = 0x3c8dfeb943bb8d06;
1773}
1774
1775pub mod provisioning_monitor_ordinals {
1776    pub const WATCH_PROGRESS: u64 = 0xc35336fc43ac0c;
1777}
1778
1779pub mod telemetry_provider_ordinals {
1780    pub const GET_TELEMETRY: u64 = 0xc34f2fff7dacc41;
1781}
1782
1783pub mod telemetry_provider_connector_ordinals {
1784    pub const CONNECT: u64 = 0x24a5bf1be73e2fad;
1785}
1786
1787mod internal {
1788    use super::*;
1789    unsafe impl fidl::encoding::TypeMarker for Dhcp6PdState {
1790        type Owned = Self;
1791
1792        #[inline(always)]
1793        fn inline_align(_context: fidl::encoding::Context) -> usize {
1794            std::mem::align_of::<u32>()
1795        }
1796
1797        #[inline(always)]
1798        fn inline_size(_context: fidl::encoding::Context) -> usize {
1799            std::mem::size_of::<u32>()
1800        }
1801
1802        #[inline(always)]
1803        fn encode_is_copy() -> bool {
1804            false
1805        }
1806
1807        #[inline(always)]
1808        fn decode_is_copy() -> bool {
1809            false
1810        }
1811    }
1812
1813    impl fidl::encoding::ValueTypeMarker for Dhcp6PdState {
1814        type Borrowed<'a> = Self;
1815        #[inline(always)]
1816        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1817            *value
1818        }
1819    }
1820
1821    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for Dhcp6PdState {
1822        #[inline]
1823        unsafe fn encode(
1824            self,
1825            encoder: &mut fidl::encoding::Encoder<'_, D>,
1826            offset: usize,
1827            _depth: fidl::encoding::Depth,
1828        ) -> fidl::Result<()> {
1829            encoder.debug_check_bounds::<Self>(offset);
1830            encoder.write_num(self.into_primitive(), offset);
1831            Ok(())
1832        }
1833    }
1834
1835    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Dhcp6PdState {
1836        #[inline(always)]
1837        fn new_empty() -> Self {
1838            Self::unknown()
1839        }
1840
1841        #[inline]
1842        unsafe fn decode(
1843            &mut self,
1844            decoder: &mut fidl::encoding::Decoder<'_, D>,
1845            offset: usize,
1846            _depth: fidl::encoding::Depth,
1847        ) -> fidl::Result<()> {
1848            decoder.debug_check_bounds::<Self>(offset);
1849            let prim = decoder.read_num::<u32>(offset);
1850
1851            *self = Self::from_primitive_allow_unknown(prim);
1852            Ok(())
1853        }
1854    }
1855    unsafe impl fidl::encoding::TypeMarker for Nat64State {
1856        type Owned = Self;
1857
1858        #[inline(always)]
1859        fn inline_align(_context: fidl::encoding::Context) -> usize {
1860            std::mem::align_of::<u32>()
1861        }
1862
1863        #[inline(always)]
1864        fn inline_size(_context: fidl::encoding::Context) -> usize {
1865            std::mem::size_of::<u32>()
1866        }
1867
1868        #[inline(always)]
1869        fn encode_is_copy() -> bool {
1870            false
1871        }
1872
1873        #[inline(always)]
1874        fn decode_is_copy() -> bool {
1875            false
1876        }
1877    }
1878
1879    impl fidl::encoding::ValueTypeMarker for Nat64State {
1880        type Borrowed<'a> = Self;
1881        #[inline(always)]
1882        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1883            *value
1884        }
1885    }
1886
1887    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for Nat64State {
1888        #[inline]
1889        unsafe fn encode(
1890            self,
1891            encoder: &mut fidl::encoding::Encoder<'_, D>,
1892            offset: usize,
1893            _depth: fidl::encoding::Depth,
1894        ) -> fidl::Result<()> {
1895            encoder.debug_check_bounds::<Self>(offset);
1896            encoder.write_num(self.into_primitive(), offset);
1897            Ok(())
1898        }
1899    }
1900
1901    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Nat64State {
1902        #[inline(always)]
1903        fn new_empty() -> Self {
1904            Self::unknown()
1905        }
1906
1907        #[inline]
1908        unsafe fn decode(
1909            &mut self,
1910            decoder: &mut fidl::encoding::Decoder<'_, D>,
1911            offset: usize,
1912            _depth: fidl::encoding::Depth,
1913        ) -> fidl::Result<()> {
1914            decoder.debug_check_bounds::<Self>(offset);
1915            let prim = decoder.read_num::<u32>(offset);
1916
1917            *self = Self::from_primitive_allow_unknown(prim);
1918            Ok(())
1919        }
1920    }
1921    unsafe impl fidl::encoding::TypeMarker for ProvisionError {
1922        type Owned = Self;
1923
1924        #[inline(always)]
1925        fn inline_align(_context: fidl::encoding::Context) -> usize {
1926            std::mem::align_of::<i32>()
1927        }
1928
1929        #[inline(always)]
1930        fn inline_size(_context: fidl::encoding::Context) -> usize {
1931            std::mem::size_of::<i32>()
1932        }
1933
1934        #[inline(always)]
1935        fn encode_is_copy() -> bool {
1936            false
1937        }
1938
1939        #[inline(always)]
1940        fn decode_is_copy() -> bool {
1941            false
1942        }
1943    }
1944
1945    impl fidl::encoding::ValueTypeMarker for ProvisionError {
1946        type Borrowed<'a> = Self;
1947        #[inline(always)]
1948        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1949            *value
1950        }
1951    }
1952
1953    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for ProvisionError {
1954        #[inline]
1955        unsafe fn encode(
1956            self,
1957            encoder: &mut fidl::encoding::Encoder<'_, D>,
1958            offset: usize,
1959            _depth: fidl::encoding::Depth,
1960        ) -> fidl::Result<()> {
1961            encoder.debug_check_bounds::<Self>(offset);
1962            encoder.write_num(self.into_primitive(), offset);
1963            Ok(())
1964        }
1965    }
1966
1967    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ProvisionError {
1968        #[inline(always)]
1969        fn new_empty() -> Self {
1970            Self::unknown()
1971        }
1972
1973        #[inline]
1974        unsafe fn decode(
1975            &mut self,
1976            decoder: &mut fidl::encoding::Decoder<'_, D>,
1977            offset: usize,
1978            _depth: fidl::encoding::Depth,
1979        ) -> fidl::Result<()> {
1980            decoder.debug_check_bounds::<Self>(offset);
1981            let prim = decoder.read_num::<i32>(offset);
1982
1983            *self = Self::from_primitive_allow_unknown(prim);
1984            Ok(())
1985        }
1986    }
1987    unsafe impl fidl::encoding::TypeMarker for RoutePreference {
1988        type Owned = Self;
1989
1990        #[inline(always)]
1991        fn inline_align(_context: fidl::encoding::Context) -> usize {
1992            std::mem::align_of::<i8>()
1993        }
1994
1995        #[inline(always)]
1996        fn inline_size(_context: fidl::encoding::Context) -> usize {
1997            std::mem::size_of::<i8>()
1998        }
1999
2000        #[inline(always)]
2001        fn encode_is_copy() -> bool {
2002            true
2003        }
2004
2005        #[inline(always)]
2006        fn decode_is_copy() -> bool {
2007            false
2008        }
2009    }
2010
2011    impl fidl::encoding::ValueTypeMarker for RoutePreference {
2012        type Borrowed<'a> = Self;
2013        #[inline(always)]
2014        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2015            *value
2016        }
2017    }
2018
2019    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
2020        for RoutePreference
2021    {
2022        #[inline]
2023        unsafe fn encode(
2024            self,
2025            encoder: &mut fidl::encoding::Encoder<'_, D>,
2026            offset: usize,
2027            _depth: fidl::encoding::Depth,
2028        ) -> fidl::Result<()> {
2029            encoder.debug_check_bounds::<Self>(offset);
2030            encoder.write_num(self.into_primitive(), offset);
2031            Ok(())
2032        }
2033    }
2034
2035    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for RoutePreference {
2036        #[inline(always)]
2037        fn new_empty() -> Self {
2038            Self::Low
2039        }
2040
2041        #[inline]
2042        unsafe fn decode(
2043            &mut self,
2044            decoder: &mut fidl::encoding::Decoder<'_, D>,
2045            offset: usize,
2046            _depth: fidl::encoding::Depth,
2047        ) -> fidl::Result<()> {
2048            decoder.debug_check_bounds::<Self>(offset);
2049            let prim = decoder.read_num::<i8>(offset);
2050
2051            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
2052            Ok(())
2053        }
2054    }
2055    unsafe impl fidl::encoding::TypeMarker for SrpServerAddressMode {
2056        type Owned = Self;
2057
2058        #[inline(always)]
2059        fn inline_align(_context: fidl::encoding::Context) -> usize {
2060            std::mem::align_of::<u32>()
2061        }
2062
2063        #[inline(always)]
2064        fn inline_size(_context: fidl::encoding::Context) -> usize {
2065            std::mem::size_of::<u32>()
2066        }
2067
2068        #[inline(always)]
2069        fn encode_is_copy() -> bool {
2070            true
2071        }
2072
2073        #[inline(always)]
2074        fn decode_is_copy() -> bool {
2075            false
2076        }
2077    }
2078
2079    impl fidl::encoding::ValueTypeMarker for SrpServerAddressMode {
2080        type Borrowed<'a> = Self;
2081        #[inline(always)]
2082        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2083            *value
2084        }
2085    }
2086
2087    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
2088        for SrpServerAddressMode
2089    {
2090        #[inline]
2091        unsafe fn encode(
2092            self,
2093            encoder: &mut fidl::encoding::Encoder<'_, D>,
2094            offset: usize,
2095            _depth: fidl::encoding::Depth,
2096        ) -> fidl::Result<()> {
2097            encoder.debug_check_bounds::<Self>(offset);
2098            encoder.write_num(self.into_primitive(), offset);
2099            Ok(())
2100        }
2101    }
2102
2103    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SrpServerAddressMode {
2104        #[inline(always)]
2105        fn new_empty() -> Self {
2106            Self::Unicast
2107        }
2108
2109        #[inline]
2110        unsafe fn decode(
2111            &mut self,
2112            decoder: &mut fidl::encoding::Decoder<'_, D>,
2113            offset: usize,
2114            _depth: fidl::encoding::Depth,
2115        ) -> fidl::Result<()> {
2116            decoder.debug_check_bounds::<Self>(offset);
2117            let prim = decoder.read_num::<u32>(offset);
2118
2119            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
2120            Ok(())
2121        }
2122    }
2123    unsafe impl fidl::encoding::TypeMarker for SrpServerState {
2124        type Owned = Self;
2125
2126        #[inline(always)]
2127        fn inline_align(_context: fidl::encoding::Context) -> usize {
2128            std::mem::align_of::<u32>()
2129        }
2130
2131        #[inline(always)]
2132        fn inline_size(_context: fidl::encoding::Context) -> usize {
2133            std::mem::size_of::<u32>()
2134        }
2135
2136        #[inline(always)]
2137        fn encode_is_copy() -> bool {
2138            true
2139        }
2140
2141        #[inline(always)]
2142        fn decode_is_copy() -> bool {
2143            false
2144        }
2145    }
2146
2147    impl fidl::encoding::ValueTypeMarker for SrpServerState {
2148        type Borrowed<'a> = Self;
2149        #[inline(always)]
2150        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2151            *value
2152        }
2153    }
2154
2155    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for SrpServerState {
2156        #[inline]
2157        unsafe fn encode(
2158            self,
2159            encoder: &mut fidl::encoding::Encoder<'_, D>,
2160            offset: usize,
2161            _depth: fidl::encoding::Depth,
2162        ) -> fidl::Result<()> {
2163            encoder.debug_check_bounds::<Self>(offset);
2164            encoder.write_num(self.into_primitive(), offset);
2165            Ok(())
2166        }
2167    }
2168
2169    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SrpServerState {
2170        #[inline(always)]
2171        fn new_empty() -> Self {
2172            Self::Disabled
2173        }
2174
2175        #[inline]
2176        unsafe fn decode(
2177            &mut self,
2178            decoder: &mut fidl::encoding::Decoder<'_, D>,
2179            offset: usize,
2180            _depth: fidl::encoding::Depth,
2181        ) -> fidl::Result<()> {
2182            decoder.debug_check_bounds::<Self>(offset);
2183            let prim = decoder.read_num::<u32>(offset);
2184
2185            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
2186            Ok(())
2187        }
2188    }
2189    unsafe impl fidl::encoding::TypeMarker for UpstreamDnsQueryState {
2190        type Owned = Self;
2191
2192        #[inline(always)]
2193        fn inline_align(_context: fidl::encoding::Context) -> usize {
2194            std::mem::align_of::<u32>()
2195        }
2196
2197        #[inline(always)]
2198        fn inline_size(_context: fidl::encoding::Context) -> usize {
2199            std::mem::size_of::<u32>()
2200        }
2201
2202        #[inline(always)]
2203        fn encode_is_copy() -> bool {
2204            false
2205        }
2206
2207        #[inline(always)]
2208        fn decode_is_copy() -> bool {
2209            false
2210        }
2211    }
2212
2213    impl fidl::encoding::ValueTypeMarker for UpstreamDnsQueryState {
2214        type Borrowed<'a> = Self;
2215        #[inline(always)]
2216        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2217            *value
2218        }
2219    }
2220
2221    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
2222        for UpstreamDnsQueryState
2223    {
2224        #[inline]
2225        unsafe fn encode(
2226            self,
2227            encoder: &mut fidl::encoding::Encoder<'_, D>,
2228            offset: usize,
2229            _depth: fidl::encoding::Depth,
2230        ) -> fidl::Result<()> {
2231            encoder.debug_check_bounds::<Self>(offset);
2232            encoder.write_num(self.into_primitive(), offset);
2233            Ok(())
2234        }
2235    }
2236
2237    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for UpstreamDnsQueryState {
2238        #[inline(always)]
2239        fn new_empty() -> Self {
2240            Self::unknown()
2241        }
2242
2243        #[inline]
2244        unsafe fn decode(
2245            &mut self,
2246            decoder: &mut fidl::encoding::Decoder<'_, D>,
2247            offset: usize,
2248            _depth: fidl::encoding::Depth,
2249        ) -> fidl::Result<()> {
2250            decoder.debug_check_bounds::<Self>(offset);
2251            let prim = decoder.read_num::<u32>(offset);
2252
2253            *self = Self::from_primitive_allow_unknown(prim);
2254            Ok(())
2255        }
2256    }
2257
2258    impl fidl::encoding::ValueTypeMarker for BeaconInfoStreamNextResponse {
2259        type Borrowed<'a> = &'a Self;
2260        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2261            value
2262        }
2263    }
2264
2265    unsafe impl fidl::encoding::TypeMarker for BeaconInfoStreamNextResponse {
2266        type Owned = Self;
2267
2268        #[inline(always)]
2269        fn inline_align(_context: fidl::encoding::Context) -> usize {
2270            8
2271        }
2272
2273        #[inline(always)]
2274        fn inline_size(_context: fidl::encoding::Context) -> usize {
2275            16
2276        }
2277    }
2278
2279    unsafe impl<D: fidl::encoding::ResourceDialect>
2280        fidl::encoding::Encode<BeaconInfoStreamNextResponse, D> for &BeaconInfoStreamNextResponse
2281    {
2282        #[inline]
2283        unsafe fn encode(
2284            self,
2285            encoder: &mut fidl::encoding::Encoder<'_, D>,
2286            offset: usize,
2287            _depth: fidl::encoding::Depth,
2288        ) -> fidl::Result<()> {
2289            encoder.debug_check_bounds::<BeaconInfoStreamNextResponse>(offset);
2290            // Delegate to tuple encoding.
2291            fidl::encoding::Encode::<BeaconInfoStreamNextResponse, D>::encode(
2292                (
2293                    <fidl::encoding::Vector<BeaconInfo, 32> as fidl::encoding::ValueTypeMarker>::borrow(&self.beacons),
2294                ),
2295                encoder, offset, _depth
2296            )
2297        }
2298    }
2299    unsafe impl<
2300        D: fidl::encoding::ResourceDialect,
2301        T0: fidl::encoding::Encode<fidl::encoding::Vector<BeaconInfo, 32>, D>,
2302    > fidl::encoding::Encode<BeaconInfoStreamNextResponse, D> for (T0,)
2303    {
2304        #[inline]
2305        unsafe fn encode(
2306            self,
2307            encoder: &mut fidl::encoding::Encoder<'_, D>,
2308            offset: usize,
2309            depth: fidl::encoding::Depth,
2310        ) -> fidl::Result<()> {
2311            encoder.debug_check_bounds::<BeaconInfoStreamNextResponse>(offset);
2312            // Zero out padding regions. There's no need to apply masks
2313            // because the unmasked parts will be overwritten by fields.
2314            // Write the fields.
2315            self.0.encode(encoder, offset + 0, depth)?;
2316            Ok(())
2317        }
2318    }
2319
2320    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2321        for BeaconInfoStreamNextResponse
2322    {
2323        #[inline(always)]
2324        fn new_empty() -> Self {
2325            Self { beacons: fidl::new_empty!(fidl::encoding::Vector<BeaconInfo, 32>, D) }
2326        }
2327
2328        #[inline]
2329        unsafe fn decode(
2330            &mut self,
2331            decoder: &mut fidl::encoding::Decoder<'_, D>,
2332            offset: usize,
2333            _depth: fidl::encoding::Depth,
2334        ) -> fidl::Result<()> {
2335            decoder.debug_check_bounds::<Self>(offset);
2336            // Verify that padding bytes are zero.
2337            fidl::decode!(fidl::encoding::Vector<BeaconInfo, 32>, D, &mut self.beacons, decoder, offset + 0, _depth)?;
2338            Ok(())
2339        }
2340    }
2341
2342    impl fidl::encoding::ValueTypeMarker for DeviceGetSupportedChannelsResponse {
2343        type Borrowed<'a> = &'a Self;
2344        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2345            value
2346        }
2347    }
2348
2349    unsafe impl fidl::encoding::TypeMarker for DeviceGetSupportedChannelsResponse {
2350        type Owned = Self;
2351
2352        #[inline(always)]
2353        fn inline_align(_context: fidl::encoding::Context) -> usize {
2354            8
2355        }
2356
2357        #[inline(always)]
2358        fn inline_size(_context: fidl::encoding::Context) -> usize {
2359            16
2360        }
2361    }
2362
2363    unsafe impl<D: fidl::encoding::ResourceDialect>
2364        fidl::encoding::Encode<DeviceGetSupportedChannelsResponse, D>
2365        for &DeviceGetSupportedChannelsResponse
2366    {
2367        #[inline]
2368        unsafe fn encode(
2369            self,
2370            encoder: &mut fidl::encoding::Encoder<'_, D>,
2371            offset: usize,
2372            _depth: fidl::encoding::Depth,
2373        ) -> fidl::Result<()> {
2374            encoder.debug_check_bounds::<DeviceGetSupportedChannelsResponse>(offset);
2375            // Delegate to tuple encoding.
2376            fidl::encoding::Encode::<DeviceGetSupportedChannelsResponse, D>::encode(
2377                (
2378                    <fidl::encoding::Vector<ChannelInfo, 200> as fidl::encoding::ValueTypeMarker>::borrow(&self.channels_info),
2379                ),
2380                encoder, offset, _depth
2381            )
2382        }
2383    }
2384    unsafe impl<
2385        D: fidl::encoding::ResourceDialect,
2386        T0: fidl::encoding::Encode<fidl::encoding::Vector<ChannelInfo, 200>, D>,
2387    > fidl::encoding::Encode<DeviceGetSupportedChannelsResponse, D> for (T0,)
2388    {
2389        #[inline]
2390        unsafe fn encode(
2391            self,
2392            encoder: &mut fidl::encoding::Encoder<'_, D>,
2393            offset: usize,
2394            depth: fidl::encoding::Depth,
2395        ) -> fidl::Result<()> {
2396            encoder.debug_check_bounds::<DeviceGetSupportedChannelsResponse>(offset);
2397            // Zero out padding regions. There's no need to apply masks
2398            // because the unmasked parts will be overwritten by fields.
2399            // Write the fields.
2400            self.0.encode(encoder, offset + 0, depth)?;
2401            Ok(())
2402        }
2403    }
2404
2405    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2406        for DeviceGetSupportedChannelsResponse
2407    {
2408        #[inline(always)]
2409        fn new_empty() -> Self {
2410            Self { channels_info: fidl::new_empty!(fidl::encoding::Vector<ChannelInfo, 200>, D) }
2411        }
2412
2413        #[inline]
2414        unsafe fn decode(
2415            &mut self,
2416            decoder: &mut fidl::encoding::Decoder<'_, D>,
2417            offset: usize,
2418            _depth: fidl::encoding::Depth,
2419        ) -> fidl::Result<()> {
2420            decoder.debug_check_bounds::<Self>(offset);
2421            // Verify that padding bytes are zero.
2422            fidl::decode!(fidl::encoding::Vector<ChannelInfo, 200>, D, &mut self.channels_info, decoder, offset + 0, _depth)?;
2423            Ok(())
2424        }
2425    }
2426
2427    impl fidl::encoding::ValueTypeMarker for DeviceRouteExtraGetLocalExternalRoutesResponse {
2428        type Borrowed<'a> = &'a Self;
2429        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2430            value
2431        }
2432    }
2433
2434    unsafe impl fidl::encoding::TypeMarker for DeviceRouteExtraGetLocalExternalRoutesResponse {
2435        type Owned = Self;
2436
2437        #[inline(always)]
2438        fn inline_align(_context: fidl::encoding::Context) -> usize {
2439            8
2440        }
2441
2442        #[inline(always)]
2443        fn inline_size(_context: fidl::encoding::Context) -> usize {
2444            16
2445        }
2446    }
2447
2448    unsafe impl<D: fidl::encoding::ResourceDialect>
2449        fidl::encoding::Encode<DeviceRouteExtraGetLocalExternalRoutesResponse, D>
2450        for &DeviceRouteExtraGetLocalExternalRoutesResponse
2451    {
2452        #[inline]
2453        unsafe fn encode(
2454            self,
2455            encoder: &mut fidl::encoding::Encoder<'_, D>,
2456            offset: usize,
2457            _depth: fidl::encoding::Depth,
2458        ) -> fidl::Result<()> {
2459            encoder.debug_check_bounds::<DeviceRouteExtraGetLocalExternalRoutesResponse>(offset);
2460            // Delegate to tuple encoding.
2461            fidl::encoding::Encode::<DeviceRouteExtraGetLocalExternalRoutesResponse, D>::encode(
2462                (
2463                    <fidl::encoding::Vector<ExternalRoute, 32> as fidl::encoding::ValueTypeMarker>::borrow(&self.external_routes),
2464                ),
2465                encoder, offset, _depth
2466            )
2467        }
2468    }
2469    unsafe impl<
2470        D: fidl::encoding::ResourceDialect,
2471        T0: fidl::encoding::Encode<fidl::encoding::Vector<ExternalRoute, 32>, D>,
2472    > fidl::encoding::Encode<DeviceRouteExtraGetLocalExternalRoutesResponse, D> for (T0,)
2473    {
2474        #[inline]
2475        unsafe fn encode(
2476            self,
2477            encoder: &mut fidl::encoding::Encoder<'_, D>,
2478            offset: usize,
2479            depth: fidl::encoding::Depth,
2480        ) -> fidl::Result<()> {
2481            encoder.debug_check_bounds::<DeviceRouteExtraGetLocalExternalRoutesResponse>(offset);
2482            // Zero out padding regions. There's no need to apply masks
2483            // because the unmasked parts will be overwritten by fields.
2484            // Write the fields.
2485            self.0.encode(encoder, offset + 0, depth)?;
2486            Ok(())
2487        }
2488    }
2489
2490    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2491        for DeviceRouteExtraGetLocalExternalRoutesResponse
2492    {
2493        #[inline(always)]
2494        fn new_empty() -> Self {
2495            Self { external_routes: fidl::new_empty!(fidl::encoding::Vector<ExternalRoute, 32>, D) }
2496        }
2497
2498        #[inline]
2499        unsafe fn decode(
2500            &mut self,
2501            decoder: &mut fidl::encoding::Decoder<'_, D>,
2502            offset: usize,
2503            _depth: fidl::encoding::Depth,
2504        ) -> fidl::Result<()> {
2505            decoder.debug_check_bounds::<Self>(offset);
2506            // Verify that padding bytes are zero.
2507            fidl::decode!(fidl::encoding::Vector<ExternalRoute, 32>, D, &mut self.external_routes, decoder, offset + 0, _depth)?;
2508            Ok(())
2509        }
2510    }
2511
2512    impl fidl::encoding::ValueTypeMarker for DeviceRouteExtraGetLocalOnMeshPrefixesResponse {
2513        type Borrowed<'a> = &'a Self;
2514        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2515            value
2516        }
2517    }
2518
2519    unsafe impl fidl::encoding::TypeMarker for DeviceRouteExtraGetLocalOnMeshPrefixesResponse {
2520        type Owned = Self;
2521
2522        #[inline(always)]
2523        fn inline_align(_context: fidl::encoding::Context) -> usize {
2524            8
2525        }
2526
2527        #[inline(always)]
2528        fn inline_size(_context: fidl::encoding::Context) -> usize {
2529            16
2530        }
2531    }
2532
2533    unsafe impl<D: fidl::encoding::ResourceDialect>
2534        fidl::encoding::Encode<DeviceRouteExtraGetLocalOnMeshPrefixesResponse, D>
2535        for &DeviceRouteExtraGetLocalOnMeshPrefixesResponse
2536    {
2537        #[inline]
2538        unsafe fn encode(
2539            self,
2540            encoder: &mut fidl::encoding::Encoder<'_, D>,
2541            offset: usize,
2542            _depth: fidl::encoding::Depth,
2543        ) -> fidl::Result<()> {
2544            encoder.debug_check_bounds::<DeviceRouteExtraGetLocalOnMeshPrefixesResponse>(offset);
2545            // Delegate to tuple encoding.
2546            fidl::encoding::Encode::<DeviceRouteExtraGetLocalOnMeshPrefixesResponse, D>::encode(
2547                (
2548                    <fidl::encoding::Vector<OnMeshPrefix, 32> as fidl::encoding::ValueTypeMarker>::borrow(&self.prefixes),
2549                ),
2550                encoder, offset, _depth
2551            )
2552        }
2553    }
2554    unsafe impl<
2555        D: fidl::encoding::ResourceDialect,
2556        T0: fidl::encoding::Encode<fidl::encoding::Vector<OnMeshPrefix, 32>, D>,
2557    > fidl::encoding::Encode<DeviceRouteExtraGetLocalOnMeshPrefixesResponse, D> for (T0,)
2558    {
2559        #[inline]
2560        unsafe fn encode(
2561            self,
2562            encoder: &mut fidl::encoding::Encoder<'_, D>,
2563            offset: usize,
2564            depth: fidl::encoding::Depth,
2565        ) -> fidl::Result<()> {
2566            encoder.debug_check_bounds::<DeviceRouteExtraGetLocalOnMeshPrefixesResponse>(offset);
2567            // Zero out padding regions. There's no need to apply masks
2568            // because the unmasked parts will be overwritten by fields.
2569            // Write the fields.
2570            self.0.encode(encoder, offset + 0, depth)?;
2571            Ok(())
2572        }
2573    }
2574
2575    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2576        for DeviceRouteExtraGetLocalOnMeshPrefixesResponse
2577    {
2578        #[inline(always)]
2579        fn new_empty() -> Self {
2580            Self { prefixes: fidl::new_empty!(fidl::encoding::Vector<OnMeshPrefix, 32>, D) }
2581        }
2582
2583        #[inline]
2584        unsafe fn decode(
2585            &mut self,
2586            decoder: &mut fidl::encoding::Decoder<'_, D>,
2587            offset: usize,
2588            _depth: fidl::encoding::Depth,
2589        ) -> fidl::Result<()> {
2590            decoder.debug_check_bounds::<Self>(offset);
2591            // Verify that padding bytes are zero.
2592            fidl::decode!(fidl::encoding::Vector<OnMeshPrefix, 32>, D, &mut self.prefixes, decoder, offset + 0, _depth)?;
2593            Ok(())
2594        }
2595    }
2596
2597    impl fidl::encoding::ValueTypeMarker for DeviceRouteRegisterExternalRouteRequest {
2598        type Borrowed<'a> = &'a Self;
2599        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2600            value
2601        }
2602    }
2603
2604    unsafe impl fidl::encoding::TypeMarker for DeviceRouteRegisterExternalRouteRequest {
2605        type Owned = Self;
2606
2607        #[inline(always)]
2608        fn inline_align(_context: fidl::encoding::Context) -> usize {
2609            8
2610        }
2611
2612        #[inline(always)]
2613        fn inline_size(_context: fidl::encoding::Context) -> usize {
2614            16
2615        }
2616    }
2617
2618    unsafe impl<D: fidl::encoding::ResourceDialect>
2619        fidl::encoding::Encode<DeviceRouteRegisterExternalRouteRequest, D>
2620        for &DeviceRouteRegisterExternalRouteRequest
2621    {
2622        #[inline]
2623        unsafe fn encode(
2624            self,
2625            encoder: &mut fidl::encoding::Encoder<'_, D>,
2626            offset: usize,
2627            _depth: fidl::encoding::Depth,
2628        ) -> fidl::Result<()> {
2629            encoder.debug_check_bounds::<DeviceRouteRegisterExternalRouteRequest>(offset);
2630            // Delegate to tuple encoding.
2631            fidl::encoding::Encode::<DeviceRouteRegisterExternalRouteRequest, D>::encode(
2632                (<ExternalRoute as fidl::encoding::ValueTypeMarker>::borrow(&self.external_route),),
2633                encoder,
2634                offset,
2635                _depth,
2636            )
2637        }
2638    }
2639    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<ExternalRoute, D>>
2640        fidl::encoding::Encode<DeviceRouteRegisterExternalRouteRequest, D> for (T0,)
2641    {
2642        #[inline]
2643        unsafe fn encode(
2644            self,
2645            encoder: &mut fidl::encoding::Encoder<'_, D>,
2646            offset: usize,
2647            depth: fidl::encoding::Depth,
2648        ) -> fidl::Result<()> {
2649            encoder.debug_check_bounds::<DeviceRouteRegisterExternalRouteRequest>(offset);
2650            // Zero out padding regions. There's no need to apply masks
2651            // because the unmasked parts will be overwritten by fields.
2652            // Write the fields.
2653            self.0.encode(encoder, offset + 0, depth)?;
2654            Ok(())
2655        }
2656    }
2657
2658    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2659        for DeviceRouteRegisterExternalRouteRequest
2660    {
2661        #[inline(always)]
2662        fn new_empty() -> Self {
2663            Self { external_route: fidl::new_empty!(ExternalRoute, D) }
2664        }
2665
2666        #[inline]
2667        unsafe fn decode(
2668            &mut self,
2669            decoder: &mut fidl::encoding::Decoder<'_, D>,
2670            offset: usize,
2671            _depth: fidl::encoding::Depth,
2672        ) -> fidl::Result<()> {
2673            decoder.debug_check_bounds::<Self>(offset);
2674            // Verify that padding bytes are zero.
2675            fidl::decode!(ExternalRoute, D, &mut self.external_route, decoder, offset + 0, _depth)?;
2676            Ok(())
2677        }
2678    }
2679
2680    impl fidl::encoding::ValueTypeMarker for DeviceRouteRegisterOnMeshPrefixRequest {
2681        type Borrowed<'a> = &'a Self;
2682        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2683            value
2684        }
2685    }
2686
2687    unsafe impl fidl::encoding::TypeMarker for DeviceRouteRegisterOnMeshPrefixRequest {
2688        type Owned = Self;
2689
2690        #[inline(always)]
2691        fn inline_align(_context: fidl::encoding::Context) -> usize {
2692            8
2693        }
2694
2695        #[inline(always)]
2696        fn inline_size(_context: fidl::encoding::Context) -> usize {
2697            16
2698        }
2699    }
2700
2701    unsafe impl<D: fidl::encoding::ResourceDialect>
2702        fidl::encoding::Encode<DeviceRouteRegisterOnMeshPrefixRequest, D>
2703        for &DeviceRouteRegisterOnMeshPrefixRequest
2704    {
2705        #[inline]
2706        unsafe fn encode(
2707            self,
2708            encoder: &mut fidl::encoding::Encoder<'_, D>,
2709            offset: usize,
2710            _depth: fidl::encoding::Depth,
2711        ) -> fidl::Result<()> {
2712            encoder.debug_check_bounds::<DeviceRouteRegisterOnMeshPrefixRequest>(offset);
2713            // Delegate to tuple encoding.
2714            fidl::encoding::Encode::<DeviceRouteRegisterOnMeshPrefixRequest, D>::encode(
2715                (<OnMeshPrefix as fidl::encoding::ValueTypeMarker>::borrow(&self.prefix),),
2716                encoder,
2717                offset,
2718                _depth,
2719            )
2720        }
2721    }
2722    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<OnMeshPrefix, D>>
2723        fidl::encoding::Encode<DeviceRouteRegisterOnMeshPrefixRequest, D> for (T0,)
2724    {
2725        #[inline]
2726        unsafe fn encode(
2727            self,
2728            encoder: &mut fidl::encoding::Encoder<'_, D>,
2729            offset: usize,
2730            depth: fidl::encoding::Depth,
2731        ) -> fidl::Result<()> {
2732            encoder.debug_check_bounds::<DeviceRouteRegisterOnMeshPrefixRequest>(offset);
2733            // Zero out padding regions. There's no need to apply masks
2734            // because the unmasked parts will be overwritten by fields.
2735            // Write the fields.
2736            self.0.encode(encoder, offset + 0, depth)?;
2737            Ok(())
2738        }
2739    }
2740
2741    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2742        for DeviceRouteRegisterOnMeshPrefixRequest
2743    {
2744        #[inline(always)]
2745        fn new_empty() -> Self {
2746            Self { prefix: fidl::new_empty!(OnMeshPrefix, D) }
2747        }
2748
2749        #[inline]
2750        unsafe fn decode(
2751            &mut self,
2752            decoder: &mut fidl::encoding::Decoder<'_, D>,
2753            offset: usize,
2754            _depth: fidl::encoding::Depth,
2755        ) -> fidl::Result<()> {
2756            decoder.debug_check_bounds::<Self>(offset);
2757            // Verify that padding bytes are zero.
2758            fidl::decode!(OnMeshPrefix, D, &mut self.prefix, decoder, offset + 0, _depth)?;
2759            Ok(())
2760        }
2761    }
2762
2763    impl fidl::encoding::ValueTypeMarker for DeviceRouteUnregisterExternalRouteRequest {
2764        type Borrowed<'a> = &'a Self;
2765        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2766            value
2767        }
2768    }
2769
2770    unsafe impl fidl::encoding::TypeMarker for DeviceRouteUnregisterExternalRouteRequest {
2771        type Owned = Self;
2772
2773        #[inline(always)]
2774        fn inline_align(_context: fidl::encoding::Context) -> usize {
2775            1
2776        }
2777
2778        #[inline(always)]
2779        fn inline_size(_context: fidl::encoding::Context) -> usize {
2780            17
2781        }
2782    }
2783
2784    unsafe impl<D: fidl::encoding::ResourceDialect>
2785        fidl::encoding::Encode<DeviceRouteUnregisterExternalRouteRequest, D>
2786        for &DeviceRouteUnregisterExternalRouteRequest
2787    {
2788        #[inline]
2789        unsafe fn encode(
2790            self,
2791            encoder: &mut fidl::encoding::Encoder<'_, D>,
2792            offset: usize,
2793            _depth: fidl::encoding::Depth,
2794        ) -> fidl::Result<()> {
2795            encoder.debug_check_bounds::<DeviceRouteUnregisterExternalRouteRequest>(offset);
2796            // Delegate to tuple encoding.
2797            fidl::encoding::Encode::<DeviceRouteUnregisterExternalRouteRequest, D>::encode(
2798                (
2799                    <fidl_fuchsia_net__common::Ipv6AddressWithPrefix as fidl::encoding::ValueTypeMarker>::borrow(&self.subnet),
2800                ),
2801                encoder, offset, _depth
2802            )
2803        }
2804    }
2805    unsafe impl<
2806        D: fidl::encoding::ResourceDialect,
2807        T0: fidl::encoding::Encode<fidl_fuchsia_net__common::Ipv6AddressWithPrefix, D>,
2808    > fidl::encoding::Encode<DeviceRouteUnregisterExternalRouteRequest, D> for (T0,)
2809    {
2810        #[inline]
2811        unsafe fn encode(
2812            self,
2813            encoder: &mut fidl::encoding::Encoder<'_, D>,
2814            offset: usize,
2815            depth: fidl::encoding::Depth,
2816        ) -> fidl::Result<()> {
2817            encoder.debug_check_bounds::<DeviceRouteUnregisterExternalRouteRequest>(offset);
2818            // Zero out padding regions. There's no need to apply masks
2819            // because the unmasked parts will be overwritten by fields.
2820            // Write the fields.
2821            self.0.encode(encoder, offset + 0, depth)?;
2822            Ok(())
2823        }
2824    }
2825
2826    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2827        for DeviceRouteUnregisterExternalRouteRequest
2828    {
2829        #[inline(always)]
2830        fn new_empty() -> Self {
2831            Self { subnet: fidl::new_empty!(fidl_fuchsia_net__common::Ipv6AddressWithPrefix, D) }
2832        }
2833
2834        #[inline]
2835        unsafe fn decode(
2836            &mut self,
2837            decoder: &mut fidl::encoding::Decoder<'_, D>,
2838            offset: usize,
2839            _depth: fidl::encoding::Depth,
2840        ) -> fidl::Result<()> {
2841            decoder.debug_check_bounds::<Self>(offset);
2842            // Verify that padding bytes are zero.
2843            fidl::decode!(
2844                fidl_fuchsia_net__common::Ipv6AddressWithPrefix,
2845                D,
2846                &mut self.subnet,
2847                decoder,
2848                offset + 0,
2849                _depth
2850            )?;
2851            Ok(())
2852        }
2853    }
2854
2855    impl fidl::encoding::ValueTypeMarker for DeviceRouteUnregisterOnMeshPrefixRequest {
2856        type Borrowed<'a> = &'a Self;
2857        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2858            value
2859        }
2860    }
2861
2862    unsafe impl fidl::encoding::TypeMarker for DeviceRouteUnregisterOnMeshPrefixRequest {
2863        type Owned = Self;
2864
2865        #[inline(always)]
2866        fn inline_align(_context: fidl::encoding::Context) -> usize {
2867            1
2868        }
2869
2870        #[inline(always)]
2871        fn inline_size(_context: fidl::encoding::Context) -> usize {
2872            17
2873        }
2874    }
2875
2876    unsafe impl<D: fidl::encoding::ResourceDialect>
2877        fidl::encoding::Encode<DeviceRouteUnregisterOnMeshPrefixRequest, D>
2878        for &DeviceRouteUnregisterOnMeshPrefixRequest
2879    {
2880        #[inline]
2881        unsafe fn encode(
2882            self,
2883            encoder: &mut fidl::encoding::Encoder<'_, D>,
2884            offset: usize,
2885            _depth: fidl::encoding::Depth,
2886        ) -> fidl::Result<()> {
2887            encoder.debug_check_bounds::<DeviceRouteUnregisterOnMeshPrefixRequest>(offset);
2888            // Delegate to tuple encoding.
2889            fidl::encoding::Encode::<DeviceRouteUnregisterOnMeshPrefixRequest, D>::encode(
2890                (
2891                    <fidl_fuchsia_net__common::Ipv6AddressWithPrefix as fidl::encoding::ValueTypeMarker>::borrow(&self.subnet),
2892                ),
2893                encoder, offset, _depth
2894            )
2895        }
2896    }
2897    unsafe impl<
2898        D: fidl::encoding::ResourceDialect,
2899        T0: fidl::encoding::Encode<fidl_fuchsia_net__common::Ipv6AddressWithPrefix, D>,
2900    > fidl::encoding::Encode<DeviceRouteUnregisterOnMeshPrefixRequest, D> for (T0,)
2901    {
2902        #[inline]
2903        unsafe fn encode(
2904            self,
2905            encoder: &mut fidl::encoding::Encoder<'_, D>,
2906            offset: usize,
2907            depth: fidl::encoding::Depth,
2908        ) -> fidl::Result<()> {
2909            encoder.debug_check_bounds::<DeviceRouteUnregisterOnMeshPrefixRequest>(offset);
2910            // Zero out padding regions. There's no need to apply masks
2911            // because the unmasked parts will be overwritten by fields.
2912            // Write the fields.
2913            self.0.encode(encoder, offset + 0, depth)?;
2914            Ok(())
2915        }
2916    }
2917
2918    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2919        for DeviceRouteUnregisterOnMeshPrefixRequest
2920    {
2921        #[inline(always)]
2922        fn new_empty() -> Self {
2923            Self { subnet: fidl::new_empty!(fidl_fuchsia_net__common::Ipv6AddressWithPrefix, D) }
2924        }
2925
2926        #[inline]
2927        unsafe fn decode(
2928            &mut self,
2929            decoder: &mut fidl::encoding::Decoder<'_, D>,
2930            offset: usize,
2931            _depth: fidl::encoding::Depth,
2932        ) -> fidl::Result<()> {
2933            decoder.debug_check_bounds::<Self>(offset);
2934            // Verify that padding bytes are zero.
2935            fidl::decode!(
2936                fidl_fuchsia_net__common::Ipv6AddressWithPrefix,
2937                D,
2938                &mut self.subnet,
2939                decoder,
2940                offset + 0,
2941                _depth
2942            )?;
2943            Ok(())
2944        }
2945    }
2946
2947    impl fidl::encoding::ValueTypeMarker for LegacyJoiningMakeJoinableRequest {
2948        type Borrowed<'a> = &'a Self;
2949        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2950            value
2951        }
2952    }
2953
2954    unsafe impl fidl::encoding::TypeMarker for LegacyJoiningMakeJoinableRequest {
2955        type Owned = Self;
2956
2957        #[inline(always)]
2958        fn inline_align(_context: fidl::encoding::Context) -> usize {
2959            8
2960        }
2961
2962        #[inline(always)]
2963        fn inline_size(_context: fidl::encoding::Context) -> usize {
2964            16
2965        }
2966    }
2967
2968    unsafe impl<D: fidl::encoding::ResourceDialect>
2969        fidl::encoding::Encode<LegacyJoiningMakeJoinableRequest, D>
2970        for &LegacyJoiningMakeJoinableRequest
2971    {
2972        #[inline]
2973        unsafe fn encode(
2974            self,
2975            encoder: &mut fidl::encoding::Encoder<'_, D>,
2976            offset: usize,
2977            _depth: fidl::encoding::Depth,
2978        ) -> fidl::Result<()> {
2979            encoder.debug_check_bounds::<LegacyJoiningMakeJoinableRequest>(offset);
2980            unsafe {
2981                // Copy the object into the buffer.
2982                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
2983                (buf_ptr as *mut LegacyJoiningMakeJoinableRequest)
2984                    .write_unaligned((self as *const LegacyJoiningMakeJoinableRequest).read());
2985                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
2986                // done second because the memcpy will write garbage to these bytes.
2987                let padding_ptr = buf_ptr.offset(8) as *mut u64;
2988                let padding_mask = 0xffffffffffff0000u64;
2989                padding_ptr.write_unaligned(padding_ptr.read_unaligned() & !padding_mask);
2990            }
2991            Ok(())
2992        }
2993    }
2994    unsafe impl<
2995        D: fidl::encoding::ResourceDialect,
2996        T0: fidl::encoding::Encode<i64, D>,
2997        T1: fidl::encoding::Encode<u16, D>,
2998    > fidl::encoding::Encode<LegacyJoiningMakeJoinableRequest, D> for (T0, T1)
2999    {
3000        #[inline]
3001        unsafe fn encode(
3002            self,
3003            encoder: &mut fidl::encoding::Encoder<'_, D>,
3004            offset: usize,
3005            depth: fidl::encoding::Depth,
3006        ) -> fidl::Result<()> {
3007            encoder.debug_check_bounds::<LegacyJoiningMakeJoinableRequest>(offset);
3008            // Zero out padding regions. There's no need to apply masks
3009            // because the unmasked parts will be overwritten by fields.
3010            unsafe {
3011                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(8);
3012                (ptr as *mut u64).write_unaligned(0);
3013            }
3014            // Write the fields.
3015            self.0.encode(encoder, offset + 0, depth)?;
3016            self.1.encode(encoder, offset + 8, depth)?;
3017            Ok(())
3018        }
3019    }
3020
3021    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
3022        for LegacyJoiningMakeJoinableRequest
3023    {
3024        #[inline(always)]
3025        fn new_empty() -> Self {
3026            Self { duration: fidl::new_empty!(i64, D), port: fidl::new_empty!(u16, D) }
3027        }
3028
3029        #[inline]
3030        unsafe fn decode(
3031            &mut self,
3032            decoder: &mut fidl::encoding::Decoder<'_, D>,
3033            offset: usize,
3034            _depth: fidl::encoding::Depth,
3035        ) -> fidl::Result<()> {
3036            decoder.debug_check_bounds::<Self>(offset);
3037            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
3038            // Verify that padding bytes are zero.
3039            let ptr = unsafe { buf_ptr.offset(8) };
3040            let padval = unsafe { (ptr as *const u64).read_unaligned() };
3041            let mask = 0xffffffffffff0000u64;
3042            let maskedval = padval & mask;
3043            if maskedval != 0 {
3044                return Err(fidl::Error::NonZeroPadding {
3045                    padding_start: offset + 8 + ((mask as u64).trailing_zeros() / 8) as usize,
3046                });
3047            }
3048            // Copy from the buffer into the object.
3049            unsafe {
3050                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 16);
3051            }
3052            Ok(())
3053        }
3054    }
3055
3056    impl fidl::encoding::ValueTypeMarker for ProvisioningMonitorWatchProgressResponse {
3057        type Borrowed<'a> = &'a Self;
3058        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3059            value
3060        }
3061    }
3062
3063    unsafe impl fidl::encoding::TypeMarker for ProvisioningMonitorWatchProgressResponse {
3064        type Owned = Self;
3065
3066        #[inline(always)]
3067        fn inline_align(_context: fidl::encoding::Context) -> usize {
3068            8
3069        }
3070
3071        #[inline(always)]
3072        fn inline_size(_context: fidl::encoding::Context) -> usize {
3073            16
3074        }
3075    }
3076
3077    unsafe impl<D: fidl::encoding::ResourceDialect>
3078        fidl::encoding::Encode<ProvisioningMonitorWatchProgressResponse, D>
3079        for &ProvisioningMonitorWatchProgressResponse
3080    {
3081        #[inline]
3082        unsafe fn encode(
3083            self,
3084            encoder: &mut fidl::encoding::Encoder<'_, D>,
3085            offset: usize,
3086            _depth: fidl::encoding::Depth,
3087        ) -> fidl::Result<()> {
3088            encoder.debug_check_bounds::<ProvisioningMonitorWatchProgressResponse>(offset);
3089            // Delegate to tuple encoding.
3090            fidl::encoding::Encode::<ProvisioningMonitorWatchProgressResponse, D>::encode(
3091                (<ProvisioningProgress as fidl::encoding::ValueTypeMarker>::borrow(&self.progress),),
3092                encoder,
3093                offset,
3094                _depth,
3095            )
3096        }
3097    }
3098    unsafe impl<
3099        D: fidl::encoding::ResourceDialect,
3100        T0: fidl::encoding::Encode<ProvisioningProgress, D>,
3101    > fidl::encoding::Encode<ProvisioningMonitorWatchProgressResponse, D> for (T0,)
3102    {
3103        #[inline]
3104        unsafe fn encode(
3105            self,
3106            encoder: &mut fidl::encoding::Encoder<'_, D>,
3107            offset: usize,
3108            depth: fidl::encoding::Depth,
3109        ) -> fidl::Result<()> {
3110            encoder.debug_check_bounds::<ProvisioningMonitorWatchProgressResponse>(offset);
3111            // Zero out padding regions. There's no need to apply masks
3112            // because the unmasked parts will be overwritten by fields.
3113            // Write the fields.
3114            self.0.encode(encoder, offset + 0, depth)?;
3115            Ok(())
3116        }
3117    }
3118
3119    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
3120        for ProvisioningMonitorWatchProgressResponse
3121    {
3122        #[inline(always)]
3123        fn new_empty() -> Self {
3124            Self { progress: fidl::new_empty!(ProvisioningProgress, D) }
3125        }
3126
3127        #[inline]
3128        unsafe fn decode(
3129            &mut self,
3130            decoder: &mut fidl::encoding::Decoder<'_, D>,
3131            offset: usize,
3132            _depth: fidl::encoding::Depth,
3133        ) -> fidl::Result<()> {
3134            decoder.debug_check_bounds::<Self>(offset);
3135            // Verify that padding bytes are zero.
3136            fidl::decode!(
3137                ProvisioningProgress,
3138                D,
3139                &mut self.progress,
3140                decoder,
3141                offset + 0,
3142                _depth
3143            )?;
3144            Ok(())
3145        }
3146    }
3147
3148    impl fidl::encoding::ValueTypeMarker for TelemetryProviderGetTelemetryResponse {
3149        type Borrowed<'a> = &'a Self;
3150        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3151            value
3152        }
3153    }
3154
3155    unsafe impl fidl::encoding::TypeMarker for TelemetryProviderGetTelemetryResponse {
3156        type Owned = Self;
3157
3158        #[inline(always)]
3159        fn inline_align(_context: fidl::encoding::Context) -> usize {
3160            8
3161        }
3162
3163        #[inline(always)]
3164        fn inline_size(_context: fidl::encoding::Context) -> usize {
3165            16
3166        }
3167    }
3168
3169    unsafe impl<D: fidl::encoding::ResourceDialect>
3170        fidl::encoding::Encode<TelemetryProviderGetTelemetryResponse, D>
3171        for &TelemetryProviderGetTelemetryResponse
3172    {
3173        #[inline]
3174        unsafe fn encode(
3175            self,
3176            encoder: &mut fidl::encoding::Encoder<'_, D>,
3177            offset: usize,
3178            _depth: fidl::encoding::Depth,
3179        ) -> fidl::Result<()> {
3180            encoder.debug_check_bounds::<TelemetryProviderGetTelemetryResponse>(offset);
3181            // Delegate to tuple encoding.
3182            fidl::encoding::Encode::<TelemetryProviderGetTelemetryResponse, D>::encode(
3183                (<Telemetry as fidl::encoding::ValueTypeMarker>::borrow(&self.telemetry),),
3184                encoder,
3185                offset,
3186                _depth,
3187            )
3188        }
3189    }
3190    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<Telemetry, D>>
3191        fidl::encoding::Encode<TelemetryProviderGetTelemetryResponse, D> for (T0,)
3192    {
3193        #[inline]
3194        unsafe fn encode(
3195            self,
3196            encoder: &mut fidl::encoding::Encoder<'_, D>,
3197            offset: usize,
3198            depth: fidl::encoding::Depth,
3199        ) -> fidl::Result<()> {
3200            encoder.debug_check_bounds::<TelemetryProviderGetTelemetryResponse>(offset);
3201            // Zero out padding regions. There's no need to apply masks
3202            // because the unmasked parts will be overwritten by fields.
3203            // Write the fields.
3204            self.0.encode(encoder, offset + 0, depth)?;
3205            Ok(())
3206        }
3207    }
3208
3209    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
3210        for TelemetryProviderGetTelemetryResponse
3211    {
3212        #[inline(always)]
3213        fn new_empty() -> Self {
3214            Self { telemetry: fidl::new_empty!(Telemetry, D) }
3215        }
3216
3217        #[inline]
3218        unsafe fn decode(
3219            &mut self,
3220            decoder: &mut fidl::encoding::Decoder<'_, D>,
3221            offset: usize,
3222            _depth: fidl::encoding::Depth,
3223        ) -> fidl::Result<()> {
3224            decoder.debug_check_bounds::<Self>(offset);
3225            // Verify that padding bytes are zero.
3226            fidl::decode!(Telemetry, D, &mut self.telemetry, decoder, offset + 0, _depth)?;
3227            Ok(())
3228        }
3229    }
3230
3231    impl BeaconInfo {
3232        #[inline(always)]
3233        fn max_ordinal_present(&self) -> u64 {
3234            if let Some(_) = self.lqi {
3235                return 4;
3236            }
3237            if let Some(_) = self.rssi {
3238                return 3;
3239            }
3240            if let Some(_) = self.identity {
3241                return 2;
3242            }
3243            if let Some(_) = self.address {
3244                return 1;
3245            }
3246            0
3247        }
3248    }
3249
3250    impl fidl::encoding::ValueTypeMarker for BeaconInfo {
3251        type Borrowed<'a> = &'a Self;
3252        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3253            value
3254        }
3255    }
3256
3257    unsafe impl fidl::encoding::TypeMarker for BeaconInfo {
3258        type Owned = Self;
3259
3260        #[inline(always)]
3261        fn inline_align(_context: fidl::encoding::Context) -> usize {
3262            8
3263        }
3264
3265        #[inline(always)]
3266        fn inline_size(_context: fidl::encoding::Context) -> usize {
3267            16
3268        }
3269    }
3270
3271    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<BeaconInfo, D>
3272        for &BeaconInfo
3273    {
3274        unsafe fn encode(
3275            self,
3276            encoder: &mut fidl::encoding::Encoder<'_, D>,
3277            offset: usize,
3278            mut depth: fidl::encoding::Depth,
3279        ) -> fidl::Result<()> {
3280            encoder.debug_check_bounds::<BeaconInfo>(offset);
3281            // Vector header
3282            let max_ordinal: u64 = self.max_ordinal_present();
3283            encoder.write_num(max_ordinal, offset);
3284            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
3285            // Calling encoder.out_of_line_offset(0) is not allowed.
3286            if max_ordinal == 0 {
3287                return Ok(());
3288            }
3289            depth.increment()?;
3290            let envelope_size = 8;
3291            let bytes_len = max_ordinal as usize * envelope_size;
3292            #[allow(unused_variables)]
3293            let offset = encoder.out_of_line_offset(bytes_len);
3294            let mut _prev_end_offset: usize = 0;
3295            if 1 > max_ordinal {
3296                return Ok(());
3297            }
3298
3299            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3300            // are envelope_size bytes.
3301            let cur_offset: usize = (1 - 1) * envelope_size;
3302
3303            // Zero reserved fields.
3304            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3305
3306            // Safety:
3307            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3308            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3309            //   envelope_size bytes, there is always sufficient room.
3310            fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_lowpan__common::MacAddress, D>(
3311            self.address.as_ref().map(<fidl_fuchsia_lowpan__common::MacAddress as fidl::encoding::ValueTypeMarker>::borrow),
3312            encoder, offset + cur_offset, depth
3313        )?;
3314
3315            _prev_end_offset = cur_offset + envelope_size;
3316            if 2 > max_ordinal {
3317                return Ok(());
3318            }
3319
3320            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3321            // are envelope_size bytes.
3322            let cur_offset: usize = (2 - 1) * envelope_size;
3323
3324            // Zero reserved fields.
3325            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3326
3327            // Safety:
3328            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3329            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3330            //   envelope_size bytes, there is always sufficient room.
3331            fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_lowpan_device__common::Identity, D>(
3332            self.identity.as_ref().map(<fidl_fuchsia_lowpan_device__common::Identity as fidl::encoding::ValueTypeMarker>::borrow),
3333            encoder, offset + cur_offset, depth
3334        )?;
3335
3336            _prev_end_offset = cur_offset + envelope_size;
3337            if 3 > max_ordinal {
3338                return Ok(());
3339            }
3340
3341            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3342            // are envelope_size bytes.
3343            let cur_offset: usize = (3 - 1) * envelope_size;
3344
3345            // Zero reserved fields.
3346            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3347
3348            // Safety:
3349            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3350            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3351            //   envelope_size bytes, there is always sufficient room.
3352            fidl::encoding::encode_in_envelope_optional::<i8, D>(
3353                self.rssi.as_ref().map(<i8 as fidl::encoding::ValueTypeMarker>::borrow),
3354                encoder,
3355                offset + cur_offset,
3356                depth,
3357            )?;
3358
3359            _prev_end_offset = cur_offset + envelope_size;
3360            if 4 > max_ordinal {
3361                return Ok(());
3362            }
3363
3364            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3365            // are envelope_size bytes.
3366            let cur_offset: usize = (4 - 1) * envelope_size;
3367
3368            // Zero reserved fields.
3369            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3370
3371            // Safety:
3372            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3373            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3374            //   envelope_size bytes, there is always sufficient room.
3375            fidl::encoding::encode_in_envelope_optional::<u8, D>(
3376                self.lqi.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
3377                encoder,
3378                offset + cur_offset,
3379                depth,
3380            )?;
3381
3382            _prev_end_offset = cur_offset + envelope_size;
3383
3384            Ok(())
3385        }
3386    }
3387
3388    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for BeaconInfo {
3389        #[inline(always)]
3390        fn new_empty() -> Self {
3391            Self::default()
3392        }
3393
3394        unsafe fn decode(
3395            &mut self,
3396            decoder: &mut fidl::encoding::Decoder<'_, D>,
3397            offset: usize,
3398            mut depth: fidl::encoding::Depth,
3399        ) -> fidl::Result<()> {
3400            decoder.debug_check_bounds::<Self>(offset);
3401            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
3402                None => return Err(fidl::Error::NotNullable),
3403                Some(len) => len,
3404            };
3405            // Calling decoder.out_of_line_offset(0) is not allowed.
3406            if len == 0 {
3407                return Ok(());
3408            };
3409            depth.increment()?;
3410            let envelope_size = 8;
3411            let bytes_len = len * envelope_size;
3412            let offset = decoder.out_of_line_offset(bytes_len)?;
3413            // Decode the envelope for each type.
3414            let mut _next_ordinal_to_read = 0;
3415            let mut next_offset = offset;
3416            let end_offset = offset + bytes_len;
3417            _next_ordinal_to_read += 1;
3418            if next_offset >= end_offset {
3419                return Ok(());
3420            }
3421
3422            // Decode unknown envelopes for gaps in ordinals.
3423            while _next_ordinal_to_read < 1 {
3424                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3425                _next_ordinal_to_read += 1;
3426                next_offset += envelope_size;
3427            }
3428
3429            let next_out_of_line = decoder.next_out_of_line();
3430            let handles_before = decoder.remaining_handles();
3431            if let Some((inlined, num_bytes, num_handles)) =
3432                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3433            {
3434                let member_inline_size = <fidl_fuchsia_lowpan__common::MacAddress as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3435                if inlined != (member_inline_size <= 4) {
3436                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3437                }
3438                let inner_offset;
3439                let mut inner_depth = depth.clone();
3440                if inlined {
3441                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3442                    inner_offset = next_offset;
3443                } else {
3444                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3445                    inner_depth.increment()?;
3446                }
3447                let val_ref = self.address.get_or_insert_with(|| {
3448                    fidl::new_empty!(fidl_fuchsia_lowpan__common::MacAddress, D)
3449                });
3450                fidl::decode!(
3451                    fidl_fuchsia_lowpan__common::MacAddress,
3452                    D,
3453                    val_ref,
3454                    decoder,
3455                    inner_offset,
3456                    inner_depth
3457                )?;
3458                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3459                {
3460                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3461                }
3462                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3463                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3464                }
3465            }
3466
3467            next_offset += envelope_size;
3468            _next_ordinal_to_read += 1;
3469            if next_offset >= end_offset {
3470                return Ok(());
3471            }
3472
3473            // Decode unknown envelopes for gaps in ordinals.
3474            while _next_ordinal_to_read < 2 {
3475                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3476                _next_ordinal_to_read += 1;
3477                next_offset += envelope_size;
3478            }
3479
3480            let next_out_of_line = decoder.next_out_of_line();
3481            let handles_before = decoder.remaining_handles();
3482            if let Some((inlined, num_bytes, num_handles)) =
3483                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3484            {
3485                let member_inline_size = <fidl_fuchsia_lowpan_device__common::Identity as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3486                if inlined != (member_inline_size <= 4) {
3487                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3488                }
3489                let inner_offset;
3490                let mut inner_depth = depth.clone();
3491                if inlined {
3492                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3493                    inner_offset = next_offset;
3494                } else {
3495                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3496                    inner_depth.increment()?;
3497                }
3498                let val_ref = self.identity.get_or_insert_with(|| {
3499                    fidl::new_empty!(fidl_fuchsia_lowpan_device__common::Identity, D)
3500                });
3501                fidl::decode!(
3502                    fidl_fuchsia_lowpan_device__common::Identity,
3503                    D,
3504                    val_ref,
3505                    decoder,
3506                    inner_offset,
3507                    inner_depth
3508                )?;
3509                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3510                {
3511                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3512                }
3513                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3514                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3515                }
3516            }
3517
3518            next_offset += envelope_size;
3519            _next_ordinal_to_read += 1;
3520            if next_offset >= end_offset {
3521                return Ok(());
3522            }
3523
3524            // Decode unknown envelopes for gaps in ordinals.
3525            while _next_ordinal_to_read < 3 {
3526                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3527                _next_ordinal_to_read += 1;
3528                next_offset += envelope_size;
3529            }
3530
3531            let next_out_of_line = decoder.next_out_of_line();
3532            let handles_before = decoder.remaining_handles();
3533            if let Some((inlined, num_bytes, num_handles)) =
3534                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3535            {
3536                let member_inline_size =
3537                    <i8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3538                if inlined != (member_inline_size <= 4) {
3539                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3540                }
3541                let inner_offset;
3542                let mut inner_depth = depth.clone();
3543                if inlined {
3544                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3545                    inner_offset = next_offset;
3546                } else {
3547                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3548                    inner_depth.increment()?;
3549                }
3550                let val_ref = self.rssi.get_or_insert_with(|| fidl::new_empty!(i8, D));
3551                fidl::decode!(i8, D, val_ref, decoder, inner_offset, inner_depth)?;
3552                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3553                {
3554                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3555                }
3556                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3557                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3558                }
3559            }
3560
3561            next_offset += envelope_size;
3562            _next_ordinal_to_read += 1;
3563            if next_offset >= end_offset {
3564                return Ok(());
3565            }
3566
3567            // Decode unknown envelopes for gaps in ordinals.
3568            while _next_ordinal_to_read < 4 {
3569                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3570                _next_ordinal_to_read += 1;
3571                next_offset += envelope_size;
3572            }
3573
3574            let next_out_of_line = decoder.next_out_of_line();
3575            let handles_before = decoder.remaining_handles();
3576            if let Some((inlined, num_bytes, num_handles)) =
3577                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3578            {
3579                let member_inline_size =
3580                    <u8 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.lqi.get_or_insert_with(|| fidl::new_empty!(u8, D));
3594                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
3595                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3596                {
3597                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3598                }
3599                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3600                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3601                }
3602            }
3603
3604            next_offset += envelope_size;
3605
3606            // Decode the remaining unknown envelopes.
3607            while next_offset < end_offset {
3608                _next_ordinal_to_read += 1;
3609                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3610                next_offset += envelope_size;
3611            }
3612
3613            Ok(())
3614        }
3615    }
3616
3617    impl BorderRoutingCounters {
3618        #[inline(always)]
3619        fn max_ordinal_present(&self) -> u64 {
3620            if let Some(_) = self.outbound_internet_bytes {
3621                return 18;
3622            }
3623            if let Some(_) = self.outbound_internet_packets {
3624                return 17;
3625            }
3626            if let Some(_) = self.inbound_internet_bytes {
3627                return 16;
3628            }
3629            if let Some(_) = self.inbound_internet_packets {
3630                return 15;
3631            }
3632            if let Some(_) = self.rs_tx_failure {
3633                return 14;
3634            }
3635            if let Some(_) = self.rs_tx_success {
3636                return 13;
3637            }
3638            if let Some(_) = self.rs_rx {
3639                return 12;
3640            }
3641            if let Some(_) = self.ra_tx_failure {
3642                return 11;
3643            }
3644            if let Some(_) = self.ra_tx_success {
3645                return 10;
3646            }
3647            if let Some(_) = self.ra_rx {
3648                return 9;
3649            }
3650            if let Some(_) = self.outbound_multicast_bytes {
3651                return 8;
3652            }
3653            if let Some(_) = self.outbound_multicast_packets {
3654                return 7;
3655            }
3656            if let Some(_) = self.outbound_unicast_bytes {
3657                return 6;
3658            }
3659            if let Some(_) = self.outbound_unicast_packets {
3660                return 5;
3661            }
3662            if let Some(_) = self.inbound_multicast_bytes {
3663                return 4;
3664            }
3665            if let Some(_) = self.inbound_multicast_packets {
3666                return 3;
3667            }
3668            if let Some(_) = self.inbound_unicast_bytes {
3669                return 2;
3670            }
3671            if let Some(_) = self.inbound_unicast_packets {
3672                return 1;
3673            }
3674            0
3675        }
3676    }
3677
3678    impl fidl::encoding::ValueTypeMarker for BorderRoutingCounters {
3679        type Borrowed<'a> = &'a Self;
3680        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3681            value
3682        }
3683    }
3684
3685    unsafe impl fidl::encoding::TypeMarker for BorderRoutingCounters {
3686        type Owned = Self;
3687
3688        #[inline(always)]
3689        fn inline_align(_context: fidl::encoding::Context) -> usize {
3690            8
3691        }
3692
3693        #[inline(always)]
3694        fn inline_size(_context: fidl::encoding::Context) -> usize {
3695            16
3696        }
3697    }
3698
3699    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<BorderRoutingCounters, D>
3700        for &BorderRoutingCounters
3701    {
3702        unsafe fn encode(
3703            self,
3704            encoder: &mut fidl::encoding::Encoder<'_, D>,
3705            offset: usize,
3706            mut depth: fidl::encoding::Depth,
3707        ) -> fidl::Result<()> {
3708            encoder.debug_check_bounds::<BorderRoutingCounters>(offset);
3709            // Vector header
3710            let max_ordinal: u64 = self.max_ordinal_present();
3711            encoder.write_num(max_ordinal, offset);
3712            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
3713            // Calling encoder.out_of_line_offset(0) is not allowed.
3714            if max_ordinal == 0 {
3715                return Ok(());
3716            }
3717            depth.increment()?;
3718            let envelope_size = 8;
3719            let bytes_len = max_ordinal as usize * envelope_size;
3720            #[allow(unused_variables)]
3721            let offset = encoder.out_of_line_offset(bytes_len);
3722            let mut _prev_end_offset: usize = 0;
3723            if 1 > max_ordinal {
3724                return Ok(());
3725            }
3726
3727            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3728            // are envelope_size bytes.
3729            let cur_offset: usize = (1 - 1) * envelope_size;
3730
3731            // Zero reserved fields.
3732            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3733
3734            // Safety:
3735            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3736            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3737            //   envelope_size bytes, there is always sufficient room.
3738            fidl::encoding::encode_in_envelope_optional::<u64, D>(
3739                self.inbound_unicast_packets
3740                    .as_ref()
3741                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
3742                encoder,
3743                offset + cur_offset,
3744                depth,
3745            )?;
3746
3747            _prev_end_offset = cur_offset + envelope_size;
3748            if 2 > max_ordinal {
3749                return Ok(());
3750            }
3751
3752            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3753            // are envelope_size bytes.
3754            let cur_offset: usize = (2 - 1) * envelope_size;
3755
3756            // Zero reserved fields.
3757            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3758
3759            // Safety:
3760            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3761            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3762            //   envelope_size bytes, there is always sufficient room.
3763            fidl::encoding::encode_in_envelope_optional::<u64, D>(
3764                self.inbound_unicast_bytes
3765                    .as_ref()
3766                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
3767                encoder,
3768                offset + cur_offset,
3769                depth,
3770            )?;
3771
3772            _prev_end_offset = cur_offset + envelope_size;
3773            if 3 > max_ordinal {
3774                return Ok(());
3775            }
3776
3777            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3778            // are envelope_size bytes.
3779            let cur_offset: usize = (3 - 1) * envelope_size;
3780
3781            // Zero reserved fields.
3782            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3783
3784            // Safety:
3785            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3786            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3787            //   envelope_size bytes, there is always sufficient room.
3788            fidl::encoding::encode_in_envelope_optional::<u64, D>(
3789                self.inbound_multicast_packets
3790                    .as_ref()
3791                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
3792                encoder,
3793                offset + cur_offset,
3794                depth,
3795            )?;
3796
3797            _prev_end_offset = cur_offset + envelope_size;
3798            if 4 > max_ordinal {
3799                return Ok(());
3800            }
3801
3802            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3803            // are envelope_size bytes.
3804            let cur_offset: usize = (4 - 1) * envelope_size;
3805
3806            // Zero reserved fields.
3807            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3808
3809            // Safety:
3810            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3811            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3812            //   envelope_size bytes, there is always sufficient room.
3813            fidl::encoding::encode_in_envelope_optional::<u64, D>(
3814                self.inbound_multicast_bytes
3815                    .as_ref()
3816                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
3817                encoder,
3818                offset + cur_offset,
3819                depth,
3820            )?;
3821
3822            _prev_end_offset = cur_offset + envelope_size;
3823            if 5 > max_ordinal {
3824                return Ok(());
3825            }
3826
3827            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3828            // are envelope_size bytes.
3829            let cur_offset: usize = (5 - 1) * envelope_size;
3830
3831            // Zero reserved fields.
3832            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3833
3834            // Safety:
3835            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3836            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3837            //   envelope_size bytes, there is always sufficient room.
3838            fidl::encoding::encode_in_envelope_optional::<u64, D>(
3839                self.outbound_unicast_packets
3840                    .as_ref()
3841                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
3842                encoder,
3843                offset + cur_offset,
3844                depth,
3845            )?;
3846
3847            _prev_end_offset = cur_offset + envelope_size;
3848            if 6 > max_ordinal {
3849                return Ok(());
3850            }
3851
3852            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3853            // are envelope_size bytes.
3854            let cur_offset: usize = (6 - 1) * envelope_size;
3855
3856            // Zero reserved fields.
3857            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3858
3859            // Safety:
3860            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3861            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3862            //   envelope_size bytes, there is always sufficient room.
3863            fidl::encoding::encode_in_envelope_optional::<u64, D>(
3864                self.outbound_unicast_bytes
3865                    .as_ref()
3866                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
3867                encoder,
3868                offset + cur_offset,
3869                depth,
3870            )?;
3871
3872            _prev_end_offset = cur_offset + envelope_size;
3873            if 7 > max_ordinal {
3874                return Ok(());
3875            }
3876
3877            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3878            // are envelope_size bytes.
3879            let cur_offset: usize = (7 - 1) * envelope_size;
3880
3881            // Zero reserved fields.
3882            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3883
3884            // Safety:
3885            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3886            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3887            //   envelope_size bytes, there is always sufficient room.
3888            fidl::encoding::encode_in_envelope_optional::<u64, D>(
3889                self.outbound_multicast_packets
3890                    .as_ref()
3891                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
3892                encoder,
3893                offset + cur_offset,
3894                depth,
3895            )?;
3896
3897            _prev_end_offset = cur_offset + envelope_size;
3898            if 8 > max_ordinal {
3899                return Ok(());
3900            }
3901
3902            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3903            // are envelope_size bytes.
3904            let cur_offset: usize = (8 - 1) * envelope_size;
3905
3906            // Zero reserved fields.
3907            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3908
3909            // Safety:
3910            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3911            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3912            //   envelope_size bytes, there is always sufficient room.
3913            fidl::encoding::encode_in_envelope_optional::<u64, D>(
3914                self.outbound_multicast_bytes
3915                    .as_ref()
3916                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
3917                encoder,
3918                offset + cur_offset,
3919                depth,
3920            )?;
3921
3922            _prev_end_offset = cur_offset + envelope_size;
3923            if 9 > max_ordinal {
3924                return Ok(());
3925            }
3926
3927            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3928            // are envelope_size bytes.
3929            let cur_offset: usize = (9 - 1) * envelope_size;
3930
3931            // Zero reserved fields.
3932            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3933
3934            // Safety:
3935            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3936            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3937            //   envelope_size bytes, there is always sufficient room.
3938            fidl::encoding::encode_in_envelope_optional::<u32, D>(
3939                self.ra_rx.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
3940                encoder,
3941                offset + cur_offset,
3942                depth,
3943            )?;
3944
3945            _prev_end_offset = cur_offset + envelope_size;
3946            if 10 > max_ordinal {
3947                return Ok(());
3948            }
3949
3950            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3951            // are envelope_size bytes.
3952            let cur_offset: usize = (10 - 1) * envelope_size;
3953
3954            // Zero reserved fields.
3955            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3956
3957            // Safety:
3958            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3959            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3960            //   envelope_size bytes, there is always sufficient room.
3961            fidl::encoding::encode_in_envelope_optional::<u32, D>(
3962                self.ra_tx_success.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
3963                encoder,
3964                offset + cur_offset,
3965                depth,
3966            )?;
3967
3968            _prev_end_offset = cur_offset + envelope_size;
3969            if 11 > max_ordinal {
3970                return Ok(());
3971            }
3972
3973            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3974            // are envelope_size bytes.
3975            let cur_offset: usize = (11 - 1) * envelope_size;
3976
3977            // Zero reserved fields.
3978            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3979
3980            // Safety:
3981            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3982            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3983            //   envelope_size bytes, there is always sufficient room.
3984            fidl::encoding::encode_in_envelope_optional::<u32, D>(
3985                self.ra_tx_failure.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
3986                encoder,
3987                offset + cur_offset,
3988                depth,
3989            )?;
3990
3991            _prev_end_offset = cur_offset + envelope_size;
3992            if 12 > max_ordinal {
3993                return Ok(());
3994            }
3995
3996            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3997            // are envelope_size bytes.
3998            let cur_offset: usize = (12 - 1) * envelope_size;
3999
4000            // Zero reserved fields.
4001            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4002
4003            // Safety:
4004            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4005            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4006            //   envelope_size bytes, there is always sufficient room.
4007            fidl::encoding::encode_in_envelope_optional::<u32, D>(
4008                self.rs_rx.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
4009                encoder,
4010                offset + cur_offset,
4011                depth,
4012            )?;
4013
4014            _prev_end_offset = cur_offset + envelope_size;
4015            if 13 > max_ordinal {
4016                return Ok(());
4017            }
4018
4019            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4020            // are envelope_size bytes.
4021            let cur_offset: usize = (13 - 1) * envelope_size;
4022
4023            // Zero reserved fields.
4024            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4025
4026            // Safety:
4027            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4028            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4029            //   envelope_size bytes, there is always sufficient room.
4030            fidl::encoding::encode_in_envelope_optional::<u32, D>(
4031                self.rs_tx_success.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
4032                encoder,
4033                offset + cur_offset,
4034                depth,
4035            )?;
4036
4037            _prev_end_offset = cur_offset + envelope_size;
4038            if 14 > max_ordinal {
4039                return Ok(());
4040            }
4041
4042            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4043            // are envelope_size bytes.
4044            let cur_offset: usize = (14 - 1) * envelope_size;
4045
4046            // Zero reserved fields.
4047            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4048
4049            // Safety:
4050            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4051            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4052            //   envelope_size bytes, there is always sufficient room.
4053            fidl::encoding::encode_in_envelope_optional::<u32, D>(
4054                self.rs_tx_failure.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
4055                encoder,
4056                offset + cur_offset,
4057                depth,
4058            )?;
4059
4060            _prev_end_offset = cur_offset + envelope_size;
4061            if 15 > max_ordinal {
4062                return Ok(());
4063            }
4064
4065            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4066            // are envelope_size bytes.
4067            let cur_offset: usize = (15 - 1) * envelope_size;
4068
4069            // Zero reserved fields.
4070            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4071
4072            // Safety:
4073            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4074            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4075            //   envelope_size bytes, there is always sufficient room.
4076            fidl::encoding::encode_in_envelope_optional::<u64, D>(
4077                self.inbound_internet_packets
4078                    .as_ref()
4079                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
4080                encoder,
4081                offset + cur_offset,
4082                depth,
4083            )?;
4084
4085            _prev_end_offset = cur_offset + envelope_size;
4086            if 16 > max_ordinal {
4087                return Ok(());
4088            }
4089
4090            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4091            // are envelope_size bytes.
4092            let cur_offset: usize = (16 - 1) * envelope_size;
4093
4094            // Zero reserved fields.
4095            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4096
4097            // Safety:
4098            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4099            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4100            //   envelope_size bytes, there is always sufficient room.
4101            fidl::encoding::encode_in_envelope_optional::<u64, D>(
4102                self.inbound_internet_bytes
4103                    .as_ref()
4104                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
4105                encoder,
4106                offset + cur_offset,
4107                depth,
4108            )?;
4109
4110            _prev_end_offset = cur_offset + envelope_size;
4111            if 17 > max_ordinal {
4112                return Ok(());
4113            }
4114
4115            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4116            // are envelope_size bytes.
4117            let cur_offset: usize = (17 - 1) * envelope_size;
4118
4119            // Zero reserved fields.
4120            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4121
4122            // Safety:
4123            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4124            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4125            //   envelope_size bytes, there is always sufficient room.
4126            fidl::encoding::encode_in_envelope_optional::<u64, D>(
4127                self.outbound_internet_packets
4128                    .as_ref()
4129                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
4130                encoder,
4131                offset + cur_offset,
4132                depth,
4133            )?;
4134
4135            _prev_end_offset = cur_offset + envelope_size;
4136            if 18 > max_ordinal {
4137                return Ok(());
4138            }
4139
4140            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4141            // are envelope_size bytes.
4142            let cur_offset: usize = (18 - 1) * envelope_size;
4143
4144            // Zero reserved fields.
4145            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4146
4147            // Safety:
4148            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4149            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4150            //   envelope_size bytes, there is always sufficient room.
4151            fidl::encoding::encode_in_envelope_optional::<u64, D>(
4152                self.outbound_internet_bytes
4153                    .as_ref()
4154                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
4155                encoder,
4156                offset + cur_offset,
4157                depth,
4158            )?;
4159
4160            _prev_end_offset = cur_offset + envelope_size;
4161
4162            Ok(())
4163        }
4164    }
4165
4166    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for BorderRoutingCounters {
4167        #[inline(always)]
4168        fn new_empty() -> Self {
4169            Self::default()
4170        }
4171
4172        unsafe fn decode(
4173            &mut self,
4174            decoder: &mut fidl::encoding::Decoder<'_, D>,
4175            offset: usize,
4176            mut depth: fidl::encoding::Depth,
4177        ) -> fidl::Result<()> {
4178            decoder.debug_check_bounds::<Self>(offset);
4179            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
4180                None => return Err(fidl::Error::NotNullable),
4181                Some(len) => len,
4182            };
4183            // Calling decoder.out_of_line_offset(0) is not allowed.
4184            if len == 0 {
4185                return Ok(());
4186            };
4187            depth.increment()?;
4188            let envelope_size = 8;
4189            let bytes_len = len * envelope_size;
4190            let offset = decoder.out_of_line_offset(bytes_len)?;
4191            // Decode the envelope for each type.
4192            let mut _next_ordinal_to_read = 0;
4193            let mut next_offset = offset;
4194            let end_offset = offset + bytes_len;
4195            _next_ordinal_to_read += 1;
4196            if next_offset >= end_offset {
4197                return Ok(());
4198            }
4199
4200            // Decode unknown envelopes for gaps in ordinals.
4201            while _next_ordinal_to_read < 1 {
4202                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4203                _next_ordinal_to_read += 1;
4204                next_offset += envelope_size;
4205            }
4206
4207            let next_out_of_line = decoder.next_out_of_line();
4208            let handles_before = decoder.remaining_handles();
4209            if let Some((inlined, num_bytes, num_handles)) =
4210                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4211            {
4212                let member_inline_size =
4213                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4214                if inlined != (member_inline_size <= 4) {
4215                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4216                }
4217                let inner_offset;
4218                let mut inner_depth = depth.clone();
4219                if inlined {
4220                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4221                    inner_offset = next_offset;
4222                } else {
4223                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4224                    inner_depth.increment()?;
4225                }
4226                let val_ref =
4227                    self.inbound_unicast_packets.get_or_insert_with(|| fidl::new_empty!(u64, D));
4228                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
4229                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4230                {
4231                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4232                }
4233                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4234                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4235                }
4236            }
4237
4238            next_offset += envelope_size;
4239            _next_ordinal_to_read += 1;
4240            if next_offset >= end_offset {
4241                return Ok(());
4242            }
4243
4244            // Decode unknown envelopes for gaps in ordinals.
4245            while _next_ordinal_to_read < 2 {
4246                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4247                _next_ordinal_to_read += 1;
4248                next_offset += envelope_size;
4249            }
4250
4251            let next_out_of_line = decoder.next_out_of_line();
4252            let handles_before = decoder.remaining_handles();
4253            if let Some((inlined, num_bytes, num_handles)) =
4254                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4255            {
4256                let member_inline_size =
4257                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4258                if inlined != (member_inline_size <= 4) {
4259                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4260                }
4261                let inner_offset;
4262                let mut inner_depth = depth.clone();
4263                if inlined {
4264                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4265                    inner_offset = next_offset;
4266                } else {
4267                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4268                    inner_depth.increment()?;
4269                }
4270                let val_ref =
4271                    self.inbound_unicast_bytes.get_or_insert_with(|| fidl::new_empty!(u64, D));
4272                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
4273                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4274                {
4275                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4276                }
4277                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4278                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4279                }
4280            }
4281
4282            next_offset += envelope_size;
4283            _next_ordinal_to_read += 1;
4284            if next_offset >= end_offset {
4285                return Ok(());
4286            }
4287
4288            // Decode unknown envelopes for gaps in ordinals.
4289            while _next_ordinal_to_read < 3 {
4290                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4291                _next_ordinal_to_read += 1;
4292                next_offset += envelope_size;
4293            }
4294
4295            let next_out_of_line = decoder.next_out_of_line();
4296            let handles_before = decoder.remaining_handles();
4297            if let Some((inlined, num_bytes, num_handles)) =
4298                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4299            {
4300                let member_inline_size =
4301                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4302                if inlined != (member_inline_size <= 4) {
4303                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4304                }
4305                let inner_offset;
4306                let mut inner_depth = depth.clone();
4307                if inlined {
4308                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4309                    inner_offset = next_offset;
4310                } else {
4311                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4312                    inner_depth.increment()?;
4313                }
4314                let val_ref =
4315                    self.inbound_multicast_packets.get_or_insert_with(|| fidl::new_empty!(u64, D));
4316                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
4317                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4318                {
4319                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4320                }
4321                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4322                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4323                }
4324            }
4325
4326            next_offset += envelope_size;
4327            _next_ordinal_to_read += 1;
4328            if next_offset >= end_offset {
4329                return Ok(());
4330            }
4331
4332            // Decode unknown envelopes for gaps in ordinals.
4333            while _next_ordinal_to_read < 4 {
4334                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4335                _next_ordinal_to_read += 1;
4336                next_offset += envelope_size;
4337            }
4338
4339            let next_out_of_line = decoder.next_out_of_line();
4340            let handles_before = decoder.remaining_handles();
4341            if let Some((inlined, num_bytes, num_handles)) =
4342                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4343            {
4344                let member_inline_size =
4345                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4346                if inlined != (member_inline_size <= 4) {
4347                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4348                }
4349                let inner_offset;
4350                let mut inner_depth = depth.clone();
4351                if inlined {
4352                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4353                    inner_offset = next_offset;
4354                } else {
4355                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4356                    inner_depth.increment()?;
4357                }
4358                let val_ref =
4359                    self.inbound_multicast_bytes.get_or_insert_with(|| fidl::new_empty!(u64, D));
4360                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
4361                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4362                {
4363                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4364                }
4365                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4366                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4367                }
4368            }
4369
4370            next_offset += envelope_size;
4371            _next_ordinal_to_read += 1;
4372            if next_offset >= end_offset {
4373                return Ok(());
4374            }
4375
4376            // Decode unknown envelopes for gaps in ordinals.
4377            while _next_ordinal_to_read < 5 {
4378                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4379                _next_ordinal_to_read += 1;
4380                next_offset += envelope_size;
4381            }
4382
4383            let next_out_of_line = decoder.next_out_of_line();
4384            let handles_before = decoder.remaining_handles();
4385            if let Some((inlined, num_bytes, num_handles)) =
4386                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4387            {
4388                let member_inline_size =
4389                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4390                if inlined != (member_inline_size <= 4) {
4391                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4392                }
4393                let inner_offset;
4394                let mut inner_depth = depth.clone();
4395                if inlined {
4396                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4397                    inner_offset = next_offset;
4398                } else {
4399                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4400                    inner_depth.increment()?;
4401                }
4402                let val_ref =
4403                    self.outbound_unicast_packets.get_or_insert_with(|| fidl::new_empty!(u64, D));
4404                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
4405                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4406                {
4407                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4408                }
4409                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4410                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4411                }
4412            }
4413
4414            next_offset += envelope_size;
4415            _next_ordinal_to_read += 1;
4416            if next_offset >= end_offset {
4417                return Ok(());
4418            }
4419
4420            // Decode unknown envelopes for gaps in ordinals.
4421            while _next_ordinal_to_read < 6 {
4422                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4423                _next_ordinal_to_read += 1;
4424                next_offset += envelope_size;
4425            }
4426
4427            let next_out_of_line = decoder.next_out_of_line();
4428            let handles_before = decoder.remaining_handles();
4429            if let Some((inlined, num_bytes, num_handles)) =
4430                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4431            {
4432                let member_inline_size =
4433                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4434                if inlined != (member_inline_size <= 4) {
4435                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4436                }
4437                let inner_offset;
4438                let mut inner_depth = depth.clone();
4439                if inlined {
4440                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4441                    inner_offset = next_offset;
4442                } else {
4443                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4444                    inner_depth.increment()?;
4445                }
4446                let val_ref =
4447                    self.outbound_unicast_bytes.get_or_insert_with(|| fidl::new_empty!(u64, D));
4448                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
4449                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4450                {
4451                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4452                }
4453                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4454                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4455                }
4456            }
4457
4458            next_offset += envelope_size;
4459            _next_ordinal_to_read += 1;
4460            if next_offset >= end_offset {
4461                return Ok(());
4462            }
4463
4464            // Decode unknown envelopes for gaps in ordinals.
4465            while _next_ordinal_to_read < 7 {
4466                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4467                _next_ordinal_to_read += 1;
4468                next_offset += envelope_size;
4469            }
4470
4471            let next_out_of_line = decoder.next_out_of_line();
4472            let handles_before = decoder.remaining_handles();
4473            if let Some((inlined, num_bytes, num_handles)) =
4474                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4475            {
4476                let member_inline_size =
4477                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4478                if inlined != (member_inline_size <= 4) {
4479                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4480                }
4481                let inner_offset;
4482                let mut inner_depth = depth.clone();
4483                if inlined {
4484                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4485                    inner_offset = next_offset;
4486                } else {
4487                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4488                    inner_depth.increment()?;
4489                }
4490                let val_ref =
4491                    self.outbound_multicast_packets.get_or_insert_with(|| fidl::new_empty!(u64, D));
4492                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
4493                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4494                {
4495                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4496                }
4497                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4498                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4499                }
4500            }
4501
4502            next_offset += envelope_size;
4503            _next_ordinal_to_read += 1;
4504            if next_offset >= end_offset {
4505                return Ok(());
4506            }
4507
4508            // Decode unknown envelopes for gaps in ordinals.
4509            while _next_ordinal_to_read < 8 {
4510                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4511                _next_ordinal_to_read += 1;
4512                next_offset += envelope_size;
4513            }
4514
4515            let next_out_of_line = decoder.next_out_of_line();
4516            let handles_before = decoder.remaining_handles();
4517            if let Some((inlined, num_bytes, num_handles)) =
4518                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4519            {
4520                let member_inline_size =
4521                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4522                if inlined != (member_inline_size <= 4) {
4523                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4524                }
4525                let inner_offset;
4526                let mut inner_depth = depth.clone();
4527                if inlined {
4528                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4529                    inner_offset = next_offset;
4530                } else {
4531                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4532                    inner_depth.increment()?;
4533                }
4534                let val_ref =
4535                    self.outbound_multicast_bytes.get_or_insert_with(|| fidl::new_empty!(u64, D));
4536                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
4537                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4538                {
4539                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4540                }
4541                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4542                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4543                }
4544            }
4545
4546            next_offset += envelope_size;
4547            _next_ordinal_to_read += 1;
4548            if next_offset >= end_offset {
4549                return Ok(());
4550            }
4551
4552            // Decode unknown envelopes for gaps in ordinals.
4553            while _next_ordinal_to_read < 9 {
4554                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4555                _next_ordinal_to_read += 1;
4556                next_offset += envelope_size;
4557            }
4558
4559            let next_out_of_line = decoder.next_out_of_line();
4560            let handles_before = decoder.remaining_handles();
4561            if let Some((inlined, num_bytes, num_handles)) =
4562                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4563            {
4564                let member_inline_size =
4565                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4566                if inlined != (member_inline_size <= 4) {
4567                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4568                }
4569                let inner_offset;
4570                let mut inner_depth = depth.clone();
4571                if inlined {
4572                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4573                    inner_offset = next_offset;
4574                } else {
4575                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4576                    inner_depth.increment()?;
4577                }
4578                let val_ref = self.ra_rx.get_or_insert_with(|| fidl::new_empty!(u32, D));
4579                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
4580                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4581                {
4582                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4583                }
4584                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4585                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4586                }
4587            }
4588
4589            next_offset += envelope_size;
4590            _next_ordinal_to_read += 1;
4591            if next_offset >= end_offset {
4592                return Ok(());
4593            }
4594
4595            // Decode unknown envelopes for gaps in ordinals.
4596            while _next_ordinal_to_read < 10 {
4597                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4598                _next_ordinal_to_read += 1;
4599                next_offset += envelope_size;
4600            }
4601
4602            let next_out_of_line = decoder.next_out_of_line();
4603            let handles_before = decoder.remaining_handles();
4604            if let Some((inlined, num_bytes, num_handles)) =
4605                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4606            {
4607                let member_inline_size =
4608                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4609                if inlined != (member_inline_size <= 4) {
4610                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4611                }
4612                let inner_offset;
4613                let mut inner_depth = depth.clone();
4614                if inlined {
4615                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4616                    inner_offset = next_offset;
4617                } else {
4618                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4619                    inner_depth.increment()?;
4620                }
4621                let val_ref = self.ra_tx_success.get_or_insert_with(|| fidl::new_empty!(u32, D));
4622                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
4623                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4624                {
4625                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4626                }
4627                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4628                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4629                }
4630            }
4631
4632            next_offset += envelope_size;
4633            _next_ordinal_to_read += 1;
4634            if next_offset >= end_offset {
4635                return Ok(());
4636            }
4637
4638            // Decode unknown envelopes for gaps in ordinals.
4639            while _next_ordinal_to_read < 11 {
4640                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4641                _next_ordinal_to_read += 1;
4642                next_offset += envelope_size;
4643            }
4644
4645            let next_out_of_line = decoder.next_out_of_line();
4646            let handles_before = decoder.remaining_handles();
4647            if let Some((inlined, num_bytes, num_handles)) =
4648                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4649            {
4650                let member_inline_size =
4651                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4652                if inlined != (member_inline_size <= 4) {
4653                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4654                }
4655                let inner_offset;
4656                let mut inner_depth = depth.clone();
4657                if inlined {
4658                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4659                    inner_offset = next_offset;
4660                } else {
4661                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4662                    inner_depth.increment()?;
4663                }
4664                let val_ref = self.ra_tx_failure.get_or_insert_with(|| fidl::new_empty!(u32, D));
4665                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
4666                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4667                {
4668                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4669                }
4670                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4671                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4672                }
4673            }
4674
4675            next_offset += envelope_size;
4676            _next_ordinal_to_read += 1;
4677            if next_offset >= end_offset {
4678                return Ok(());
4679            }
4680
4681            // Decode unknown envelopes for gaps in ordinals.
4682            while _next_ordinal_to_read < 12 {
4683                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4684                _next_ordinal_to_read += 1;
4685                next_offset += envelope_size;
4686            }
4687
4688            let next_out_of_line = decoder.next_out_of_line();
4689            let handles_before = decoder.remaining_handles();
4690            if let Some((inlined, num_bytes, num_handles)) =
4691                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4692            {
4693                let member_inline_size =
4694                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4695                if inlined != (member_inline_size <= 4) {
4696                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4697                }
4698                let inner_offset;
4699                let mut inner_depth = depth.clone();
4700                if inlined {
4701                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4702                    inner_offset = next_offset;
4703                } else {
4704                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4705                    inner_depth.increment()?;
4706                }
4707                let val_ref = self.rs_rx.get_or_insert_with(|| fidl::new_empty!(u32, D));
4708                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
4709                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4710                {
4711                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4712                }
4713                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4714                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4715                }
4716            }
4717
4718            next_offset += envelope_size;
4719            _next_ordinal_to_read += 1;
4720            if next_offset >= end_offset {
4721                return Ok(());
4722            }
4723
4724            // Decode unknown envelopes for gaps in ordinals.
4725            while _next_ordinal_to_read < 13 {
4726                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4727                _next_ordinal_to_read += 1;
4728                next_offset += envelope_size;
4729            }
4730
4731            let next_out_of_line = decoder.next_out_of_line();
4732            let handles_before = decoder.remaining_handles();
4733            if let Some((inlined, num_bytes, num_handles)) =
4734                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4735            {
4736                let member_inline_size =
4737                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4738                if inlined != (member_inline_size <= 4) {
4739                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4740                }
4741                let inner_offset;
4742                let mut inner_depth = depth.clone();
4743                if inlined {
4744                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4745                    inner_offset = next_offset;
4746                } else {
4747                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4748                    inner_depth.increment()?;
4749                }
4750                let val_ref = self.rs_tx_success.get_or_insert_with(|| fidl::new_empty!(u32, D));
4751                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
4752                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4753                {
4754                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4755                }
4756                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4757                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4758                }
4759            }
4760
4761            next_offset += envelope_size;
4762            _next_ordinal_to_read += 1;
4763            if next_offset >= end_offset {
4764                return Ok(());
4765            }
4766
4767            // Decode unknown envelopes for gaps in ordinals.
4768            while _next_ordinal_to_read < 14 {
4769                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4770                _next_ordinal_to_read += 1;
4771                next_offset += envelope_size;
4772            }
4773
4774            let next_out_of_line = decoder.next_out_of_line();
4775            let handles_before = decoder.remaining_handles();
4776            if let Some((inlined, num_bytes, num_handles)) =
4777                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4778            {
4779                let member_inline_size =
4780                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4781                if inlined != (member_inline_size <= 4) {
4782                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4783                }
4784                let inner_offset;
4785                let mut inner_depth = depth.clone();
4786                if inlined {
4787                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4788                    inner_offset = next_offset;
4789                } else {
4790                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4791                    inner_depth.increment()?;
4792                }
4793                let val_ref = self.rs_tx_failure.get_or_insert_with(|| fidl::new_empty!(u32, D));
4794                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
4795                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4796                {
4797                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4798                }
4799                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4800                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4801                }
4802            }
4803
4804            next_offset += envelope_size;
4805            _next_ordinal_to_read += 1;
4806            if next_offset >= end_offset {
4807                return Ok(());
4808            }
4809
4810            // Decode unknown envelopes for gaps in ordinals.
4811            while _next_ordinal_to_read < 15 {
4812                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4813                _next_ordinal_to_read += 1;
4814                next_offset += envelope_size;
4815            }
4816
4817            let next_out_of_line = decoder.next_out_of_line();
4818            let handles_before = decoder.remaining_handles();
4819            if let Some((inlined, num_bytes, num_handles)) =
4820                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4821            {
4822                let member_inline_size =
4823                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4824                if inlined != (member_inline_size <= 4) {
4825                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4826                }
4827                let inner_offset;
4828                let mut inner_depth = depth.clone();
4829                if inlined {
4830                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4831                    inner_offset = next_offset;
4832                } else {
4833                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4834                    inner_depth.increment()?;
4835                }
4836                let val_ref =
4837                    self.inbound_internet_packets.get_or_insert_with(|| fidl::new_empty!(u64, D));
4838                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
4839                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4840                {
4841                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4842                }
4843                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4844                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4845                }
4846            }
4847
4848            next_offset += envelope_size;
4849            _next_ordinal_to_read += 1;
4850            if next_offset >= end_offset {
4851                return Ok(());
4852            }
4853
4854            // Decode unknown envelopes for gaps in ordinals.
4855            while _next_ordinal_to_read < 16 {
4856                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4857                _next_ordinal_to_read += 1;
4858                next_offset += envelope_size;
4859            }
4860
4861            let next_out_of_line = decoder.next_out_of_line();
4862            let handles_before = decoder.remaining_handles();
4863            if let Some((inlined, num_bytes, num_handles)) =
4864                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4865            {
4866                let member_inline_size =
4867                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4868                if inlined != (member_inline_size <= 4) {
4869                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4870                }
4871                let inner_offset;
4872                let mut inner_depth = depth.clone();
4873                if inlined {
4874                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4875                    inner_offset = next_offset;
4876                } else {
4877                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4878                    inner_depth.increment()?;
4879                }
4880                let val_ref =
4881                    self.inbound_internet_bytes.get_or_insert_with(|| fidl::new_empty!(u64, D));
4882                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
4883                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4884                {
4885                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4886                }
4887                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4888                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4889                }
4890            }
4891
4892            next_offset += envelope_size;
4893            _next_ordinal_to_read += 1;
4894            if next_offset >= end_offset {
4895                return Ok(());
4896            }
4897
4898            // Decode unknown envelopes for gaps in ordinals.
4899            while _next_ordinal_to_read < 17 {
4900                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4901                _next_ordinal_to_read += 1;
4902                next_offset += envelope_size;
4903            }
4904
4905            let next_out_of_line = decoder.next_out_of_line();
4906            let handles_before = decoder.remaining_handles();
4907            if let Some((inlined, num_bytes, num_handles)) =
4908                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4909            {
4910                let member_inline_size =
4911                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4912                if inlined != (member_inline_size <= 4) {
4913                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4914                }
4915                let inner_offset;
4916                let mut inner_depth = depth.clone();
4917                if inlined {
4918                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4919                    inner_offset = next_offset;
4920                } else {
4921                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4922                    inner_depth.increment()?;
4923                }
4924                let val_ref =
4925                    self.outbound_internet_packets.get_or_insert_with(|| fidl::new_empty!(u64, D));
4926                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
4927                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4928                {
4929                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4930                }
4931                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4932                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4933                }
4934            }
4935
4936            next_offset += envelope_size;
4937            _next_ordinal_to_read += 1;
4938            if next_offset >= end_offset {
4939                return Ok(());
4940            }
4941
4942            // Decode unknown envelopes for gaps in ordinals.
4943            while _next_ordinal_to_read < 18 {
4944                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4945                _next_ordinal_to_read += 1;
4946                next_offset += envelope_size;
4947            }
4948
4949            let next_out_of_line = decoder.next_out_of_line();
4950            let handles_before = decoder.remaining_handles();
4951            if let Some((inlined, num_bytes, num_handles)) =
4952                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4953            {
4954                let member_inline_size =
4955                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4956                if inlined != (member_inline_size <= 4) {
4957                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4958                }
4959                let inner_offset;
4960                let mut inner_depth = depth.clone();
4961                if inlined {
4962                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4963                    inner_offset = next_offset;
4964                } else {
4965                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4966                    inner_depth.increment()?;
4967                }
4968                let val_ref =
4969                    self.outbound_internet_bytes.get_or_insert_with(|| fidl::new_empty!(u64, D));
4970                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
4971                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4972                {
4973                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4974                }
4975                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4976                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4977                }
4978            }
4979
4980            next_offset += envelope_size;
4981
4982            // Decode the remaining unknown envelopes.
4983            while next_offset < end_offset {
4984                _next_ordinal_to_read += 1;
4985                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4986                next_offset += envelope_size;
4987            }
4988
4989            Ok(())
4990        }
4991    }
4992
4993    impl BorderRoutingNat64State {
4994        #[inline(always)]
4995        fn max_ordinal_present(&self) -> u64 {
4996            if let Some(_) = self.translator_state {
4997                return 2;
4998            }
4999            if let Some(_) = self.prefix_manager_state {
5000                return 1;
5001            }
5002            0
5003        }
5004    }
5005
5006    impl fidl::encoding::ValueTypeMarker for BorderRoutingNat64State {
5007        type Borrowed<'a> = &'a Self;
5008        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5009            value
5010        }
5011    }
5012
5013    unsafe impl fidl::encoding::TypeMarker for BorderRoutingNat64State {
5014        type Owned = Self;
5015
5016        #[inline(always)]
5017        fn inline_align(_context: fidl::encoding::Context) -> usize {
5018            8
5019        }
5020
5021        #[inline(always)]
5022        fn inline_size(_context: fidl::encoding::Context) -> usize {
5023            16
5024        }
5025    }
5026
5027    unsafe impl<D: fidl::encoding::ResourceDialect>
5028        fidl::encoding::Encode<BorderRoutingNat64State, D> for &BorderRoutingNat64State
5029    {
5030        unsafe fn encode(
5031            self,
5032            encoder: &mut fidl::encoding::Encoder<'_, D>,
5033            offset: usize,
5034            mut depth: fidl::encoding::Depth,
5035        ) -> fidl::Result<()> {
5036            encoder.debug_check_bounds::<BorderRoutingNat64State>(offset);
5037            // Vector header
5038            let max_ordinal: u64 = self.max_ordinal_present();
5039            encoder.write_num(max_ordinal, offset);
5040            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
5041            // Calling encoder.out_of_line_offset(0) is not allowed.
5042            if max_ordinal == 0 {
5043                return Ok(());
5044            }
5045            depth.increment()?;
5046            let envelope_size = 8;
5047            let bytes_len = max_ordinal as usize * envelope_size;
5048            #[allow(unused_variables)]
5049            let offset = encoder.out_of_line_offset(bytes_len);
5050            let mut _prev_end_offset: usize = 0;
5051            if 1 > max_ordinal {
5052                return Ok(());
5053            }
5054
5055            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5056            // are envelope_size bytes.
5057            let cur_offset: usize = (1 - 1) * envelope_size;
5058
5059            // Zero reserved fields.
5060            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5061
5062            // Safety:
5063            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5064            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5065            //   envelope_size bytes, there is always sufficient room.
5066            fidl::encoding::encode_in_envelope_optional::<Nat64State, D>(
5067                self.prefix_manager_state
5068                    .as_ref()
5069                    .map(<Nat64State as fidl::encoding::ValueTypeMarker>::borrow),
5070                encoder,
5071                offset + cur_offset,
5072                depth,
5073            )?;
5074
5075            _prev_end_offset = cur_offset + envelope_size;
5076            if 2 > max_ordinal {
5077                return Ok(());
5078            }
5079
5080            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5081            // are envelope_size bytes.
5082            let cur_offset: usize = (2 - 1) * envelope_size;
5083
5084            // Zero reserved fields.
5085            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5086
5087            // Safety:
5088            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5089            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5090            //   envelope_size bytes, there is always sufficient room.
5091            fidl::encoding::encode_in_envelope_optional::<Nat64State, D>(
5092                self.translator_state
5093                    .as_ref()
5094                    .map(<Nat64State as fidl::encoding::ValueTypeMarker>::borrow),
5095                encoder,
5096                offset + cur_offset,
5097                depth,
5098            )?;
5099
5100            _prev_end_offset = cur_offset + envelope_size;
5101
5102            Ok(())
5103        }
5104    }
5105
5106    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
5107        for BorderRoutingNat64State
5108    {
5109        #[inline(always)]
5110        fn new_empty() -> Self {
5111            Self::default()
5112        }
5113
5114        unsafe fn decode(
5115            &mut self,
5116            decoder: &mut fidl::encoding::Decoder<'_, D>,
5117            offset: usize,
5118            mut depth: fidl::encoding::Depth,
5119        ) -> fidl::Result<()> {
5120            decoder.debug_check_bounds::<Self>(offset);
5121            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
5122                None => return Err(fidl::Error::NotNullable),
5123                Some(len) => len,
5124            };
5125            // Calling decoder.out_of_line_offset(0) is not allowed.
5126            if len == 0 {
5127                return Ok(());
5128            };
5129            depth.increment()?;
5130            let envelope_size = 8;
5131            let bytes_len = len * envelope_size;
5132            let offset = decoder.out_of_line_offset(bytes_len)?;
5133            // Decode the envelope for each type.
5134            let mut _next_ordinal_to_read = 0;
5135            let mut next_offset = offset;
5136            let end_offset = offset + bytes_len;
5137            _next_ordinal_to_read += 1;
5138            if next_offset >= end_offset {
5139                return Ok(());
5140            }
5141
5142            // Decode unknown envelopes for gaps in ordinals.
5143            while _next_ordinal_to_read < 1 {
5144                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5145                _next_ordinal_to_read += 1;
5146                next_offset += envelope_size;
5147            }
5148
5149            let next_out_of_line = decoder.next_out_of_line();
5150            let handles_before = decoder.remaining_handles();
5151            if let Some((inlined, num_bytes, num_handles)) =
5152                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5153            {
5154                let member_inline_size =
5155                    <Nat64State as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5156                if inlined != (member_inline_size <= 4) {
5157                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5158                }
5159                let inner_offset;
5160                let mut inner_depth = depth.clone();
5161                if inlined {
5162                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5163                    inner_offset = next_offset;
5164                } else {
5165                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5166                    inner_depth.increment()?;
5167                }
5168                let val_ref = self
5169                    .prefix_manager_state
5170                    .get_or_insert_with(|| fidl::new_empty!(Nat64State, D));
5171                fidl::decode!(Nat64State, D, val_ref, decoder, inner_offset, inner_depth)?;
5172                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5173                {
5174                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5175                }
5176                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5177                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5178                }
5179            }
5180
5181            next_offset += envelope_size;
5182            _next_ordinal_to_read += 1;
5183            if next_offset >= end_offset {
5184                return Ok(());
5185            }
5186
5187            // Decode unknown envelopes for gaps in ordinals.
5188            while _next_ordinal_to_read < 2 {
5189                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5190                _next_ordinal_to_read += 1;
5191                next_offset += envelope_size;
5192            }
5193
5194            let next_out_of_line = decoder.next_out_of_line();
5195            let handles_before = decoder.remaining_handles();
5196            if let Some((inlined, num_bytes, num_handles)) =
5197                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5198            {
5199                let member_inline_size =
5200                    <Nat64State as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5201                if inlined != (member_inline_size <= 4) {
5202                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5203                }
5204                let inner_offset;
5205                let mut inner_depth = depth.clone();
5206                if inlined {
5207                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5208                    inner_offset = next_offset;
5209                } else {
5210                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5211                    inner_depth.increment()?;
5212                }
5213                let val_ref =
5214                    self.translator_state.get_or_insert_with(|| fidl::new_empty!(Nat64State, D));
5215                fidl::decode!(Nat64State, D, val_ref, decoder, inner_offset, inner_depth)?;
5216                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5217                {
5218                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5219                }
5220                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5221                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5222                }
5223            }
5224
5225            next_offset += envelope_size;
5226
5227            // Decode the remaining unknown envelopes.
5228            while next_offset < end_offset {
5229                _next_ordinal_to_read += 1;
5230                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5231                next_offset += envelope_size;
5232            }
5233
5234            Ok(())
5235        }
5236    }
5237
5238    impl BorderRoutingPeer {
5239        #[inline(always)]
5240        fn max_ordinal_present(&self) -> u64 {
5241            if let Some(_) = self.age {
5242                return 2;
5243            }
5244            if let Some(_) = self.thread_rloc {
5245                return 1;
5246            }
5247            0
5248        }
5249    }
5250
5251    impl fidl::encoding::ValueTypeMarker for BorderRoutingPeer {
5252        type Borrowed<'a> = &'a Self;
5253        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5254            value
5255        }
5256    }
5257
5258    unsafe impl fidl::encoding::TypeMarker for BorderRoutingPeer {
5259        type Owned = Self;
5260
5261        #[inline(always)]
5262        fn inline_align(_context: fidl::encoding::Context) -> usize {
5263            8
5264        }
5265
5266        #[inline(always)]
5267        fn inline_size(_context: fidl::encoding::Context) -> usize {
5268            16
5269        }
5270    }
5271
5272    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<BorderRoutingPeer, D>
5273        for &BorderRoutingPeer
5274    {
5275        unsafe fn encode(
5276            self,
5277            encoder: &mut fidl::encoding::Encoder<'_, D>,
5278            offset: usize,
5279            mut depth: fidl::encoding::Depth,
5280        ) -> fidl::Result<()> {
5281            encoder.debug_check_bounds::<BorderRoutingPeer>(offset);
5282            // Vector header
5283            let max_ordinal: u64 = self.max_ordinal_present();
5284            encoder.write_num(max_ordinal, offset);
5285            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
5286            // Calling encoder.out_of_line_offset(0) is not allowed.
5287            if max_ordinal == 0 {
5288                return Ok(());
5289            }
5290            depth.increment()?;
5291            let envelope_size = 8;
5292            let bytes_len = max_ordinal as usize * envelope_size;
5293            #[allow(unused_variables)]
5294            let offset = encoder.out_of_line_offset(bytes_len);
5295            let mut _prev_end_offset: usize = 0;
5296            if 1 > max_ordinal {
5297                return Ok(());
5298            }
5299
5300            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5301            // are envelope_size bytes.
5302            let cur_offset: usize = (1 - 1) * envelope_size;
5303
5304            // Zero reserved fields.
5305            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5306
5307            // Safety:
5308            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5309            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5310            //   envelope_size bytes, there is always sufficient room.
5311            fidl::encoding::encode_in_envelope_optional::<u16, D>(
5312                self.thread_rloc.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
5313                encoder,
5314                offset + cur_offset,
5315                depth,
5316            )?;
5317
5318            _prev_end_offset = cur_offset + envelope_size;
5319            if 2 > max_ordinal {
5320                return Ok(());
5321            }
5322
5323            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5324            // are envelope_size bytes.
5325            let cur_offset: usize = (2 - 1) * envelope_size;
5326
5327            // Zero reserved fields.
5328            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5329
5330            // Safety:
5331            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5332            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5333            //   envelope_size bytes, there is always sufficient room.
5334            fidl::encoding::encode_in_envelope_optional::<i64, D>(
5335                self.age.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
5336                encoder,
5337                offset + cur_offset,
5338                depth,
5339            )?;
5340
5341            _prev_end_offset = cur_offset + envelope_size;
5342
5343            Ok(())
5344        }
5345    }
5346
5347    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for BorderRoutingPeer {
5348        #[inline(always)]
5349        fn new_empty() -> Self {
5350            Self::default()
5351        }
5352
5353        unsafe fn decode(
5354            &mut self,
5355            decoder: &mut fidl::encoding::Decoder<'_, D>,
5356            offset: usize,
5357            mut depth: fidl::encoding::Depth,
5358        ) -> fidl::Result<()> {
5359            decoder.debug_check_bounds::<Self>(offset);
5360            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
5361                None => return Err(fidl::Error::NotNullable),
5362                Some(len) => len,
5363            };
5364            // Calling decoder.out_of_line_offset(0) is not allowed.
5365            if len == 0 {
5366                return Ok(());
5367            };
5368            depth.increment()?;
5369            let envelope_size = 8;
5370            let bytes_len = len * envelope_size;
5371            let offset = decoder.out_of_line_offset(bytes_len)?;
5372            // Decode the envelope for each type.
5373            let mut _next_ordinal_to_read = 0;
5374            let mut next_offset = offset;
5375            let end_offset = offset + bytes_len;
5376            _next_ordinal_to_read += 1;
5377            if next_offset >= end_offset {
5378                return Ok(());
5379            }
5380
5381            // Decode unknown envelopes for gaps in ordinals.
5382            while _next_ordinal_to_read < 1 {
5383                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5384                _next_ordinal_to_read += 1;
5385                next_offset += envelope_size;
5386            }
5387
5388            let next_out_of_line = decoder.next_out_of_line();
5389            let handles_before = decoder.remaining_handles();
5390            if let Some((inlined, num_bytes, num_handles)) =
5391                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5392            {
5393                let member_inline_size =
5394                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5395                if inlined != (member_inline_size <= 4) {
5396                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5397                }
5398                let inner_offset;
5399                let mut inner_depth = depth.clone();
5400                if inlined {
5401                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5402                    inner_offset = next_offset;
5403                } else {
5404                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5405                    inner_depth.increment()?;
5406                }
5407                let val_ref = self.thread_rloc.get_or_insert_with(|| fidl::new_empty!(u16, D));
5408                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
5409                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5410                {
5411                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5412                }
5413                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5414                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5415                }
5416            }
5417
5418            next_offset += envelope_size;
5419            _next_ordinal_to_read += 1;
5420            if next_offset >= end_offset {
5421                return Ok(());
5422            }
5423
5424            // Decode unknown envelopes for gaps in ordinals.
5425            while _next_ordinal_to_read < 2 {
5426                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5427                _next_ordinal_to_read += 1;
5428                next_offset += envelope_size;
5429            }
5430
5431            let next_out_of_line = decoder.next_out_of_line();
5432            let handles_before = decoder.remaining_handles();
5433            if let Some((inlined, num_bytes, num_handles)) =
5434                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5435            {
5436                let member_inline_size =
5437                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5438                if inlined != (member_inline_size <= 4) {
5439                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5440                }
5441                let inner_offset;
5442                let mut inner_depth = depth.clone();
5443                if inlined {
5444                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5445                    inner_offset = next_offset;
5446                } else {
5447                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5448                    inner_depth.increment()?;
5449                }
5450                let val_ref = self.age.get_or_insert_with(|| fidl::new_empty!(i64, D));
5451                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
5452                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5453                {
5454                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5455                }
5456                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5457                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5458                }
5459            }
5460
5461            next_offset += envelope_size;
5462
5463            // Decode the remaining unknown envelopes.
5464            while next_offset < end_offset {
5465                _next_ordinal_to_read += 1;
5466                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5467                next_offset += envelope_size;
5468            }
5469
5470            Ok(())
5471        }
5472    }
5473
5474    impl BorderRoutingRouter {
5475        #[inline(always)]
5476        fn max_ordinal_present(&self) -> u64 {
5477            if let Some(_) = self.is_peer_br {
5478                return 9;
5479            }
5480            if let Some(_) = self.is_reachable {
5481                return 8;
5482            }
5483            if let Some(_) = self.is_local_device {
5484                return 7;
5485            }
5486            if let Some(_) = self.snac_router_flag {
5487                return 6;
5488            }
5489            if let Some(_) = self.other_config_flag {
5490                return 5;
5491            }
5492            if let Some(_) = self.managed_address_config_flag {
5493                return 4;
5494            }
5495            if let Some(_) = self.age {
5496                return 3;
5497            }
5498            if let Some(_) = self.duration_since_last_update {
5499                return 2;
5500            }
5501            if let Some(_) = self.address {
5502                return 1;
5503            }
5504            0
5505        }
5506    }
5507
5508    impl fidl::encoding::ValueTypeMarker for BorderRoutingRouter {
5509        type Borrowed<'a> = &'a Self;
5510        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5511            value
5512        }
5513    }
5514
5515    unsafe impl fidl::encoding::TypeMarker for BorderRoutingRouter {
5516        type Owned = Self;
5517
5518        #[inline(always)]
5519        fn inline_align(_context: fidl::encoding::Context) -> usize {
5520            8
5521        }
5522
5523        #[inline(always)]
5524        fn inline_size(_context: fidl::encoding::Context) -> usize {
5525            16
5526        }
5527    }
5528
5529    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<BorderRoutingRouter, D>
5530        for &BorderRoutingRouter
5531    {
5532        unsafe fn encode(
5533            self,
5534            encoder: &mut fidl::encoding::Encoder<'_, D>,
5535            offset: usize,
5536            mut depth: fidl::encoding::Depth,
5537        ) -> fidl::Result<()> {
5538            encoder.debug_check_bounds::<BorderRoutingRouter>(offset);
5539            // Vector header
5540            let max_ordinal: u64 = self.max_ordinal_present();
5541            encoder.write_num(max_ordinal, offset);
5542            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
5543            // Calling encoder.out_of_line_offset(0) is not allowed.
5544            if max_ordinal == 0 {
5545                return Ok(());
5546            }
5547            depth.increment()?;
5548            let envelope_size = 8;
5549            let bytes_len = max_ordinal as usize * envelope_size;
5550            #[allow(unused_variables)]
5551            let offset = encoder.out_of_line_offset(bytes_len);
5552            let mut _prev_end_offset: usize = 0;
5553            if 1 > max_ordinal {
5554                return Ok(());
5555            }
5556
5557            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5558            // are envelope_size bytes.
5559            let cur_offset: usize = (1 - 1) * envelope_size;
5560
5561            // Zero reserved fields.
5562            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5563
5564            // Safety:
5565            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5566            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5567            //   envelope_size bytes, there is always sufficient room.
5568            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<64>, D>(
5569                self.address.as_ref().map(
5570                    <fidl::encoding::BoundedString<64> as fidl::encoding::ValueTypeMarker>::borrow,
5571                ),
5572                encoder,
5573                offset + cur_offset,
5574                depth,
5575            )?;
5576
5577            _prev_end_offset = cur_offset + envelope_size;
5578            if 2 > max_ordinal {
5579                return Ok(());
5580            }
5581
5582            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5583            // are envelope_size bytes.
5584            let cur_offset: usize = (2 - 1) * envelope_size;
5585
5586            // Zero reserved fields.
5587            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5588
5589            // Safety:
5590            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5591            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5592            //   envelope_size bytes, there is always sufficient room.
5593            fidl::encoding::encode_in_envelope_optional::<i64, D>(
5594                self.duration_since_last_update
5595                    .as_ref()
5596                    .map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
5597                encoder,
5598                offset + cur_offset,
5599                depth,
5600            )?;
5601
5602            _prev_end_offset = cur_offset + envelope_size;
5603            if 3 > max_ordinal {
5604                return Ok(());
5605            }
5606
5607            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5608            // are envelope_size bytes.
5609            let cur_offset: usize = (3 - 1) * envelope_size;
5610
5611            // Zero reserved fields.
5612            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5613
5614            // Safety:
5615            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5616            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5617            //   envelope_size bytes, there is always sufficient room.
5618            fidl::encoding::encode_in_envelope_optional::<i64, D>(
5619                self.age.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
5620                encoder,
5621                offset + cur_offset,
5622                depth,
5623            )?;
5624
5625            _prev_end_offset = cur_offset + envelope_size;
5626            if 4 > max_ordinal {
5627                return Ok(());
5628            }
5629
5630            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5631            // are envelope_size bytes.
5632            let cur_offset: usize = (4 - 1) * envelope_size;
5633
5634            // Zero reserved fields.
5635            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5636
5637            // Safety:
5638            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5639            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5640            //   envelope_size bytes, there is always sufficient room.
5641            fidl::encoding::encode_in_envelope_optional::<bool, D>(
5642                self.managed_address_config_flag
5643                    .as_ref()
5644                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
5645                encoder,
5646                offset + cur_offset,
5647                depth,
5648            )?;
5649
5650            _prev_end_offset = cur_offset + envelope_size;
5651            if 5 > max_ordinal {
5652                return Ok(());
5653            }
5654
5655            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5656            // are envelope_size bytes.
5657            let cur_offset: usize = (5 - 1) * envelope_size;
5658
5659            // Zero reserved fields.
5660            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5661
5662            // Safety:
5663            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5664            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5665            //   envelope_size bytes, there is always sufficient room.
5666            fidl::encoding::encode_in_envelope_optional::<bool, D>(
5667                self.other_config_flag
5668                    .as_ref()
5669                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
5670                encoder,
5671                offset + cur_offset,
5672                depth,
5673            )?;
5674
5675            _prev_end_offset = cur_offset + envelope_size;
5676            if 6 > max_ordinal {
5677                return Ok(());
5678            }
5679
5680            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5681            // are envelope_size bytes.
5682            let cur_offset: usize = (6 - 1) * envelope_size;
5683
5684            // Zero reserved fields.
5685            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5686
5687            // Safety:
5688            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5689            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5690            //   envelope_size bytes, there is always sufficient room.
5691            fidl::encoding::encode_in_envelope_optional::<bool, D>(
5692                self.snac_router_flag
5693                    .as_ref()
5694                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
5695                encoder,
5696                offset + cur_offset,
5697                depth,
5698            )?;
5699
5700            _prev_end_offset = cur_offset + envelope_size;
5701            if 7 > max_ordinal {
5702                return Ok(());
5703            }
5704
5705            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5706            // are envelope_size bytes.
5707            let cur_offset: usize = (7 - 1) * envelope_size;
5708
5709            // Zero reserved fields.
5710            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5711
5712            // Safety:
5713            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5714            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5715            //   envelope_size bytes, there is always sufficient room.
5716            fidl::encoding::encode_in_envelope_optional::<bool, D>(
5717                self.is_local_device
5718                    .as_ref()
5719                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
5720                encoder,
5721                offset + cur_offset,
5722                depth,
5723            )?;
5724
5725            _prev_end_offset = cur_offset + envelope_size;
5726            if 8 > max_ordinal {
5727                return Ok(());
5728            }
5729
5730            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5731            // are envelope_size bytes.
5732            let cur_offset: usize = (8 - 1) * envelope_size;
5733
5734            // Zero reserved fields.
5735            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5736
5737            // Safety:
5738            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5739            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5740            //   envelope_size bytes, there is always sufficient room.
5741            fidl::encoding::encode_in_envelope_optional::<bool, D>(
5742                self.is_reachable.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
5743                encoder,
5744                offset + cur_offset,
5745                depth,
5746            )?;
5747
5748            _prev_end_offset = cur_offset + envelope_size;
5749            if 9 > max_ordinal {
5750                return Ok(());
5751            }
5752
5753            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5754            // are envelope_size bytes.
5755            let cur_offset: usize = (9 - 1) * envelope_size;
5756
5757            // Zero reserved fields.
5758            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5759
5760            // Safety:
5761            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5762            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5763            //   envelope_size bytes, there is always sufficient room.
5764            fidl::encoding::encode_in_envelope_optional::<bool, D>(
5765                self.is_peer_br.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
5766                encoder,
5767                offset + cur_offset,
5768                depth,
5769            )?;
5770
5771            _prev_end_offset = cur_offset + envelope_size;
5772
5773            Ok(())
5774        }
5775    }
5776
5777    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for BorderRoutingRouter {
5778        #[inline(always)]
5779        fn new_empty() -> Self {
5780            Self::default()
5781        }
5782
5783        unsafe fn decode(
5784            &mut self,
5785            decoder: &mut fidl::encoding::Decoder<'_, D>,
5786            offset: usize,
5787            mut depth: fidl::encoding::Depth,
5788        ) -> fidl::Result<()> {
5789            decoder.debug_check_bounds::<Self>(offset);
5790            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
5791                None => return Err(fidl::Error::NotNullable),
5792                Some(len) => len,
5793            };
5794            // Calling decoder.out_of_line_offset(0) is not allowed.
5795            if len == 0 {
5796                return Ok(());
5797            };
5798            depth.increment()?;
5799            let envelope_size = 8;
5800            let bytes_len = len * envelope_size;
5801            let offset = decoder.out_of_line_offset(bytes_len)?;
5802            // Decode the envelope for each type.
5803            let mut _next_ordinal_to_read = 0;
5804            let mut next_offset = offset;
5805            let end_offset = offset + bytes_len;
5806            _next_ordinal_to_read += 1;
5807            if next_offset >= end_offset {
5808                return Ok(());
5809            }
5810
5811            // Decode unknown envelopes for gaps in ordinals.
5812            while _next_ordinal_to_read < 1 {
5813                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5814                _next_ordinal_to_read += 1;
5815                next_offset += envelope_size;
5816            }
5817
5818            let next_out_of_line = decoder.next_out_of_line();
5819            let handles_before = decoder.remaining_handles();
5820            if let Some((inlined, num_bytes, num_handles)) =
5821                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5822            {
5823                let member_inline_size =
5824                    <fidl::encoding::BoundedString<64> as fidl::encoding::TypeMarker>::inline_size(
5825                        decoder.context,
5826                    );
5827                if inlined != (member_inline_size <= 4) {
5828                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5829                }
5830                let inner_offset;
5831                let mut inner_depth = depth.clone();
5832                if inlined {
5833                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5834                    inner_offset = next_offset;
5835                } else {
5836                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5837                    inner_depth.increment()?;
5838                }
5839                let val_ref = self
5840                    .address
5841                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<64>, D));
5842                fidl::decode!(
5843                    fidl::encoding::BoundedString<64>,
5844                    D,
5845                    val_ref,
5846                    decoder,
5847                    inner_offset,
5848                    inner_depth
5849                )?;
5850                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5851                {
5852                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5853                }
5854                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5855                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5856                }
5857            }
5858
5859            next_offset += envelope_size;
5860            _next_ordinal_to_read += 1;
5861            if next_offset >= end_offset {
5862                return Ok(());
5863            }
5864
5865            // Decode unknown envelopes for gaps in ordinals.
5866            while _next_ordinal_to_read < 2 {
5867                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5868                _next_ordinal_to_read += 1;
5869                next_offset += envelope_size;
5870            }
5871
5872            let next_out_of_line = decoder.next_out_of_line();
5873            let handles_before = decoder.remaining_handles();
5874            if let Some((inlined, num_bytes, num_handles)) =
5875                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5876            {
5877                let member_inline_size =
5878                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5879                if inlined != (member_inline_size <= 4) {
5880                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5881                }
5882                let inner_offset;
5883                let mut inner_depth = depth.clone();
5884                if inlined {
5885                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5886                    inner_offset = next_offset;
5887                } else {
5888                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5889                    inner_depth.increment()?;
5890                }
5891                let val_ref =
5892                    self.duration_since_last_update.get_or_insert_with(|| fidl::new_empty!(i64, D));
5893                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
5894                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5895                {
5896                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5897                }
5898                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5899                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5900                }
5901            }
5902
5903            next_offset += envelope_size;
5904            _next_ordinal_to_read += 1;
5905            if next_offset >= end_offset {
5906                return Ok(());
5907            }
5908
5909            // Decode unknown envelopes for gaps in ordinals.
5910            while _next_ordinal_to_read < 3 {
5911                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5912                _next_ordinal_to_read += 1;
5913                next_offset += envelope_size;
5914            }
5915
5916            let next_out_of_line = decoder.next_out_of_line();
5917            let handles_before = decoder.remaining_handles();
5918            if let Some((inlined, num_bytes, num_handles)) =
5919                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5920            {
5921                let member_inline_size =
5922                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5923                if inlined != (member_inline_size <= 4) {
5924                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5925                }
5926                let inner_offset;
5927                let mut inner_depth = depth.clone();
5928                if inlined {
5929                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5930                    inner_offset = next_offset;
5931                } else {
5932                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5933                    inner_depth.increment()?;
5934                }
5935                let val_ref = self.age.get_or_insert_with(|| fidl::new_empty!(i64, D));
5936                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
5937                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5938                {
5939                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5940                }
5941                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5942                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5943                }
5944            }
5945
5946            next_offset += envelope_size;
5947            _next_ordinal_to_read += 1;
5948            if next_offset >= end_offset {
5949                return Ok(());
5950            }
5951
5952            // Decode unknown envelopes for gaps in ordinals.
5953            while _next_ordinal_to_read < 4 {
5954                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5955                _next_ordinal_to_read += 1;
5956                next_offset += envelope_size;
5957            }
5958
5959            let next_out_of_line = decoder.next_out_of_line();
5960            let handles_before = decoder.remaining_handles();
5961            if let Some((inlined, num_bytes, num_handles)) =
5962                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5963            {
5964                let member_inline_size =
5965                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5966                if inlined != (member_inline_size <= 4) {
5967                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5968                }
5969                let inner_offset;
5970                let mut inner_depth = depth.clone();
5971                if inlined {
5972                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5973                    inner_offset = next_offset;
5974                } else {
5975                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5976                    inner_depth.increment()?;
5977                }
5978                let val_ref = self
5979                    .managed_address_config_flag
5980                    .get_or_insert_with(|| fidl::new_empty!(bool, D));
5981                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
5982                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5983                {
5984                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5985                }
5986                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5987                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5988                }
5989            }
5990
5991            next_offset += envelope_size;
5992            _next_ordinal_to_read += 1;
5993            if next_offset >= end_offset {
5994                return Ok(());
5995            }
5996
5997            // Decode unknown envelopes for gaps in ordinals.
5998            while _next_ordinal_to_read < 5 {
5999                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6000                _next_ordinal_to_read += 1;
6001                next_offset += envelope_size;
6002            }
6003
6004            let next_out_of_line = decoder.next_out_of_line();
6005            let handles_before = decoder.remaining_handles();
6006            if let Some((inlined, num_bytes, num_handles)) =
6007                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6008            {
6009                let member_inline_size =
6010                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6011                if inlined != (member_inline_size <= 4) {
6012                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6013                }
6014                let inner_offset;
6015                let mut inner_depth = depth.clone();
6016                if inlined {
6017                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6018                    inner_offset = next_offset;
6019                } else {
6020                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6021                    inner_depth.increment()?;
6022                }
6023                let val_ref =
6024                    self.other_config_flag.get_or_insert_with(|| fidl::new_empty!(bool, D));
6025                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
6026                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6027                {
6028                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6029                }
6030                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6031                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6032                }
6033            }
6034
6035            next_offset += envelope_size;
6036            _next_ordinal_to_read += 1;
6037            if next_offset >= end_offset {
6038                return Ok(());
6039            }
6040
6041            // Decode unknown envelopes for gaps in ordinals.
6042            while _next_ordinal_to_read < 6 {
6043                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6044                _next_ordinal_to_read += 1;
6045                next_offset += envelope_size;
6046            }
6047
6048            let next_out_of_line = decoder.next_out_of_line();
6049            let handles_before = decoder.remaining_handles();
6050            if let Some((inlined, num_bytes, num_handles)) =
6051                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6052            {
6053                let member_inline_size =
6054                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6055                if inlined != (member_inline_size <= 4) {
6056                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6057                }
6058                let inner_offset;
6059                let mut inner_depth = depth.clone();
6060                if inlined {
6061                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6062                    inner_offset = next_offset;
6063                } else {
6064                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6065                    inner_depth.increment()?;
6066                }
6067                let val_ref =
6068                    self.snac_router_flag.get_or_insert_with(|| fidl::new_empty!(bool, D));
6069                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
6070                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6071                {
6072                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6073                }
6074                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6075                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6076                }
6077            }
6078
6079            next_offset += envelope_size;
6080            _next_ordinal_to_read += 1;
6081            if next_offset >= end_offset {
6082                return Ok(());
6083            }
6084
6085            // Decode unknown envelopes for gaps in ordinals.
6086            while _next_ordinal_to_read < 7 {
6087                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6088                _next_ordinal_to_read += 1;
6089                next_offset += envelope_size;
6090            }
6091
6092            let next_out_of_line = decoder.next_out_of_line();
6093            let handles_before = decoder.remaining_handles();
6094            if let Some((inlined, num_bytes, num_handles)) =
6095                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6096            {
6097                let member_inline_size =
6098                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6099                if inlined != (member_inline_size <= 4) {
6100                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6101                }
6102                let inner_offset;
6103                let mut inner_depth = depth.clone();
6104                if inlined {
6105                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6106                    inner_offset = next_offset;
6107                } else {
6108                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6109                    inner_depth.increment()?;
6110                }
6111                let val_ref = self.is_local_device.get_or_insert_with(|| fidl::new_empty!(bool, D));
6112                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
6113                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6114                {
6115                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6116                }
6117                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6118                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6119                }
6120            }
6121
6122            next_offset += envelope_size;
6123            _next_ordinal_to_read += 1;
6124            if next_offset >= end_offset {
6125                return Ok(());
6126            }
6127
6128            // Decode unknown envelopes for gaps in ordinals.
6129            while _next_ordinal_to_read < 8 {
6130                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6131                _next_ordinal_to_read += 1;
6132                next_offset += envelope_size;
6133            }
6134
6135            let next_out_of_line = decoder.next_out_of_line();
6136            let handles_before = decoder.remaining_handles();
6137            if let Some((inlined, num_bytes, num_handles)) =
6138                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6139            {
6140                let member_inline_size =
6141                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6142                if inlined != (member_inline_size <= 4) {
6143                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6144                }
6145                let inner_offset;
6146                let mut inner_depth = depth.clone();
6147                if inlined {
6148                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6149                    inner_offset = next_offset;
6150                } else {
6151                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6152                    inner_depth.increment()?;
6153                }
6154                let val_ref = self.is_reachable.get_or_insert_with(|| fidl::new_empty!(bool, D));
6155                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
6156                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6157                {
6158                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6159                }
6160                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6161                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6162                }
6163            }
6164
6165            next_offset += envelope_size;
6166            _next_ordinal_to_read += 1;
6167            if next_offset >= end_offset {
6168                return Ok(());
6169            }
6170
6171            // Decode unknown envelopes for gaps in ordinals.
6172            while _next_ordinal_to_read < 9 {
6173                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6174                _next_ordinal_to_read += 1;
6175                next_offset += envelope_size;
6176            }
6177
6178            let next_out_of_line = decoder.next_out_of_line();
6179            let handles_before = decoder.remaining_handles();
6180            if let Some((inlined, num_bytes, num_handles)) =
6181                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6182            {
6183                let member_inline_size =
6184                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6185                if inlined != (member_inline_size <= 4) {
6186                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6187                }
6188                let inner_offset;
6189                let mut inner_depth = depth.clone();
6190                if inlined {
6191                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6192                    inner_offset = next_offset;
6193                } else {
6194                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6195                    inner_depth.increment()?;
6196                }
6197                let val_ref = self.is_peer_br.get_or_insert_with(|| fidl::new_empty!(bool, D));
6198                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
6199                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6200                {
6201                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6202                }
6203                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6204                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6205                }
6206            }
6207
6208            next_offset += envelope_size;
6209
6210            // Decode the remaining unknown envelopes.
6211            while next_offset < end_offset {
6212                _next_ordinal_to_read += 1;
6213                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6214                next_offset += envelope_size;
6215            }
6216
6217            Ok(())
6218        }
6219    }
6220
6221    impl ChannelInfo {
6222        #[inline(always)]
6223        fn max_ordinal_present(&self) -> u64 {
6224            if let Some(_) = self.masked_by_regulatory_domain {
6225                return 6;
6226            }
6227            if let Some(_) = self.spectrum_bandwidth_hz {
6228                return 5;
6229            }
6230            if let Some(_) = self.spectrum_center_frequency_hz {
6231                return 4;
6232            }
6233            if let Some(_) = self.max_transmit_power_dbm {
6234                return 3;
6235            }
6236            if let Some(_) = self.id {
6237                return 2;
6238            }
6239            if let Some(_) = self.index {
6240                return 1;
6241            }
6242            0
6243        }
6244    }
6245
6246    impl fidl::encoding::ValueTypeMarker for ChannelInfo {
6247        type Borrowed<'a> = &'a Self;
6248        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
6249            value
6250        }
6251    }
6252
6253    unsafe impl fidl::encoding::TypeMarker for ChannelInfo {
6254        type Owned = Self;
6255
6256        #[inline(always)]
6257        fn inline_align(_context: fidl::encoding::Context) -> usize {
6258            8
6259        }
6260
6261        #[inline(always)]
6262        fn inline_size(_context: fidl::encoding::Context) -> usize {
6263            16
6264        }
6265    }
6266
6267    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<ChannelInfo, D>
6268        for &ChannelInfo
6269    {
6270        unsafe fn encode(
6271            self,
6272            encoder: &mut fidl::encoding::Encoder<'_, D>,
6273            offset: usize,
6274            mut depth: fidl::encoding::Depth,
6275        ) -> fidl::Result<()> {
6276            encoder.debug_check_bounds::<ChannelInfo>(offset);
6277            // Vector header
6278            let max_ordinal: u64 = self.max_ordinal_present();
6279            encoder.write_num(max_ordinal, offset);
6280            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
6281            // Calling encoder.out_of_line_offset(0) is not allowed.
6282            if max_ordinal == 0 {
6283                return Ok(());
6284            }
6285            depth.increment()?;
6286            let envelope_size = 8;
6287            let bytes_len = max_ordinal as usize * envelope_size;
6288            #[allow(unused_variables)]
6289            let offset = encoder.out_of_line_offset(bytes_len);
6290            let mut _prev_end_offset: usize = 0;
6291            if 1 > max_ordinal {
6292                return Ok(());
6293            }
6294
6295            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6296            // are envelope_size bytes.
6297            let cur_offset: usize = (1 - 1) * envelope_size;
6298
6299            // Zero reserved fields.
6300            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6301
6302            // Safety:
6303            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6304            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6305            //   envelope_size bytes, there is always sufficient room.
6306            fidl::encoding::encode_in_envelope_optional::<u16, D>(
6307                self.index.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
6308                encoder,
6309                offset + cur_offset,
6310                depth,
6311            )?;
6312
6313            _prev_end_offset = cur_offset + envelope_size;
6314            if 2 > max_ordinal {
6315                return Ok(());
6316            }
6317
6318            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6319            // are envelope_size bytes.
6320            let cur_offset: usize = (2 - 1) * envelope_size;
6321
6322            // Zero reserved fields.
6323            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6324
6325            // Safety:
6326            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6327            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6328            //   envelope_size bytes, there is always sufficient room.
6329            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<16>, D>(
6330                self.id.as_ref().map(
6331                    <fidl::encoding::BoundedString<16> as fidl::encoding::ValueTypeMarker>::borrow,
6332                ),
6333                encoder,
6334                offset + cur_offset,
6335                depth,
6336            )?;
6337
6338            _prev_end_offset = cur_offset + envelope_size;
6339            if 3 > max_ordinal {
6340                return Ok(());
6341            }
6342
6343            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6344            // are envelope_size bytes.
6345            let cur_offset: usize = (3 - 1) * envelope_size;
6346
6347            // Zero reserved fields.
6348            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6349
6350            // Safety:
6351            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6352            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6353            //   envelope_size bytes, there is always sufficient room.
6354            fidl::encoding::encode_in_envelope_optional::<i8, D>(
6355                self.max_transmit_power_dbm
6356                    .as_ref()
6357                    .map(<i8 as fidl::encoding::ValueTypeMarker>::borrow),
6358                encoder,
6359                offset + cur_offset,
6360                depth,
6361            )?;
6362
6363            _prev_end_offset = cur_offset + envelope_size;
6364            if 4 > max_ordinal {
6365                return Ok(());
6366            }
6367
6368            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6369            // are envelope_size bytes.
6370            let cur_offset: usize = (4 - 1) * envelope_size;
6371
6372            // Zero reserved fields.
6373            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6374
6375            // Safety:
6376            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6377            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6378            //   envelope_size bytes, there is always sufficient room.
6379            fidl::encoding::encode_in_envelope_optional::<u64, D>(
6380                self.spectrum_center_frequency_hz
6381                    .as_ref()
6382                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
6383                encoder,
6384                offset + cur_offset,
6385                depth,
6386            )?;
6387
6388            _prev_end_offset = cur_offset + envelope_size;
6389            if 5 > max_ordinal {
6390                return Ok(());
6391            }
6392
6393            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6394            // are envelope_size bytes.
6395            let cur_offset: usize = (5 - 1) * envelope_size;
6396
6397            // Zero reserved fields.
6398            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6399
6400            // Safety:
6401            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6402            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6403            //   envelope_size bytes, there is always sufficient room.
6404            fidl::encoding::encode_in_envelope_optional::<u64, D>(
6405                self.spectrum_bandwidth_hz
6406                    .as_ref()
6407                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
6408                encoder,
6409                offset + cur_offset,
6410                depth,
6411            )?;
6412
6413            _prev_end_offset = cur_offset + envelope_size;
6414            if 6 > max_ordinal {
6415                return Ok(());
6416            }
6417
6418            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6419            // are envelope_size bytes.
6420            let cur_offset: usize = (6 - 1) * envelope_size;
6421
6422            // Zero reserved fields.
6423            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6424
6425            // Safety:
6426            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6427            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6428            //   envelope_size bytes, there is always sufficient room.
6429            fidl::encoding::encode_in_envelope_optional::<bool, D>(
6430                self.masked_by_regulatory_domain
6431                    .as_ref()
6432                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
6433                encoder,
6434                offset + cur_offset,
6435                depth,
6436            )?;
6437
6438            _prev_end_offset = cur_offset + envelope_size;
6439
6440            Ok(())
6441        }
6442    }
6443
6444    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ChannelInfo {
6445        #[inline(always)]
6446        fn new_empty() -> Self {
6447            Self::default()
6448        }
6449
6450        unsafe fn decode(
6451            &mut self,
6452            decoder: &mut fidl::encoding::Decoder<'_, D>,
6453            offset: usize,
6454            mut depth: fidl::encoding::Depth,
6455        ) -> fidl::Result<()> {
6456            decoder.debug_check_bounds::<Self>(offset);
6457            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
6458                None => return Err(fidl::Error::NotNullable),
6459                Some(len) => len,
6460            };
6461            // Calling decoder.out_of_line_offset(0) is not allowed.
6462            if len == 0 {
6463                return Ok(());
6464            };
6465            depth.increment()?;
6466            let envelope_size = 8;
6467            let bytes_len = len * envelope_size;
6468            let offset = decoder.out_of_line_offset(bytes_len)?;
6469            // Decode the envelope for each type.
6470            let mut _next_ordinal_to_read = 0;
6471            let mut next_offset = offset;
6472            let end_offset = offset + bytes_len;
6473            _next_ordinal_to_read += 1;
6474            if next_offset >= end_offset {
6475                return Ok(());
6476            }
6477
6478            // Decode unknown envelopes for gaps in ordinals.
6479            while _next_ordinal_to_read < 1 {
6480                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6481                _next_ordinal_to_read += 1;
6482                next_offset += envelope_size;
6483            }
6484
6485            let next_out_of_line = decoder.next_out_of_line();
6486            let handles_before = decoder.remaining_handles();
6487            if let Some((inlined, num_bytes, num_handles)) =
6488                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6489            {
6490                let member_inline_size =
6491                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6492                if inlined != (member_inline_size <= 4) {
6493                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6494                }
6495                let inner_offset;
6496                let mut inner_depth = depth.clone();
6497                if inlined {
6498                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6499                    inner_offset = next_offset;
6500                } else {
6501                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6502                    inner_depth.increment()?;
6503                }
6504                let val_ref = self.index.get_or_insert_with(|| fidl::new_empty!(u16, D));
6505                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
6506                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6507                {
6508                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6509                }
6510                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6511                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6512                }
6513            }
6514
6515            next_offset += envelope_size;
6516            _next_ordinal_to_read += 1;
6517            if next_offset >= end_offset {
6518                return Ok(());
6519            }
6520
6521            // Decode unknown envelopes for gaps in ordinals.
6522            while _next_ordinal_to_read < 2 {
6523                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6524                _next_ordinal_to_read += 1;
6525                next_offset += envelope_size;
6526            }
6527
6528            let next_out_of_line = decoder.next_out_of_line();
6529            let handles_before = decoder.remaining_handles();
6530            if let Some((inlined, num_bytes, num_handles)) =
6531                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6532            {
6533                let member_inline_size =
6534                    <fidl::encoding::BoundedString<16> as fidl::encoding::TypeMarker>::inline_size(
6535                        decoder.context,
6536                    );
6537                if inlined != (member_inline_size <= 4) {
6538                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6539                }
6540                let inner_offset;
6541                let mut inner_depth = depth.clone();
6542                if inlined {
6543                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6544                    inner_offset = next_offset;
6545                } else {
6546                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6547                    inner_depth.increment()?;
6548                }
6549                let val_ref = self
6550                    .id
6551                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<16>, D));
6552                fidl::decode!(
6553                    fidl::encoding::BoundedString<16>,
6554                    D,
6555                    val_ref,
6556                    decoder,
6557                    inner_offset,
6558                    inner_depth
6559                )?;
6560                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6561                {
6562                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6563                }
6564                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6565                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6566                }
6567            }
6568
6569            next_offset += envelope_size;
6570            _next_ordinal_to_read += 1;
6571            if next_offset >= end_offset {
6572                return Ok(());
6573            }
6574
6575            // Decode unknown envelopes for gaps in ordinals.
6576            while _next_ordinal_to_read < 3 {
6577                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6578                _next_ordinal_to_read += 1;
6579                next_offset += envelope_size;
6580            }
6581
6582            let next_out_of_line = decoder.next_out_of_line();
6583            let handles_before = decoder.remaining_handles();
6584            if let Some((inlined, num_bytes, num_handles)) =
6585                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6586            {
6587                let member_inline_size =
6588                    <i8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6589                if inlined != (member_inline_size <= 4) {
6590                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6591                }
6592                let inner_offset;
6593                let mut inner_depth = depth.clone();
6594                if inlined {
6595                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6596                    inner_offset = next_offset;
6597                } else {
6598                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6599                    inner_depth.increment()?;
6600                }
6601                let val_ref =
6602                    self.max_transmit_power_dbm.get_or_insert_with(|| fidl::new_empty!(i8, D));
6603                fidl::decode!(i8, D, val_ref, decoder, inner_offset, inner_depth)?;
6604                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6605                {
6606                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6607                }
6608                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6609                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6610                }
6611            }
6612
6613            next_offset += envelope_size;
6614            _next_ordinal_to_read += 1;
6615            if next_offset >= end_offset {
6616                return Ok(());
6617            }
6618
6619            // Decode unknown envelopes for gaps in ordinals.
6620            while _next_ordinal_to_read < 4 {
6621                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6622                _next_ordinal_to_read += 1;
6623                next_offset += envelope_size;
6624            }
6625
6626            let next_out_of_line = decoder.next_out_of_line();
6627            let handles_before = decoder.remaining_handles();
6628            if let Some((inlined, num_bytes, num_handles)) =
6629                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6630            {
6631                let member_inline_size =
6632                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6633                if inlined != (member_inline_size <= 4) {
6634                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6635                }
6636                let inner_offset;
6637                let mut inner_depth = depth.clone();
6638                if inlined {
6639                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6640                    inner_offset = next_offset;
6641                } else {
6642                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6643                    inner_depth.increment()?;
6644                }
6645                let val_ref = self
6646                    .spectrum_center_frequency_hz
6647                    .get_or_insert_with(|| fidl::new_empty!(u64, D));
6648                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
6649                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6650                {
6651                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6652                }
6653                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6654                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6655                }
6656            }
6657
6658            next_offset += envelope_size;
6659            _next_ordinal_to_read += 1;
6660            if next_offset >= end_offset {
6661                return Ok(());
6662            }
6663
6664            // Decode unknown envelopes for gaps in ordinals.
6665            while _next_ordinal_to_read < 5 {
6666                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6667                _next_ordinal_to_read += 1;
6668                next_offset += envelope_size;
6669            }
6670
6671            let next_out_of_line = decoder.next_out_of_line();
6672            let handles_before = decoder.remaining_handles();
6673            if let Some((inlined, num_bytes, num_handles)) =
6674                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6675            {
6676                let member_inline_size =
6677                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6678                if inlined != (member_inline_size <= 4) {
6679                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6680                }
6681                let inner_offset;
6682                let mut inner_depth = depth.clone();
6683                if inlined {
6684                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6685                    inner_offset = next_offset;
6686                } else {
6687                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6688                    inner_depth.increment()?;
6689                }
6690                let val_ref =
6691                    self.spectrum_bandwidth_hz.get_or_insert_with(|| fidl::new_empty!(u64, D));
6692                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
6693                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6694                {
6695                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6696                }
6697                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6698                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6699                }
6700            }
6701
6702            next_offset += envelope_size;
6703            _next_ordinal_to_read += 1;
6704            if next_offset >= end_offset {
6705                return Ok(());
6706            }
6707
6708            // Decode unknown envelopes for gaps in ordinals.
6709            while _next_ordinal_to_read < 6 {
6710                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6711                _next_ordinal_to_read += 1;
6712                next_offset += envelope_size;
6713            }
6714
6715            let next_out_of_line = decoder.next_out_of_line();
6716            let handles_before = decoder.remaining_handles();
6717            if let Some((inlined, num_bytes, num_handles)) =
6718                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6719            {
6720                let member_inline_size =
6721                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6722                if inlined != (member_inline_size <= 4) {
6723                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6724                }
6725                let inner_offset;
6726                let mut inner_depth = depth.clone();
6727                if inlined {
6728                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6729                    inner_offset = next_offset;
6730                } else {
6731                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6732                    inner_depth.increment()?;
6733                }
6734                let val_ref = self
6735                    .masked_by_regulatory_domain
6736                    .get_or_insert_with(|| fidl::new_empty!(bool, D));
6737                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
6738                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6739                {
6740                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6741                }
6742                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6743                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6744                }
6745            }
6746
6747            next_offset += envelope_size;
6748
6749            // Decode the remaining unknown envelopes.
6750            while next_offset < end_offset {
6751                _next_ordinal_to_read += 1;
6752                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6753                next_offset += envelope_size;
6754            }
6755
6756            Ok(())
6757        }
6758    }
6759
6760    impl Dhcp6PdInfo {
6761        #[inline(always)]
6762        fn max_ordinal_present(&self) -> u64 {
6763            if let Some(_) = self.hashed_pd_prefix {
6764                return 3;
6765            }
6766            if let Some(_) = self.pd_processed_ra_info {
6767                return 2;
6768            }
6769            if let Some(_) = self.dhcp6pd_state {
6770                return 1;
6771            }
6772            0
6773        }
6774    }
6775
6776    impl fidl::encoding::ValueTypeMarker for Dhcp6PdInfo {
6777        type Borrowed<'a> = &'a Self;
6778        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
6779            value
6780        }
6781    }
6782
6783    unsafe impl fidl::encoding::TypeMarker for Dhcp6PdInfo {
6784        type Owned = Self;
6785
6786        #[inline(always)]
6787        fn inline_align(_context: fidl::encoding::Context) -> usize {
6788            8
6789        }
6790
6791        #[inline(always)]
6792        fn inline_size(_context: fidl::encoding::Context) -> usize {
6793            16
6794        }
6795    }
6796
6797    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Dhcp6PdInfo, D>
6798        for &Dhcp6PdInfo
6799    {
6800        unsafe fn encode(
6801            self,
6802            encoder: &mut fidl::encoding::Encoder<'_, D>,
6803            offset: usize,
6804            mut depth: fidl::encoding::Depth,
6805        ) -> fidl::Result<()> {
6806            encoder.debug_check_bounds::<Dhcp6PdInfo>(offset);
6807            // Vector header
6808            let max_ordinal: u64 = self.max_ordinal_present();
6809            encoder.write_num(max_ordinal, offset);
6810            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
6811            // Calling encoder.out_of_line_offset(0) is not allowed.
6812            if max_ordinal == 0 {
6813                return Ok(());
6814            }
6815            depth.increment()?;
6816            let envelope_size = 8;
6817            let bytes_len = max_ordinal as usize * envelope_size;
6818            #[allow(unused_variables)]
6819            let offset = encoder.out_of_line_offset(bytes_len);
6820            let mut _prev_end_offset: usize = 0;
6821            if 1 > max_ordinal {
6822                return Ok(());
6823            }
6824
6825            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6826            // are envelope_size bytes.
6827            let cur_offset: usize = (1 - 1) * envelope_size;
6828
6829            // Zero reserved fields.
6830            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6831
6832            // Safety:
6833            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6834            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6835            //   envelope_size bytes, there is always sufficient room.
6836            fidl::encoding::encode_in_envelope_optional::<Dhcp6PdState, D>(
6837                self.dhcp6pd_state
6838                    .as_ref()
6839                    .map(<Dhcp6PdState as fidl::encoding::ValueTypeMarker>::borrow),
6840                encoder,
6841                offset + cur_offset,
6842                depth,
6843            )?;
6844
6845            _prev_end_offset = cur_offset + envelope_size;
6846            if 2 > max_ordinal {
6847                return Ok(());
6848            }
6849
6850            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6851            // are envelope_size bytes.
6852            let cur_offset: usize = (2 - 1) * envelope_size;
6853
6854            // Zero reserved fields.
6855            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6856
6857            // Safety:
6858            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6859            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6860            //   envelope_size bytes, there is always sufficient room.
6861            fidl::encoding::encode_in_envelope_optional::<PdProcessedRaInfo, D>(
6862                self.pd_processed_ra_info
6863                    .as_ref()
6864                    .map(<PdProcessedRaInfo as fidl::encoding::ValueTypeMarker>::borrow),
6865                encoder,
6866                offset + cur_offset,
6867                depth,
6868            )?;
6869
6870            _prev_end_offset = cur_offset + envelope_size;
6871            if 3 > max_ordinal {
6872                return Ok(());
6873            }
6874
6875            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6876            // are envelope_size bytes.
6877            let cur_offset: usize = (3 - 1) * envelope_size;
6878
6879            // Zero reserved fields.
6880            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6881
6882            // Safety:
6883            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6884            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6885            //   envelope_size bytes, there is always sufficient room.
6886            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u8, 32>, D>(
6887                self.hashed_pd_prefix.as_ref().map(
6888                    <fidl::encoding::Vector<u8, 32> as fidl::encoding::ValueTypeMarker>::borrow,
6889                ),
6890                encoder,
6891                offset + cur_offset,
6892                depth,
6893            )?;
6894
6895            _prev_end_offset = cur_offset + envelope_size;
6896
6897            Ok(())
6898        }
6899    }
6900
6901    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Dhcp6PdInfo {
6902        #[inline(always)]
6903        fn new_empty() -> Self {
6904            Self::default()
6905        }
6906
6907        unsafe fn decode(
6908            &mut self,
6909            decoder: &mut fidl::encoding::Decoder<'_, D>,
6910            offset: usize,
6911            mut depth: fidl::encoding::Depth,
6912        ) -> fidl::Result<()> {
6913            decoder.debug_check_bounds::<Self>(offset);
6914            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
6915                None => return Err(fidl::Error::NotNullable),
6916                Some(len) => len,
6917            };
6918            // Calling decoder.out_of_line_offset(0) is not allowed.
6919            if len == 0 {
6920                return Ok(());
6921            };
6922            depth.increment()?;
6923            let envelope_size = 8;
6924            let bytes_len = len * envelope_size;
6925            let offset = decoder.out_of_line_offset(bytes_len)?;
6926            // Decode the envelope for each type.
6927            let mut _next_ordinal_to_read = 0;
6928            let mut next_offset = offset;
6929            let end_offset = offset + bytes_len;
6930            _next_ordinal_to_read += 1;
6931            if next_offset >= end_offset {
6932                return Ok(());
6933            }
6934
6935            // Decode unknown envelopes for gaps in ordinals.
6936            while _next_ordinal_to_read < 1 {
6937                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6938                _next_ordinal_to_read += 1;
6939                next_offset += envelope_size;
6940            }
6941
6942            let next_out_of_line = decoder.next_out_of_line();
6943            let handles_before = decoder.remaining_handles();
6944            if let Some((inlined, num_bytes, num_handles)) =
6945                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6946            {
6947                let member_inline_size =
6948                    <Dhcp6PdState as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6949                if inlined != (member_inline_size <= 4) {
6950                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6951                }
6952                let inner_offset;
6953                let mut inner_depth = depth.clone();
6954                if inlined {
6955                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6956                    inner_offset = next_offset;
6957                } else {
6958                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6959                    inner_depth.increment()?;
6960                }
6961                let val_ref =
6962                    self.dhcp6pd_state.get_or_insert_with(|| fidl::new_empty!(Dhcp6PdState, D));
6963                fidl::decode!(Dhcp6PdState, D, val_ref, decoder, inner_offset, inner_depth)?;
6964                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6965                {
6966                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6967                }
6968                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6969                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6970                }
6971            }
6972
6973            next_offset += envelope_size;
6974            _next_ordinal_to_read += 1;
6975            if next_offset >= end_offset {
6976                return Ok(());
6977            }
6978
6979            // Decode unknown envelopes for gaps in ordinals.
6980            while _next_ordinal_to_read < 2 {
6981                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6982                _next_ordinal_to_read += 1;
6983                next_offset += envelope_size;
6984            }
6985
6986            let next_out_of_line = decoder.next_out_of_line();
6987            let handles_before = decoder.remaining_handles();
6988            if let Some((inlined, num_bytes, num_handles)) =
6989                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6990            {
6991                let member_inline_size =
6992                    <PdProcessedRaInfo as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6993                if inlined != (member_inline_size <= 4) {
6994                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6995                }
6996                let inner_offset;
6997                let mut inner_depth = depth.clone();
6998                if inlined {
6999                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7000                    inner_offset = next_offset;
7001                } else {
7002                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7003                    inner_depth.increment()?;
7004                }
7005                let val_ref = self
7006                    .pd_processed_ra_info
7007                    .get_or_insert_with(|| fidl::new_empty!(PdProcessedRaInfo, D));
7008                fidl::decode!(PdProcessedRaInfo, D, val_ref, decoder, inner_offset, inner_depth)?;
7009                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7010                {
7011                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7012                }
7013                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7014                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7015                }
7016            }
7017
7018            next_offset += envelope_size;
7019            _next_ordinal_to_read += 1;
7020            if next_offset >= end_offset {
7021                return Ok(());
7022            }
7023
7024            // Decode unknown envelopes for gaps in ordinals.
7025            while _next_ordinal_to_read < 3 {
7026                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7027                _next_ordinal_to_read += 1;
7028                next_offset += envelope_size;
7029            }
7030
7031            let next_out_of_line = decoder.next_out_of_line();
7032            let handles_before = decoder.remaining_handles();
7033            if let Some((inlined, num_bytes, num_handles)) =
7034                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7035            {
7036                let member_inline_size =
7037                    <fidl::encoding::Vector<u8, 32> as fidl::encoding::TypeMarker>::inline_size(
7038                        decoder.context,
7039                    );
7040                if inlined != (member_inline_size <= 4) {
7041                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7042                }
7043                let inner_offset;
7044                let mut inner_depth = depth.clone();
7045                if inlined {
7046                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7047                    inner_offset = next_offset;
7048                } else {
7049                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7050                    inner_depth.increment()?;
7051                }
7052                let val_ref = self
7053                    .hashed_pd_prefix
7054                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u8, 32>, D));
7055                fidl::decode!(fidl::encoding::Vector<u8, 32>, D, val_ref, decoder, inner_offset, inner_depth)?;
7056                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7057                {
7058                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7059                }
7060                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7061                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7062                }
7063            }
7064
7065            next_offset += envelope_size;
7066
7067            // Decode the remaining unknown envelopes.
7068            while next_offset < end_offset {
7069                _next_ordinal_to_read += 1;
7070                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7071                next_offset += envelope_size;
7072            }
7073
7074            Ok(())
7075        }
7076    }
7077
7078    impl DnsTxtEntry {
7079        #[inline(always)]
7080        fn max_ordinal_present(&self) -> u64 {
7081            if let Some(_) = self.value {
7082                return 2;
7083            }
7084            if let Some(_) = self.key {
7085                return 1;
7086            }
7087            0
7088        }
7089    }
7090
7091    impl fidl::encoding::ValueTypeMarker for DnsTxtEntry {
7092        type Borrowed<'a> = &'a Self;
7093        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
7094            value
7095        }
7096    }
7097
7098    unsafe impl fidl::encoding::TypeMarker for DnsTxtEntry {
7099        type Owned = Self;
7100
7101        #[inline(always)]
7102        fn inline_align(_context: fidl::encoding::Context) -> usize {
7103            8
7104        }
7105
7106        #[inline(always)]
7107        fn inline_size(_context: fidl::encoding::Context) -> usize {
7108            16
7109        }
7110    }
7111
7112    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<DnsTxtEntry, D>
7113        for &DnsTxtEntry
7114    {
7115        unsafe fn encode(
7116            self,
7117            encoder: &mut fidl::encoding::Encoder<'_, D>,
7118            offset: usize,
7119            mut depth: fidl::encoding::Depth,
7120        ) -> fidl::Result<()> {
7121            encoder.debug_check_bounds::<DnsTxtEntry>(offset);
7122            // Vector header
7123            let max_ordinal: u64 = self.max_ordinal_present();
7124            encoder.write_num(max_ordinal, offset);
7125            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
7126            // Calling encoder.out_of_line_offset(0) is not allowed.
7127            if max_ordinal == 0 {
7128                return Ok(());
7129            }
7130            depth.increment()?;
7131            let envelope_size = 8;
7132            let bytes_len = max_ordinal as usize * envelope_size;
7133            #[allow(unused_variables)]
7134            let offset = encoder.out_of_line_offset(bytes_len);
7135            let mut _prev_end_offset: usize = 0;
7136            if 1 > max_ordinal {
7137                return Ok(());
7138            }
7139
7140            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7141            // are envelope_size bytes.
7142            let cur_offset: usize = (1 - 1) * envelope_size;
7143
7144            // Zero reserved fields.
7145            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7146
7147            // Safety:
7148            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7149            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7150            //   envelope_size bytes, there is always sufficient room.
7151            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<64>, D>(
7152                self.key.as_ref().map(
7153                    <fidl::encoding::BoundedString<64> as fidl::encoding::ValueTypeMarker>::borrow,
7154                ),
7155                encoder,
7156                offset + cur_offset,
7157                depth,
7158            )?;
7159
7160            _prev_end_offset = cur_offset + envelope_size;
7161            if 2 > max_ordinal {
7162                return Ok(());
7163            }
7164
7165            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7166            // are envelope_size bytes.
7167            let cur_offset: usize = (2 - 1) * envelope_size;
7168
7169            // Zero reserved fields.
7170            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7171
7172            // Safety:
7173            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7174            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7175            //   envelope_size bytes, there is always sufficient room.
7176            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u8, 253>, D>(
7177                self.value.as_ref().map(
7178                    <fidl::encoding::Vector<u8, 253> as fidl::encoding::ValueTypeMarker>::borrow,
7179                ),
7180                encoder,
7181                offset + cur_offset,
7182                depth,
7183            )?;
7184
7185            _prev_end_offset = cur_offset + envelope_size;
7186
7187            Ok(())
7188        }
7189    }
7190
7191    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DnsTxtEntry {
7192        #[inline(always)]
7193        fn new_empty() -> Self {
7194            Self::default()
7195        }
7196
7197        unsafe fn decode(
7198            &mut self,
7199            decoder: &mut fidl::encoding::Decoder<'_, D>,
7200            offset: usize,
7201            mut depth: fidl::encoding::Depth,
7202        ) -> fidl::Result<()> {
7203            decoder.debug_check_bounds::<Self>(offset);
7204            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
7205                None => return Err(fidl::Error::NotNullable),
7206                Some(len) => len,
7207            };
7208            // Calling decoder.out_of_line_offset(0) is not allowed.
7209            if len == 0 {
7210                return Ok(());
7211            };
7212            depth.increment()?;
7213            let envelope_size = 8;
7214            let bytes_len = len * envelope_size;
7215            let offset = decoder.out_of_line_offset(bytes_len)?;
7216            // Decode the envelope for each type.
7217            let mut _next_ordinal_to_read = 0;
7218            let mut next_offset = offset;
7219            let end_offset = offset + bytes_len;
7220            _next_ordinal_to_read += 1;
7221            if next_offset >= end_offset {
7222                return Ok(());
7223            }
7224
7225            // Decode unknown envelopes for gaps in ordinals.
7226            while _next_ordinal_to_read < 1 {
7227                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7228                _next_ordinal_to_read += 1;
7229                next_offset += envelope_size;
7230            }
7231
7232            let next_out_of_line = decoder.next_out_of_line();
7233            let handles_before = decoder.remaining_handles();
7234            if let Some((inlined, num_bytes, num_handles)) =
7235                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7236            {
7237                let member_inline_size =
7238                    <fidl::encoding::BoundedString<64> as fidl::encoding::TypeMarker>::inline_size(
7239                        decoder.context,
7240                    );
7241                if inlined != (member_inline_size <= 4) {
7242                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7243                }
7244                let inner_offset;
7245                let mut inner_depth = depth.clone();
7246                if inlined {
7247                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7248                    inner_offset = next_offset;
7249                } else {
7250                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7251                    inner_depth.increment()?;
7252                }
7253                let val_ref = self
7254                    .key
7255                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<64>, D));
7256                fidl::decode!(
7257                    fidl::encoding::BoundedString<64>,
7258                    D,
7259                    val_ref,
7260                    decoder,
7261                    inner_offset,
7262                    inner_depth
7263                )?;
7264                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7265                {
7266                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7267                }
7268                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7269                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7270                }
7271            }
7272
7273            next_offset += envelope_size;
7274            _next_ordinal_to_read += 1;
7275            if next_offset >= end_offset {
7276                return Ok(());
7277            }
7278
7279            // Decode unknown envelopes for gaps in ordinals.
7280            while _next_ordinal_to_read < 2 {
7281                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7282                _next_ordinal_to_read += 1;
7283                next_offset += envelope_size;
7284            }
7285
7286            let next_out_of_line = decoder.next_out_of_line();
7287            let handles_before = decoder.remaining_handles();
7288            if let Some((inlined, num_bytes, num_handles)) =
7289                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7290            {
7291                let member_inline_size =
7292                    <fidl::encoding::Vector<u8, 253> as fidl::encoding::TypeMarker>::inline_size(
7293                        decoder.context,
7294                    );
7295                if inlined != (member_inline_size <= 4) {
7296                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7297                }
7298                let inner_offset;
7299                let mut inner_depth = depth.clone();
7300                if inlined {
7301                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7302                    inner_offset = next_offset;
7303                } else {
7304                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7305                    inner_depth.increment()?;
7306                }
7307                let val_ref = self
7308                    .value
7309                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u8, 253>, D));
7310                fidl::decode!(fidl::encoding::Vector<u8, 253>, D, val_ref, decoder, inner_offset, inner_depth)?;
7311                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7312                {
7313                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7314                }
7315                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7316                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7317                }
7318            }
7319
7320            next_offset += envelope_size;
7321
7322            // Decode the remaining unknown envelopes.
7323            while next_offset < end_offset {
7324                _next_ordinal_to_read += 1;
7325                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7326                next_offset += envelope_size;
7327            }
7328
7329            Ok(())
7330        }
7331    }
7332
7333    impl DnssdCounters {
7334        #[inline(always)]
7335        fn max_ordinal_present(&self) -> u64 {
7336            if let Some(_) = self.upstream_dns_counters {
7337                return 8;
7338            }
7339            if let Some(_) = self.resolved_by_srp {
7340                return 7;
7341            }
7342            if let Some(_) = self.other_response {
7343                return 6;
7344            }
7345            if let Some(_) = self.not_implemented_response {
7346                return 5;
7347            }
7348            if let Some(_) = self.name_error_response {
7349                return 4;
7350            }
7351            if let Some(_) = self.format_error_response {
7352                return 3;
7353            }
7354            if let Some(_) = self.server_failure_response {
7355                return 2;
7356            }
7357            if let Some(_) = self.success_response {
7358                return 1;
7359            }
7360            0
7361        }
7362    }
7363
7364    impl fidl::encoding::ValueTypeMarker for DnssdCounters {
7365        type Borrowed<'a> = &'a Self;
7366        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
7367            value
7368        }
7369    }
7370
7371    unsafe impl fidl::encoding::TypeMarker for DnssdCounters {
7372        type Owned = Self;
7373
7374        #[inline(always)]
7375        fn inline_align(_context: fidl::encoding::Context) -> usize {
7376            8
7377        }
7378
7379        #[inline(always)]
7380        fn inline_size(_context: fidl::encoding::Context) -> usize {
7381            16
7382        }
7383    }
7384
7385    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<DnssdCounters, D>
7386        for &DnssdCounters
7387    {
7388        unsafe fn encode(
7389            self,
7390            encoder: &mut fidl::encoding::Encoder<'_, D>,
7391            offset: usize,
7392            mut depth: fidl::encoding::Depth,
7393        ) -> fidl::Result<()> {
7394            encoder.debug_check_bounds::<DnssdCounters>(offset);
7395            // Vector header
7396            let max_ordinal: u64 = self.max_ordinal_present();
7397            encoder.write_num(max_ordinal, offset);
7398            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
7399            // Calling encoder.out_of_line_offset(0) is not allowed.
7400            if max_ordinal == 0 {
7401                return Ok(());
7402            }
7403            depth.increment()?;
7404            let envelope_size = 8;
7405            let bytes_len = max_ordinal as usize * envelope_size;
7406            #[allow(unused_variables)]
7407            let offset = encoder.out_of_line_offset(bytes_len);
7408            let mut _prev_end_offset: usize = 0;
7409            if 1 > max_ordinal {
7410                return Ok(());
7411            }
7412
7413            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7414            // are envelope_size bytes.
7415            let cur_offset: usize = (1 - 1) * envelope_size;
7416
7417            // Zero reserved fields.
7418            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7419
7420            // Safety:
7421            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7422            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7423            //   envelope_size bytes, there is always sufficient room.
7424            fidl::encoding::encode_in_envelope_optional::<u32, D>(
7425                self.success_response
7426                    .as_ref()
7427                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
7428                encoder,
7429                offset + cur_offset,
7430                depth,
7431            )?;
7432
7433            _prev_end_offset = cur_offset + envelope_size;
7434            if 2 > max_ordinal {
7435                return Ok(());
7436            }
7437
7438            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7439            // are envelope_size bytes.
7440            let cur_offset: usize = (2 - 1) * envelope_size;
7441
7442            // Zero reserved fields.
7443            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7444
7445            // Safety:
7446            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7447            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7448            //   envelope_size bytes, there is always sufficient room.
7449            fidl::encoding::encode_in_envelope_optional::<u32, D>(
7450                self.server_failure_response
7451                    .as_ref()
7452                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
7453                encoder,
7454                offset + cur_offset,
7455                depth,
7456            )?;
7457
7458            _prev_end_offset = cur_offset + envelope_size;
7459            if 3 > max_ordinal {
7460                return Ok(());
7461            }
7462
7463            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7464            // are envelope_size bytes.
7465            let cur_offset: usize = (3 - 1) * envelope_size;
7466
7467            // Zero reserved fields.
7468            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7469
7470            // Safety:
7471            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7472            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7473            //   envelope_size bytes, there is always sufficient room.
7474            fidl::encoding::encode_in_envelope_optional::<u32, D>(
7475                self.format_error_response
7476                    .as_ref()
7477                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
7478                encoder,
7479                offset + cur_offset,
7480                depth,
7481            )?;
7482
7483            _prev_end_offset = cur_offset + envelope_size;
7484            if 4 > max_ordinal {
7485                return Ok(());
7486            }
7487
7488            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7489            // are envelope_size bytes.
7490            let cur_offset: usize = (4 - 1) * envelope_size;
7491
7492            // Zero reserved fields.
7493            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7494
7495            // Safety:
7496            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7497            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7498            //   envelope_size bytes, there is always sufficient room.
7499            fidl::encoding::encode_in_envelope_optional::<u32, D>(
7500                self.name_error_response
7501                    .as_ref()
7502                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
7503                encoder,
7504                offset + cur_offset,
7505                depth,
7506            )?;
7507
7508            _prev_end_offset = cur_offset + envelope_size;
7509            if 5 > max_ordinal {
7510                return Ok(());
7511            }
7512
7513            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7514            // are envelope_size bytes.
7515            let cur_offset: usize = (5 - 1) * envelope_size;
7516
7517            // Zero reserved fields.
7518            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7519
7520            // Safety:
7521            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7522            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7523            //   envelope_size bytes, there is always sufficient room.
7524            fidl::encoding::encode_in_envelope_optional::<u32, D>(
7525                self.not_implemented_response
7526                    .as_ref()
7527                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
7528                encoder,
7529                offset + cur_offset,
7530                depth,
7531            )?;
7532
7533            _prev_end_offset = cur_offset + envelope_size;
7534            if 6 > max_ordinal {
7535                return Ok(());
7536            }
7537
7538            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7539            // are envelope_size bytes.
7540            let cur_offset: usize = (6 - 1) * envelope_size;
7541
7542            // Zero reserved fields.
7543            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7544
7545            // Safety:
7546            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7547            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7548            //   envelope_size bytes, there is always sufficient room.
7549            fidl::encoding::encode_in_envelope_optional::<u32, D>(
7550                self.other_response.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
7551                encoder,
7552                offset + cur_offset,
7553                depth,
7554            )?;
7555
7556            _prev_end_offset = cur_offset + envelope_size;
7557            if 7 > max_ordinal {
7558                return Ok(());
7559            }
7560
7561            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7562            // are envelope_size bytes.
7563            let cur_offset: usize = (7 - 1) * envelope_size;
7564
7565            // Zero reserved fields.
7566            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7567
7568            // Safety:
7569            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7570            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7571            //   envelope_size bytes, there is always sufficient room.
7572            fidl::encoding::encode_in_envelope_optional::<u32, D>(
7573                self.resolved_by_srp.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
7574                encoder,
7575                offset + cur_offset,
7576                depth,
7577            )?;
7578
7579            _prev_end_offset = cur_offset + envelope_size;
7580            if 8 > max_ordinal {
7581                return Ok(());
7582            }
7583
7584            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7585            // are envelope_size bytes.
7586            let cur_offset: usize = (8 - 1) * envelope_size;
7587
7588            // Zero reserved fields.
7589            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7590
7591            // Safety:
7592            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7593            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7594            //   envelope_size bytes, there is always sufficient room.
7595            fidl::encoding::encode_in_envelope_optional::<UpstreamDnsCounters, D>(
7596                self.upstream_dns_counters
7597                    .as_ref()
7598                    .map(<UpstreamDnsCounters as fidl::encoding::ValueTypeMarker>::borrow),
7599                encoder,
7600                offset + cur_offset,
7601                depth,
7602            )?;
7603
7604            _prev_end_offset = cur_offset + envelope_size;
7605
7606            Ok(())
7607        }
7608    }
7609
7610    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DnssdCounters {
7611        #[inline(always)]
7612        fn new_empty() -> Self {
7613            Self::default()
7614        }
7615
7616        unsafe fn decode(
7617            &mut self,
7618            decoder: &mut fidl::encoding::Decoder<'_, D>,
7619            offset: usize,
7620            mut depth: fidl::encoding::Depth,
7621        ) -> fidl::Result<()> {
7622            decoder.debug_check_bounds::<Self>(offset);
7623            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
7624                None => return Err(fidl::Error::NotNullable),
7625                Some(len) => len,
7626            };
7627            // Calling decoder.out_of_line_offset(0) is not allowed.
7628            if len == 0 {
7629                return Ok(());
7630            };
7631            depth.increment()?;
7632            let envelope_size = 8;
7633            let bytes_len = len * envelope_size;
7634            let offset = decoder.out_of_line_offset(bytes_len)?;
7635            // Decode the envelope for each type.
7636            let mut _next_ordinal_to_read = 0;
7637            let mut next_offset = offset;
7638            let end_offset = offset + bytes_len;
7639            _next_ordinal_to_read += 1;
7640            if next_offset >= end_offset {
7641                return Ok(());
7642            }
7643
7644            // Decode unknown envelopes for gaps in ordinals.
7645            while _next_ordinal_to_read < 1 {
7646                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7647                _next_ordinal_to_read += 1;
7648                next_offset += envelope_size;
7649            }
7650
7651            let next_out_of_line = decoder.next_out_of_line();
7652            let handles_before = decoder.remaining_handles();
7653            if let Some((inlined, num_bytes, num_handles)) =
7654                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7655            {
7656                let member_inline_size =
7657                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7658                if inlined != (member_inline_size <= 4) {
7659                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7660                }
7661                let inner_offset;
7662                let mut inner_depth = depth.clone();
7663                if inlined {
7664                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7665                    inner_offset = next_offset;
7666                } else {
7667                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7668                    inner_depth.increment()?;
7669                }
7670                let val_ref = self.success_response.get_or_insert_with(|| fidl::new_empty!(u32, D));
7671                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
7672                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7673                {
7674                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7675                }
7676                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7677                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7678                }
7679            }
7680
7681            next_offset += envelope_size;
7682            _next_ordinal_to_read += 1;
7683            if next_offset >= end_offset {
7684                return Ok(());
7685            }
7686
7687            // Decode unknown envelopes for gaps in ordinals.
7688            while _next_ordinal_to_read < 2 {
7689                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7690                _next_ordinal_to_read += 1;
7691                next_offset += envelope_size;
7692            }
7693
7694            let next_out_of_line = decoder.next_out_of_line();
7695            let handles_before = decoder.remaining_handles();
7696            if let Some((inlined, num_bytes, num_handles)) =
7697                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7698            {
7699                let member_inline_size =
7700                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7701                if inlined != (member_inline_size <= 4) {
7702                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7703                }
7704                let inner_offset;
7705                let mut inner_depth = depth.clone();
7706                if inlined {
7707                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7708                    inner_offset = next_offset;
7709                } else {
7710                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7711                    inner_depth.increment()?;
7712                }
7713                let val_ref =
7714                    self.server_failure_response.get_or_insert_with(|| fidl::new_empty!(u32, D));
7715                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
7716                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7717                {
7718                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7719                }
7720                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7721                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7722                }
7723            }
7724
7725            next_offset += envelope_size;
7726            _next_ordinal_to_read += 1;
7727            if next_offset >= end_offset {
7728                return Ok(());
7729            }
7730
7731            // Decode unknown envelopes for gaps in ordinals.
7732            while _next_ordinal_to_read < 3 {
7733                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7734                _next_ordinal_to_read += 1;
7735                next_offset += envelope_size;
7736            }
7737
7738            let next_out_of_line = decoder.next_out_of_line();
7739            let handles_before = decoder.remaining_handles();
7740            if let Some((inlined, num_bytes, num_handles)) =
7741                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7742            {
7743                let member_inline_size =
7744                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7745                if inlined != (member_inline_size <= 4) {
7746                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7747                }
7748                let inner_offset;
7749                let mut inner_depth = depth.clone();
7750                if inlined {
7751                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7752                    inner_offset = next_offset;
7753                } else {
7754                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7755                    inner_depth.increment()?;
7756                }
7757                let val_ref =
7758                    self.format_error_response.get_or_insert_with(|| fidl::new_empty!(u32, D));
7759                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
7760                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7761                {
7762                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7763                }
7764                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7765                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7766                }
7767            }
7768
7769            next_offset += envelope_size;
7770            _next_ordinal_to_read += 1;
7771            if next_offset >= end_offset {
7772                return Ok(());
7773            }
7774
7775            // Decode unknown envelopes for gaps in ordinals.
7776            while _next_ordinal_to_read < 4 {
7777                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7778                _next_ordinal_to_read += 1;
7779                next_offset += envelope_size;
7780            }
7781
7782            let next_out_of_line = decoder.next_out_of_line();
7783            let handles_before = decoder.remaining_handles();
7784            if let Some((inlined, num_bytes, num_handles)) =
7785                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7786            {
7787                let member_inline_size =
7788                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7789                if inlined != (member_inline_size <= 4) {
7790                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7791                }
7792                let inner_offset;
7793                let mut inner_depth = depth.clone();
7794                if inlined {
7795                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7796                    inner_offset = next_offset;
7797                } else {
7798                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7799                    inner_depth.increment()?;
7800                }
7801                let val_ref =
7802                    self.name_error_response.get_or_insert_with(|| fidl::new_empty!(u32, D));
7803                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
7804                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7805                {
7806                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7807                }
7808                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7809                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7810                }
7811            }
7812
7813            next_offset += envelope_size;
7814            _next_ordinal_to_read += 1;
7815            if next_offset >= end_offset {
7816                return Ok(());
7817            }
7818
7819            // Decode unknown envelopes for gaps in ordinals.
7820            while _next_ordinal_to_read < 5 {
7821                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7822                _next_ordinal_to_read += 1;
7823                next_offset += envelope_size;
7824            }
7825
7826            let next_out_of_line = decoder.next_out_of_line();
7827            let handles_before = decoder.remaining_handles();
7828            if let Some((inlined, num_bytes, num_handles)) =
7829                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7830            {
7831                let member_inline_size =
7832                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7833                if inlined != (member_inline_size <= 4) {
7834                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7835                }
7836                let inner_offset;
7837                let mut inner_depth = depth.clone();
7838                if inlined {
7839                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7840                    inner_offset = next_offset;
7841                } else {
7842                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7843                    inner_depth.increment()?;
7844                }
7845                let val_ref =
7846                    self.not_implemented_response.get_or_insert_with(|| fidl::new_empty!(u32, D));
7847                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
7848                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7849                {
7850                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7851                }
7852                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7853                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7854                }
7855            }
7856
7857            next_offset += envelope_size;
7858            _next_ordinal_to_read += 1;
7859            if next_offset >= end_offset {
7860                return Ok(());
7861            }
7862
7863            // Decode unknown envelopes for gaps in ordinals.
7864            while _next_ordinal_to_read < 6 {
7865                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7866                _next_ordinal_to_read += 1;
7867                next_offset += envelope_size;
7868            }
7869
7870            let next_out_of_line = decoder.next_out_of_line();
7871            let handles_before = decoder.remaining_handles();
7872            if let Some((inlined, num_bytes, num_handles)) =
7873                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7874            {
7875                let member_inline_size =
7876                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7877                if inlined != (member_inline_size <= 4) {
7878                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7879                }
7880                let inner_offset;
7881                let mut inner_depth = depth.clone();
7882                if inlined {
7883                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7884                    inner_offset = next_offset;
7885                } else {
7886                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7887                    inner_depth.increment()?;
7888                }
7889                let val_ref = self.other_response.get_or_insert_with(|| fidl::new_empty!(u32, D));
7890                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
7891                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7892                {
7893                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7894                }
7895                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7896                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7897                }
7898            }
7899
7900            next_offset += envelope_size;
7901            _next_ordinal_to_read += 1;
7902            if next_offset >= end_offset {
7903                return Ok(());
7904            }
7905
7906            // Decode unknown envelopes for gaps in ordinals.
7907            while _next_ordinal_to_read < 7 {
7908                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7909                _next_ordinal_to_read += 1;
7910                next_offset += envelope_size;
7911            }
7912
7913            let next_out_of_line = decoder.next_out_of_line();
7914            let handles_before = decoder.remaining_handles();
7915            if let Some((inlined, num_bytes, num_handles)) =
7916                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7917            {
7918                let member_inline_size =
7919                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7920                if inlined != (member_inline_size <= 4) {
7921                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7922                }
7923                let inner_offset;
7924                let mut inner_depth = depth.clone();
7925                if inlined {
7926                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7927                    inner_offset = next_offset;
7928                } else {
7929                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7930                    inner_depth.increment()?;
7931                }
7932                let val_ref = self.resolved_by_srp.get_or_insert_with(|| fidl::new_empty!(u32, D));
7933                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
7934                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7935                {
7936                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7937                }
7938                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7939                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7940                }
7941            }
7942
7943            next_offset += envelope_size;
7944            _next_ordinal_to_read += 1;
7945            if next_offset >= end_offset {
7946                return Ok(());
7947            }
7948
7949            // Decode unknown envelopes for gaps in ordinals.
7950            while _next_ordinal_to_read < 8 {
7951                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7952                _next_ordinal_to_read += 1;
7953                next_offset += envelope_size;
7954            }
7955
7956            let next_out_of_line = decoder.next_out_of_line();
7957            let handles_before = decoder.remaining_handles();
7958            if let Some((inlined, num_bytes, num_handles)) =
7959                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7960            {
7961                let member_inline_size =
7962                    <UpstreamDnsCounters as fidl::encoding::TypeMarker>::inline_size(
7963                        decoder.context,
7964                    );
7965                if inlined != (member_inline_size <= 4) {
7966                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7967                }
7968                let inner_offset;
7969                let mut inner_depth = depth.clone();
7970                if inlined {
7971                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7972                    inner_offset = next_offset;
7973                } else {
7974                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7975                    inner_depth.increment()?;
7976                }
7977                let val_ref = self
7978                    .upstream_dns_counters
7979                    .get_or_insert_with(|| fidl::new_empty!(UpstreamDnsCounters, D));
7980                fidl::decode!(UpstreamDnsCounters, D, val_ref, decoder, inner_offset, inner_depth)?;
7981                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7982                {
7983                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7984                }
7985                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7986                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7987                }
7988            }
7989
7990            next_offset += envelope_size;
7991
7992            // Decode the remaining unknown envelopes.
7993            while next_offset < end_offset {
7994                _next_ordinal_to_read += 1;
7995                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7996                next_offset += envelope_size;
7997            }
7998
7999            Ok(())
8000        }
8001    }
8002
8003    impl ExternalRoute {
8004        #[inline(always)]
8005        fn max_ordinal_present(&self) -> u64 {
8006            if let Some(_) = self.stable {
8007                return 3;
8008            }
8009            if let Some(_) = self.route_preference {
8010                return 2;
8011            }
8012            if let Some(_) = self.subnet {
8013                return 1;
8014            }
8015            0
8016        }
8017    }
8018
8019    impl fidl::encoding::ValueTypeMarker for ExternalRoute {
8020        type Borrowed<'a> = &'a Self;
8021        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
8022            value
8023        }
8024    }
8025
8026    unsafe impl fidl::encoding::TypeMarker for ExternalRoute {
8027        type Owned = Self;
8028
8029        #[inline(always)]
8030        fn inline_align(_context: fidl::encoding::Context) -> usize {
8031            8
8032        }
8033
8034        #[inline(always)]
8035        fn inline_size(_context: fidl::encoding::Context) -> usize {
8036            16
8037        }
8038    }
8039
8040    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<ExternalRoute, D>
8041        for &ExternalRoute
8042    {
8043        unsafe fn encode(
8044            self,
8045            encoder: &mut fidl::encoding::Encoder<'_, D>,
8046            offset: usize,
8047            mut depth: fidl::encoding::Depth,
8048        ) -> fidl::Result<()> {
8049            encoder.debug_check_bounds::<ExternalRoute>(offset);
8050            // Vector header
8051            let max_ordinal: u64 = self.max_ordinal_present();
8052            encoder.write_num(max_ordinal, offset);
8053            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
8054            // Calling encoder.out_of_line_offset(0) is not allowed.
8055            if max_ordinal == 0 {
8056                return Ok(());
8057            }
8058            depth.increment()?;
8059            let envelope_size = 8;
8060            let bytes_len = max_ordinal as usize * envelope_size;
8061            #[allow(unused_variables)]
8062            let offset = encoder.out_of_line_offset(bytes_len);
8063            let mut _prev_end_offset: usize = 0;
8064            if 1 > max_ordinal {
8065                return Ok(());
8066            }
8067
8068            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8069            // are envelope_size bytes.
8070            let cur_offset: usize = (1 - 1) * envelope_size;
8071
8072            // Zero reserved fields.
8073            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8074
8075            // Safety:
8076            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8077            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8078            //   envelope_size bytes, there is always sufficient room.
8079            fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_net__common::Ipv6AddressWithPrefix, D>(
8080            self.subnet.as_ref().map(<fidl_fuchsia_net__common::Ipv6AddressWithPrefix as fidl::encoding::ValueTypeMarker>::borrow),
8081            encoder, offset + cur_offset, depth
8082        )?;
8083
8084            _prev_end_offset = cur_offset + envelope_size;
8085            if 2 > max_ordinal {
8086                return Ok(());
8087            }
8088
8089            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8090            // are envelope_size bytes.
8091            let cur_offset: usize = (2 - 1) * envelope_size;
8092
8093            // Zero reserved fields.
8094            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8095
8096            // Safety:
8097            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8098            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8099            //   envelope_size bytes, there is always sufficient room.
8100            fidl::encoding::encode_in_envelope_optional::<RoutePreference, D>(
8101                self.route_preference
8102                    .as_ref()
8103                    .map(<RoutePreference as fidl::encoding::ValueTypeMarker>::borrow),
8104                encoder,
8105                offset + cur_offset,
8106                depth,
8107            )?;
8108
8109            _prev_end_offset = cur_offset + envelope_size;
8110            if 3 > max_ordinal {
8111                return Ok(());
8112            }
8113
8114            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8115            // are envelope_size bytes.
8116            let cur_offset: usize = (3 - 1) * envelope_size;
8117
8118            // Zero reserved fields.
8119            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8120
8121            // Safety:
8122            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8123            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8124            //   envelope_size bytes, there is always sufficient room.
8125            fidl::encoding::encode_in_envelope_optional::<bool, D>(
8126                self.stable.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
8127                encoder,
8128                offset + cur_offset,
8129                depth,
8130            )?;
8131
8132            _prev_end_offset = cur_offset + envelope_size;
8133
8134            Ok(())
8135        }
8136    }
8137
8138    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ExternalRoute {
8139        #[inline(always)]
8140        fn new_empty() -> Self {
8141            Self::default()
8142        }
8143
8144        unsafe fn decode(
8145            &mut self,
8146            decoder: &mut fidl::encoding::Decoder<'_, D>,
8147            offset: usize,
8148            mut depth: fidl::encoding::Depth,
8149        ) -> fidl::Result<()> {
8150            decoder.debug_check_bounds::<Self>(offset);
8151            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
8152                None => return Err(fidl::Error::NotNullable),
8153                Some(len) => len,
8154            };
8155            // Calling decoder.out_of_line_offset(0) is not allowed.
8156            if len == 0 {
8157                return Ok(());
8158            };
8159            depth.increment()?;
8160            let envelope_size = 8;
8161            let bytes_len = len * envelope_size;
8162            let offset = decoder.out_of_line_offset(bytes_len)?;
8163            // Decode the envelope for each type.
8164            let mut _next_ordinal_to_read = 0;
8165            let mut next_offset = offset;
8166            let end_offset = offset + bytes_len;
8167            _next_ordinal_to_read += 1;
8168            if next_offset >= end_offset {
8169                return Ok(());
8170            }
8171
8172            // Decode unknown envelopes for gaps in ordinals.
8173            while _next_ordinal_to_read < 1 {
8174                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8175                _next_ordinal_to_read += 1;
8176                next_offset += envelope_size;
8177            }
8178
8179            let next_out_of_line = decoder.next_out_of_line();
8180            let handles_before = decoder.remaining_handles();
8181            if let Some((inlined, num_bytes, num_handles)) =
8182                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8183            {
8184                let member_inline_size = <fidl_fuchsia_net__common::Ipv6AddressWithPrefix as fidl::encoding::TypeMarker>::inline_size(decoder.context);
8185                if inlined != (member_inline_size <= 4) {
8186                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8187                }
8188                let inner_offset;
8189                let mut inner_depth = depth.clone();
8190                if inlined {
8191                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8192                    inner_offset = next_offset;
8193                } else {
8194                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8195                    inner_depth.increment()?;
8196                }
8197                let val_ref = self.subnet.get_or_insert_with(|| {
8198                    fidl::new_empty!(fidl_fuchsia_net__common::Ipv6AddressWithPrefix, D)
8199                });
8200                fidl::decode!(
8201                    fidl_fuchsia_net__common::Ipv6AddressWithPrefix,
8202                    D,
8203                    val_ref,
8204                    decoder,
8205                    inner_offset,
8206                    inner_depth
8207                )?;
8208                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8209                {
8210                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8211                }
8212                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8213                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8214                }
8215            }
8216
8217            next_offset += envelope_size;
8218            _next_ordinal_to_read += 1;
8219            if next_offset >= end_offset {
8220                return Ok(());
8221            }
8222
8223            // Decode unknown envelopes for gaps in ordinals.
8224            while _next_ordinal_to_read < 2 {
8225                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8226                _next_ordinal_to_read += 1;
8227                next_offset += envelope_size;
8228            }
8229
8230            let next_out_of_line = decoder.next_out_of_line();
8231            let handles_before = decoder.remaining_handles();
8232            if let Some((inlined, num_bytes, num_handles)) =
8233                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8234            {
8235                let member_inline_size =
8236                    <RoutePreference as fidl::encoding::TypeMarker>::inline_size(decoder.context);
8237                if inlined != (member_inline_size <= 4) {
8238                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8239                }
8240                let inner_offset;
8241                let mut inner_depth = depth.clone();
8242                if inlined {
8243                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8244                    inner_offset = next_offset;
8245                } else {
8246                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8247                    inner_depth.increment()?;
8248                }
8249                let val_ref = self
8250                    .route_preference
8251                    .get_or_insert_with(|| fidl::new_empty!(RoutePreference, D));
8252                fidl::decode!(RoutePreference, D, val_ref, decoder, inner_offset, inner_depth)?;
8253                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8254                {
8255                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8256                }
8257                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8258                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8259                }
8260            }
8261
8262            next_offset += envelope_size;
8263            _next_ordinal_to_read += 1;
8264            if next_offset >= end_offset {
8265                return Ok(());
8266            }
8267
8268            // Decode unknown envelopes for gaps in ordinals.
8269            while _next_ordinal_to_read < 3 {
8270                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8271                _next_ordinal_to_read += 1;
8272                next_offset += envelope_size;
8273            }
8274
8275            let next_out_of_line = decoder.next_out_of_line();
8276            let handles_before = decoder.remaining_handles();
8277            if let Some((inlined, num_bytes, num_handles)) =
8278                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8279            {
8280                let member_inline_size =
8281                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
8282                if inlined != (member_inline_size <= 4) {
8283                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8284                }
8285                let inner_offset;
8286                let mut inner_depth = depth.clone();
8287                if inlined {
8288                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8289                    inner_offset = next_offset;
8290                } else {
8291                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8292                    inner_depth.increment()?;
8293                }
8294                let val_ref = self.stable.get_or_insert_with(|| fidl::new_empty!(bool, D));
8295                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
8296                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8297                {
8298                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8299                }
8300                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8301                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8302                }
8303            }
8304
8305            next_offset += envelope_size;
8306
8307            // Decode the remaining unknown envelopes.
8308            while next_offset < end_offset {
8309                _next_ordinal_to_read += 1;
8310                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8311                next_offset += envelope_size;
8312            }
8313
8314            Ok(())
8315        }
8316    }
8317
8318    impl JoinerCommissioningParams {
8319        #[inline(always)]
8320        fn max_ordinal_present(&self) -> u64 {
8321            if let Some(_) = self.vendor_data_string {
8322                return 6;
8323            }
8324            if let Some(_) = self.vendor_sw_version {
8325                return 5;
8326            }
8327            if let Some(_) = self.vendor_model {
8328                return 4;
8329            }
8330            if let Some(_) = self.vendor_name {
8331                return 3;
8332            }
8333            if let Some(_) = self.provisioning_url {
8334                return 2;
8335            }
8336            if let Some(_) = self.pskd {
8337                return 1;
8338            }
8339            0
8340        }
8341    }
8342
8343    impl fidl::encoding::ValueTypeMarker for JoinerCommissioningParams {
8344        type Borrowed<'a> = &'a Self;
8345        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
8346            value
8347        }
8348    }
8349
8350    unsafe impl fidl::encoding::TypeMarker for JoinerCommissioningParams {
8351        type Owned = Self;
8352
8353        #[inline(always)]
8354        fn inline_align(_context: fidl::encoding::Context) -> usize {
8355            8
8356        }
8357
8358        #[inline(always)]
8359        fn inline_size(_context: fidl::encoding::Context) -> usize {
8360            16
8361        }
8362    }
8363
8364    unsafe impl<D: fidl::encoding::ResourceDialect>
8365        fidl::encoding::Encode<JoinerCommissioningParams, D> for &JoinerCommissioningParams
8366    {
8367        unsafe fn encode(
8368            self,
8369            encoder: &mut fidl::encoding::Encoder<'_, D>,
8370            offset: usize,
8371            mut depth: fidl::encoding::Depth,
8372        ) -> fidl::Result<()> {
8373            encoder.debug_check_bounds::<JoinerCommissioningParams>(offset);
8374            // Vector header
8375            let max_ordinal: u64 = self.max_ordinal_present();
8376            encoder.write_num(max_ordinal, offset);
8377            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
8378            // Calling encoder.out_of_line_offset(0) is not allowed.
8379            if max_ordinal == 0 {
8380                return Ok(());
8381            }
8382            depth.increment()?;
8383            let envelope_size = 8;
8384            let bytes_len = max_ordinal as usize * envelope_size;
8385            #[allow(unused_variables)]
8386            let offset = encoder.out_of_line_offset(bytes_len);
8387            let mut _prev_end_offset: usize = 0;
8388            if 1 > max_ordinal {
8389                return Ok(());
8390            }
8391
8392            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8393            // are envelope_size bytes.
8394            let cur_offset: usize = (1 - 1) * envelope_size;
8395
8396            // Zero reserved fields.
8397            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8398
8399            // Safety:
8400            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8401            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8402            //   envelope_size bytes, there is always sufficient room.
8403            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<32>, D>(
8404                self.pskd.as_ref().map(
8405                    <fidl::encoding::BoundedString<32> as fidl::encoding::ValueTypeMarker>::borrow,
8406                ),
8407                encoder,
8408                offset + cur_offset,
8409                depth,
8410            )?;
8411
8412            _prev_end_offset = cur_offset + envelope_size;
8413            if 2 > max_ordinal {
8414                return Ok(());
8415            }
8416
8417            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8418            // are envelope_size bytes.
8419            let cur_offset: usize = (2 - 1) * envelope_size;
8420
8421            // Zero reserved fields.
8422            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8423
8424            // Safety:
8425            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8426            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8427            //   envelope_size bytes, there is always sufficient room.
8428            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<64>, D>(
8429                self.provisioning_url.as_ref().map(
8430                    <fidl::encoding::BoundedString<64> as fidl::encoding::ValueTypeMarker>::borrow,
8431                ),
8432                encoder,
8433                offset + cur_offset,
8434                depth,
8435            )?;
8436
8437            _prev_end_offset = cur_offset + envelope_size;
8438            if 3 > max_ordinal {
8439                return Ok(());
8440            }
8441
8442            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8443            // are envelope_size bytes.
8444            let cur_offset: usize = (3 - 1) * envelope_size;
8445
8446            // Zero reserved fields.
8447            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8448
8449            // Safety:
8450            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8451            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8452            //   envelope_size bytes, there is always sufficient room.
8453            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<32>, D>(
8454                self.vendor_name.as_ref().map(
8455                    <fidl::encoding::BoundedString<32> as fidl::encoding::ValueTypeMarker>::borrow,
8456                ),
8457                encoder,
8458                offset + cur_offset,
8459                depth,
8460            )?;
8461
8462            _prev_end_offset = cur_offset + envelope_size;
8463            if 4 > max_ordinal {
8464                return Ok(());
8465            }
8466
8467            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8468            // are envelope_size bytes.
8469            let cur_offset: usize = (4 - 1) * envelope_size;
8470
8471            // Zero reserved fields.
8472            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8473
8474            // Safety:
8475            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8476            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8477            //   envelope_size bytes, there is always sufficient room.
8478            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<32>, D>(
8479                self.vendor_model.as_ref().map(
8480                    <fidl::encoding::BoundedString<32> as fidl::encoding::ValueTypeMarker>::borrow,
8481                ),
8482                encoder,
8483                offset + cur_offset,
8484                depth,
8485            )?;
8486
8487            _prev_end_offset = cur_offset + envelope_size;
8488            if 5 > max_ordinal {
8489                return Ok(());
8490            }
8491
8492            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8493            // are envelope_size bytes.
8494            let cur_offset: usize = (5 - 1) * envelope_size;
8495
8496            // Zero reserved fields.
8497            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8498
8499            // Safety:
8500            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8501            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8502            //   envelope_size bytes, there is always sufficient room.
8503            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<16>, D>(
8504                self.vendor_sw_version.as_ref().map(
8505                    <fidl::encoding::BoundedString<16> as fidl::encoding::ValueTypeMarker>::borrow,
8506                ),
8507                encoder,
8508                offset + cur_offset,
8509                depth,
8510            )?;
8511
8512            _prev_end_offset = cur_offset + envelope_size;
8513            if 6 > max_ordinal {
8514                return Ok(());
8515            }
8516
8517            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8518            // are envelope_size bytes.
8519            let cur_offset: usize = (6 - 1) * envelope_size;
8520
8521            // Zero reserved fields.
8522            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8523
8524            // Safety:
8525            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8526            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8527            //   envelope_size bytes, there is always sufficient room.
8528            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<64>, D>(
8529                self.vendor_data_string.as_ref().map(
8530                    <fidl::encoding::BoundedString<64> as fidl::encoding::ValueTypeMarker>::borrow,
8531                ),
8532                encoder,
8533                offset + cur_offset,
8534                depth,
8535            )?;
8536
8537            _prev_end_offset = cur_offset + envelope_size;
8538
8539            Ok(())
8540        }
8541    }
8542
8543    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
8544        for JoinerCommissioningParams
8545    {
8546        #[inline(always)]
8547        fn new_empty() -> Self {
8548            Self::default()
8549        }
8550
8551        unsafe fn decode(
8552            &mut self,
8553            decoder: &mut fidl::encoding::Decoder<'_, D>,
8554            offset: usize,
8555            mut depth: fidl::encoding::Depth,
8556        ) -> fidl::Result<()> {
8557            decoder.debug_check_bounds::<Self>(offset);
8558            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
8559                None => return Err(fidl::Error::NotNullable),
8560                Some(len) => len,
8561            };
8562            // Calling decoder.out_of_line_offset(0) is not allowed.
8563            if len == 0 {
8564                return Ok(());
8565            };
8566            depth.increment()?;
8567            let envelope_size = 8;
8568            let bytes_len = len * envelope_size;
8569            let offset = decoder.out_of_line_offset(bytes_len)?;
8570            // Decode the envelope for each type.
8571            let mut _next_ordinal_to_read = 0;
8572            let mut next_offset = offset;
8573            let end_offset = offset + bytes_len;
8574            _next_ordinal_to_read += 1;
8575            if next_offset >= end_offset {
8576                return Ok(());
8577            }
8578
8579            // Decode unknown envelopes for gaps in ordinals.
8580            while _next_ordinal_to_read < 1 {
8581                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8582                _next_ordinal_to_read += 1;
8583                next_offset += envelope_size;
8584            }
8585
8586            let next_out_of_line = decoder.next_out_of_line();
8587            let handles_before = decoder.remaining_handles();
8588            if let Some((inlined, num_bytes, num_handles)) =
8589                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8590            {
8591                let member_inline_size =
8592                    <fidl::encoding::BoundedString<32> as fidl::encoding::TypeMarker>::inline_size(
8593                        decoder.context,
8594                    );
8595                if inlined != (member_inline_size <= 4) {
8596                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8597                }
8598                let inner_offset;
8599                let mut inner_depth = depth.clone();
8600                if inlined {
8601                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8602                    inner_offset = next_offset;
8603                } else {
8604                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8605                    inner_depth.increment()?;
8606                }
8607                let val_ref = self
8608                    .pskd
8609                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<32>, D));
8610                fidl::decode!(
8611                    fidl::encoding::BoundedString<32>,
8612                    D,
8613                    val_ref,
8614                    decoder,
8615                    inner_offset,
8616                    inner_depth
8617                )?;
8618                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8619                {
8620                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8621                }
8622                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8623                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8624                }
8625            }
8626
8627            next_offset += envelope_size;
8628            _next_ordinal_to_read += 1;
8629            if next_offset >= end_offset {
8630                return Ok(());
8631            }
8632
8633            // Decode unknown envelopes for gaps in ordinals.
8634            while _next_ordinal_to_read < 2 {
8635                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8636                _next_ordinal_to_read += 1;
8637                next_offset += envelope_size;
8638            }
8639
8640            let next_out_of_line = decoder.next_out_of_line();
8641            let handles_before = decoder.remaining_handles();
8642            if let Some((inlined, num_bytes, num_handles)) =
8643                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8644            {
8645                let member_inline_size =
8646                    <fidl::encoding::BoundedString<64> as fidl::encoding::TypeMarker>::inline_size(
8647                        decoder.context,
8648                    );
8649                if inlined != (member_inline_size <= 4) {
8650                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8651                }
8652                let inner_offset;
8653                let mut inner_depth = depth.clone();
8654                if inlined {
8655                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8656                    inner_offset = next_offset;
8657                } else {
8658                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8659                    inner_depth.increment()?;
8660                }
8661                let val_ref = self
8662                    .provisioning_url
8663                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<64>, D));
8664                fidl::decode!(
8665                    fidl::encoding::BoundedString<64>,
8666                    D,
8667                    val_ref,
8668                    decoder,
8669                    inner_offset,
8670                    inner_depth
8671                )?;
8672                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8673                {
8674                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8675                }
8676                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8677                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8678                }
8679            }
8680
8681            next_offset += envelope_size;
8682            _next_ordinal_to_read += 1;
8683            if next_offset >= end_offset {
8684                return Ok(());
8685            }
8686
8687            // Decode unknown envelopes for gaps in ordinals.
8688            while _next_ordinal_to_read < 3 {
8689                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8690                _next_ordinal_to_read += 1;
8691                next_offset += envelope_size;
8692            }
8693
8694            let next_out_of_line = decoder.next_out_of_line();
8695            let handles_before = decoder.remaining_handles();
8696            if let Some((inlined, num_bytes, num_handles)) =
8697                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8698            {
8699                let member_inline_size =
8700                    <fidl::encoding::BoundedString<32> as fidl::encoding::TypeMarker>::inline_size(
8701                        decoder.context,
8702                    );
8703                if inlined != (member_inline_size <= 4) {
8704                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8705                }
8706                let inner_offset;
8707                let mut inner_depth = depth.clone();
8708                if inlined {
8709                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8710                    inner_offset = next_offset;
8711                } else {
8712                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8713                    inner_depth.increment()?;
8714                }
8715                let val_ref = self
8716                    .vendor_name
8717                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<32>, D));
8718                fidl::decode!(
8719                    fidl::encoding::BoundedString<32>,
8720                    D,
8721                    val_ref,
8722                    decoder,
8723                    inner_offset,
8724                    inner_depth
8725                )?;
8726                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8727                {
8728                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8729                }
8730                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8731                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8732                }
8733            }
8734
8735            next_offset += envelope_size;
8736            _next_ordinal_to_read += 1;
8737            if next_offset >= end_offset {
8738                return Ok(());
8739            }
8740
8741            // Decode unknown envelopes for gaps in ordinals.
8742            while _next_ordinal_to_read < 4 {
8743                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8744                _next_ordinal_to_read += 1;
8745                next_offset += envelope_size;
8746            }
8747
8748            let next_out_of_line = decoder.next_out_of_line();
8749            let handles_before = decoder.remaining_handles();
8750            if let Some((inlined, num_bytes, num_handles)) =
8751                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8752            {
8753                let member_inline_size =
8754                    <fidl::encoding::BoundedString<32> as fidl::encoding::TypeMarker>::inline_size(
8755                        decoder.context,
8756                    );
8757                if inlined != (member_inline_size <= 4) {
8758                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8759                }
8760                let inner_offset;
8761                let mut inner_depth = depth.clone();
8762                if inlined {
8763                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8764                    inner_offset = next_offset;
8765                } else {
8766                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8767                    inner_depth.increment()?;
8768                }
8769                let val_ref = self
8770                    .vendor_model
8771                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<32>, D));
8772                fidl::decode!(
8773                    fidl::encoding::BoundedString<32>,
8774                    D,
8775                    val_ref,
8776                    decoder,
8777                    inner_offset,
8778                    inner_depth
8779                )?;
8780                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8781                {
8782                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8783                }
8784                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8785                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8786                }
8787            }
8788
8789            next_offset += envelope_size;
8790            _next_ordinal_to_read += 1;
8791            if next_offset >= end_offset {
8792                return Ok(());
8793            }
8794
8795            // Decode unknown envelopes for gaps in ordinals.
8796            while _next_ordinal_to_read < 5 {
8797                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8798                _next_ordinal_to_read += 1;
8799                next_offset += envelope_size;
8800            }
8801
8802            let next_out_of_line = decoder.next_out_of_line();
8803            let handles_before = decoder.remaining_handles();
8804            if let Some((inlined, num_bytes, num_handles)) =
8805                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8806            {
8807                let member_inline_size =
8808                    <fidl::encoding::BoundedString<16> as fidl::encoding::TypeMarker>::inline_size(
8809                        decoder.context,
8810                    );
8811                if inlined != (member_inline_size <= 4) {
8812                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8813                }
8814                let inner_offset;
8815                let mut inner_depth = depth.clone();
8816                if inlined {
8817                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8818                    inner_offset = next_offset;
8819                } else {
8820                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8821                    inner_depth.increment()?;
8822                }
8823                let val_ref = self
8824                    .vendor_sw_version
8825                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<16>, D));
8826                fidl::decode!(
8827                    fidl::encoding::BoundedString<16>,
8828                    D,
8829                    val_ref,
8830                    decoder,
8831                    inner_offset,
8832                    inner_depth
8833                )?;
8834                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8835                {
8836                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8837                }
8838                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8839                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8840                }
8841            }
8842
8843            next_offset += envelope_size;
8844            _next_ordinal_to_read += 1;
8845            if next_offset >= end_offset {
8846                return Ok(());
8847            }
8848
8849            // Decode unknown envelopes for gaps in ordinals.
8850            while _next_ordinal_to_read < 6 {
8851                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8852                _next_ordinal_to_read += 1;
8853                next_offset += envelope_size;
8854            }
8855
8856            let next_out_of_line = decoder.next_out_of_line();
8857            let handles_before = decoder.remaining_handles();
8858            if let Some((inlined, num_bytes, num_handles)) =
8859                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8860            {
8861                let member_inline_size =
8862                    <fidl::encoding::BoundedString<64> as fidl::encoding::TypeMarker>::inline_size(
8863                        decoder.context,
8864                    );
8865                if inlined != (member_inline_size <= 4) {
8866                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8867                }
8868                let inner_offset;
8869                let mut inner_depth = depth.clone();
8870                if inlined {
8871                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8872                    inner_offset = next_offset;
8873                } else {
8874                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8875                    inner_depth.increment()?;
8876                }
8877                let val_ref = self
8878                    .vendor_data_string
8879                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<64>, D));
8880                fidl::decode!(
8881                    fidl::encoding::BoundedString<64>,
8882                    D,
8883                    val_ref,
8884                    decoder,
8885                    inner_offset,
8886                    inner_depth
8887                )?;
8888                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8889                {
8890                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8891                }
8892                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8893                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8894                }
8895            }
8896
8897            next_offset += envelope_size;
8898
8899            // Decode the remaining unknown envelopes.
8900            while next_offset < end_offset {
8901                _next_ordinal_to_read += 1;
8902                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8903                next_offset += envelope_size;
8904            }
8905
8906            Ok(())
8907        }
8908    }
8909
8910    impl LeaderData {
8911        #[inline(always)]
8912        fn max_ordinal_present(&self) -> u64 {
8913            if let Some(_) = self.router_id {
8914                return 5;
8915            }
8916            if let Some(_) = self.stable_network_data_version {
8917                return 4;
8918            }
8919            if let Some(_) = self.network_data_version {
8920                return 3;
8921            }
8922            if let Some(_) = self.weight {
8923                return 2;
8924            }
8925            if let Some(_) = self.partition_id {
8926                return 1;
8927            }
8928            0
8929        }
8930    }
8931
8932    impl fidl::encoding::ValueTypeMarker for LeaderData {
8933        type Borrowed<'a> = &'a Self;
8934        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
8935            value
8936        }
8937    }
8938
8939    unsafe impl fidl::encoding::TypeMarker for LeaderData {
8940        type Owned = Self;
8941
8942        #[inline(always)]
8943        fn inline_align(_context: fidl::encoding::Context) -> usize {
8944            8
8945        }
8946
8947        #[inline(always)]
8948        fn inline_size(_context: fidl::encoding::Context) -> usize {
8949            16
8950        }
8951    }
8952
8953    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<LeaderData, D>
8954        for &LeaderData
8955    {
8956        unsafe fn encode(
8957            self,
8958            encoder: &mut fidl::encoding::Encoder<'_, D>,
8959            offset: usize,
8960            mut depth: fidl::encoding::Depth,
8961        ) -> fidl::Result<()> {
8962            encoder.debug_check_bounds::<LeaderData>(offset);
8963            // Vector header
8964            let max_ordinal: u64 = self.max_ordinal_present();
8965            encoder.write_num(max_ordinal, offset);
8966            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
8967            // Calling encoder.out_of_line_offset(0) is not allowed.
8968            if max_ordinal == 0 {
8969                return Ok(());
8970            }
8971            depth.increment()?;
8972            let envelope_size = 8;
8973            let bytes_len = max_ordinal as usize * envelope_size;
8974            #[allow(unused_variables)]
8975            let offset = encoder.out_of_line_offset(bytes_len);
8976            let mut _prev_end_offset: usize = 0;
8977            if 1 > max_ordinal {
8978                return Ok(());
8979            }
8980
8981            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8982            // are envelope_size bytes.
8983            let cur_offset: usize = (1 - 1) * envelope_size;
8984
8985            // Zero reserved fields.
8986            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8987
8988            // Safety:
8989            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8990            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8991            //   envelope_size bytes, there is always sufficient room.
8992            fidl::encoding::encode_in_envelope_optional::<u32, D>(
8993                self.partition_id.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
8994                encoder,
8995                offset + cur_offset,
8996                depth,
8997            )?;
8998
8999            _prev_end_offset = cur_offset + envelope_size;
9000            if 2 > max_ordinal {
9001                return Ok(());
9002            }
9003
9004            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9005            // are envelope_size bytes.
9006            let cur_offset: usize = (2 - 1) * envelope_size;
9007
9008            // Zero reserved fields.
9009            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9010
9011            // Safety:
9012            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9013            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9014            //   envelope_size bytes, there is always sufficient room.
9015            fidl::encoding::encode_in_envelope_optional::<u8, D>(
9016                self.weight.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
9017                encoder,
9018                offset + cur_offset,
9019                depth,
9020            )?;
9021
9022            _prev_end_offset = cur_offset + envelope_size;
9023            if 3 > max_ordinal {
9024                return Ok(());
9025            }
9026
9027            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9028            // are envelope_size bytes.
9029            let cur_offset: usize = (3 - 1) * envelope_size;
9030
9031            // Zero reserved fields.
9032            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9033
9034            // Safety:
9035            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9036            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9037            //   envelope_size bytes, there is always sufficient room.
9038            fidl::encoding::encode_in_envelope_optional::<u8, D>(
9039                self.network_data_version
9040                    .as_ref()
9041                    .map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
9042                encoder,
9043                offset + cur_offset,
9044                depth,
9045            )?;
9046
9047            _prev_end_offset = cur_offset + envelope_size;
9048            if 4 > max_ordinal {
9049                return Ok(());
9050            }
9051
9052            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9053            // are envelope_size bytes.
9054            let cur_offset: usize = (4 - 1) * envelope_size;
9055
9056            // Zero reserved fields.
9057            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9058
9059            // Safety:
9060            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9061            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9062            //   envelope_size bytes, there is always sufficient room.
9063            fidl::encoding::encode_in_envelope_optional::<u8, D>(
9064                self.stable_network_data_version
9065                    .as_ref()
9066                    .map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
9067                encoder,
9068                offset + cur_offset,
9069                depth,
9070            )?;
9071
9072            _prev_end_offset = cur_offset + envelope_size;
9073            if 5 > max_ordinal {
9074                return Ok(());
9075            }
9076
9077            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9078            // are envelope_size bytes.
9079            let cur_offset: usize = (5 - 1) * envelope_size;
9080
9081            // Zero reserved fields.
9082            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9083
9084            // Safety:
9085            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9086            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9087            //   envelope_size bytes, there is always sufficient room.
9088            fidl::encoding::encode_in_envelope_optional::<u8, D>(
9089                self.router_id.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
9090                encoder,
9091                offset + cur_offset,
9092                depth,
9093            )?;
9094
9095            _prev_end_offset = cur_offset + envelope_size;
9096
9097            Ok(())
9098        }
9099    }
9100
9101    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for LeaderData {
9102        #[inline(always)]
9103        fn new_empty() -> Self {
9104            Self::default()
9105        }
9106
9107        unsafe fn decode(
9108            &mut self,
9109            decoder: &mut fidl::encoding::Decoder<'_, D>,
9110            offset: usize,
9111            mut depth: fidl::encoding::Depth,
9112        ) -> fidl::Result<()> {
9113            decoder.debug_check_bounds::<Self>(offset);
9114            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
9115                None => return Err(fidl::Error::NotNullable),
9116                Some(len) => len,
9117            };
9118            // Calling decoder.out_of_line_offset(0) is not allowed.
9119            if len == 0 {
9120                return Ok(());
9121            };
9122            depth.increment()?;
9123            let envelope_size = 8;
9124            let bytes_len = len * envelope_size;
9125            let offset = decoder.out_of_line_offset(bytes_len)?;
9126            // Decode the envelope for each type.
9127            let mut _next_ordinal_to_read = 0;
9128            let mut next_offset = offset;
9129            let end_offset = offset + bytes_len;
9130            _next_ordinal_to_read += 1;
9131            if next_offset >= end_offset {
9132                return Ok(());
9133            }
9134
9135            // Decode unknown envelopes for gaps in ordinals.
9136            while _next_ordinal_to_read < 1 {
9137                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9138                _next_ordinal_to_read += 1;
9139                next_offset += envelope_size;
9140            }
9141
9142            let next_out_of_line = decoder.next_out_of_line();
9143            let handles_before = decoder.remaining_handles();
9144            if let Some((inlined, num_bytes, num_handles)) =
9145                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9146            {
9147                let member_inline_size =
9148                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
9149                if inlined != (member_inline_size <= 4) {
9150                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9151                }
9152                let inner_offset;
9153                let mut inner_depth = depth.clone();
9154                if inlined {
9155                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9156                    inner_offset = next_offset;
9157                } else {
9158                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9159                    inner_depth.increment()?;
9160                }
9161                let val_ref = self.partition_id.get_or_insert_with(|| fidl::new_empty!(u32, D));
9162                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
9163                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9164                {
9165                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9166                }
9167                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9168                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9169                }
9170            }
9171
9172            next_offset += envelope_size;
9173            _next_ordinal_to_read += 1;
9174            if next_offset >= end_offset {
9175                return Ok(());
9176            }
9177
9178            // Decode unknown envelopes for gaps in ordinals.
9179            while _next_ordinal_to_read < 2 {
9180                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9181                _next_ordinal_to_read += 1;
9182                next_offset += envelope_size;
9183            }
9184
9185            let next_out_of_line = decoder.next_out_of_line();
9186            let handles_before = decoder.remaining_handles();
9187            if let Some((inlined, num_bytes, num_handles)) =
9188                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9189            {
9190                let member_inline_size =
9191                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
9192                if inlined != (member_inline_size <= 4) {
9193                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9194                }
9195                let inner_offset;
9196                let mut inner_depth = depth.clone();
9197                if inlined {
9198                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9199                    inner_offset = next_offset;
9200                } else {
9201                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9202                    inner_depth.increment()?;
9203                }
9204                let val_ref = self.weight.get_or_insert_with(|| fidl::new_empty!(u8, D));
9205                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
9206                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9207                {
9208                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9209                }
9210                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9211                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9212                }
9213            }
9214
9215            next_offset += envelope_size;
9216            _next_ordinal_to_read += 1;
9217            if next_offset >= end_offset {
9218                return Ok(());
9219            }
9220
9221            // Decode unknown envelopes for gaps in ordinals.
9222            while _next_ordinal_to_read < 3 {
9223                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9224                _next_ordinal_to_read += 1;
9225                next_offset += envelope_size;
9226            }
9227
9228            let next_out_of_line = decoder.next_out_of_line();
9229            let handles_before = decoder.remaining_handles();
9230            if let Some((inlined, num_bytes, num_handles)) =
9231                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9232            {
9233                let member_inline_size =
9234                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
9235                if inlined != (member_inline_size <= 4) {
9236                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9237                }
9238                let inner_offset;
9239                let mut inner_depth = depth.clone();
9240                if inlined {
9241                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9242                    inner_offset = next_offset;
9243                } else {
9244                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9245                    inner_depth.increment()?;
9246                }
9247                let val_ref =
9248                    self.network_data_version.get_or_insert_with(|| fidl::new_empty!(u8, D));
9249                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
9250                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9251                {
9252                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9253                }
9254                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9255                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9256                }
9257            }
9258
9259            next_offset += envelope_size;
9260            _next_ordinal_to_read += 1;
9261            if next_offset >= end_offset {
9262                return Ok(());
9263            }
9264
9265            // Decode unknown envelopes for gaps in ordinals.
9266            while _next_ordinal_to_read < 4 {
9267                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9268                _next_ordinal_to_read += 1;
9269                next_offset += envelope_size;
9270            }
9271
9272            let next_out_of_line = decoder.next_out_of_line();
9273            let handles_before = decoder.remaining_handles();
9274            if let Some((inlined, num_bytes, num_handles)) =
9275                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9276            {
9277                let member_inline_size =
9278                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
9279                if inlined != (member_inline_size <= 4) {
9280                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9281                }
9282                let inner_offset;
9283                let mut inner_depth = depth.clone();
9284                if inlined {
9285                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9286                    inner_offset = next_offset;
9287                } else {
9288                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9289                    inner_depth.increment()?;
9290                }
9291                let val_ref =
9292                    self.stable_network_data_version.get_or_insert_with(|| fidl::new_empty!(u8, D));
9293                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
9294                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9295                {
9296                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9297                }
9298                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9299                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9300                }
9301            }
9302
9303            next_offset += envelope_size;
9304            _next_ordinal_to_read += 1;
9305            if next_offset >= end_offset {
9306                return Ok(());
9307            }
9308
9309            // Decode unknown envelopes for gaps in ordinals.
9310            while _next_ordinal_to_read < 5 {
9311                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9312                _next_ordinal_to_read += 1;
9313                next_offset += envelope_size;
9314            }
9315
9316            let next_out_of_line = decoder.next_out_of_line();
9317            let handles_before = decoder.remaining_handles();
9318            if let Some((inlined, num_bytes, num_handles)) =
9319                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9320            {
9321                let member_inline_size =
9322                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
9323                if inlined != (member_inline_size <= 4) {
9324                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9325                }
9326                let inner_offset;
9327                let mut inner_depth = depth.clone();
9328                if inlined {
9329                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9330                    inner_offset = next_offset;
9331                } else {
9332                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9333                    inner_depth.increment()?;
9334                }
9335                let val_ref = self.router_id.get_or_insert_with(|| fidl::new_empty!(u8, D));
9336                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
9337                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9338                {
9339                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9340                }
9341                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9342                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9343                }
9344            }
9345
9346            next_offset += envelope_size;
9347
9348            // Decode the remaining unknown envelopes.
9349            while next_offset < end_offset {
9350                _next_ordinal_to_read += 1;
9351                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9352                next_offset += envelope_size;
9353            }
9354
9355            Ok(())
9356        }
9357    }
9358
9359    impl LinkMetricsEntry {
9360        #[inline(always)]
9361        fn max_ordinal_present(&self) -> u64 {
9362            if let Some(_) = self.rssi {
9363                return 2;
9364            }
9365            if let Some(_) = self.link_margin {
9366                return 1;
9367            }
9368            0
9369        }
9370    }
9371
9372    impl fidl::encoding::ValueTypeMarker for LinkMetricsEntry {
9373        type Borrowed<'a> = &'a Self;
9374        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
9375            value
9376        }
9377    }
9378
9379    unsafe impl fidl::encoding::TypeMarker for LinkMetricsEntry {
9380        type Owned = Self;
9381
9382        #[inline(always)]
9383        fn inline_align(_context: fidl::encoding::Context) -> usize {
9384            8
9385        }
9386
9387        #[inline(always)]
9388        fn inline_size(_context: fidl::encoding::Context) -> usize {
9389            16
9390        }
9391    }
9392
9393    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<LinkMetricsEntry, D>
9394        for &LinkMetricsEntry
9395    {
9396        unsafe fn encode(
9397            self,
9398            encoder: &mut fidl::encoding::Encoder<'_, D>,
9399            offset: usize,
9400            mut depth: fidl::encoding::Depth,
9401        ) -> fidl::Result<()> {
9402            encoder.debug_check_bounds::<LinkMetricsEntry>(offset);
9403            // Vector header
9404            let max_ordinal: u64 = self.max_ordinal_present();
9405            encoder.write_num(max_ordinal, offset);
9406            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
9407            // Calling encoder.out_of_line_offset(0) is not allowed.
9408            if max_ordinal == 0 {
9409                return Ok(());
9410            }
9411            depth.increment()?;
9412            let envelope_size = 8;
9413            let bytes_len = max_ordinal as usize * envelope_size;
9414            #[allow(unused_variables)]
9415            let offset = encoder.out_of_line_offset(bytes_len);
9416            let mut _prev_end_offset: usize = 0;
9417            if 1 > max_ordinal {
9418                return Ok(());
9419            }
9420
9421            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9422            // are envelope_size bytes.
9423            let cur_offset: usize = (1 - 1) * envelope_size;
9424
9425            // Zero reserved fields.
9426            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9427
9428            // Safety:
9429            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9430            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9431            //   envelope_size bytes, there is always sufficient room.
9432            fidl::encoding::encode_in_envelope_optional::<u8, D>(
9433                self.link_margin.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
9434                encoder,
9435                offset + cur_offset,
9436                depth,
9437            )?;
9438
9439            _prev_end_offset = cur_offset + envelope_size;
9440            if 2 > max_ordinal {
9441                return Ok(());
9442            }
9443
9444            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9445            // are envelope_size bytes.
9446            let cur_offset: usize = (2 - 1) * envelope_size;
9447
9448            // Zero reserved fields.
9449            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9450
9451            // Safety:
9452            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9453            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9454            //   envelope_size bytes, there is always sufficient room.
9455            fidl::encoding::encode_in_envelope_optional::<i8, D>(
9456                self.rssi.as_ref().map(<i8 as fidl::encoding::ValueTypeMarker>::borrow),
9457                encoder,
9458                offset + cur_offset,
9459                depth,
9460            )?;
9461
9462            _prev_end_offset = cur_offset + envelope_size;
9463
9464            Ok(())
9465        }
9466    }
9467
9468    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for LinkMetricsEntry {
9469        #[inline(always)]
9470        fn new_empty() -> Self {
9471            Self::default()
9472        }
9473
9474        unsafe fn decode(
9475            &mut self,
9476            decoder: &mut fidl::encoding::Decoder<'_, D>,
9477            offset: usize,
9478            mut depth: fidl::encoding::Depth,
9479        ) -> fidl::Result<()> {
9480            decoder.debug_check_bounds::<Self>(offset);
9481            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
9482                None => return Err(fidl::Error::NotNullable),
9483                Some(len) => len,
9484            };
9485            // Calling decoder.out_of_line_offset(0) is not allowed.
9486            if len == 0 {
9487                return Ok(());
9488            };
9489            depth.increment()?;
9490            let envelope_size = 8;
9491            let bytes_len = len * envelope_size;
9492            let offset = decoder.out_of_line_offset(bytes_len)?;
9493            // Decode the envelope for each type.
9494            let mut _next_ordinal_to_read = 0;
9495            let mut next_offset = offset;
9496            let end_offset = offset + bytes_len;
9497            _next_ordinal_to_read += 1;
9498            if next_offset >= end_offset {
9499                return Ok(());
9500            }
9501
9502            // Decode unknown envelopes for gaps in ordinals.
9503            while _next_ordinal_to_read < 1 {
9504                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9505                _next_ordinal_to_read += 1;
9506                next_offset += envelope_size;
9507            }
9508
9509            let next_out_of_line = decoder.next_out_of_line();
9510            let handles_before = decoder.remaining_handles();
9511            if let Some((inlined, num_bytes, num_handles)) =
9512                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9513            {
9514                let member_inline_size =
9515                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
9516                if inlined != (member_inline_size <= 4) {
9517                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9518                }
9519                let inner_offset;
9520                let mut inner_depth = depth.clone();
9521                if inlined {
9522                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9523                    inner_offset = next_offset;
9524                } else {
9525                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9526                    inner_depth.increment()?;
9527                }
9528                let val_ref = self.link_margin.get_or_insert_with(|| fidl::new_empty!(u8, D));
9529                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
9530                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9531                {
9532                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9533                }
9534                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9535                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9536                }
9537            }
9538
9539            next_offset += envelope_size;
9540            _next_ordinal_to_read += 1;
9541            if next_offset >= end_offset {
9542                return Ok(());
9543            }
9544
9545            // Decode unknown envelopes for gaps in ordinals.
9546            while _next_ordinal_to_read < 2 {
9547                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9548                _next_ordinal_to_read += 1;
9549                next_offset += envelope_size;
9550            }
9551
9552            let next_out_of_line = decoder.next_out_of_line();
9553            let handles_before = decoder.remaining_handles();
9554            if let Some((inlined, num_bytes, num_handles)) =
9555                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9556            {
9557                let member_inline_size =
9558                    <i8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
9559                if inlined != (member_inline_size <= 4) {
9560                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9561                }
9562                let inner_offset;
9563                let mut inner_depth = depth.clone();
9564                if inlined {
9565                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9566                    inner_offset = next_offset;
9567                } else {
9568                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9569                    inner_depth.increment()?;
9570                }
9571                let val_ref = self.rssi.get_or_insert_with(|| fidl::new_empty!(i8, D));
9572                fidl::decode!(i8, D, val_ref, decoder, inner_offset, inner_depth)?;
9573                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9574                {
9575                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9576                }
9577                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9578                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9579                }
9580            }
9581
9582            next_offset += envelope_size;
9583
9584            // Decode the remaining unknown envelopes.
9585            while next_offset < end_offset {
9586                _next_ordinal_to_read += 1;
9587                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9588                next_offset += envelope_size;
9589            }
9590
9591            Ok(())
9592        }
9593    }
9594
9595    impl Nat64ErrorCounters {
9596        #[inline(always)]
9597        fn max_ordinal_present(&self) -> u64 {
9598            if let Some(_) = self.no_mapping {
9599                return 4;
9600            }
9601            if let Some(_) = self.unsupported_protocol {
9602                return 3;
9603            }
9604            if let Some(_) = self.illegal_packet {
9605                return 2;
9606            }
9607            if let Some(_) = self.unknown {
9608                return 1;
9609            }
9610            0
9611        }
9612    }
9613
9614    impl fidl::encoding::ValueTypeMarker for Nat64ErrorCounters {
9615        type Borrowed<'a> = &'a Self;
9616        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
9617            value
9618        }
9619    }
9620
9621    unsafe impl fidl::encoding::TypeMarker for Nat64ErrorCounters {
9622        type Owned = Self;
9623
9624        #[inline(always)]
9625        fn inline_align(_context: fidl::encoding::Context) -> usize {
9626            8
9627        }
9628
9629        #[inline(always)]
9630        fn inline_size(_context: fidl::encoding::Context) -> usize {
9631            16
9632        }
9633    }
9634
9635    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Nat64ErrorCounters, D>
9636        for &Nat64ErrorCounters
9637    {
9638        unsafe fn encode(
9639            self,
9640            encoder: &mut fidl::encoding::Encoder<'_, D>,
9641            offset: usize,
9642            mut depth: fidl::encoding::Depth,
9643        ) -> fidl::Result<()> {
9644            encoder.debug_check_bounds::<Nat64ErrorCounters>(offset);
9645            // Vector header
9646            let max_ordinal: u64 = self.max_ordinal_present();
9647            encoder.write_num(max_ordinal, offset);
9648            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
9649            // Calling encoder.out_of_line_offset(0) is not allowed.
9650            if max_ordinal == 0 {
9651                return Ok(());
9652            }
9653            depth.increment()?;
9654            let envelope_size = 8;
9655            let bytes_len = max_ordinal as usize * envelope_size;
9656            #[allow(unused_variables)]
9657            let offset = encoder.out_of_line_offset(bytes_len);
9658            let mut _prev_end_offset: usize = 0;
9659            if 1 > max_ordinal {
9660                return Ok(());
9661            }
9662
9663            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9664            // are envelope_size bytes.
9665            let cur_offset: usize = (1 - 1) * envelope_size;
9666
9667            // Zero reserved fields.
9668            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9669
9670            // Safety:
9671            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9672            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9673            //   envelope_size bytes, there is always sufficient room.
9674            fidl::encoding::encode_in_envelope_optional::<Nat64PacketCounters, D>(
9675                self.unknown
9676                    .as_ref()
9677                    .map(<Nat64PacketCounters as fidl::encoding::ValueTypeMarker>::borrow),
9678                encoder,
9679                offset + cur_offset,
9680                depth,
9681            )?;
9682
9683            _prev_end_offset = cur_offset + envelope_size;
9684            if 2 > max_ordinal {
9685                return Ok(());
9686            }
9687
9688            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9689            // are envelope_size bytes.
9690            let cur_offset: usize = (2 - 1) * envelope_size;
9691
9692            // Zero reserved fields.
9693            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9694
9695            // Safety:
9696            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9697            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9698            //   envelope_size bytes, there is always sufficient room.
9699            fidl::encoding::encode_in_envelope_optional::<Nat64PacketCounters, D>(
9700                self.illegal_packet
9701                    .as_ref()
9702                    .map(<Nat64PacketCounters as fidl::encoding::ValueTypeMarker>::borrow),
9703                encoder,
9704                offset + cur_offset,
9705                depth,
9706            )?;
9707
9708            _prev_end_offset = cur_offset + envelope_size;
9709            if 3 > max_ordinal {
9710                return Ok(());
9711            }
9712
9713            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9714            // are envelope_size bytes.
9715            let cur_offset: usize = (3 - 1) * envelope_size;
9716
9717            // Zero reserved fields.
9718            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9719
9720            // Safety:
9721            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9722            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9723            //   envelope_size bytes, there is always sufficient room.
9724            fidl::encoding::encode_in_envelope_optional::<Nat64PacketCounters, D>(
9725                self.unsupported_protocol
9726                    .as_ref()
9727                    .map(<Nat64PacketCounters as fidl::encoding::ValueTypeMarker>::borrow),
9728                encoder,
9729                offset + cur_offset,
9730                depth,
9731            )?;
9732
9733            _prev_end_offset = cur_offset + envelope_size;
9734            if 4 > max_ordinal {
9735                return Ok(());
9736            }
9737
9738            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9739            // are envelope_size bytes.
9740            let cur_offset: usize = (4 - 1) * envelope_size;
9741
9742            // Zero reserved fields.
9743            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9744
9745            // Safety:
9746            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9747            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9748            //   envelope_size bytes, there is always sufficient room.
9749            fidl::encoding::encode_in_envelope_optional::<Nat64PacketCounters, D>(
9750                self.no_mapping
9751                    .as_ref()
9752                    .map(<Nat64PacketCounters as fidl::encoding::ValueTypeMarker>::borrow),
9753                encoder,
9754                offset + cur_offset,
9755                depth,
9756            )?;
9757
9758            _prev_end_offset = cur_offset + envelope_size;
9759
9760            Ok(())
9761        }
9762    }
9763
9764    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Nat64ErrorCounters {
9765        #[inline(always)]
9766        fn new_empty() -> Self {
9767            Self::default()
9768        }
9769
9770        unsafe fn decode(
9771            &mut self,
9772            decoder: &mut fidl::encoding::Decoder<'_, D>,
9773            offset: usize,
9774            mut depth: fidl::encoding::Depth,
9775        ) -> fidl::Result<()> {
9776            decoder.debug_check_bounds::<Self>(offset);
9777            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
9778                None => return Err(fidl::Error::NotNullable),
9779                Some(len) => len,
9780            };
9781            // Calling decoder.out_of_line_offset(0) is not allowed.
9782            if len == 0 {
9783                return Ok(());
9784            };
9785            depth.increment()?;
9786            let envelope_size = 8;
9787            let bytes_len = len * envelope_size;
9788            let offset = decoder.out_of_line_offset(bytes_len)?;
9789            // Decode the envelope for each type.
9790            let mut _next_ordinal_to_read = 0;
9791            let mut next_offset = offset;
9792            let end_offset = offset + bytes_len;
9793            _next_ordinal_to_read += 1;
9794            if next_offset >= end_offset {
9795                return Ok(());
9796            }
9797
9798            // Decode unknown envelopes for gaps in ordinals.
9799            while _next_ordinal_to_read < 1 {
9800                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9801                _next_ordinal_to_read += 1;
9802                next_offset += envelope_size;
9803            }
9804
9805            let next_out_of_line = decoder.next_out_of_line();
9806            let handles_before = decoder.remaining_handles();
9807            if let Some((inlined, num_bytes, num_handles)) =
9808                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9809            {
9810                let member_inline_size =
9811                    <Nat64PacketCounters as fidl::encoding::TypeMarker>::inline_size(
9812                        decoder.context,
9813                    );
9814                if inlined != (member_inline_size <= 4) {
9815                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9816                }
9817                let inner_offset;
9818                let mut inner_depth = depth.clone();
9819                if inlined {
9820                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9821                    inner_offset = next_offset;
9822                } else {
9823                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9824                    inner_depth.increment()?;
9825                }
9826                let val_ref =
9827                    self.unknown.get_or_insert_with(|| fidl::new_empty!(Nat64PacketCounters, D));
9828                fidl::decode!(Nat64PacketCounters, D, val_ref, decoder, inner_offset, inner_depth)?;
9829                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9830                {
9831                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9832                }
9833                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9834                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9835                }
9836            }
9837
9838            next_offset += envelope_size;
9839            _next_ordinal_to_read += 1;
9840            if next_offset >= end_offset {
9841                return Ok(());
9842            }
9843
9844            // Decode unknown envelopes for gaps in ordinals.
9845            while _next_ordinal_to_read < 2 {
9846                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9847                _next_ordinal_to_read += 1;
9848                next_offset += envelope_size;
9849            }
9850
9851            let next_out_of_line = decoder.next_out_of_line();
9852            let handles_before = decoder.remaining_handles();
9853            if let Some((inlined, num_bytes, num_handles)) =
9854                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9855            {
9856                let member_inline_size =
9857                    <Nat64PacketCounters as fidl::encoding::TypeMarker>::inline_size(
9858                        decoder.context,
9859                    );
9860                if inlined != (member_inline_size <= 4) {
9861                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9862                }
9863                let inner_offset;
9864                let mut inner_depth = depth.clone();
9865                if inlined {
9866                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9867                    inner_offset = next_offset;
9868                } else {
9869                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9870                    inner_depth.increment()?;
9871                }
9872                let val_ref = self
9873                    .illegal_packet
9874                    .get_or_insert_with(|| fidl::new_empty!(Nat64PacketCounters, D));
9875                fidl::decode!(Nat64PacketCounters, D, val_ref, decoder, inner_offset, inner_depth)?;
9876                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9877                {
9878                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9879                }
9880                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9881                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9882                }
9883            }
9884
9885            next_offset += envelope_size;
9886            _next_ordinal_to_read += 1;
9887            if next_offset >= end_offset {
9888                return Ok(());
9889            }
9890
9891            // Decode unknown envelopes for gaps in ordinals.
9892            while _next_ordinal_to_read < 3 {
9893                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9894                _next_ordinal_to_read += 1;
9895                next_offset += envelope_size;
9896            }
9897
9898            let next_out_of_line = decoder.next_out_of_line();
9899            let handles_before = decoder.remaining_handles();
9900            if let Some((inlined, num_bytes, num_handles)) =
9901                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9902            {
9903                let member_inline_size =
9904                    <Nat64PacketCounters as fidl::encoding::TypeMarker>::inline_size(
9905                        decoder.context,
9906                    );
9907                if inlined != (member_inline_size <= 4) {
9908                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9909                }
9910                let inner_offset;
9911                let mut inner_depth = depth.clone();
9912                if inlined {
9913                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9914                    inner_offset = next_offset;
9915                } else {
9916                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9917                    inner_depth.increment()?;
9918                }
9919                let val_ref = self
9920                    .unsupported_protocol
9921                    .get_or_insert_with(|| fidl::new_empty!(Nat64PacketCounters, D));
9922                fidl::decode!(Nat64PacketCounters, D, val_ref, decoder, inner_offset, inner_depth)?;
9923                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9924                {
9925                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9926                }
9927                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9928                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9929                }
9930            }
9931
9932            next_offset += envelope_size;
9933            _next_ordinal_to_read += 1;
9934            if next_offset >= end_offset {
9935                return Ok(());
9936            }
9937
9938            // Decode unknown envelopes for gaps in ordinals.
9939            while _next_ordinal_to_read < 4 {
9940                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9941                _next_ordinal_to_read += 1;
9942                next_offset += envelope_size;
9943            }
9944
9945            let next_out_of_line = decoder.next_out_of_line();
9946            let handles_before = decoder.remaining_handles();
9947            if let Some((inlined, num_bytes, num_handles)) =
9948                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9949            {
9950                let member_inline_size =
9951                    <Nat64PacketCounters as fidl::encoding::TypeMarker>::inline_size(
9952                        decoder.context,
9953                    );
9954                if inlined != (member_inline_size <= 4) {
9955                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9956                }
9957                let inner_offset;
9958                let mut inner_depth = depth.clone();
9959                if inlined {
9960                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9961                    inner_offset = next_offset;
9962                } else {
9963                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9964                    inner_depth.increment()?;
9965                }
9966                let val_ref =
9967                    self.no_mapping.get_or_insert_with(|| fidl::new_empty!(Nat64PacketCounters, D));
9968                fidl::decode!(Nat64PacketCounters, D, val_ref, decoder, inner_offset, inner_depth)?;
9969                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9970                {
9971                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9972                }
9973                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9974                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9975                }
9976            }
9977
9978            next_offset += envelope_size;
9979
9980            // Decode the remaining unknown envelopes.
9981            while next_offset < end_offset {
9982                _next_ordinal_to_read += 1;
9983                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9984                next_offset += envelope_size;
9985            }
9986
9987            Ok(())
9988        }
9989    }
9990
9991    impl Nat64Info {
9992        #[inline(always)]
9993        fn max_ordinal_present(&self) -> u64 {
9994            if let Some(_) = self.nat64_protocol_counters {
9995                return 4;
9996            }
9997            if let Some(_) = self.nat64_error_counters {
9998                return 3;
9999            }
10000            if let Some(_) = self.nat64_mappings {
10001                return 2;
10002            }
10003            if let Some(_) = self.nat64_state {
10004                return 1;
10005            }
10006            0
10007        }
10008    }
10009
10010    impl fidl::encoding::ValueTypeMarker for Nat64Info {
10011        type Borrowed<'a> = &'a Self;
10012        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
10013            value
10014        }
10015    }
10016
10017    unsafe impl fidl::encoding::TypeMarker for Nat64Info {
10018        type Owned = Self;
10019
10020        #[inline(always)]
10021        fn inline_align(_context: fidl::encoding::Context) -> usize {
10022            8
10023        }
10024
10025        #[inline(always)]
10026        fn inline_size(_context: fidl::encoding::Context) -> usize {
10027            16
10028        }
10029    }
10030
10031    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Nat64Info, D>
10032        for &Nat64Info
10033    {
10034        unsafe fn encode(
10035            self,
10036            encoder: &mut fidl::encoding::Encoder<'_, D>,
10037            offset: usize,
10038            mut depth: fidl::encoding::Depth,
10039        ) -> fidl::Result<()> {
10040            encoder.debug_check_bounds::<Nat64Info>(offset);
10041            // Vector header
10042            let max_ordinal: u64 = self.max_ordinal_present();
10043            encoder.write_num(max_ordinal, offset);
10044            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
10045            // Calling encoder.out_of_line_offset(0) is not allowed.
10046            if max_ordinal == 0 {
10047                return Ok(());
10048            }
10049            depth.increment()?;
10050            let envelope_size = 8;
10051            let bytes_len = max_ordinal as usize * envelope_size;
10052            #[allow(unused_variables)]
10053            let offset = encoder.out_of_line_offset(bytes_len);
10054            let mut _prev_end_offset: usize = 0;
10055            if 1 > max_ordinal {
10056                return Ok(());
10057            }
10058
10059            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10060            // are envelope_size bytes.
10061            let cur_offset: usize = (1 - 1) * envelope_size;
10062
10063            // Zero reserved fields.
10064            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10065
10066            // Safety:
10067            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10068            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10069            //   envelope_size bytes, there is always sufficient room.
10070            fidl::encoding::encode_in_envelope_optional::<BorderRoutingNat64State, D>(
10071                self.nat64_state
10072                    .as_ref()
10073                    .map(<BorderRoutingNat64State as fidl::encoding::ValueTypeMarker>::borrow),
10074                encoder,
10075                offset + cur_offset,
10076                depth,
10077            )?;
10078
10079            _prev_end_offset = cur_offset + envelope_size;
10080            if 2 > max_ordinal {
10081                return Ok(());
10082            }
10083
10084            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10085            // are envelope_size bytes.
10086            let cur_offset: usize = (2 - 1) * envelope_size;
10087
10088            // Zero reserved fields.
10089            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10090
10091            // Safety:
10092            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10093            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10094            //   envelope_size bytes, there is always sufficient room.
10095            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<Nat64Mapping>, D>(
10096            self.nat64_mappings.as_ref().map(<fidl::encoding::UnboundedVector<Nat64Mapping> as fidl::encoding::ValueTypeMarker>::borrow),
10097            encoder, offset + cur_offset, depth
10098        )?;
10099
10100            _prev_end_offset = cur_offset + envelope_size;
10101            if 3 > max_ordinal {
10102                return Ok(());
10103            }
10104
10105            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10106            // are envelope_size bytes.
10107            let cur_offset: usize = (3 - 1) * envelope_size;
10108
10109            // Zero reserved fields.
10110            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10111
10112            // Safety:
10113            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10114            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10115            //   envelope_size bytes, there is always sufficient room.
10116            fidl::encoding::encode_in_envelope_optional::<Nat64ErrorCounters, D>(
10117                self.nat64_error_counters
10118                    .as_ref()
10119                    .map(<Nat64ErrorCounters as fidl::encoding::ValueTypeMarker>::borrow),
10120                encoder,
10121                offset + cur_offset,
10122                depth,
10123            )?;
10124
10125            _prev_end_offset = cur_offset + envelope_size;
10126            if 4 > max_ordinal {
10127                return Ok(());
10128            }
10129
10130            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10131            // are envelope_size bytes.
10132            let cur_offset: usize = (4 - 1) * envelope_size;
10133
10134            // Zero reserved fields.
10135            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10136
10137            // Safety:
10138            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10139            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10140            //   envelope_size bytes, there is always sufficient room.
10141            fidl::encoding::encode_in_envelope_optional::<Nat64ProtocolCounters, D>(
10142                self.nat64_protocol_counters
10143                    .as_ref()
10144                    .map(<Nat64ProtocolCounters as fidl::encoding::ValueTypeMarker>::borrow),
10145                encoder,
10146                offset + cur_offset,
10147                depth,
10148            )?;
10149
10150            _prev_end_offset = cur_offset + envelope_size;
10151
10152            Ok(())
10153        }
10154    }
10155
10156    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Nat64Info {
10157        #[inline(always)]
10158        fn new_empty() -> Self {
10159            Self::default()
10160        }
10161
10162        unsafe fn decode(
10163            &mut self,
10164            decoder: &mut fidl::encoding::Decoder<'_, D>,
10165            offset: usize,
10166            mut depth: fidl::encoding::Depth,
10167        ) -> fidl::Result<()> {
10168            decoder.debug_check_bounds::<Self>(offset);
10169            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
10170                None => return Err(fidl::Error::NotNullable),
10171                Some(len) => len,
10172            };
10173            // Calling decoder.out_of_line_offset(0) is not allowed.
10174            if len == 0 {
10175                return Ok(());
10176            };
10177            depth.increment()?;
10178            let envelope_size = 8;
10179            let bytes_len = len * envelope_size;
10180            let offset = decoder.out_of_line_offset(bytes_len)?;
10181            // Decode the envelope for each type.
10182            let mut _next_ordinal_to_read = 0;
10183            let mut next_offset = offset;
10184            let end_offset = offset + bytes_len;
10185            _next_ordinal_to_read += 1;
10186            if next_offset >= end_offset {
10187                return Ok(());
10188            }
10189
10190            // Decode unknown envelopes for gaps in ordinals.
10191            while _next_ordinal_to_read < 1 {
10192                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10193                _next_ordinal_to_read += 1;
10194                next_offset += envelope_size;
10195            }
10196
10197            let next_out_of_line = decoder.next_out_of_line();
10198            let handles_before = decoder.remaining_handles();
10199            if let Some((inlined, num_bytes, num_handles)) =
10200                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10201            {
10202                let member_inline_size =
10203                    <BorderRoutingNat64State as fidl::encoding::TypeMarker>::inline_size(
10204                        decoder.context,
10205                    );
10206                if inlined != (member_inline_size <= 4) {
10207                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10208                }
10209                let inner_offset;
10210                let mut inner_depth = depth.clone();
10211                if inlined {
10212                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10213                    inner_offset = next_offset;
10214                } else {
10215                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10216                    inner_depth.increment()?;
10217                }
10218                let val_ref = self
10219                    .nat64_state
10220                    .get_or_insert_with(|| fidl::new_empty!(BorderRoutingNat64State, D));
10221                fidl::decode!(
10222                    BorderRoutingNat64State,
10223                    D,
10224                    val_ref,
10225                    decoder,
10226                    inner_offset,
10227                    inner_depth
10228                )?;
10229                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10230                {
10231                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10232                }
10233                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10234                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10235                }
10236            }
10237
10238            next_offset += envelope_size;
10239            _next_ordinal_to_read += 1;
10240            if next_offset >= end_offset {
10241                return Ok(());
10242            }
10243
10244            // Decode unknown envelopes for gaps in ordinals.
10245            while _next_ordinal_to_read < 2 {
10246                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10247                _next_ordinal_to_read += 1;
10248                next_offset += envelope_size;
10249            }
10250
10251            let next_out_of_line = decoder.next_out_of_line();
10252            let handles_before = decoder.remaining_handles();
10253            if let Some((inlined, num_bytes, num_handles)) =
10254                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10255            {
10256                let member_inline_size = <fidl::encoding::UnboundedVector<Nat64Mapping> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
10257                if inlined != (member_inline_size <= 4) {
10258                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10259                }
10260                let inner_offset;
10261                let mut inner_depth = depth.clone();
10262                if inlined {
10263                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10264                    inner_offset = next_offset;
10265                } else {
10266                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10267                    inner_depth.increment()?;
10268                }
10269                let val_ref = self.nat64_mappings.get_or_insert_with(|| {
10270                    fidl::new_empty!(fidl::encoding::UnboundedVector<Nat64Mapping>, D)
10271                });
10272                fidl::decode!(
10273                    fidl::encoding::UnboundedVector<Nat64Mapping>,
10274                    D,
10275                    val_ref,
10276                    decoder,
10277                    inner_offset,
10278                    inner_depth
10279                )?;
10280                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10281                {
10282                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10283                }
10284                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10285                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10286                }
10287            }
10288
10289            next_offset += envelope_size;
10290            _next_ordinal_to_read += 1;
10291            if next_offset >= end_offset {
10292                return Ok(());
10293            }
10294
10295            // Decode unknown envelopes for gaps in ordinals.
10296            while _next_ordinal_to_read < 3 {
10297                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10298                _next_ordinal_to_read += 1;
10299                next_offset += envelope_size;
10300            }
10301
10302            let next_out_of_line = decoder.next_out_of_line();
10303            let handles_before = decoder.remaining_handles();
10304            if let Some((inlined, num_bytes, num_handles)) =
10305                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10306            {
10307                let member_inline_size =
10308                    <Nat64ErrorCounters as fidl::encoding::TypeMarker>::inline_size(
10309                        decoder.context,
10310                    );
10311                if inlined != (member_inline_size <= 4) {
10312                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10313                }
10314                let inner_offset;
10315                let mut inner_depth = depth.clone();
10316                if inlined {
10317                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10318                    inner_offset = next_offset;
10319                } else {
10320                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10321                    inner_depth.increment()?;
10322                }
10323                let val_ref = self
10324                    .nat64_error_counters
10325                    .get_or_insert_with(|| fidl::new_empty!(Nat64ErrorCounters, D));
10326                fidl::decode!(Nat64ErrorCounters, D, val_ref, decoder, inner_offset, inner_depth)?;
10327                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10328                {
10329                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10330                }
10331                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10332                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10333                }
10334            }
10335
10336            next_offset += envelope_size;
10337            _next_ordinal_to_read += 1;
10338            if next_offset >= end_offset {
10339                return Ok(());
10340            }
10341
10342            // Decode unknown envelopes for gaps in ordinals.
10343            while _next_ordinal_to_read < 4 {
10344                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10345                _next_ordinal_to_read += 1;
10346                next_offset += envelope_size;
10347            }
10348
10349            let next_out_of_line = decoder.next_out_of_line();
10350            let handles_before = decoder.remaining_handles();
10351            if let Some((inlined, num_bytes, num_handles)) =
10352                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10353            {
10354                let member_inline_size =
10355                    <Nat64ProtocolCounters as fidl::encoding::TypeMarker>::inline_size(
10356                        decoder.context,
10357                    );
10358                if inlined != (member_inline_size <= 4) {
10359                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10360                }
10361                let inner_offset;
10362                let mut inner_depth = depth.clone();
10363                if inlined {
10364                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10365                    inner_offset = next_offset;
10366                } else {
10367                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10368                    inner_depth.increment()?;
10369                }
10370                let val_ref = self
10371                    .nat64_protocol_counters
10372                    .get_or_insert_with(|| fidl::new_empty!(Nat64ProtocolCounters, D));
10373                fidl::decode!(
10374                    Nat64ProtocolCounters,
10375                    D,
10376                    val_ref,
10377                    decoder,
10378                    inner_offset,
10379                    inner_depth
10380                )?;
10381                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10382                {
10383                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10384                }
10385                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10386                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10387                }
10388            }
10389
10390            next_offset += envelope_size;
10391
10392            // Decode the remaining unknown envelopes.
10393            while next_offset < end_offset {
10394                _next_ordinal_to_read += 1;
10395                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10396                next_offset += envelope_size;
10397            }
10398
10399            Ok(())
10400        }
10401    }
10402
10403    impl Nat64Mapping {
10404        #[inline(always)]
10405        fn max_ordinal_present(&self) -> u64 {
10406            if let Some(_) = self.counters {
10407                return 5;
10408            }
10409            if let Some(_) = self.remaining_time_ms {
10410                return 4;
10411            }
10412            if let Some(_) = self.ip6_addr {
10413                return 3;
10414            }
10415            if let Some(_) = self.ip4_addr {
10416                return 2;
10417            }
10418            if let Some(_) = self.mapping_id {
10419                return 1;
10420            }
10421            0
10422        }
10423    }
10424
10425    impl fidl::encoding::ValueTypeMarker for Nat64Mapping {
10426        type Borrowed<'a> = &'a Self;
10427        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
10428            value
10429        }
10430    }
10431
10432    unsafe impl fidl::encoding::TypeMarker for Nat64Mapping {
10433        type Owned = Self;
10434
10435        #[inline(always)]
10436        fn inline_align(_context: fidl::encoding::Context) -> usize {
10437            8
10438        }
10439
10440        #[inline(always)]
10441        fn inline_size(_context: fidl::encoding::Context) -> usize {
10442            16
10443        }
10444    }
10445
10446    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Nat64Mapping, D>
10447        for &Nat64Mapping
10448    {
10449        unsafe fn encode(
10450            self,
10451            encoder: &mut fidl::encoding::Encoder<'_, D>,
10452            offset: usize,
10453            mut depth: fidl::encoding::Depth,
10454        ) -> fidl::Result<()> {
10455            encoder.debug_check_bounds::<Nat64Mapping>(offset);
10456            // Vector header
10457            let max_ordinal: u64 = self.max_ordinal_present();
10458            encoder.write_num(max_ordinal, offset);
10459            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
10460            // Calling encoder.out_of_line_offset(0) is not allowed.
10461            if max_ordinal == 0 {
10462                return Ok(());
10463            }
10464            depth.increment()?;
10465            let envelope_size = 8;
10466            let bytes_len = max_ordinal as usize * envelope_size;
10467            #[allow(unused_variables)]
10468            let offset = encoder.out_of_line_offset(bytes_len);
10469            let mut _prev_end_offset: usize = 0;
10470            if 1 > max_ordinal {
10471                return Ok(());
10472            }
10473
10474            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10475            // are envelope_size bytes.
10476            let cur_offset: usize = (1 - 1) * envelope_size;
10477
10478            // Zero reserved fields.
10479            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10480
10481            // Safety:
10482            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10483            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10484            //   envelope_size bytes, there is always sufficient room.
10485            fidl::encoding::encode_in_envelope_optional::<u64, D>(
10486                self.mapping_id.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
10487                encoder,
10488                offset + cur_offset,
10489                depth,
10490            )?;
10491
10492            _prev_end_offset = cur_offset + envelope_size;
10493            if 2 > max_ordinal {
10494                return Ok(());
10495            }
10496
10497            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10498            // are envelope_size bytes.
10499            let cur_offset: usize = (2 - 1) * envelope_size;
10500
10501            // Zero reserved fields.
10502            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10503
10504            // Safety:
10505            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10506            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10507            //   envelope_size bytes, there is always sufficient room.
10508            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<u8>, D>(
10509            self.ip4_addr.as_ref().map(<fidl::encoding::UnboundedVector<u8> as fidl::encoding::ValueTypeMarker>::borrow),
10510            encoder, offset + cur_offset, depth
10511        )?;
10512
10513            _prev_end_offset = cur_offset + envelope_size;
10514            if 3 > max_ordinal {
10515                return Ok(());
10516            }
10517
10518            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10519            // are envelope_size bytes.
10520            let cur_offset: usize = (3 - 1) * envelope_size;
10521
10522            // Zero reserved fields.
10523            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10524
10525            // Safety:
10526            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10527            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10528            //   envelope_size bytes, there is always sufficient room.
10529            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<u8>, D>(
10530            self.ip6_addr.as_ref().map(<fidl::encoding::UnboundedVector<u8> as fidl::encoding::ValueTypeMarker>::borrow),
10531            encoder, offset + cur_offset, depth
10532        )?;
10533
10534            _prev_end_offset = cur_offset + envelope_size;
10535            if 4 > max_ordinal {
10536                return Ok(());
10537            }
10538
10539            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10540            // are envelope_size bytes.
10541            let cur_offset: usize = (4 - 1) * envelope_size;
10542
10543            // Zero reserved fields.
10544            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10545
10546            // Safety:
10547            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10548            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10549            //   envelope_size bytes, there is always sufficient room.
10550            fidl::encoding::encode_in_envelope_optional::<u32, D>(
10551                self.remaining_time_ms
10552                    .as_ref()
10553                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
10554                encoder,
10555                offset + cur_offset,
10556                depth,
10557            )?;
10558
10559            _prev_end_offset = cur_offset + envelope_size;
10560            if 5 > max_ordinal {
10561                return Ok(());
10562            }
10563
10564            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10565            // are envelope_size bytes.
10566            let cur_offset: usize = (5 - 1) * envelope_size;
10567
10568            // Zero reserved fields.
10569            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10570
10571            // Safety:
10572            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10573            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10574            //   envelope_size bytes, there is always sufficient room.
10575            fidl::encoding::encode_in_envelope_optional::<Nat64ProtocolCounters, D>(
10576                self.counters
10577                    .as_ref()
10578                    .map(<Nat64ProtocolCounters as fidl::encoding::ValueTypeMarker>::borrow),
10579                encoder,
10580                offset + cur_offset,
10581                depth,
10582            )?;
10583
10584            _prev_end_offset = cur_offset + envelope_size;
10585
10586            Ok(())
10587        }
10588    }
10589
10590    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Nat64Mapping {
10591        #[inline(always)]
10592        fn new_empty() -> Self {
10593            Self::default()
10594        }
10595
10596        unsafe fn decode(
10597            &mut self,
10598            decoder: &mut fidl::encoding::Decoder<'_, D>,
10599            offset: usize,
10600            mut depth: fidl::encoding::Depth,
10601        ) -> fidl::Result<()> {
10602            decoder.debug_check_bounds::<Self>(offset);
10603            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
10604                None => return Err(fidl::Error::NotNullable),
10605                Some(len) => len,
10606            };
10607            // Calling decoder.out_of_line_offset(0) is not allowed.
10608            if len == 0 {
10609                return Ok(());
10610            };
10611            depth.increment()?;
10612            let envelope_size = 8;
10613            let bytes_len = len * envelope_size;
10614            let offset = decoder.out_of_line_offset(bytes_len)?;
10615            // Decode the envelope for each type.
10616            let mut _next_ordinal_to_read = 0;
10617            let mut next_offset = offset;
10618            let end_offset = offset + bytes_len;
10619            _next_ordinal_to_read += 1;
10620            if next_offset >= end_offset {
10621                return Ok(());
10622            }
10623
10624            // Decode unknown envelopes for gaps in ordinals.
10625            while _next_ordinal_to_read < 1 {
10626                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10627                _next_ordinal_to_read += 1;
10628                next_offset += envelope_size;
10629            }
10630
10631            let next_out_of_line = decoder.next_out_of_line();
10632            let handles_before = decoder.remaining_handles();
10633            if let Some((inlined, num_bytes, num_handles)) =
10634                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10635            {
10636                let member_inline_size =
10637                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
10638                if inlined != (member_inline_size <= 4) {
10639                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10640                }
10641                let inner_offset;
10642                let mut inner_depth = depth.clone();
10643                if inlined {
10644                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10645                    inner_offset = next_offset;
10646                } else {
10647                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10648                    inner_depth.increment()?;
10649                }
10650                let val_ref = self.mapping_id.get_or_insert_with(|| fidl::new_empty!(u64, D));
10651                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
10652                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10653                {
10654                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10655                }
10656                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10657                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10658                }
10659            }
10660
10661            next_offset += envelope_size;
10662            _next_ordinal_to_read += 1;
10663            if next_offset >= end_offset {
10664                return Ok(());
10665            }
10666
10667            // Decode unknown envelopes for gaps in ordinals.
10668            while _next_ordinal_to_read < 2 {
10669                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10670                _next_ordinal_to_read += 1;
10671                next_offset += envelope_size;
10672            }
10673
10674            let next_out_of_line = decoder.next_out_of_line();
10675            let handles_before = decoder.remaining_handles();
10676            if let Some((inlined, num_bytes, num_handles)) =
10677                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10678            {
10679                let member_inline_size = <fidl::encoding::UnboundedVector<u8> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
10680                if inlined != (member_inline_size <= 4) {
10681                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10682                }
10683                let inner_offset;
10684                let mut inner_depth = depth.clone();
10685                if inlined {
10686                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10687                    inner_offset = next_offset;
10688                } else {
10689                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10690                    inner_depth.increment()?;
10691                }
10692                let val_ref = self.ip4_addr.get_or_insert_with(|| {
10693                    fidl::new_empty!(fidl::encoding::UnboundedVector<u8>, D)
10694                });
10695                fidl::decode!(
10696                    fidl::encoding::UnboundedVector<u8>,
10697                    D,
10698                    val_ref,
10699                    decoder,
10700                    inner_offset,
10701                    inner_depth
10702                )?;
10703                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10704                {
10705                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10706                }
10707                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10708                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10709                }
10710            }
10711
10712            next_offset += envelope_size;
10713            _next_ordinal_to_read += 1;
10714            if next_offset >= end_offset {
10715                return Ok(());
10716            }
10717
10718            // Decode unknown envelopes for gaps in ordinals.
10719            while _next_ordinal_to_read < 3 {
10720                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10721                _next_ordinal_to_read += 1;
10722                next_offset += envelope_size;
10723            }
10724
10725            let next_out_of_line = decoder.next_out_of_line();
10726            let handles_before = decoder.remaining_handles();
10727            if let Some((inlined, num_bytes, num_handles)) =
10728                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10729            {
10730                let member_inline_size = <fidl::encoding::UnboundedVector<u8> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
10731                if inlined != (member_inline_size <= 4) {
10732                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10733                }
10734                let inner_offset;
10735                let mut inner_depth = depth.clone();
10736                if inlined {
10737                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10738                    inner_offset = next_offset;
10739                } else {
10740                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10741                    inner_depth.increment()?;
10742                }
10743                let val_ref = self.ip6_addr.get_or_insert_with(|| {
10744                    fidl::new_empty!(fidl::encoding::UnboundedVector<u8>, D)
10745                });
10746                fidl::decode!(
10747                    fidl::encoding::UnboundedVector<u8>,
10748                    D,
10749                    val_ref,
10750                    decoder,
10751                    inner_offset,
10752                    inner_depth
10753                )?;
10754                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10755                {
10756                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10757                }
10758                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10759                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10760                }
10761            }
10762
10763            next_offset += envelope_size;
10764            _next_ordinal_to_read += 1;
10765            if next_offset >= end_offset {
10766                return Ok(());
10767            }
10768
10769            // Decode unknown envelopes for gaps in ordinals.
10770            while _next_ordinal_to_read < 4 {
10771                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10772                _next_ordinal_to_read += 1;
10773                next_offset += envelope_size;
10774            }
10775
10776            let next_out_of_line = decoder.next_out_of_line();
10777            let handles_before = decoder.remaining_handles();
10778            if let Some((inlined, num_bytes, num_handles)) =
10779                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10780            {
10781                let member_inline_size =
10782                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
10783                if inlined != (member_inline_size <= 4) {
10784                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10785                }
10786                let inner_offset;
10787                let mut inner_depth = depth.clone();
10788                if inlined {
10789                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10790                    inner_offset = next_offset;
10791                } else {
10792                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10793                    inner_depth.increment()?;
10794                }
10795                let val_ref =
10796                    self.remaining_time_ms.get_or_insert_with(|| fidl::new_empty!(u32, D));
10797                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
10798                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10799                {
10800                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10801                }
10802                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10803                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10804                }
10805            }
10806
10807            next_offset += envelope_size;
10808            _next_ordinal_to_read += 1;
10809            if next_offset >= end_offset {
10810                return Ok(());
10811            }
10812
10813            // Decode unknown envelopes for gaps in ordinals.
10814            while _next_ordinal_to_read < 5 {
10815                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10816                _next_ordinal_to_read += 1;
10817                next_offset += envelope_size;
10818            }
10819
10820            let next_out_of_line = decoder.next_out_of_line();
10821            let handles_before = decoder.remaining_handles();
10822            if let Some((inlined, num_bytes, num_handles)) =
10823                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10824            {
10825                let member_inline_size =
10826                    <Nat64ProtocolCounters as fidl::encoding::TypeMarker>::inline_size(
10827                        decoder.context,
10828                    );
10829                if inlined != (member_inline_size <= 4) {
10830                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10831                }
10832                let inner_offset;
10833                let mut inner_depth = depth.clone();
10834                if inlined {
10835                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10836                    inner_offset = next_offset;
10837                } else {
10838                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10839                    inner_depth.increment()?;
10840                }
10841                let val_ref =
10842                    self.counters.get_or_insert_with(|| fidl::new_empty!(Nat64ProtocolCounters, D));
10843                fidl::decode!(
10844                    Nat64ProtocolCounters,
10845                    D,
10846                    val_ref,
10847                    decoder,
10848                    inner_offset,
10849                    inner_depth
10850                )?;
10851                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10852                {
10853                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10854                }
10855                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10856                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10857                }
10858            }
10859
10860            next_offset += envelope_size;
10861
10862            // Decode the remaining unknown envelopes.
10863            while next_offset < end_offset {
10864                _next_ordinal_to_read += 1;
10865                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10866                next_offset += envelope_size;
10867            }
10868
10869            Ok(())
10870        }
10871    }
10872
10873    impl Nat64PacketCounters {
10874        #[inline(always)]
10875        fn max_ordinal_present(&self) -> u64 {
10876            if let Some(_) = self.ipv6_to_ipv4_packets {
10877                return 2;
10878            }
10879            if let Some(_) = self.ipv4_to_ipv6_packets {
10880                return 1;
10881            }
10882            0
10883        }
10884    }
10885
10886    impl fidl::encoding::ValueTypeMarker for Nat64PacketCounters {
10887        type Borrowed<'a> = &'a Self;
10888        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
10889            value
10890        }
10891    }
10892
10893    unsafe impl fidl::encoding::TypeMarker for Nat64PacketCounters {
10894        type Owned = Self;
10895
10896        #[inline(always)]
10897        fn inline_align(_context: fidl::encoding::Context) -> usize {
10898            8
10899        }
10900
10901        #[inline(always)]
10902        fn inline_size(_context: fidl::encoding::Context) -> usize {
10903            16
10904        }
10905    }
10906
10907    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Nat64PacketCounters, D>
10908        for &Nat64PacketCounters
10909    {
10910        unsafe fn encode(
10911            self,
10912            encoder: &mut fidl::encoding::Encoder<'_, D>,
10913            offset: usize,
10914            mut depth: fidl::encoding::Depth,
10915        ) -> fidl::Result<()> {
10916            encoder.debug_check_bounds::<Nat64PacketCounters>(offset);
10917            // Vector header
10918            let max_ordinal: u64 = self.max_ordinal_present();
10919            encoder.write_num(max_ordinal, offset);
10920            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
10921            // Calling encoder.out_of_line_offset(0) is not allowed.
10922            if max_ordinal == 0 {
10923                return Ok(());
10924            }
10925            depth.increment()?;
10926            let envelope_size = 8;
10927            let bytes_len = max_ordinal as usize * envelope_size;
10928            #[allow(unused_variables)]
10929            let offset = encoder.out_of_line_offset(bytes_len);
10930            let mut _prev_end_offset: usize = 0;
10931            if 1 > max_ordinal {
10932                return Ok(());
10933            }
10934
10935            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10936            // are envelope_size bytes.
10937            let cur_offset: usize = (1 - 1) * envelope_size;
10938
10939            // Zero reserved fields.
10940            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10941
10942            // Safety:
10943            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10944            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10945            //   envelope_size bytes, there is always sufficient room.
10946            fidl::encoding::encode_in_envelope_optional::<u64, D>(
10947                self.ipv4_to_ipv6_packets
10948                    .as_ref()
10949                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
10950                encoder,
10951                offset + cur_offset,
10952                depth,
10953            )?;
10954
10955            _prev_end_offset = cur_offset + envelope_size;
10956            if 2 > max_ordinal {
10957                return Ok(());
10958            }
10959
10960            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10961            // are envelope_size bytes.
10962            let cur_offset: usize = (2 - 1) * envelope_size;
10963
10964            // Zero reserved fields.
10965            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10966
10967            // Safety:
10968            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10969            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10970            //   envelope_size bytes, there is always sufficient room.
10971            fidl::encoding::encode_in_envelope_optional::<u64, D>(
10972                self.ipv6_to_ipv4_packets
10973                    .as_ref()
10974                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
10975                encoder,
10976                offset + cur_offset,
10977                depth,
10978            )?;
10979
10980            _prev_end_offset = cur_offset + envelope_size;
10981
10982            Ok(())
10983        }
10984    }
10985
10986    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Nat64PacketCounters {
10987        #[inline(always)]
10988        fn new_empty() -> Self {
10989            Self::default()
10990        }
10991
10992        unsafe fn decode(
10993            &mut self,
10994            decoder: &mut fidl::encoding::Decoder<'_, D>,
10995            offset: usize,
10996            mut depth: fidl::encoding::Depth,
10997        ) -> fidl::Result<()> {
10998            decoder.debug_check_bounds::<Self>(offset);
10999            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
11000                None => return Err(fidl::Error::NotNullable),
11001                Some(len) => len,
11002            };
11003            // Calling decoder.out_of_line_offset(0) is not allowed.
11004            if len == 0 {
11005                return Ok(());
11006            };
11007            depth.increment()?;
11008            let envelope_size = 8;
11009            let bytes_len = len * envelope_size;
11010            let offset = decoder.out_of_line_offset(bytes_len)?;
11011            // Decode the envelope for each type.
11012            let mut _next_ordinal_to_read = 0;
11013            let mut next_offset = offset;
11014            let end_offset = offset + bytes_len;
11015            _next_ordinal_to_read += 1;
11016            if next_offset >= end_offset {
11017                return Ok(());
11018            }
11019
11020            // Decode unknown envelopes for gaps in ordinals.
11021            while _next_ordinal_to_read < 1 {
11022                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11023                _next_ordinal_to_read += 1;
11024                next_offset += envelope_size;
11025            }
11026
11027            let next_out_of_line = decoder.next_out_of_line();
11028            let handles_before = decoder.remaining_handles();
11029            if let Some((inlined, num_bytes, num_handles)) =
11030                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11031            {
11032                let member_inline_size =
11033                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
11034                if inlined != (member_inline_size <= 4) {
11035                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11036                }
11037                let inner_offset;
11038                let mut inner_depth = depth.clone();
11039                if inlined {
11040                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11041                    inner_offset = next_offset;
11042                } else {
11043                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11044                    inner_depth.increment()?;
11045                }
11046                let val_ref =
11047                    self.ipv4_to_ipv6_packets.get_or_insert_with(|| fidl::new_empty!(u64, D));
11048                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
11049                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11050                {
11051                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11052                }
11053                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11054                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11055                }
11056            }
11057
11058            next_offset += envelope_size;
11059            _next_ordinal_to_read += 1;
11060            if next_offset >= end_offset {
11061                return Ok(());
11062            }
11063
11064            // Decode unknown envelopes for gaps in ordinals.
11065            while _next_ordinal_to_read < 2 {
11066                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11067                _next_ordinal_to_read += 1;
11068                next_offset += envelope_size;
11069            }
11070
11071            let next_out_of_line = decoder.next_out_of_line();
11072            let handles_before = decoder.remaining_handles();
11073            if let Some((inlined, num_bytes, num_handles)) =
11074                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11075            {
11076                let member_inline_size =
11077                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
11078                if inlined != (member_inline_size <= 4) {
11079                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11080                }
11081                let inner_offset;
11082                let mut inner_depth = depth.clone();
11083                if inlined {
11084                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11085                    inner_offset = next_offset;
11086                } else {
11087                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11088                    inner_depth.increment()?;
11089                }
11090                let val_ref =
11091                    self.ipv6_to_ipv4_packets.get_or_insert_with(|| fidl::new_empty!(u64, D));
11092                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
11093                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11094                {
11095                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11096                }
11097                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11098                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11099                }
11100            }
11101
11102            next_offset += envelope_size;
11103
11104            // Decode the remaining unknown envelopes.
11105            while next_offset < end_offset {
11106                _next_ordinal_to_read += 1;
11107                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11108                next_offset += envelope_size;
11109            }
11110
11111            Ok(())
11112        }
11113    }
11114
11115    impl Nat64ProtocolCounters {
11116        #[inline(always)]
11117        fn max_ordinal_present(&self) -> u64 {
11118            if let Some(_) = self.total {
11119                return 4;
11120            }
11121            if let Some(_) = self.icmp {
11122                return 3;
11123            }
11124            if let Some(_) = self.udp {
11125                return 2;
11126            }
11127            if let Some(_) = self.tcp {
11128                return 1;
11129            }
11130            0
11131        }
11132    }
11133
11134    impl fidl::encoding::ValueTypeMarker for Nat64ProtocolCounters {
11135        type Borrowed<'a> = &'a Self;
11136        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
11137            value
11138        }
11139    }
11140
11141    unsafe impl fidl::encoding::TypeMarker for Nat64ProtocolCounters {
11142        type Owned = Self;
11143
11144        #[inline(always)]
11145        fn inline_align(_context: fidl::encoding::Context) -> usize {
11146            8
11147        }
11148
11149        #[inline(always)]
11150        fn inline_size(_context: fidl::encoding::Context) -> usize {
11151            16
11152        }
11153    }
11154
11155    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Nat64ProtocolCounters, D>
11156        for &Nat64ProtocolCounters
11157    {
11158        unsafe fn encode(
11159            self,
11160            encoder: &mut fidl::encoding::Encoder<'_, D>,
11161            offset: usize,
11162            mut depth: fidl::encoding::Depth,
11163        ) -> fidl::Result<()> {
11164            encoder.debug_check_bounds::<Nat64ProtocolCounters>(offset);
11165            // Vector header
11166            let max_ordinal: u64 = self.max_ordinal_present();
11167            encoder.write_num(max_ordinal, offset);
11168            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
11169            // Calling encoder.out_of_line_offset(0) is not allowed.
11170            if max_ordinal == 0 {
11171                return Ok(());
11172            }
11173            depth.increment()?;
11174            let envelope_size = 8;
11175            let bytes_len = max_ordinal as usize * envelope_size;
11176            #[allow(unused_variables)]
11177            let offset = encoder.out_of_line_offset(bytes_len);
11178            let mut _prev_end_offset: usize = 0;
11179            if 1 > max_ordinal {
11180                return Ok(());
11181            }
11182
11183            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11184            // are envelope_size bytes.
11185            let cur_offset: usize = (1 - 1) * envelope_size;
11186
11187            // Zero reserved fields.
11188            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11189
11190            // Safety:
11191            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11192            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11193            //   envelope_size bytes, there is always sufficient room.
11194            fidl::encoding::encode_in_envelope_optional::<Nat64TrafficCounters, D>(
11195                self.tcp
11196                    .as_ref()
11197                    .map(<Nat64TrafficCounters as fidl::encoding::ValueTypeMarker>::borrow),
11198                encoder,
11199                offset + cur_offset,
11200                depth,
11201            )?;
11202
11203            _prev_end_offset = cur_offset + envelope_size;
11204            if 2 > max_ordinal {
11205                return Ok(());
11206            }
11207
11208            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11209            // are envelope_size bytes.
11210            let cur_offset: usize = (2 - 1) * envelope_size;
11211
11212            // Zero reserved fields.
11213            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11214
11215            // Safety:
11216            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11217            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11218            //   envelope_size bytes, there is always sufficient room.
11219            fidl::encoding::encode_in_envelope_optional::<Nat64TrafficCounters, D>(
11220                self.udp
11221                    .as_ref()
11222                    .map(<Nat64TrafficCounters as fidl::encoding::ValueTypeMarker>::borrow),
11223                encoder,
11224                offset + cur_offset,
11225                depth,
11226            )?;
11227
11228            _prev_end_offset = cur_offset + envelope_size;
11229            if 3 > max_ordinal {
11230                return Ok(());
11231            }
11232
11233            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11234            // are envelope_size bytes.
11235            let cur_offset: usize = (3 - 1) * envelope_size;
11236
11237            // Zero reserved fields.
11238            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11239
11240            // Safety:
11241            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11242            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11243            //   envelope_size bytes, there is always sufficient room.
11244            fidl::encoding::encode_in_envelope_optional::<Nat64TrafficCounters, D>(
11245                self.icmp
11246                    .as_ref()
11247                    .map(<Nat64TrafficCounters as fidl::encoding::ValueTypeMarker>::borrow),
11248                encoder,
11249                offset + cur_offset,
11250                depth,
11251            )?;
11252
11253            _prev_end_offset = cur_offset + envelope_size;
11254            if 4 > max_ordinal {
11255                return Ok(());
11256            }
11257
11258            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11259            // are envelope_size bytes.
11260            let cur_offset: usize = (4 - 1) * envelope_size;
11261
11262            // Zero reserved fields.
11263            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11264
11265            // Safety:
11266            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11267            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11268            //   envelope_size bytes, there is always sufficient room.
11269            fidl::encoding::encode_in_envelope_optional::<Nat64TrafficCounters, D>(
11270                self.total
11271                    .as_ref()
11272                    .map(<Nat64TrafficCounters as fidl::encoding::ValueTypeMarker>::borrow),
11273                encoder,
11274                offset + cur_offset,
11275                depth,
11276            )?;
11277
11278            _prev_end_offset = cur_offset + envelope_size;
11279
11280            Ok(())
11281        }
11282    }
11283
11284    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Nat64ProtocolCounters {
11285        #[inline(always)]
11286        fn new_empty() -> Self {
11287            Self::default()
11288        }
11289
11290        unsafe fn decode(
11291            &mut self,
11292            decoder: &mut fidl::encoding::Decoder<'_, D>,
11293            offset: usize,
11294            mut depth: fidl::encoding::Depth,
11295        ) -> fidl::Result<()> {
11296            decoder.debug_check_bounds::<Self>(offset);
11297            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
11298                None => return Err(fidl::Error::NotNullable),
11299                Some(len) => len,
11300            };
11301            // Calling decoder.out_of_line_offset(0) is not allowed.
11302            if len == 0 {
11303                return Ok(());
11304            };
11305            depth.increment()?;
11306            let envelope_size = 8;
11307            let bytes_len = len * envelope_size;
11308            let offset = decoder.out_of_line_offset(bytes_len)?;
11309            // Decode the envelope for each type.
11310            let mut _next_ordinal_to_read = 0;
11311            let mut next_offset = offset;
11312            let end_offset = offset + bytes_len;
11313            _next_ordinal_to_read += 1;
11314            if next_offset >= end_offset {
11315                return Ok(());
11316            }
11317
11318            // Decode unknown envelopes for gaps in ordinals.
11319            while _next_ordinal_to_read < 1 {
11320                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11321                _next_ordinal_to_read += 1;
11322                next_offset += envelope_size;
11323            }
11324
11325            let next_out_of_line = decoder.next_out_of_line();
11326            let handles_before = decoder.remaining_handles();
11327            if let Some((inlined, num_bytes, num_handles)) =
11328                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11329            {
11330                let member_inline_size =
11331                    <Nat64TrafficCounters as fidl::encoding::TypeMarker>::inline_size(
11332                        decoder.context,
11333                    );
11334                if inlined != (member_inline_size <= 4) {
11335                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11336                }
11337                let inner_offset;
11338                let mut inner_depth = depth.clone();
11339                if inlined {
11340                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11341                    inner_offset = next_offset;
11342                } else {
11343                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11344                    inner_depth.increment()?;
11345                }
11346                let val_ref =
11347                    self.tcp.get_or_insert_with(|| fidl::new_empty!(Nat64TrafficCounters, D));
11348                fidl::decode!(
11349                    Nat64TrafficCounters,
11350                    D,
11351                    val_ref,
11352                    decoder,
11353                    inner_offset,
11354                    inner_depth
11355                )?;
11356                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11357                {
11358                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11359                }
11360                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11361                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11362                }
11363            }
11364
11365            next_offset += envelope_size;
11366            _next_ordinal_to_read += 1;
11367            if next_offset >= end_offset {
11368                return Ok(());
11369            }
11370
11371            // Decode unknown envelopes for gaps in ordinals.
11372            while _next_ordinal_to_read < 2 {
11373                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11374                _next_ordinal_to_read += 1;
11375                next_offset += envelope_size;
11376            }
11377
11378            let next_out_of_line = decoder.next_out_of_line();
11379            let handles_before = decoder.remaining_handles();
11380            if let Some((inlined, num_bytes, num_handles)) =
11381                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11382            {
11383                let member_inline_size =
11384                    <Nat64TrafficCounters as fidl::encoding::TypeMarker>::inline_size(
11385                        decoder.context,
11386                    );
11387                if inlined != (member_inline_size <= 4) {
11388                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11389                }
11390                let inner_offset;
11391                let mut inner_depth = depth.clone();
11392                if inlined {
11393                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11394                    inner_offset = next_offset;
11395                } else {
11396                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11397                    inner_depth.increment()?;
11398                }
11399                let val_ref =
11400                    self.udp.get_or_insert_with(|| fidl::new_empty!(Nat64TrafficCounters, D));
11401                fidl::decode!(
11402                    Nat64TrafficCounters,
11403                    D,
11404                    val_ref,
11405                    decoder,
11406                    inner_offset,
11407                    inner_depth
11408                )?;
11409                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11410                {
11411                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11412                }
11413                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11414                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11415                }
11416            }
11417
11418            next_offset += envelope_size;
11419            _next_ordinal_to_read += 1;
11420            if next_offset >= end_offset {
11421                return Ok(());
11422            }
11423
11424            // Decode unknown envelopes for gaps in ordinals.
11425            while _next_ordinal_to_read < 3 {
11426                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11427                _next_ordinal_to_read += 1;
11428                next_offset += envelope_size;
11429            }
11430
11431            let next_out_of_line = decoder.next_out_of_line();
11432            let handles_before = decoder.remaining_handles();
11433            if let Some((inlined, num_bytes, num_handles)) =
11434                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11435            {
11436                let member_inline_size =
11437                    <Nat64TrafficCounters as fidl::encoding::TypeMarker>::inline_size(
11438                        decoder.context,
11439                    );
11440                if inlined != (member_inline_size <= 4) {
11441                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11442                }
11443                let inner_offset;
11444                let mut inner_depth = depth.clone();
11445                if inlined {
11446                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11447                    inner_offset = next_offset;
11448                } else {
11449                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11450                    inner_depth.increment()?;
11451                }
11452                let val_ref =
11453                    self.icmp.get_or_insert_with(|| fidl::new_empty!(Nat64TrafficCounters, D));
11454                fidl::decode!(
11455                    Nat64TrafficCounters,
11456                    D,
11457                    val_ref,
11458                    decoder,
11459                    inner_offset,
11460                    inner_depth
11461                )?;
11462                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11463                {
11464                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11465                }
11466                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11467                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11468                }
11469            }
11470
11471            next_offset += envelope_size;
11472            _next_ordinal_to_read += 1;
11473            if next_offset >= end_offset {
11474                return Ok(());
11475            }
11476
11477            // Decode unknown envelopes for gaps in ordinals.
11478            while _next_ordinal_to_read < 4 {
11479                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11480                _next_ordinal_to_read += 1;
11481                next_offset += envelope_size;
11482            }
11483
11484            let next_out_of_line = decoder.next_out_of_line();
11485            let handles_before = decoder.remaining_handles();
11486            if let Some((inlined, num_bytes, num_handles)) =
11487                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11488            {
11489                let member_inline_size =
11490                    <Nat64TrafficCounters as fidl::encoding::TypeMarker>::inline_size(
11491                        decoder.context,
11492                    );
11493                if inlined != (member_inline_size <= 4) {
11494                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11495                }
11496                let inner_offset;
11497                let mut inner_depth = depth.clone();
11498                if inlined {
11499                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11500                    inner_offset = next_offset;
11501                } else {
11502                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11503                    inner_depth.increment()?;
11504                }
11505                let val_ref =
11506                    self.total.get_or_insert_with(|| fidl::new_empty!(Nat64TrafficCounters, D));
11507                fidl::decode!(
11508                    Nat64TrafficCounters,
11509                    D,
11510                    val_ref,
11511                    decoder,
11512                    inner_offset,
11513                    inner_depth
11514                )?;
11515                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11516                {
11517                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11518                }
11519                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11520                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11521                }
11522            }
11523
11524            next_offset += envelope_size;
11525
11526            // Decode the remaining unknown envelopes.
11527            while next_offset < end_offset {
11528                _next_ordinal_to_read += 1;
11529                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11530                next_offset += envelope_size;
11531            }
11532
11533            Ok(())
11534        }
11535    }
11536
11537    impl Nat64TrafficCounters {
11538        #[inline(always)]
11539        fn max_ordinal_present(&self) -> u64 {
11540            if let Some(_) = self.ipv6_to_ipv4_bytes {
11541                return 4;
11542            }
11543            if let Some(_) = self.ipv6_to_ipv4_packets {
11544                return 3;
11545            }
11546            if let Some(_) = self.ipv4_to_ipv6_bytes {
11547                return 2;
11548            }
11549            if let Some(_) = self.ipv4_to_ipv6_packets {
11550                return 1;
11551            }
11552            0
11553        }
11554    }
11555
11556    impl fidl::encoding::ValueTypeMarker for Nat64TrafficCounters {
11557        type Borrowed<'a> = &'a Self;
11558        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
11559            value
11560        }
11561    }
11562
11563    unsafe impl fidl::encoding::TypeMarker for Nat64TrafficCounters {
11564        type Owned = Self;
11565
11566        #[inline(always)]
11567        fn inline_align(_context: fidl::encoding::Context) -> usize {
11568            8
11569        }
11570
11571        #[inline(always)]
11572        fn inline_size(_context: fidl::encoding::Context) -> usize {
11573            16
11574        }
11575    }
11576
11577    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Nat64TrafficCounters, D>
11578        for &Nat64TrafficCounters
11579    {
11580        unsafe fn encode(
11581            self,
11582            encoder: &mut fidl::encoding::Encoder<'_, D>,
11583            offset: usize,
11584            mut depth: fidl::encoding::Depth,
11585        ) -> fidl::Result<()> {
11586            encoder.debug_check_bounds::<Nat64TrafficCounters>(offset);
11587            // Vector header
11588            let max_ordinal: u64 = self.max_ordinal_present();
11589            encoder.write_num(max_ordinal, offset);
11590            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
11591            // Calling encoder.out_of_line_offset(0) is not allowed.
11592            if max_ordinal == 0 {
11593                return Ok(());
11594            }
11595            depth.increment()?;
11596            let envelope_size = 8;
11597            let bytes_len = max_ordinal as usize * envelope_size;
11598            #[allow(unused_variables)]
11599            let offset = encoder.out_of_line_offset(bytes_len);
11600            let mut _prev_end_offset: usize = 0;
11601            if 1 > max_ordinal {
11602                return Ok(());
11603            }
11604
11605            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11606            // are envelope_size bytes.
11607            let cur_offset: usize = (1 - 1) * envelope_size;
11608
11609            // Zero reserved fields.
11610            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11611
11612            // Safety:
11613            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11614            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11615            //   envelope_size bytes, there is always sufficient room.
11616            fidl::encoding::encode_in_envelope_optional::<u64, D>(
11617                self.ipv4_to_ipv6_packets
11618                    .as_ref()
11619                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
11620                encoder,
11621                offset + cur_offset,
11622                depth,
11623            )?;
11624
11625            _prev_end_offset = cur_offset + envelope_size;
11626            if 2 > max_ordinal {
11627                return Ok(());
11628            }
11629
11630            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11631            // are envelope_size bytes.
11632            let cur_offset: usize = (2 - 1) * envelope_size;
11633
11634            // Zero reserved fields.
11635            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11636
11637            // Safety:
11638            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11639            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11640            //   envelope_size bytes, there is always sufficient room.
11641            fidl::encoding::encode_in_envelope_optional::<u64, D>(
11642                self.ipv4_to_ipv6_bytes
11643                    .as_ref()
11644                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
11645                encoder,
11646                offset + cur_offset,
11647                depth,
11648            )?;
11649
11650            _prev_end_offset = cur_offset + envelope_size;
11651            if 3 > max_ordinal {
11652                return Ok(());
11653            }
11654
11655            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11656            // are envelope_size bytes.
11657            let cur_offset: usize = (3 - 1) * envelope_size;
11658
11659            // Zero reserved fields.
11660            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11661
11662            // Safety:
11663            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11664            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11665            //   envelope_size bytes, there is always sufficient room.
11666            fidl::encoding::encode_in_envelope_optional::<u64, D>(
11667                self.ipv6_to_ipv4_packets
11668                    .as_ref()
11669                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
11670                encoder,
11671                offset + cur_offset,
11672                depth,
11673            )?;
11674
11675            _prev_end_offset = cur_offset + envelope_size;
11676            if 4 > max_ordinal {
11677                return Ok(());
11678            }
11679
11680            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11681            // are envelope_size bytes.
11682            let cur_offset: usize = (4 - 1) * envelope_size;
11683
11684            // Zero reserved fields.
11685            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11686
11687            // Safety:
11688            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11689            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11690            //   envelope_size bytes, there is always sufficient room.
11691            fidl::encoding::encode_in_envelope_optional::<u64, D>(
11692                self.ipv6_to_ipv4_bytes
11693                    .as_ref()
11694                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
11695                encoder,
11696                offset + cur_offset,
11697                depth,
11698            )?;
11699
11700            _prev_end_offset = cur_offset + envelope_size;
11701
11702            Ok(())
11703        }
11704    }
11705
11706    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Nat64TrafficCounters {
11707        #[inline(always)]
11708        fn new_empty() -> Self {
11709            Self::default()
11710        }
11711
11712        unsafe fn decode(
11713            &mut self,
11714            decoder: &mut fidl::encoding::Decoder<'_, D>,
11715            offset: usize,
11716            mut depth: fidl::encoding::Depth,
11717        ) -> fidl::Result<()> {
11718            decoder.debug_check_bounds::<Self>(offset);
11719            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
11720                None => return Err(fidl::Error::NotNullable),
11721                Some(len) => len,
11722            };
11723            // Calling decoder.out_of_line_offset(0) is not allowed.
11724            if len == 0 {
11725                return Ok(());
11726            };
11727            depth.increment()?;
11728            let envelope_size = 8;
11729            let bytes_len = len * envelope_size;
11730            let offset = decoder.out_of_line_offset(bytes_len)?;
11731            // Decode the envelope for each type.
11732            let mut _next_ordinal_to_read = 0;
11733            let mut next_offset = offset;
11734            let end_offset = offset + bytes_len;
11735            _next_ordinal_to_read += 1;
11736            if next_offset >= end_offset {
11737                return Ok(());
11738            }
11739
11740            // Decode unknown envelopes for gaps in ordinals.
11741            while _next_ordinal_to_read < 1 {
11742                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11743                _next_ordinal_to_read += 1;
11744                next_offset += envelope_size;
11745            }
11746
11747            let next_out_of_line = decoder.next_out_of_line();
11748            let handles_before = decoder.remaining_handles();
11749            if let Some((inlined, num_bytes, num_handles)) =
11750                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11751            {
11752                let member_inline_size =
11753                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
11754                if inlined != (member_inline_size <= 4) {
11755                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11756                }
11757                let inner_offset;
11758                let mut inner_depth = depth.clone();
11759                if inlined {
11760                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11761                    inner_offset = next_offset;
11762                } else {
11763                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11764                    inner_depth.increment()?;
11765                }
11766                let val_ref =
11767                    self.ipv4_to_ipv6_packets.get_or_insert_with(|| fidl::new_empty!(u64, D));
11768                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
11769                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11770                {
11771                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11772                }
11773                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11774                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11775                }
11776            }
11777
11778            next_offset += envelope_size;
11779            _next_ordinal_to_read += 1;
11780            if next_offset >= end_offset {
11781                return Ok(());
11782            }
11783
11784            // Decode unknown envelopes for gaps in ordinals.
11785            while _next_ordinal_to_read < 2 {
11786                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11787                _next_ordinal_to_read += 1;
11788                next_offset += envelope_size;
11789            }
11790
11791            let next_out_of_line = decoder.next_out_of_line();
11792            let handles_before = decoder.remaining_handles();
11793            if let Some((inlined, num_bytes, num_handles)) =
11794                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11795            {
11796                let member_inline_size =
11797                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
11798                if inlined != (member_inline_size <= 4) {
11799                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11800                }
11801                let inner_offset;
11802                let mut inner_depth = depth.clone();
11803                if inlined {
11804                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11805                    inner_offset = next_offset;
11806                } else {
11807                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11808                    inner_depth.increment()?;
11809                }
11810                let val_ref =
11811                    self.ipv4_to_ipv6_bytes.get_or_insert_with(|| fidl::new_empty!(u64, D));
11812                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
11813                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11814                {
11815                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11816                }
11817                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11818                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11819                }
11820            }
11821
11822            next_offset += envelope_size;
11823            _next_ordinal_to_read += 1;
11824            if next_offset >= end_offset {
11825                return Ok(());
11826            }
11827
11828            // Decode unknown envelopes for gaps in ordinals.
11829            while _next_ordinal_to_read < 3 {
11830                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11831                _next_ordinal_to_read += 1;
11832                next_offset += envelope_size;
11833            }
11834
11835            let next_out_of_line = decoder.next_out_of_line();
11836            let handles_before = decoder.remaining_handles();
11837            if let Some((inlined, num_bytes, num_handles)) =
11838                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11839            {
11840                let member_inline_size =
11841                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
11842                if inlined != (member_inline_size <= 4) {
11843                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11844                }
11845                let inner_offset;
11846                let mut inner_depth = depth.clone();
11847                if inlined {
11848                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11849                    inner_offset = next_offset;
11850                } else {
11851                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11852                    inner_depth.increment()?;
11853                }
11854                let val_ref =
11855                    self.ipv6_to_ipv4_packets.get_or_insert_with(|| fidl::new_empty!(u64, D));
11856                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
11857                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11858                {
11859                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11860                }
11861                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11862                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11863                }
11864            }
11865
11866            next_offset += envelope_size;
11867            _next_ordinal_to_read += 1;
11868            if next_offset >= end_offset {
11869                return Ok(());
11870            }
11871
11872            // Decode unknown envelopes for gaps in ordinals.
11873            while _next_ordinal_to_read < 4 {
11874                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11875                _next_ordinal_to_read += 1;
11876                next_offset += envelope_size;
11877            }
11878
11879            let next_out_of_line = decoder.next_out_of_line();
11880            let handles_before = decoder.remaining_handles();
11881            if let Some((inlined, num_bytes, num_handles)) =
11882                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11883            {
11884                let member_inline_size =
11885                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
11886                if inlined != (member_inline_size <= 4) {
11887                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11888                }
11889                let inner_offset;
11890                let mut inner_depth = depth.clone();
11891                if inlined {
11892                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11893                    inner_offset = next_offset;
11894                } else {
11895                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11896                    inner_depth.increment()?;
11897                }
11898                let val_ref =
11899                    self.ipv6_to_ipv4_bytes.get_or_insert_with(|| fidl::new_empty!(u64, D));
11900                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
11901                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11902                {
11903                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11904                }
11905                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11906                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11907                }
11908            }
11909
11910            next_offset += envelope_size;
11911
11912            // Decode the remaining unknown envelopes.
11913            while next_offset < end_offset {
11914                _next_ordinal_to_read += 1;
11915                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11916                next_offset += envelope_size;
11917            }
11918
11919            Ok(())
11920        }
11921    }
11922
11923    impl NetworkScanParameters {
11924        #[inline(always)]
11925        fn max_ordinal_present(&self) -> u64 {
11926            if let Some(_) = self.tx_power_dbm {
11927                return 2;
11928            }
11929            if let Some(_) = self.channels {
11930                return 1;
11931            }
11932            0
11933        }
11934    }
11935
11936    impl fidl::encoding::ValueTypeMarker for NetworkScanParameters {
11937        type Borrowed<'a> = &'a Self;
11938        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
11939            value
11940        }
11941    }
11942
11943    unsafe impl fidl::encoding::TypeMarker for NetworkScanParameters {
11944        type Owned = Self;
11945
11946        #[inline(always)]
11947        fn inline_align(_context: fidl::encoding::Context) -> usize {
11948            8
11949        }
11950
11951        #[inline(always)]
11952        fn inline_size(_context: fidl::encoding::Context) -> usize {
11953            16
11954        }
11955    }
11956
11957    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<NetworkScanParameters, D>
11958        for &NetworkScanParameters
11959    {
11960        unsafe fn encode(
11961            self,
11962            encoder: &mut fidl::encoding::Encoder<'_, D>,
11963            offset: usize,
11964            mut depth: fidl::encoding::Depth,
11965        ) -> fidl::Result<()> {
11966            encoder.debug_check_bounds::<NetworkScanParameters>(offset);
11967            // Vector header
11968            let max_ordinal: u64 = self.max_ordinal_present();
11969            encoder.write_num(max_ordinal, offset);
11970            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
11971            // Calling encoder.out_of_line_offset(0) is not allowed.
11972            if max_ordinal == 0 {
11973                return Ok(());
11974            }
11975            depth.increment()?;
11976            let envelope_size = 8;
11977            let bytes_len = max_ordinal as usize * envelope_size;
11978            #[allow(unused_variables)]
11979            let offset = encoder.out_of_line_offset(bytes_len);
11980            let mut _prev_end_offset: usize = 0;
11981            if 1 > max_ordinal {
11982                return Ok(());
11983            }
11984
11985            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11986            // are envelope_size bytes.
11987            let cur_offset: usize = (1 - 1) * envelope_size;
11988
11989            // Zero reserved fields.
11990            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11991
11992            // Safety:
11993            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11994            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11995            //   envelope_size bytes, there is always sufficient room.
11996            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u16, 200>, D>(
11997                self.channels.as_ref().map(
11998                    <fidl::encoding::Vector<u16, 200> as fidl::encoding::ValueTypeMarker>::borrow,
11999                ),
12000                encoder,
12001                offset + cur_offset,
12002                depth,
12003            )?;
12004
12005            _prev_end_offset = cur_offset + envelope_size;
12006            if 2 > max_ordinal {
12007                return Ok(());
12008            }
12009
12010            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
12011            // are envelope_size bytes.
12012            let cur_offset: usize = (2 - 1) * envelope_size;
12013
12014            // Zero reserved fields.
12015            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
12016
12017            // Safety:
12018            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
12019            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
12020            //   envelope_size bytes, there is always sufficient room.
12021            fidl::encoding::encode_in_envelope_optional::<i8, D>(
12022                self.tx_power_dbm.as_ref().map(<i8 as fidl::encoding::ValueTypeMarker>::borrow),
12023                encoder,
12024                offset + cur_offset,
12025                depth,
12026            )?;
12027
12028            _prev_end_offset = cur_offset + envelope_size;
12029
12030            Ok(())
12031        }
12032    }
12033
12034    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for NetworkScanParameters {
12035        #[inline(always)]
12036        fn new_empty() -> Self {
12037            Self::default()
12038        }
12039
12040        unsafe fn decode(
12041            &mut self,
12042            decoder: &mut fidl::encoding::Decoder<'_, D>,
12043            offset: usize,
12044            mut depth: fidl::encoding::Depth,
12045        ) -> fidl::Result<()> {
12046            decoder.debug_check_bounds::<Self>(offset);
12047            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
12048                None => return Err(fidl::Error::NotNullable),
12049                Some(len) => len,
12050            };
12051            // Calling decoder.out_of_line_offset(0) is not allowed.
12052            if len == 0 {
12053                return Ok(());
12054            };
12055            depth.increment()?;
12056            let envelope_size = 8;
12057            let bytes_len = len * envelope_size;
12058            let offset = decoder.out_of_line_offset(bytes_len)?;
12059            // Decode the envelope for each type.
12060            let mut _next_ordinal_to_read = 0;
12061            let mut next_offset = offset;
12062            let end_offset = offset + bytes_len;
12063            _next_ordinal_to_read += 1;
12064            if next_offset >= end_offset {
12065                return Ok(());
12066            }
12067
12068            // Decode unknown envelopes for gaps in ordinals.
12069            while _next_ordinal_to_read < 1 {
12070                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12071                _next_ordinal_to_read += 1;
12072                next_offset += envelope_size;
12073            }
12074
12075            let next_out_of_line = decoder.next_out_of_line();
12076            let handles_before = decoder.remaining_handles();
12077            if let Some((inlined, num_bytes, num_handles)) =
12078                fidl::encoding::decode_envelope_header(decoder, next_offset)?
12079            {
12080                let member_inline_size =
12081                    <fidl::encoding::Vector<u16, 200> as fidl::encoding::TypeMarker>::inline_size(
12082                        decoder.context,
12083                    );
12084                if inlined != (member_inline_size <= 4) {
12085                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
12086                }
12087                let inner_offset;
12088                let mut inner_depth = depth.clone();
12089                if inlined {
12090                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
12091                    inner_offset = next_offset;
12092                } else {
12093                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
12094                    inner_depth.increment()?;
12095                }
12096                let val_ref = self
12097                    .channels
12098                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u16, 200>, D));
12099                fidl::decode!(fidl::encoding::Vector<u16, 200>, D, val_ref, decoder, inner_offset, inner_depth)?;
12100                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
12101                {
12102                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
12103                }
12104                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
12105                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
12106                }
12107            }
12108
12109            next_offset += envelope_size;
12110            _next_ordinal_to_read += 1;
12111            if next_offset >= end_offset {
12112                return Ok(());
12113            }
12114
12115            // Decode unknown envelopes for gaps in ordinals.
12116            while _next_ordinal_to_read < 2 {
12117                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12118                _next_ordinal_to_read += 1;
12119                next_offset += envelope_size;
12120            }
12121
12122            let next_out_of_line = decoder.next_out_of_line();
12123            let handles_before = decoder.remaining_handles();
12124            if let Some((inlined, num_bytes, num_handles)) =
12125                fidl::encoding::decode_envelope_header(decoder, next_offset)?
12126            {
12127                let member_inline_size =
12128                    <i8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
12129                if inlined != (member_inline_size <= 4) {
12130                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
12131                }
12132                let inner_offset;
12133                let mut inner_depth = depth.clone();
12134                if inlined {
12135                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
12136                    inner_offset = next_offset;
12137                } else {
12138                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
12139                    inner_depth.increment()?;
12140                }
12141                let val_ref = self.tx_power_dbm.get_or_insert_with(|| fidl::new_empty!(i8, D));
12142                fidl::decode!(i8, D, val_ref, decoder, inner_offset, inner_depth)?;
12143                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
12144                {
12145                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
12146                }
12147                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
12148                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
12149                }
12150            }
12151
12152            next_offset += envelope_size;
12153
12154            // Decode the remaining unknown envelopes.
12155            while next_offset < end_offset {
12156                _next_ordinal_to_read += 1;
12157                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12158                next_offset += envelope_size;
12159            }
12160
12161            Ok(())
12162        }
12163    }
12164
12165    impl OnMeshPrefix {
12166        #[inline(always)]
12167        fn max_ordinal_present(&self) -> u64 {
12168            if let Some(_) = self.slaac_valid {
12169                return 5;
12170            }
12171            if let Some(_) = self.slaac_preferred {
12172                return 4;
12173            }
12174            if let Some(_) = self.stable {
12175                return 3;
12176            }
12177            if let Some(_) = self.default_route_preference {
12178                return 2;
12179            }
12180            if let Some(_) = self.subnet {
12181                return 1;
12182            }
12183            0
12184        }
12185    }
12186
12187    impl fidl::encoding::ValueTypeMarker for OnMeshPrefix {
12188        type Borrowed<'a> = &'a Self;
12189        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
12190            value
12191        }
12192    }
12193
12194    unsafe impl fidl::encoding::TypeMarker for OnMeshPrefix {
12195        type Owned = Self;
12196
12197        #[inline(always)]
12198        fn inline_align(_context: fidl::encoding::Context) -> usize {
12199            8
12200        }
12201
12202        #[inline(always)]
12203        fn inline_size(_context: fidl::encoding::Context) -> usize {
12204            16
12205        }
12206    }
12207
12208    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<OnMeshPrefix, D>
12209        for &OnMeshPrefix
12210    {
12211        unsafe fn encode(
12212            self,
12213            encoder: &mut fidl::encoding::Encoder<'_, D>,
12214            offset: usize,
12215            mut depth: fidl::encoding::Depth,
12216        ) -> fidl::Result<()> {
12217            encoder.debug_check_bounds::<OnMeshPrefix>(offset);
12218            // Vector header
12219            let max_ordinal: u64 = self.max_ordinal_present();
12220            encoder.write_num(max_ordinal, offset);
12221            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
12222            // Calling encoder.out_of_line_offset(0) is not allowed.
12223            if max_ordinal == 0 {
12224                return Ok(());
12225            }
12226            depth.increment()?;
12227            let envelope_size = 8;
12228            let bytes_len = max_ordinal as usize * envelope_size;
12229            #[allow(unused_variables)]
12230            let offset = encoder.out_of_line_offset(bytes_len);
12231            let mut _prev_end_offset: usize = 0;
12232            if 1 > max_ordinal {
12233                return Ok(());
12234            }
12235
12236            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
12237            // are envelope_size bytes.
12238            let cur_offset: usize = (1 - 1) * envelope_size;
12239
12240            // Zero reserved fields.
12241            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
12242
12243            // Safety:
12244            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
12245            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
12246            //   envelope_size bytes, there is always sufficient room.
12247            fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_net__common::Ipv6AddressWithPrefix, D>(
12248            self.subnet.as_ref().map(<fidl_fuchsia_net__common::Ipv6AddressWithPrefix as fidl::encoding::ValueTypeMarker>::borrow),
12249            encoder, offset + cur_offset, depth
12250        )?;
12251
12252            _prev_end_offset = cur_offset + envelope_size;
12253            if 2 > max_ordinal {
12254                return Ok(());
12255            }
12256
12257            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
12258            // are envelope_size bytes.
12259            let cur_offset: usize = (2 - 1) * envelope_size;
12260
12261            // Zero reserved fields.
12262            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
12263
12264            // Safety:
12265            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
12266            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
12267            //   envelope_size bytes, there is always sufficient room.
12268            fidl::encoding::encode_in_envelope_optional::<RoutePreference, D>(
12269                self.default_route_preference
12270                    .as_ref()
12271                    .map(<RoutePreference as fidl::encoding::ValueTypeMarker>::borrow),
12272                encoder,
12273                offset + cur_offset,
12274                depth,
12275            )?;
12276
12277            _prev_end_offset = cur_offset + envelope_size;
12278            if 3 > max_ordinal {
12279                return Ok(());
12280            }
12281
12282            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
12283            // are envelope_size bytes.
12284            let cur_offset: usize = (3 - 1) * envelope_size;
12285
12286            // Zero reserved fields.
12287            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
12288
12289            // Safety:
12290            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
12291            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
12292            //   envelope_size bytes, there is always sufficient room.
12293            fidl::encoding::encode_in_envelope_optional::<bool, D>(
12294                self.stable.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
12295                encoder,
12296                offset + cur_offset,
12297                depth,
12298            )?;
12299
12300            _prev_end_offset = cur_offset + envelope_size;
12301            if 4 > max_ordinal {
12302                return Ok(());
12303            }
12304
12305            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
12306            // are envelope_size bytes.
12307            let cur_offset: usize = (4 - 1) * envelope_size;
12308
12309            // Zero reserved fields.
12310            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
12311
12312            // Safety:
12313            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
12314            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
12315            //   envelope_size bytes, there is always sufficient room.
12316            fidl::encoding::encode_in_envelope_optional::<bool, D>(
12317                self.slaac_preferred
12318                    .as_ref()
12319                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
12320                encoder,
12321                offset + cur_offset,
12322                depth,
12323            )?;
12324
12325            _prev_end_offset = cur_offset + envelope_size;
12326            if 5 > max_ordinal {
12327                return Ok(());
12328            }
12329
12330            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
12331            // are envelope_size bytes.
12332            let cur_offset: usize = (5 - 1) * envelope_size;
12333
12334            // Zero reserved fields.
12335            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
12336
12337            // Safety:
12338            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
12339            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
12340            //   envelope_size bytes, there is always sufficient room.
12341            fidl::encoding::encode_in_envelope_optional::<bool, D>(
12342                self.slaac_valid.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
12343                encoder,
12344                offset + cur_offset,
12345                depth,
12346            )?;
12347
12348            _prev_end_offset = cur_offset + envelope_size;
12349
12350            Ok(())
12351        }
12352    }
12353
12354    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for OnMeshPrefix {
12355        #[inline(always)]
12356        fn new_empty() -> Self {
12357            Self::default()
12358        }
12359
12360        unsafe fn decode(
12361            &mut self,
12362            decoder: &mut fidl::encoding::Decoder<'_, D>,
12363            offset: usize,
12364            mut depth: fidl::encoding::Depth,
12365        ) -> fidl::Result<()> {
12366            decoder.debug_check_bounds::<Self>(offset);
12367            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
12368                None => return Err(fidl::Error::NotNullable),
12369                Some(len) => len,
12370            };
12371            // Calling decoder.out_of_line_offset(0) is not allowed.
12372            if len == 0 {
12373                return Ok(());
12374            };
12375            depth.increment()?;
12376            let envelope_size = 8;
12377            let bytes_len = len * envelope_size;
12378            let offset = decoder.out_of_line_offset(bytes_len)?;
12379            // Decode the envelope for each type.
12380            let mut _next_ordinal_to_read = 0;
12381            let mut next_offset = offset;
12382            let end_offset = offset + bytes_len;
12383            _next_ordinal_to_read += 1;
12384            if next_offset >= end_offset {
12385                return Ok(());
12386            }
12387
12388            // Decode unknown envelopes for gaps in ordinals.
12389            while _next_ordinal_to_read < 1 {
12390                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12391                _next_ordinal_to_read += 1;
12392                next_offset += envelope_size;
12393            }
12394
12395            let next_out_of_line = decoder.next_out_of_line();
12396            let handles_before = decoder.remaining_handles();
12397            if let Some((inlined, num_bytes, num_handles)) =
12398                fidl::encoding::decode_envelope_header(decoder, next_offset)?
12399            {
12400                let member_inline_size = <fidl_fuchsia_net__common::Ipv6AddressWithPrefix as fidl::encoding::TypeMarker>::inline_size(decoder.context);
12401                if inlined != (member_inline_size <= 4) {
12402                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
12403                }
12404                let inner_offset;
12405                let mut inner_depth = depth.clone();
12406                if inlined {
12407                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
12408                    inner_offset = next_offset;
12409                } else {
12410                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
12411                    inner_depth.increment()?;
12412                }
12413                let val_ref = self.subnet.get_or_insert_with(|| {
12414                    fidl::new_empty!(fidl_fuchsia_net__common::Ipv6AddressWithPrefix, D)
12415                });
12416                fidl::decode!(
12417                    fidl_fuchsia_net__common::Ipv6AddressWithPrefix,
12418                    D,
12419                    val_ref,
12420                    decoder,
12421                    inner_offset,
12422                    inner_depth
12423                )?;
12424                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
12425                {
12426                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
12427                }
12428                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
12429                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
12430                }
12431            }
12432
12433            next_offset += envelope_size;
12434            _next_ordinal_to_read += 1;
12435            if next_offset >= end_offset {
12436                return Ok(());
12437            }
12438
12439            // Decode unknown envelopes for gaps in ordinals.
12440            while _next_ordinal_to_read < 2 {
12441                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12442                _next_ordinal_to_read += 1;
12443                next_offset += envelope_size;
12444            }
12445
12446            let next_out_of_line = decoder.next_out_of_line();
12447            let handles_before = decoder.remaining_handles();
12448            if let Some((inlined, num_bytes, num_handles)) =
12449                fidl::encoding::decode_envelope_header(decoder, next_offset)?
12450            {
12451                let member_inline_size =
12452                    <RoutePreference as fidl::encoding::TypeMarker>::inline_size(decoder.context);
12453                if inlined != (member_inline_size <= 4) {
12454                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
12455                }
12456                let inner_offset;
12457                let mut inner_depth = depth.clone();
12458                if inlined {
12459                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
12460                    inner_offset = next_offset;
12461                } else {
12462                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
12463                    inner_depth.increment()?;
12464                }
12465                let val_ref = self
12466                    .default_route_preference
12467                    .get_or_insert_with(|| fidl::new_empty!(RoutePreference, D));
12468                fidl::decode!(RoutePreference, D, val_ref, decoder, inner_offset, inner_depth)?;
12469                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
12470                {
12471                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
12472                }
12473                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
12474                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
12475                }
12476            }
12477
12478            next_offset += envelope_size;
12479            _next_ordinal_to_read += 1;
12480            if next_offset >= end_offset {
12481                return Ok(());
12482            }
12483
12484            // Decode unknown envelopes for gaps in ordinals.
12485            while _next_ordinal_to_read < 3 {
12486                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12487                _next_ordinal_to_read += 1;
12488                next_offset += envelope_size;
12489            }
12490
12491            let next_out_of_line = decoder.next_out_of_line();
12492            let handles_before = decoder.remaining_handles();
12493            if let Some((inlined, num_bytes, num_handles)) =
12494                fidl::encoding::decode_envelope_header(decoder, next_offset)?
12495            {
12496                let member_inline_size =
12497                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
12498                if inlined != (member_inline_size <= 4) {
12499                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
12500                }
12501                let inner_offset;
12502                let mut inner_depth = depth.clone();
12503                if inlined {
12504                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
12505                    inner_offset = next_offset;
12506                } else {
12507                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
12508                    inner_depth.increment()?;
12509                }
12510                let val_ref = self.stable.get_or_insert_with(|| fidl::new_empty!(bool, D));
12511                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
12512                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
12513                {
12514                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
12515                }
12516                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
12517                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
12518                }
12519            }
12520
12521            next_offset += envelope_size;
12522            _next_ordinal_to_read += 1;
12523            if next_offset >= end_offset {
12524                return Ok(());
12525            }
12526
12527            // Decode unknown envelopes for gaps in ordinals.
12528            while _next_ordinal_to_read < 4 {
12529                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12530                _next_ordinal_to_read += 1;
12531                next_offset += envelope_size;
12532            }
12533
12534            let next_out_of_line = decoder.next_out_of_line();
12535            let handles_before = decoder.remaining_handles();
12536            if let Some((inlined, num_bytes, num_handles)) =
12537                fidl::encoding::decode_envelope_header(decoder, next_offset)?
12538            {
12539                let member_inline_size =
12540                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
12541                if inlined != (member_inline_size <= 4) {
12542                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
12543                }
12544                let inner_offset;
12545                let mut inner_depth = depth.clone();
12546                if inlined {
12547                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
12548                    inner_offset = next_offset;
12549                } else {
12550                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
12551                    inner_depth.increment()?;
12552                }
12553                let val_ref = self.slaac_preferred.get_or_insert_with(|| fidl::new_empty!(bool, D));
12554                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
12555                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
12556                {
12557                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
12558                }
12559                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
12560                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
12561                }
12562            }
12563
12564            next_offset += envelope_size;
12565            _next_ordinal_to_read += 1;
12566            if next_offset >= end_offset {
12567                return Ok(());
12568            }
12569
12570            // Decode unknown envelopes for gaps in ordinals.
12571            while _next_ordinal_to_read < 5 {
12572                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12573                _next_ordinal_to_read += 1;
12574                next_offset += envelope_size;
12575            }
12576
12577            let next_out_of_line = decoder.next_out_of_line();
12578            let handles_before = decoder.remaining_handles();
12579            if let Some((inlined, num_bytes, num_handles)) =
12580                fidl::encoding::decode_envelope_header(decoder, next_offset)?
12581            {
12582                let member_inline_size =
12583                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
12584                if inlined != (member_inline_size <= 4) {
12585                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
12586                }
12587                let inner_offset;
12588                let mut inner_depth = depth.clone();
12589                if inlined {
12590                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
12591                    inner_offset = next_offset;
12592                } else {
12593                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
12594                    inner_depth.increment()?;
12595                }
12596                let val_ref = self.slaac_valid.get_or_insert_with(|| fidl::new_empty!(bool, D));
12597                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
12598                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
12599                {
12600                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
12601                }
12602                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
12603                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
12604                }
12605            }
12606
12607            next_offset += envelope_size;
12608
12609            // Decode the remaining unknown envelopes.
12610            while next_offset < end_offset {
12611                _next_ordinal_to_read += 1;
12612                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12613                next_offset += envelope_size;
12614            }
12615
12616            Ok(())
12617        }
12618    }
12619
12620    impl OperationalDataset {
12621        #[inline(always)]
12622        fn max_ordinal_present(&self) -> u64 {
12623            if let Some(_) = self.channel_mask {
12624                return 13;
12625            }
12626            if let Some(_) = self.security_policy {
12627                return 12;
12628            }
12629            if let Some(_) = self.pskc {
12630                return 11;
12631            }
12632            if let Some(_) = self.wakeup_channel {
12633                return 10;
12634            }
12635            if let Some(_) = self.channel {
12636                return 9;
12637            }
12638            if let Some(_) = self.pan_id {
12639                return 8;
12640            }
12641            if let Some(_) = self.delay {
12642                return 7;
12643            }
12644            if let Some(_) = self.mesh_local_prefix {
12645                return 6;
12646            }
12647            if let Some(_) = self.extended_pan_id {
12648                return 5;
12649            }
12650            if let Some(_) = self.network_name {
12651                return 4;
12652            }
12653            if let Some(_) = self.network_key {
12654                return 3;
12655            }
12656            if let Some(_) = self.pending_timestamp {
12657                return 2;
12658            }
12659            if let Some(_) = self.active_timestamp {
12660                return 1;
12661            }
12662            0
12663        }
12664    }
12665
12666    impl fidl::encoding::ValueTypeMarker for OperationalDataset {
12667        type Borrowed<'a> = &'a Self;
12668        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
12669            value
12670        }
12671    }
12672
12673    unsafe impl fidl::encoding::TypeMarker for OperationalDataset {
12674        type Owned = Self;
12675
12676        #[inline(always)]
12677        fn inline_align(_context: fidl::encoding::Context) -> usize {
12678            8
12679        }
12680
12681        #[inline(always)]
12682        fn inline_size(_context: fidl::encoding::Context) -> usize {
12683            16
12684        }
12685    }
12686
12687    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<OperationalDataset, D>
12688        for &OperationalDataset
12689    {
12690        unsafe fn encode(
12691            self,
12692            encoder: &mut fidl::encoding::Encoder<'_, D>,
12693            offset: usize,
12694            mut depth: fidl::encoding::Depth,
12695        ) -> fidl::Result<()> {
12696            encoder.debug_check_bounds::<OperationalDataset>(offset);
12697            // Vector header
12698            let max_ordinal: u64 = self.max_ordinal_present();
12699            encoder.write_num(max_ordinal, offset);
12700            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
12701            // Calling encoder.out_of_line_offset(0) is not allowed.
12702            if max_ordinal == 0 {
12703                return Ok(());
12704            }
12705            depth.increment()?;
12706            let envelope_size = 8;
12707            let bytes_len = max_ordinal as usize * envelope_size;
12708            #[allow(unused_variables)]
12709            let offset = encoder.out_of_line_offset(bytes_len);
12710            let mut _prev_end_offset: usize = 0;
12711            if 1 > max_ordinal {
12712                return Ok(());
12713            }
12714
12715            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
12716            // are envelope_size bytes.
12717            let cur_offset: usize = (1 - 1) * envelope_size;
12718
12719            // Zero reserved fields.
12720            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
12721
12722            // Safety:
12723            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
12724            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
12725            //   envelope_size bytes, there is always sufficient room.
12726            fidl::encoding::encode_in_envelope_optional::<i64, D>(
12727                self.active_timestamp
12728                    .as_ref()
12729                    .map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
12730                encoder,
12731                offset + cur_offset,
12732                depth,
12733            )?;
12734
12735            _prev_end_offset = cur_offset + envelope_size;
12736            if 2 > max_ordinal {
12737                return Ok(());
12738            }
12739
12740            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
12741            // are envelope_size bytes.
12742            let cur_offset: usize = (2 - 1) * envelope_size;
12743
12744            // Zero reserved fields.
12745            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
12746
12747            // Safety:
12748            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
12749            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
12750            //   envelope_size bytes, there is always sufficient room.
12751            fidl::encoding::encode_in_envelope_optional::<i64, D>(
12752                self.pending_timestamp
12753                    .as_ref()
12754                    .map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
12755                encoder,
12756                offset + cur_offset,
12757                depth,
12758            )?;
12759
12760            _prev_end_offset = cur_offset + envelope_size;
12761            if 3 > max_ordinal {
12762                return Ok(());
12763            }
12764
12765            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
12766            // are envelope_size bytes.
12767            let cur_offset: usize = (3 - 1) * envelope_size;
12768
12769            // Zero reserved fields.
12770            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
12771
12772            // Safety:
12773            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
12774            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
12775            //   envelope_size bytes, there is always sufficient room.
12776            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u8, 16>, D>(
12777                self.network_key.as_ref().map(
12778                    <fidl::encoding::Vector<u8, 16> as fidl::encoding::ValueTypeMarker>::borrow,
12779                ),
12780                encoder,
12781                offset + cur_offset,
12782                depth,
12783            )?;
12784
12785            _prev_end_offset = cur_offset + envelope_size;
12786            if 4 > max_ordinal {
12787                return Ok(());
12788            }
12789
12790            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
12791            // are envelope_size bytes.
12792            let cur_offset: usize = (4 - 1) * envelope_size;
12793
12794            // Zero reserved fields.
12795            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
12796
12797            // Safety:
12798            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
12799            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
12800            //   envelope_size bytes, there is always sufficient room.
12801            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u8, 17>, D>(
12802                self.network_name.as_ref().map(
12803                    <fidl::encoding::Vector<u8, 17> as fidl::encoding::ValueTypeMarker>::borrow,
12804                ),
12805                encoder,
12806                offset + cur_offset,
12807                depth,
12808            )?;
12809
12810            _prev_end_offset = cur_offset + envelope_size;
12811            if 5 > max_ordinal {
12812                return Ok(());
12813            }
12814
12815            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
12816            // are envelope_size bytes.
12817            let cur_offset: usize = (5 - 1) * envelope_size;
12818
12819            // Zero reserved fields.
12820            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
12821
12822            // Safety:
12823            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
12824            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
12825            //   envelope_size bytes, there is always sufficient room.
12826            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u8, 8>, D>(
12827                self.extended_pan_id.as_ref().map(
12828                    <fidl::encoding::Vector<u8, 8> as fidl::encoding::ValueTypeMarker>::borrow,
12829                ),
12830                encoder,
12831                offset + cur_offset,
12832                depth,
12833            )?;
12834
12835            _prev_end_offset = cur_offset + envelope_size;
12836            if 6 > max_ordinal {
12837                return Ok(());
12838            }
12839
12840            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
12841            // are envelope_size bytes.
12842            let cur_offset: usize = (6 - 1) * envelope_size;
12843
12844            // Zero reserved fields.
12845            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
12846
12847            // Safety:
12848            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
12849            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
12850            //   envelope_size bytes, there is always sufficient room.
12851            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u8, 8>, D>(
12852                self.mesh_local_prefix.as_ref().map(
12853                    <fidl::encoding::Vector<u8, 8> as fidl::encoding::ValueTypeMarker>::borrow,
12854                ),
12855                encoder,
12856                offset + cur_offset,
12857                depth,
12858            )?;
12859
12860            _prev_end_offset = cur_offset + envelope_size;
12861            if 7 > max_ordinal {
12862                return Ok(());
12863            }
12864
12865            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
12866            // are envelope_size bytes.
12867            let cur_offset: usize = (7 - 1) * envelope_size;
12868
12869            // Zero reserved fields.
12870            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
12871
12872            // Safety:
12873            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
12874            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
12875            //   envelope_size bytes, there is always sufficient room.
12876            fidl::encoding::encode_in_envelope_optional::<u32, D>(
12877                self.delay.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
12878                encoder,
12879                offset + cur_offset,
12880                depth,
12881            )?;
12882
12883            _prev_end_offset = cur_offset + envelope_size;
12884            if 8 > max_ordinal {
12885                return Ok(());
12886            }
12887
12888            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
12889            // are envelope_size bytes.
12890            let cur_offset: usize = (8 - 1) * envelope_size;
12891
12892            // Zero reserved fields.
12893            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
12894
12895            // Safety:
12896            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
12897            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
12898            //   envelope_size bytes, there is always sufficient room.
12899            fidl::encoding::encode_in_envelope_optional::<u16, D>(
12900                self.pan_id.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
12901                encoder,
12902                offset + cur_offset,
12903                depth,
12904            )?;
12905
12906            _prev_end_offset = cur_offset + envelope_size;
12907            if 9 > max_ordinal {
12908                return Ok(());
12909            }
12910
12911            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
12912            // are envelope_size bytes.
12913            let cur_offset: usize = (9 - 1) * envelope_size;
12914
12915            // Zero reserved fields.
12916            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
12917
12918            // Safety:
12919            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
12920            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
12921            //   envelope_size bytes, there is always sufficient room.
12922            fidl::encoding::encode_in_envelope_optional::<u16, D>(
12923                self.channel.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
12924                encoder,
12925                offset + cur_offset,
12926                depth,
12927            )?;
12928
12929            _prev_end_offset = cur_offset + envelope_size;
12930            if 10 > max_ordinal {
12931                return Ok(());
12932            }
12933
12934            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
12935            // are envelope_size bytes.
12936            let cur_offset: usize = (10 - 1) * envelope_size;
12937
12938            // Zero reserved fields.
12939            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
12940
12941            // Safety:
12942            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
12943            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
12944            //   envelope_size bytes, there is always sufficient room.
12945            fidl::encoding::encode_in_envelope_optional::<u16, D>(
12946                self.wakeup_channel.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
12947                encoder,
12948                offset + cur_offset,
12949                depth,
12950            )?;
12951
12952            _prev_end_offset = cur_offset + envelope_size;
12953            if 11 > max_ordinal {
12954                return Ok(());
12955            }
12956
12957            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
12958            // are envelope_size bytes.
12959            let cur_offset: usize = (11 - 1) * envelope_size;
12960
12961            // Zero reserved fields.
12962            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
12963
12964            // Safety:
12965            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
12966            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
12967            //   envelope_size bytes, there is always sufficient room.
12968            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u8, 16>, D>(
12969                self.pskc.as_ref().map(
12970                    <fidl::encoding::Vector<u8, 16> as fidl::encoding::ValueTypeMarker>::borrow,
12971                ),
12972                encoder,
12973                offset + cur_offset,
12974                depth,
12975            )?;
12976
12977            _prev_end_offset = cur_offset + envelope_size;
12978            if 12 > max_ordinal {
12979                return Ok(());
12980            }
12981
12982            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
12983            // are envelope_size bytes.
12984            let cur_offset: usize = (12 - 1) * envelope_size;
12985
12986            // Zero reserved fields.
12987            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
12988
12989            // Safety:
12990            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
12991            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
12992            //   envelope_size bytes, there is always sufficient room.
12993            fidl::encoding::encode_in_envelope_optional::<SecurityPolicy, D>(
12994                self.security_policy
12995                    .as_ref()
12996                    .map(<SecurityPolicy as fidl::encoding::ValueTypeMarker>::borrow),
12997                encoder,
12998                offset + cur_offset,
12999                depth,
13000            )?;
13001
13002            _prev_end_offset = cur_offset + envelope_size;
13003            if 13 > max_ordinal {
13004                return Ok(());
13005            }
13006
13007            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13008            // are envelope_size bytes.
13009            let cur_offset: usize = (13 - 1) * envelope_size;
13010
13011            // Zero reserved fields.
13012            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13013
13014            // Safety:
13015            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13016            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13017            //   envelope_size bytes, there is always sufficient room.
13018            fidl::encoding::encode_in_envelope_optional::<u32, D>(
13019                self.channel_mask.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
13020                encoder,
13021                offset + cur_offset,
13022                depth,
13023            )?;
13024
13025            _prev_end_offset = cur_offset + envelope_size;
13026
13027            Ok(())
13028        }
13029    }
13030
13031    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for OperationalDataset {
13032        #[inline(always)]
13033        fn new_empty() -> Self {
13034            Self::default()
13035        }
13036
13037        unsafe fn decode(
13038            &mut self,
13039            decoder: &mut fidl::encoding::Decoder<'_, D>,
13040            offset: usize,
13041            mut depth: fidl::encoding::Depth,
13042        ) -> fidl::Result<()> {
13043            decoder.debug_check_bounds::<Self>(offset);
13044            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
13045                None => return Err(fidl::Error::NotNullable),
13046                Some(len) => len,
13047            };
13048            // Calling decoder.out_of_line_offset(0) is not allowed.
13049            if len == 0 {
13050                return Ok(());
13051            };
13052            depth.increment()?;
13053            let envelope_size = 8;
13054            let bytes_len = len * envelope_size;
13055            let offset = decoder.out_of_line_offset(bytes_len)?;
13056            // Decode the envelope for each type.
13057            let mut _next_ordinal_to_read = 0;
13058            let mut next_offset = offset;
13059            let end_offset = offset + bytes_len;
13060            _next_ordinal_to_read += 1;
13061            if next_offset >= end_offset {
13062                return Ok(());
13063            }
13064
13065            // Decode unknown envelopes for gaps in ordinals.
13066            while _next_ordinal_to_read < 1 {
13067                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
13068                _next_ordinal_to_read += 1;
13069                next_offset += envelope_size;
13070            }
13071
13072            let next_out_of_line = decoder.next_out_of_line();
13073            let handles_before = decoder.remaining_handles();
13074            if let Some((inlined, num_bytes, num_handles)) =
13075                fidl::encoding::decode_envelope_header(decoder, next_offset)?
13076            {
13077                let member_inline_size =
13078                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
13079                if inlined != (member_inline_size <= 4) {
13080                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
13081                }
13082                let inner_offset;
13083                let mut inner_depth = depth.clone();
13084                if inlined {
13085                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
13086                    inner_offset = next_offset;
13087                } else {
13088                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
13089                    inner_depth.increment()?;
13090                }
13091                let val_ref = self.active_timestamp.get_or_insert_with(|| fidl::new_empty!(i64, D));
13092                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
13093                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
13094                {
13095                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
13096                }
13097                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
13098                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
13099                }
13100            }
13101
13102            next_offset += envelope_size;
13103            _next_ordinal_to_read += 1;
13104            if next_offset >= end_offset {
13105                return Ok(());
13106            }
13107
13108            // Decode unknown envelopes for gaps in ordinals.
13109            while _next_ordinal_to_read < 2 {
13110                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
13111                _next_ordinal_to_read += 1;
13112                next_offset += envelope_size;
13113            }
13114
13115            let next_out_of_line = decoder.next_out_of_line();
13116            let handles_before = decoder.remaining_handles();
13117            if let Some((inlined, num_bytes, num_handles)) =
13118                fidl::encoding::decode_envelope_header(decoder, next_offset)?
13119            {
13120                let member_inline_size =
13121                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
13122                if inlined != (member_inline_size <= 4) {
13123                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
13124                }
13125                let inner_offset;
13126                let mut inner_depth = depth.clone();
13127                if inlined {
13128                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
13129                    inner_offset = next_offset;
13130                } else {
13131                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
13132                    inner_depth.increment()?;
13133                }
13134                let val_ref =
13135                    self.pending_timestamp.get_or_insert_with(|| fidl::new_empty!(i64, D));
13136                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
13137                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
13138                {
13139                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
13140                }
13141                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
13142                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
13143                }
13144            }
13145
13146            next_offset += envelope_size;
13147            _next_ordinal_to_read += 1;
13148            if next_offset >= end_offset {
13149                return Ok(());
13150            }
13151
13152            // Decode unknown envelopes for gaps in ordinals.
13153            while _next_ordinal_to_read < 3 {
13154                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
13155                _next_ordinal_to_read += 1;
13156                next_offset += envelope_size;
13157            }
13158
13159            let next_out_of_line = decoder.next_out_of_line();
13160            let handles_before = decoder.remaining_handles();
13161            if let Some((inlined, num_bytes, num_handles)) =
13162                fidl::encoding::decode_envelope_header(decoder, next_offset)?
13163            {
13164                let member_inline_size =
13165                    <fidl::encoding::Vector<u8, 16> as fidl::encoding::TypeMarker>::inline_size(
13166                        decoder.context,
13167                    );
13168                if inlined != (member_inline_size <= 4) {
13169                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
13170                }
13171                let inner_offset;
13172                let mut inner_depth = depth.clone();
13173                if inlined {
13174                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
13175                    inner_offset = next_offset;
13176                } else {
13177                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
13178                    inner_depth.increment()?;
13179                }
13180                let val_ref = self
13181                    .network_key
13182                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u8, 16>, D));
13183                fidl::decode!(fidl::encoding::Vector<u8, 16>, D, val_ref, decoder, inner_offset, inner_depth)?;
13184                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
13185                {
13186                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
13187                }
13188                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
13189                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
13190                }
13191            }
13192
13193            next_offset += envelope_size;
13194            _next_ordinal_to_read += 1;
13195            if next_offset >= end_offset {
13196                return Ok(());
13197            }
13198
13199            // Decode unknown envelopes for gaps in ordinals.
13200            while _next_ordinal_to_read < 4 {
13201                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
13202                _next_ordinal_to_read += 1;
13203                next_offset += envelope_size;
13204            }
13205
13206            let next_out_of_line = decoder.next_out_of_line();
13207            let handles_before = decoder.remaining_handles();
13208            if let Some((inlined, num_bytes, num_handles)) =
13209                fidl::encoding::decode_envelope_header(decoder, next_offset)?
13210            {
13211                let member_inline_size =
13212                    <fidl::encoding::Vector<u8, 17> as fidl::encoding::TypeMarker>::inline_size(
13213                        decoder.context,
13214                    );
13215                if inlined != (member_inline_size <= 4) {
13216                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
13217                }
13218                let inner_offset;
13219                let mut inner_depth = depth.clone();
13220                if inlined {
13221                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
13222                    inner_offset = next_offset;
13223                } else {
13224                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
13225                    inner_depth.increment()?;
13226                }
13227                let val_ref = self
13228                    .network_name
13229                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u8, 17>, D));
13230                fidl::decode!(fidl::encoding::Vector<u8, 17>, D, val_ref, decoder, inner_offset, inner_depth)?;
13231                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
13232                {
13233                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
13234                }
13235                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
13236                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
13237                }
13238            }
13239
13240            next_offset += envelope_size;
13241            _next_ordinal_to_read += 1;
13242            if next_offset >= end_offset {
13243                return Ok(());
13244            }
13245
13246            // Decode unknown envelopes for gaps in ordinals.
13247            while _next_ordinal_to_read < 5 {
13248                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
13249                _next_ordinal_to_read += 1;
13250                next_offset += envelope_size;
13251            }
13252
13253            let next_out_of_line = decoder.next_out_of_line();
13254            let handles_before = decoder.remaining_handles();
13255            if let Some((inlined, num_bytes, num_handles)) =
13256                fidl::encoding::decode_envelope_header(decoder, next_offset)?
13257            {
13258                let member_inline_size =
13259                    <fidl::encoding::Vector<u8, 8> as fidl::encoding::TypeMarker>::inline_size(
13260                        decoder.context,
13261                    );
13262                if inlined != (member_inline_size <= 4) {
13263                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
13264                }
13265                let inner_offset;
13266                let mut inner_depth = depth.clone();
13267                if inlined {
13268                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
13269                    inner_offset = next_offset;
13270                } else {
13271                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
13272                    inner_depth.increment()?;
13273                }
13274                let val_ref = self
13275                    .extended_pan_id
13276                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u8, 8>, D));
13277                fidl::decode!(fidl::encoding::Vector<u8, 8>, D, val_ref, decoder, inner_offset, inner_depth)?;
13278                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
13279                {
13280                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
13281                }
13282                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
13283                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
13284                }
13285            }
13286
13287            next_offset += envelope_size;
13288            _next_ordinal_to_read += 1;
13289            if next_offset >= end_offset {
13290                return Ok(());
13291            }
13292
13293            // Decode unknown envelopes for gaps in ordinals.
13294            while _next_ordinal_to_read < 6 {
13295                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
13296                _next_ordinal_to_read += 1;
13297                next_offset += envelope_size;
13298            }
13299
13300            let next_out_of_line = decoder.next_out_of_line();
13301            let handles_before = decoder.remaining_handles();
13302            if let Some((inlined, num_bytes, num_handles)) =
13303                fidl::encoding::decode_envelope_header(decoder, next_offset)?
13304            {
13305                let member_inline_size =
13306                    <fidl::encoding::Vector<u8, 8> as fidl::encoding::TypeMarker>::inline_size(
13307                        decoder.context,
13308                    );
13309                if inlined != (member_inline_size <= 4) {
13310                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
13311                }
13312                let inner_offset;
13313                let mut inner_depth = depth.clone();
13314                if inlined {
13315                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
13316                    inner_offset = next_offset;
13317                } else {
13318                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
13319                    inner_depth.increment()?;
13320                }
13321                let val_ref = self
13322                    .mesh_local_prefix
13323                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u8, 8>, D));
13324                fidl::decode!(fidl::encoding::Vector<u8, 8>, D, val_ref, decoder, inner_offset, inner_depth)?;
13325                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
13326                {
13327                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
13328                }
13329                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
13330                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
13331                }
13332            }
13333
13334            next_offset += envelope_size;
13335            _next_ordinal_to_read += 1;
13336            if next_offset >= end_offset {
13337                return Ok(());
13338            }
13339
13340            // Decode unknown envelopes for gaps in ordinals.
13341            while _next_ordinal_to_read < 7 {
13342                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
13343                _next_ordinal_to_read += 1;
13344                next_offset += envelope_size;
13345            }
13346
13347            let next_out_of_line = decoder.next_out_of_line();
13348            let handles_before = decoder.remaining_handles();
13349            if let Some((inlined, num_bytes, num_handles)) =
13350                fidl::encoding::decode_envelope_header(decoder, next_offset)?
13351            {
13352                let member_inline_size =
13353                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
13354                if inlined != (member_inline_size <= 4) {
13355                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
13356                }
13357                let inner_offset;
13358                let mut inner_depth = depth.clone();
13359                if inlined {
13360                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
13361                    inner_offset = next_offset;
13362                } else {
13363                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
13364                    inner_depth.increment()?;
13365                }
13366                let val_ref = self.delay.get_or_insert_with(|| fidl::new_empty!(u32, D));
13367                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
13368                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
13369                {
13370                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
13371                }
13372                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
13373                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
13374                }
13375            }
13376
13377            next_offset += envelope_size;
13378            _next_ordinal_to_read += 1;
13379            if next_offset >= end_offset {
13380                return Ok(());
13381            }
13382
13383            // Decode unknown envelopes for gaps in ordinals.
13384            while _next_ordinal_to_read < 8 {
13385                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
13386                _next_ordinal_to_read += 1;
13387                next_offset += envelope_size;
13388            }
13389
13390            let next_out_of_line = decoder.next_out_of_line();
13391            let handles_before = decoder.remaining_handles();
13392            if let Some((inlined, num_bytes, num_handles)) =
13393                fidl::encoding::decode_envelope_header(decoder, next_offset)?
13394            {
13395                let member_inline_size =
13396                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
13397                if inlined != (member_inline_size <= 4) {
13398                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
13399                }
13400                let inner_offset;
13401                let mut inner_depth = depth.clone();
13402                if inlined {
13403                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
13404                    inner_offset = next_offset;
13405                } else {
13406                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
13407                    inner_depth.increment()?;
13408                }
13409                let val_ref = self.pan_id.get_or_insert_with(|| fidl::new_empty!(u16, D));
13410                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
13411                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
13412                {
13413                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
13414                }
13415                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
13416                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
13417                }
13418            }
13419
13420            next_offset += envelope_size;
13421            _next_ordinal_to_read += 1;
13422            if next_offset >= end_offset {
13423                return Ok(());
13424            }
13425
13426            // Decode unknown envelopes for gaps in ordinals.
13427            while _next_ordinal_to_read < 9 {
13428                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
13429                _next_ordinal_to_read += 1;
13430                next_offset += envelope_size;
13431            }
13432
13433            let next_out_of_line = decoder.next_out_of_line();
13434            let handles_before = decoder.remaining_handles();
13435            if let Some((inlined, num_bytes, num_handles)) =
13436                fidl::encoding::decode_envelope_header(decoder, next_offset)?
13437            {
13438                let member_inline_size =
13439                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
13440                if inlined != (member_inline_size <= 4) {
13441                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
13442                }
13443                let inner_offset;
13444                let mut inner_depth = depth.clone();
13445                if inlined {
13446                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
13447                    inner_offset = next_offset;
13448                } else {
13449                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
13450                    inner_depth.increment()?;
13451                }
13452                let val_ref = self.channel.get_or_insert_with(|| fidl::new_empty!(u16, D));
13453                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
13454                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
13455                {
13456                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
13457                }
13458                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
13459                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
13460                }
13461            }
13462
13463            next_offset += envelope_size;
13464            _next_ordinal_to_read += 1;
13465            if next_offset >= end_offset {
13466                return Ok(());
13467            }
13468
13469            // Decode unknown envelopes for gaps in ordinals.
13470            while _next_ordinal_to_read < 10 {
13471                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
13472                _next_ordinal_to_read += 1;
13473                next_offset += envelope_size;
13474            }
13475
13476            let next_out_of_line = decoder.next_out_of_line();
13477            let handles_before = decoder.remaining_handles();
13478            if let Some((inlined, num_bytes, num_handles)) =
13479                fidl::encoding::decode_envelope_header(decoder, next_offset)?
13480            {
13481                let member_inline_size =
13482                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
13483                if inlined != (member_inline_size <= 4) {
13484                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
13485                }
13486                let inner_offset;
13487                let mut inner_depth = depth.clone();
13488                if inlined {
13489                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
13490                    inner_offset = next_offset;
13491                } else {
13492                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
13493                    inner_depth.increment()?;
13494                }
13495                let val_ref = self.wakeup_channel.get_or_insert_with(|| fidl::new_empty!(u16, D));
13496                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
13497                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
13498                {
13499                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
13500                }
13501                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
13502                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
13503                }
13504            }
13505
13506            next_offset += envelope_size;
13507            _next_ordinal_to_read += 1;
13508            if next_offset >= end_offset {
13509                return Ok(());
13510            }
13511
13512            // Decode unknown envelopes for gaps in ordinals.
13513            while _next_ordinal_to_read < 11 {
13514                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
13515                _next_ordinal_to_read += 1;
13516                next_offset += envelope_size;
13517            }
13518
13519            let next_out_of_line = decoder.next_out_of_line();
13520            let handles_before = decoder.remaining_handles();
13521            if let Some((inlined, num_bytes, num_handles)) =
13522                fidl::encoding::decode_envelope_header(decoder, next_offset)?
13523            {
13524                let member_inline_size =
13525                    <fidl::encoding::Vector<u8, 16> as fidl::encoding::TypeMarker>::inline_size(
13526                        decoder.context,
13527                    );
13528                if inlined != (member_inline_size <= 4) {
13529                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
13530                }
13531                let inner_offset;
13532                let mut inner_depth = depth.clone();
13533                if inlined {
13534                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
13535                    inner_offset = next_offset;
13536                } else {
13537                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
13538                    inner_depth.increment()?;
13539                }
13540                let val_ref = self
13541                    .pskc
13542                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u8, 16>, D));
13543                fidl::decode!(fidl::encoding::Vector<u8, 16>, 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 < 12 {
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                    <SecurityPolicy as fidl::encoding::TypeMarker>::inline_size(decoder.context);
13573                if inlined != (member_inline_size <= 4) {
13574                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
13575                }
13576                let inner_offset;
13577                let mut inner_depth = depth.clone();
13578                if inlined {
13579                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
13580                    inner_offset = next_offset;
13581                } else {
13582                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
13583                    inner_depth.increment()?;
13584                }
13585                let val_ref =
13586                    self.security_policy.get_or_insert_with(|| fidl::new_empty!(SecurityPolicy, D));
13587                fidl::decode!(SecurityPolicy, D, val_ref, decoder, inner_offset, inner_depth)?;
13588                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
13589                {
13590                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
13591                }
13592                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
13593                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
13594                }
13595            }
13596
13597            next_offset += envelope_size;
13598            _next_ordinal_to_read += 1;
13599            if next_offset >= end_offset {
13600                return Ok(());
13601            }
13602
13603            // Decode unknown envelopes for gaps in ordinals.
13604            while _next_ordinal_to_read < 13 {
13605                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
13606                _next_ordinal_to_read += 1;
13607                next_offset += envelope_size;
13608            }
13609
13610            let next_out_of_line = decoder.next_out_of_line();
13611            let handles_before = decoder.remaining_handles();
13612            if let Some((inlined, num_bytes, num_handles)) =
13613                fidl::encoding::decode_envelope_header(decoder, next_offset)?
13614            {
13615                let member_inline_size =
13616                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
13617                if inlined != (member_inline_size <= 4) {
13618                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
13619                }
13620                let inner_offset;
13621                let mut inner_depth = depth.clone();
13622                if inlined {
13623                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
13624                    inner_offset = next_offset;
13625                } else {
13626                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
13627                    inner_depth.increment()?;
13628                }
13629                let val_ref = self.channel_mask.get_or_insert_with(|| fidl::new_empty!(u32, D));
13630                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
13631                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
13632                {
13633                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
13634                }
13635                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
13636                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
13637                }
13638            }
13639
13640            next_offset += envelope_size;
13641
13642            // Decode the remaining unknown envelopes.
13643            while next_offset < end_offset {
13644                _next_ordinal_to_read += 1;
13645                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
13646                next_offset += envelope_size;
13647            }
13648
13649            Ok(())
13650        }
13651    }
13652
13653    impl PdProcessedRaInfo {
13654        #[inline(always)]
13655        fn max_ordinal_present(&self) -> u64 {
13656            if let Some(_) = self.last_platform_ra_msec {
13657                return 3;
13658            }
13659            if let Some(_) = self.num_platform_pio_processed {
13660                return 2;
13661            }
13662            if let Some(_) = self.num_platform_ra_received {
13663                return 1;
13664            }
13665            0
13666        }
13667    }
13668
13669    impl fidl::encoding::ValueTypeMarker for PdProcessedRaInfo {
13670        type Borrowed<'a> = &'a Self;
13671        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
13672            value
13673        }
13674    }
13675
13676    unsafe impl fidl::encoding::TypeMarker for PdProcessedRaInfo {
13677        type Owned = Self;
13678
13679        #[inline(always)]
13680        fn inline_align(_context: fidl::encoding::Context) -> usize {
13681            8
13682        }
13683
13684        #[inline(always)]
13685        fn inline_size(_context: fidl::encoding::Context) -> usize {
13686            16
13687        }
13688    }
13689
13690    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<PdProcessedRaInfo, D>
13691        for &PdProcessedRaInfo
13692    {
13693        unsafe fn encode(
13694            self,
13695            encoder: &mut fidl::encoding::Encoder<'_, D>,
13696            offset: usize,
13697            mut depth: fidl::encoding::Depth,
13698        ) -> fidl::Result<()> {
13699            encoder.debug_check_bounds::<PdProcessedRaInfo>(offset);
13700            // Vector header
13701            let max_ordinal: u64 = self.max_ordinal_present();
13702            encoder.write_num(max_ordinal, offset);
13703            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
13704            // Calling encoder.out_of_line_offset(0) is not allowed.
13705            if max_ordinal == 0 {
13706                return Ok(());
13707            }
13708            depth.increment()?;
13709            let envelope_size = 8;
13710            let bytes_len = max_ordinal as usize * envelope_size;
13711            #[allow(unused_variables)]
13712            let offset = encoder.out_of_line_offset(bytes_len);
13713            let mut _prev_end_offset: usize = 0;
13714            if 1 > max_ordinal {
13715                return Ok(());
13716            }
13717
13718            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13719            // are envelope_size bytes.
13720            let cur_offset: usize = (1 - 1) * envelope_size;
13721
13722            // Zero reserved fields.
13723            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13724
13725            // Safety:
13726            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13727            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13728            //   envelope_size bytes, there is always sufficient room.
13729            fidl::encoding::encode_in_envelope_optional::<u32, D>(
13730                self.num_platform_ra_received
13731                    .as_ref()
13732                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
13733                encoder,
13734                offset + cur_offset,
13735                depth,
13736            )?;
13737
13738            _prev_end_offset = cur_offset + envelope_size;
13739            if 2 > max_ordinal {
13740                return Ok(());
13741            }
13742
13743            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13744            // are envelope_size bytes.
13745            let cur_offset: usize = (2 - 1) * envelope_size;
13746
13747            // Zero reserved fields.
13748            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13749
13750            // Safety:
13751            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13752            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13753            //   envelope_size bytes, there is always sufficient room.
13754            fidl::encoding::encode_in_envelope_optional::<u32, D>(
13755                self.num_platform_pio_processed
13756                    .as_ref()
13757                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
13758                encoder,
13759                offset + cur_offset,
13760                depth,
13761            )?;
13762
13763            _prev_end_offset = cur_offset + envelope_size;
13764            if 3 > max_ordinal {
13765                return Ok(());
13766            }
13767
13768            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13769            // are envelope_size bytes.
13770            let cur_offset: usize = (3 - 1) * envelope_size;
13771
13772            // Zero reserved fields.
13773            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13774
13775            // Safety:
13776            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13777            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13778            //   envelope_size bytes, there is always sufficient room.
13779            fidl::encoding::encode_in_envelope_optional::<u32, D>(
13780                self.last_platform_ra_msec
13781                    .as_ref()
13782                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
13783                encoder,
13784                offset + cur_offset,
13785                depth,
13786            )?;
13787
13788            _prev_end_offset = cur_offset + envelope_size;
13789
13790            Ok(())
13791        }
13792    }
13793
13794    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for PdProcessedRaInfo {
13795        #[inline(always)]
13796        fn new_empty() -> Self {
13797            Self::default()
13798        }
13799
13800        unsafe fn decode(
13801            &mut self,
13802            decoder: &mut fidl::encoding::Decoder<'_, D>,
13803            offset: usize,
13804            mut depth: fidl::encoding::Depth,
13805        ) -> fidl::Result<()> {
13806            decoder.debug_check_bounds::<Self>(offset);
13807            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
13808                None => return Err(fidl::Error::NotNullable),
13809                Some(len) => len,
13810            };
13811            // Calling decoder.out_of_line_offset(0) is not allowed.
13812            if len == 0 {
13813                return Ok(());
13814            };
13815            depth.increment()?;
13816            let envelope_size = 8;
13817            let bytes_len = len * envelope_size;
13818            let offset = decoder.out_of_line_offset(bytes_len)?;
13819            // Decode the envelope for each type.
13820            let mut _next_ordinal_to_read = 0;
13821            let mut next_offset = offset;
13822            let end_offset = offset + bytes_len;
13823            _next_ordinal_to_read += 1;
13824            if next_offset >= end_offset {
13825                return Ok(());
13826            }
13827
13828            // Decode unknown envelopes for gaps in ordinals.
13829            while _next_ordinal_to_read < 1 {
13830                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
13831                _next_ordinal_to_read += 1;
13832                next_offset += envelope_size;
13833            }
13834
13835            let next_out_of_line = decoder.next_out_of_line();
13836            let handles_before = decoder.remaining_handles();
13837            if let Some((inlined, num_bytes, num_handles)) =
13838                fidl::encoding::decode_envelope_header(decoder, next_offset)?
13839            {
13840                let member_inline_size =
13841                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
13842                if inlined != (member_inline_size <= 4) {
13843                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
13844                }
13845                let inner_offset;
13846                let mut inner_depth = depth.clone();
13847                if inlined {
13848                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
13849                    inner_offset = next_offset;
13850                } else {
13851                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
13852                    inner_depth.increment()?;
13853                }
13854                let val_ref =
13855                    self.num_platform_ra_received.get_or_insert_with(|| fidl::new_empty!(u32, D));
13856                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
13857                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
13858                {
13859                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
13860                }
13861                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
13862                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
13863                }
13864            }
13865
13866            next_offset += envelope_size;
13867            _next_ordinal_to_read += 1;
13868            if next_offset >= end_offset {
13869                return Ok(());
13870            }
13871
13872            // Decode unknown envelopes for gaps in ordinals.
13873            while _next_ordinal_to_read < 2 {
13874                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
13875                _next_ordinal_to_read += 1;
13876                next_offset += envelope_size;
13877            }
13878
13879            let next_out_of_line = decoder.next_out_of_line();
13880            let handles_before = decoder.remaining_handles();
13881            if let Some((inlined, num_bytes, num_handles)) =
13882                fidl::encoding::decode_envelope_header(decoder, next_offset)?
13883            {
13884                let member_inline_size =
13885                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
13886                if inlined != (member_inline_size <= 4) {
13887                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
13888                }
13889                let inner_offset;
13890                let mut inner_depth = depth.clone();
13891                if inlined {
13892                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
13893                    inner_offset = next_offset;
13894                } else {
13895                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
13896                    inner_depth.increment()?;
13897                }
13898                let val_ref =
13899                    self.num_platform_pio_processed.get_or_insert_with(|| fidl::new_empty!(u32, D));
13900                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
13901                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
13902                {
13903                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
13904                }
13905                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
13906                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
13907                }
13908            }
13909
13910            next_offset += envelope_size;
13911            _next_ordinal_to_read += 1;
13912            if next_offset >= end_offset {
13913                return Ok(());
13914            }
13915
13916            // Decode unknown envelopes for gaps in ordinals.
13917            while _next_ordinal_to_read < 3 {
13918                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
13919                _next_ordinal_to_read += 1;
13920                next_offset += envelope_size;
13921            }
13922
13923            let next_out_of_line = decoder.next_out_of_line();
13924            let handles_before = decoder.remaining_handles();
13925            if let Some((inlined, num_bytes, num_handles)) =
13926                fidl::encoding::decode_envelope_header(decoder, next_offset)?
13927            {
13928                let member_inline_size =
13929                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
13930                if inlined != (member_inline_size <= 4) {
13931                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
13932                }
13933                let inner_offset;
13934                let mut inner_depth = depth.clone();
13935                if inlined {
13936                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
13937                    inner_offset = next_offset;
13938                } else {
13939                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
13940                    inner_depth.increment()?;
13941                }
13942                let val_ref =
13943                    self.last_platform_ra_msec.get_or_insert_with(|| fidl::new_empty!(u32, D));
13944                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
13945                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
13946                {
13947                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
13948                }
13949                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
13950                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
13951                }
13952            }
13953
13954            next_offset += envelope_size;
13955
13956            // Decode the remaining unknown envelopes.
13957            while next_offset < end_offset {
13958                _next_ordinal_to_read += 1;
13959                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
13960                next_offset += envelope_size;
13961            }
13962
13963            Ok(())
13964        }
13965    }
13966
13967    impl SecurityPolicy {
13968        #[inline(always)]
13969        fn max_ordinal_present(&self) -> u64 {
13970            if let Some(_) = self.version_threshold_for_routing {
13971                return 10;
13972            }
13973            if let Some(_) = self.nonccm_routers_enabled {
13974                return 9;
13975            }
13976            if let Some(_) = self.toble_link_enabled {
13977                return 8;
13978            }
13979            if let Some(_) = self.network_key_provisioning_enabled {
13980                return 7;
13981            }
13982            if let Some(_) = self.autonomous_enrollment_enabled {
13983                return 6;
13984            }
13985            if let Some(_) = self.external_commissioning_enabled {
13986                return 5;
13987            }
13988            if let Some(_) = self.routers_enabled {
13989                return 4;
13990            }
13991            if let Some(_) = self.native_commissioning_enabled {
13992                return 3;
13993            }
13994            if let Some(_) = self.obtain_network_key_enabled {
13995                return 2;
13996            }
13997            if let Some(_) = self.rotation_time {
13998                return 1;
13999            }
14000            0
14001        }
14002    }
14003
14004    impl fidl::encoding::ValueTypeMarker for SecurityPolicy {
14005        type Borrowed<'a> = &'a Self;
14006        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
14007            value
14008        }
14009    }
14010
14011    unsafe impl fidl::encoding::TypeMarker for SecurityPolicy {
14012        type Owned = Self;
14013
14014        #[inline(always)]
14015        fn inline_align(_context: fidl::encoding::Context) -> usize {
14016            8
14017        }
14018
14019        #[inline(always)]
14020        fn inline_size(_context: fidl::encoding::Context) -> usize {
14021            16
14022        }
14023    }
14024
14025    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<SecurityPolicy, D>
14026        for &SecurityPolicy
14027    {
14028        unsafe fn encode(
14029            self,
14030            encoder: &mut fidl::encoding::Encoder<'_, D>,
14031            offset: usize,
14032            mut depth: fidl::encoding::Depth,
14033        ) -> fidl::Result<()> {
14034            encoder.debug_check_bounds::<SecurityPolicy>(offset);
14035            // Vector header
14036            let max_ordinal: u64 = self.max_ordinal_present();
14037            encoder.write_num(max_ordinal, offset);
14038            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
14039            // Calling encoder.out_of_line_offset(0) is not allowed.
14040            if max_ordinal == 0 {
14041                return Ok(());
14042            }
14043            depth.increment()?;
14044            let envelope_size = 8;
14045            let bytes_len = max_ordinal as usize * envelope_size;
14046            #[allow(unused_variables)]
14047            let offset = encoder.out_of_line_offset(bytes_len);
14048            let mut _prev_end_offset: usize = 0;
14049            if 1 > max_ordinal {
14050                return Ok(());
14051            }
14052
14053            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
14054            // are envelope_size bytes.
14055            let cur_offset: usize = (1 - 1) * envelope_size;
14056
14057            // Zero reserved fields.
14058            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
14059
14060            // Safety:
14061            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
14062            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
14063            //   envelope_size bytes, there is always sufficient room.
14064            fidl::encoding::encode_in_envelope_optional::<u16, D>(
14065                self.rotation_time.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
14066                encoder,
14067                offset + cur_offset,
14068                depth,
14069            )?;
14070
14071            _prev_end_offset = cur_offset + envelope_size;
14072            if 2 > max_ordinal {
14073                return Ok(());
14074            }
14075
14076            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
14077            // are envelope_size bytes.
14078            let cur_offset: usize = (2 - 1) * envelope_size;
14079
14080            // Zero reserved fields.
14081            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
14082
14083            // Safety:
14084            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
14085            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
14086            //   envelope_size bytes, there is always sufficient room.
14087            fidl::encoding::encode_in_envelope_optional::<bool, D>(
14088                self.obtain_network_key_enabled
14089                    .as_ref()
14090                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
14091                encoder,
14092                offset + cur_offset,
14093                depth,
14094            )?;
14095
14096            _prev_end_offset = cur_offset + envelope_size;
14097            if 3 > max_ordinal {
14098                return Ok(());
14099            }
14100
14101            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
14102            // are envelope_size bytes.
14103            let cur_offset: usize = (3 - 1) * envelope_size;
14104
14105            // Zero reserved fields.
14106            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
14107
14108            // Safety:
14109            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
14110            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
14111            //   envelope_size bytes, there is always sufficient room.
14112            fidl::encoding::encode_in_envelope_optional::<bool, D>(
14113                self.native_commissioning_enabled
14114                    .as_ref()
14115                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
14116                encoder,
14117                offset + cur_offset,
14118                depth,
14119            )?;
14120
14121            _prev_end_offset = cur_offset + envelope_size;
14122            if 4 > max_ordinal {
14123                return Ok(());
14124            }
14125
14126            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
14127            // are envelope_size bytes.
14128            let cur_offset: usize = (4 - 1) * envelope_size;
14129
14130            // Zero reserved fields.
14131            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
14132
14133            // Safety:
14134            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
14135            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
14136            //   envelope_size bytes, there is always sufficient room.
14137            fidl::encoding::encode_in_envelope_optional::<bool, D>(
14138                self.routers_enabled
14139                    .as_ref()
14140                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
14141                encoder,
14142                offset + cur_offset,
14143                depth,
14144            )?;
14145
14146            _prev_end_offset = cur_offset + envelope_size;
14147            if 5 > max_ordinal {
14148                return Ok(());
14149            }
14150
14151            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
14152            // are envelope_size bytes.
14153            let cur_offset: usize = (5 - 1) * envelope_size;
14154
14155            // Zero reserved fields.
14156            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
14157
14158            // Safety:
14159            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
14160            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
14161            //   envelope_size bytes, there is always sufficient room.
14162            fidl::encoding::encode_in_envelope_optional::<bool, D>(
14163                self.external_commissioning_enabled
14164                    .as_ref()
14165                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
14166                encoder,
14167                offset + cur_offset,
14168                depth,
14169            )?;
14170
14171            _prev_end_offset = cur_offset + envelope_size;
14172            if 6 > max_ordinal {
14173                return Ok(());
14174            }
14175
14176            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
14177            // are envelope_size bytes.
14178            let cur_offset: usize = (6 - 1) * envelope_size;
14179
14180            // Zero reserved fields.
14181            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
14182
14183            // Safety:
14184            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
14185            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
14186            //   envelope_size bytes, there is always sufficient room.
14187            fidl::encoding::encode_in_envelope_optional::<bool, D>(
14188                self.autonomous_enrollment_enabled
14189                    .as_ref()
14190                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
14191                encoder,
14192                offset + cur_offset,
14193                depth,
14194            )?;
14195
14196            _prev_end_offset = cur_offset + envelope_size;
14197            if 7 > max_ordinal {
14198                return Ok(());
14199            }
14200
14201            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
14202            // are envelope_size bytes.
14203            let cur_offset: usize = (7 - 1) * envelope_size;
14204
14205            // Zero reserved fields.
14206            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
14207
14208            // Safety:
14209            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
14210            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
14211            //   envelope_size bytes, there is always sufficient room.
14212            fidl::encoding::encode_in_envelope_optional::<bool, D>(
14213                self.network_key_provisioning_enabled
14214                    .as_ref()
14215                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
14216                encoder,
14217                offset + cur_offset,
14218                depth,
14219            )?;
14220
14221            _prev_end_offset = cur_offset + envelope_size;
14222            if 8 > max_ordinal {
14223                return Ok(());
14224            }
14225
14226            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
14227            // are envelope_size bytes.
14228            let cur_offset: usize = (8 - 1) * envelope_size;
14229
14230            // Zero reserved fields.
14231            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
14232
14233            // Safety:
14234            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
14235            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
14236            //   envelope_size bytes, there is always sufficient room.
14237            fidl::encoding::encode_in_envelope_optional::<bool, D>(
14238                self.toble_link_enabled
14239                    .as_ref()
14240                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
14241                encoder,
14242                offset + cur_offset,
14243                depth,
14244            )?;
14245
14246            _prev_end_offset = cur_offset + envelope_size;
14247            if 9 > max_ordinal {
14248                return Ok(());
14249            }
14250
14251            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
14252            // are envelope_size bytes.
14253            let cur_offset: usize = (9 - 1) * envelope_size;
14254
14255            // Zero reserved fields.
14256            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
14257
14258            // Safety:
14259            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
14260            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
14261            //   envelope_size bytes, there is always sufficient room.
14262            fidl::encoding::encode_in_envelope_optional::<bool, D>(
14263                self.nonccm_routers_enabled
14264                    .as_ref()
14265                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
14266                encoder,
14267                offset + cur_offset,
14268                depth,
14269            )?;
14270
14271            _prev_end_offset = cur_offset + envelope_size;
14272            if 10 > max_ordinal {
14273                return Ok(());
14274            }
14275
14276            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
14277            // are envelope_size bytes.
14278            let cur_offset: usize = (10 - 1) * envelope_size;
14279
14280            // Zero reserved fields.
14281            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
14282
14283            // Safety:
14284            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
14285            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
14286            //   envelope_size bytes, there is always sufficient room.
14287            fidl::encoding::encode_in_envelope_optional::<u8, D>(
14288                self.version_threshold_for_routing
14289                    .as_ref()
14290                    .map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
14291                encoder,
14292                offset + cur_offset,
14293                depth,
14294            )?;
14295
14296            _prev_end_offset = cur_offset + envelope_size;
14297
14298            Ok(())
14299        }
14300    }
14301
14302    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SecurityPolicy {
14303        #[inline(always)]
14304        fn new_empty() -> Self {
14305            Self::default()
14306        }
14307
14308        unsafe fn decode(
14309            &mut self,
14310            decoder: &mut fidl::encoding::Decoder<'_, D>,
14311            offset: usize,
14312            mut depth: fidl::encoding::Depth,
14313        ) -> fidl::Result<()> {
14314            decoder.debug_check_bounds::<Self>(offset);
14315            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
14316                None => return Err(fidl::Error::NotNullable),
14317                Some(len) => len,
14318            };
14319            // Calling decoder.out_of_line_offset(0) is not allowed.
14320            if len == 0 {
14321                return Ok(());
14322            };
14323            depth.increment()?;
14324            let envelope_size = 8;
14325            let bytes_len = len * envelope_size;
14326            let offset = decoder.out_of_line_offset(bytes_len)?;
14327            // Decode the envelope for each type.
14328            let mut _next_ordinal_to_read = 0;
14329            let mut next_offset = offset;
14330            let end_offset = offset + bytes_len;
14331            _next_ordinal_to_read += 1;
14332            if next_offset >= end_offset {
14333                return Ok(());
14334            }
14335
14336            // Decode unknown envelopes for gaps in ordinals.
14337            while _next_ordinal_to_read < 1 {
14338                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14339                _next_ordinal_to_read += 1;
14340                next_offset += envelope_size;
14341            }
14342
14343            let next_out_of_line = decoder.next_out_of_line();
14344            let handles_before = decoder.remaining_handles();
14345            if let Some((inlined, num_bytes, num_handles)) =
14346                fidl::encoding::decode_envelope_header(decoder, next_offset)?
14347            {
14348                let member_inline_size =
14349                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
14350                if inlined != (member_inline_size <= 4) {
14351                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
14352                }
14353                let inner_offset;
14354                let mut inner_depth = depth.clone();
14355                if inlined {
14356                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
14357                    inner_offset = next_offset;
14358                } else {
14359                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
14360                    inner_depth.increment()?;
14361                }
14362                let val_ref = self.rotation_time.get_or_insert_with(|| fidl::new_empty!(u16, D));
14363                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
14364                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14365                {
14366                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
14367                }
14368                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14369                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14370                }
14371            }
14372
14373            next_offset += envelope_size;
14374            _next_ordinal_to_read += 1;
14375            if next_offset >= end_offset {
14376                return Ok(());
14377            }
14378
14379            // Decode unknown envelopes for gaps in ordinals.
14380            while _next_ordinal_to_read < 2 {
14381                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14382                _next_ordinal_to_read += 1;
14383                next_offset += envelope_size;
14384            }
14385
14386            let next_out_of_line = decoder.next_out_of_line();
14387            let handles_before = decoder.remaining_handles();
14388            if let Some((inlined, num_bytes, num_handles)) =
14389                fidl::encoding::decode_envelope_header(decoder, next_offset)?
14390            {
14391                let member_inline_size =
14392                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
14393                if inlined != (member_inline_size <= 4) {
14394                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
14395                }
14396                let inner_offset;
14397                let mut inner_depth = depth.clone();
14398                if inlined {
14399                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
14400                    inner_offset = next_offset;
14401                } else {
14402                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
14403                    inner_depth.increment()?;
14404                }
14405                let val_ref = self
14406                    .obtain_network_key_enabled
14407                    .get_or_insert_with(|| fidl::new_empty!(bool, D));
14408                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
14409                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14410                {
14411                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
14412                }
14413                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14414                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14415                }
14416            }
14417
14418            next_offset += envelope_size;
14419            _next_ordinal_to_read += 1;
14420            if next_offset >= end_offset {
14421                return Ok(());
14422            }
14423
14424            // Decode unknown envelopes for gaps in ordinals.
14425            while _next_ordinal_to_read < 3 {
14426                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14427                _next_ordinal_to_read += 1;
14428                next_offset += envelope_size;
14429            }
14430
14431            let next_out_of_line = decoder.next_out_of_line();
14432            let handles_before = decoder.remaining_handles();
14433            if let Some((inlined, num_bytes, num_handles)) =
14434                fidl::encoding::decode_envelope_header(decoder, next_offset)?
14435            {
14436                let member_inline_size =
14437                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
14438                if inlined != (member_inline_size <= 4) {
14439                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
14440                }
14441                let inner_offset;
14442                let mut inner_depth = depth.clone();
14443                if inlined {
14444                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
14445                    inner_offset = next_offset;
14446                } else {
14447                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
14448                    inner_depth.increment()?;
14449                }
14450                let val_ref = self
14451                    .native_commissioning_enabled
14452                    .get_or_insert_with(|| fidl::new_empty!(bool, D));
14453                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
14454                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14455                {
14456                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
14457                }
14458                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14459                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14460                }
14461            }
14462
14463            next_offset += envelope_size;
14464            _next_ordinal_to_read += 1;
14465            if next_offset >= end_offset {
14466                return Ok(());
14467            }
14468
14469            // Decode unknown envelopes for gaps in ordinals.
14470            while _next_ordinal_to_read < 4 {
14471                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14472                _next_ordinal_to_read += 1;
14473                next_offset += envelope_size;
14474            }
14475
14476            let next_out_of_line = decoder.next_out_of_line();
14477            let handles_before = decoder.remaining_handles();
14478            if let Some((inlined, num_bytes, num_handles)) =
14479                fidl::encoding::decode_envelope_header(decoder, next_offset)?
14480            {
14481                let member_inline_size =
14482                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
14483                if inlined != (member_inline_size <= 4) {
14484                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
14485                }
14486                let inner_offset;
14487                let mut inner_depth = depth.clone();
14488                if inlined {
14489                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
14490                    inner_offset = next_offset;
14491                } else {
14492                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
14493                    inner_depth.increment()?;
14494                }
14495                let val_ref = self.routers_enabled.get_or_insert_with(|| fidl::new_empty!(bool, D));
14496                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
14497                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14498                {
14499                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
14500                }
14501                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14502                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14503                }
14504            }
14505
14506            next_offset += envelope_size;
14507            _next_ordinal_to_read += 1;
14508            if next_offset >= end_offset {
14509                return Ok(());
14510            }
14511
14512            // Decode unknown envelopes for gaps in ordinals.
14513            while _next_ordinal_to_read < 5 {
14514                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14515                _next_ordinal_to_read += 1;
14516                next_offset += envelope_size;
14517            }
14518
14519            let next_out_of_line = decoder.next_out_of_line();
14520            let handles_before = decoder.remaining_handles();
14521            if let Some((inlined, num_bytes, num_handles)) =
14522                fidl::encoding::decode_envelope_header(decoder, next_offset)?
14523            {
14524                let member_inline_size =
14525                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
14526                if inlined != (member_inline_size <= 4) {
14527                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
14528                }
14529                let inner_offset;
14530                let mut inner_depth = depth.clone();
14531                if inlined {
14532                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
14533                    inner_offset = next_offset;
14534                } else {
14535                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
14536                    inner_depth.increment()?;
14537                }
14538                let val_ref = self
14539                    .external_commissioning_enabled
14540                    .get_or_insert_with(|| fidl::new_empty!(bool, D));
14541                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
14542                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14543                {
14544                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
14545                }
14546                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14547                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14548                }
14549            }
14550
14551            next_offset += envelope_size;
14552            _next_ordinal_to_read += 1;
14553            if next_offset >= end_offset {
14554                return Ok(());
14555            }
14556
14557            // Decode unknown envelopes for gaps in ordinals.
14558            while _next_ordinal_to_read < 6 {
14559                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14560                _next_ordinal_to_read += 1;
14561                next_offset += envelope_size;
14562            }
14563
14564            let next_out_of_line = decoder.next_out_of_line();
14565            let handles_before = decoder.remaining_handles();
14566            if let Some((inlined, num_bytes, num_handles)) =
14567                fidl::encoding::decode_envelope_header(decoder, next_offset)?
14568            {
14569                let member_inline_size =
14570                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
14571                if inlined != (member_inline_size <= 4) {
14572                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
14573                }
14574                let inner_offset;
14575                let mut inner_depth = depth.clone();
14576                if inlined {
14577                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
14578                    inner_offset = next_offset;
14579                } else {
14580                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
14581                    inner_depth.increment()?;
14582                }
14583                let val_ref = self
14584                    .autonomous_enrollment_enabled
14585                    .get_or_insert_with(|| fidl::new_empty!(bool, D));
14586                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
14587                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14588                {
14589                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
14590                }
14591                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14592                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14593                }
14594            }
14595
14596            next_offset += envelope_size;
14597            _next_ordinal_to_read += 1;
14598            if next_offset >= end_offset {
14599                return Ok(());
14600            }
14601
14602            // Decode unknown envelopes for gaps in ordinals.
14603            while _next_ordinal_to_read < 7 {
14604                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14605                _next_ordinal_to_read += 1;
14606                next_offset += envelope_size;
14607            }
14608
14609            let next_out_of_line = decoder.next_out_of_line();
14610            let handles_before = decoder.remaining_handles();
14611            if let Some((inlined, num_bytes, num_handles)) =
14612                fidl::encoding::decode_envelope_header(decoder, next_offset)?
14613            {
14614                let member_inline_size =
14615                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
14616                if inlined != (member_inline_size <= 4) {
14617                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
14618                }
14619                let inner_offset;
14620                let mut inner_depth = depth.clone();
14621                if inlined {
14622                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
14623                    inner_offset = next_offset;
14624                } else {
14625                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
14626                    inner_depth.increment()?;
14627                }
14628                let val_ref = self
14629                    .network_key_provisioning_enabled
14630                    .get_or_insert_with(|| fidl::new_empty!(bool, D));
14631                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
14632                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14633                {
14634                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
14635                }
14636                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14637                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14638                }
14639            }
14640
14641            next_offset += envelope_size;
14642            _next_ordinal_to_read += 1;
14643            if next_offset >= end_offset {
14644                return Ok(());
14645            }
14646
14647            // Decode unknown envelopes for gaps in ordinals.
14648            while _next_ordinal_to_read < 8 {
14649                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14650                _next_ordinal_to_read += 1;
14651                next_offset += envelope_size;
14652            }
14653
14654            let next_out_of_line = decoder.next_out_of_line();
14655            let handles_before = decoder.remaining_handles();
14656            if let Some((inlined, num_bytes, num_handles)) =
14657                fidl::encoding::decode_envelope_header(decoder, next_offset)?
14658            {
14659                let member_inline_size =
14660                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
14661                if inlined != (member_inline_size <= 4) {
14662                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
14663                }
14664                let inner_offset;
14665                let mut inner_depth = depth.clone();
14666                if inlined {
14667                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
14668                    inner_offset = next_offset;
14669                } else {
14670                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
14671                    inner_depth.increment()?;
14672                }
14673                let val_ref =
14674                    self.toble_link_enabled.get_or_insert_with(|| fidl::new_empty!(bool, D));
14675                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
14676                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14677                {
14678                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
14679                }
14680                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14681                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14682                }
14683            }
14684
14685            next_offset += envelope_size;
14686            _next_ordinal_to_read += 1;
14687            if next_offset >= end_offset {
14688                return Ok(());
14689            }
14690
14691            // Decode unknown envelopes for gaps in ordinals.
14692            while _next_ordinal_to_read < 9 {
14693                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14694                _next_ordinal_to_read += 1;
14695                next_offset += envelope_size;
14696            }
14697
14698            let next_out_of_line = decoder.next_out_of_line();
14699            let handles_before = decoder.remaining_handles();
14700            if let Some((inlined, num_bytes, num_handles)) =
14701                fidl::encoding::decode_envelope_header(decoder, next_offset)?
14702            {
14703                let member_inline_size =
14704                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
14705                if inlined != (member_inline_size <= 4) {
14706                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
14707                }
14708                let inner_offset;
14709                let mut inner_depth = depth.clone();
14710                if inlined {
14711                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
14712                    inner_offset = next_offset;
14713                } else {
14714                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
14715                    inner_depth.increment()?;
14716                }
14717                let val_ref =
14718                    self.nonccm_routers_enabled.get_or_insert_with(|| fidl::new_empty!(bool, D));
14719                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
14720                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14721                {
14722                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
14723                }
14724                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14725                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14726                }
14727            }
14728
14729            next_offset += envelope_size;
14730            _next_ordinal_to_read += 1;
14731            if next_offset >= end_offset {
14732                return Ok(());
14733            }
14734
14735            // Decode unknown envelopes for gaps in ordinals.
14736            while _next_ordinal_to_read < 10 {
14737                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14738                _next_ordinal_to_read += 1;
14739                next_offset += envelope_size;
14740            }
14741
14742            let next_out_of_line = decoder.next_out_of_line();
14743            let handles_before = decoder.remaining_handles();
14744            if let Some((inlined, num_bytes, num_handles)) =
14745                fidl::encoding::decode_envelope_header(decoder, next_offset)?
14746            {
14747                let member_inline_size =
14748                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
14749                if inlined != (member_inline_size <= 4) {
14750                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
14751                }
14752                let inner_offset;
14753                let mut inner_depth = depth.clone();
14754                if inlined {
14755                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
14756                    inner_offset = next_offset;
14757                } else {
14758                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
14759                    inner_depth.increment()?;
14760                }
14761                let val_ref = self
14762                    .version_threshold_for_routing
14763                    .get_or_insert_with(|| fidl::new_empty!(u8, D));
14764                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
14765                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14766                {
14767                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
14768                }
14769                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14770                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14771                }
14772            }
14773
14774            next_offset += envelope_size;
14775
14776            // Decode the remaining unknown envelopes.
14777            while next_offset < end_offset {
14778                _next_ordinal_to_read += 1;
14779                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14780                next_offset += envelope_size;
14781            }
14782
14783            Ok(())
14784        }
14785    }
14786
14787    impl SrpServerHost {
14788        #[inline(always)]
14789        fn max_ordinal_present(&self) -> u64 {
14790            if let Some(_) = self.addresses {
14791                return 3;
14792            }
14793            if let Some(_) = self.deleted {
14794                return 2;
14795            }
14796            if let Some(_) = self.name {
14797                return 1;
14798            }
14799            0
14800        }
14801    }
14802
14803    impl fidl::encoding::ValueTypeMarker for SrpServerHost {
14804        type Borrowed<'a> = &'a Self;
14805        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
14806            value
14807        }
14808    }
14809
14810    unsafe impl fidl::encoding::TypeMarker for SrpServerHost {
14811        type Owned = Self;
14812
14813        #[inline(always)]
14814        fn inline_align(_context: fidl::encoding::Context) -> usize {
14815            8
14816        }
14817
14818        #[inline(always)]
14819        fn inline_size(_context: fidl::encoding::Context) -> usize {
14820            16
14821        }
14822    }
14823
14824    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<SrpServerHost, D>
14825        for &SrpServerHost
14826    {
14827        unsafe fn encode(
14828            self,
14829            encoder: &mut fidl::encoding::Encoder<'_, D>,
14830            offset: usize,
14831            mut depth: fidl::encoding::Depth,
14832        ) -> fidl::Result<()> {
14833            encoder.debug_check_bounds::<SrpServerHost>(offset);
14834            // Vector header
14835            let max_ordinal: u64 = self.max_ordinal_present();
14836            encoder.write_num(max_ordinal, offset);
14837            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
14838            // Calling encoder.out_of_line_offset(0) is not allowed.
14839            if max_ordinal == 0 {
14840                return Ok(());
14841            }
14842            depth.increment()?;
14843            let envelope_size = 8;
14844            let bytes_len = max_ordinal as usize * envelope_size;
14845            #[allow(unused_variables)]
14846            let offset = encoder.out_of_line_offset(bytes_len);
14847            let mut _prev_end_offset: usize = 0;
14848            if 1 > max_ordinal {
14849                return Ok(());
14850            }
14851
14852            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
14853            // are envelope_size bytes.
14854            let cur_offset: usize = (1 - 1) * envelope_size;
14855
14856            // Zero reserved fields.
14857            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
14858
14859            // Safety:
14860            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
14861            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
14862            //   envelope_size bytes, there is always sufficient room.
14863            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<255>, D>(
14864                self.name.as_ref().map(
14865                    <fidl::encoding::BoundedString<255> as fidl::encoding::ValueTypeMarker>::borrow,
14866                ),
14867                encoder,
14868                offset + cur_offset,
14869                depth,
14870            )?;
14871
14872            _prev_end_offset = cur_offset + envelope_size;
14873            if 2 > max_ordinal {
14874                return Ok(());
14875            }
14876
14877            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
14878            // are envelope_size bytes.
14879            let cur_offset: usize = (2 - 1) * envelope_size;
14880
14881            // Zero reserved fields.
14882            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
14883
14884            // Safety:
14885            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
14886            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
14887            //   envelope_size bytes, there is always sufficient room.
14888            fidl::encoding::encode_in_envelope_optional::<bool, D>(
14889                self.deleted.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
14890                encoder,
14891                offset + cur_offset,
14892                depth,
14893            )?;
14894
14895            _prev_end_offset = cur_offset + envelope_size;
14896            if 3 > max_ordinal {
14897                return Ok(());
14898            }
14899
14900            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
14901            // are envelope_size bytes.
14902            let cur_offset: usize = (3 - 1) * envelope_size;
14903
14904            // Zero reserved fields.
14905            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
14906
14907            // Safety:
14908            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
14909            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
14910            //   envelope_size bytes, there is always sufficient room.
14911            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<fidl_fuchsia_net__common::Ipv6Address, 16>, D>(
14912            self.addresses.as_ref().map(<fidl::encoding::Vector<fidl_fuchsia_net__common::Ipv6Address, 16> as fidl::encoding::ValueTypeMarker>::borrow),
14913            encoder, offset + cur_offset, depth
14914        )?;
14915
14916            _prev_end_offset = cur_offset + envelope_size;
14917
14918            Ok(())
14919        }
14920    }
14921
14922    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SrpServerHost {
14923        #[inline(always)]
14924        fn new_empty() -> Self {
14925            Self::default()
14926        }
14927
14928        unsafe fn decode(
14929            &mut self,
14930            decoder: &mut fidl::encoding::Decoder<'_, D>,
14931            offset: usize,
14932            mut depth: fidl::encoding::Depth,
14933        ) -> fidl::Result<()> {
14934            decoder.debug_check_bounds::<Self>(offset);
14935            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
14936                None => return Err(fidl::Error::NotNullable),
14937                Some(len) => len,
14938            };
14939            // Calling decoder.out_of_line_offset(0) is not allowed.
14940            if len == 0 {
14941                return Ok(());
14942            };
14943            depth.increment()?;
14944            let envelope_size = 8;
14945            let bytes_len = len * envelope_size;
14946            let offset = decoder.out_of_line_offset(bytes_len)?;
14947            // Decode the envelope for each type.
14948            let mut _next_ordinal_to_read = 0;
14949            let mut next_offset = offset;
14950            let end_offset = offset + bytes_len;
14951            _next_ordinal_to_read += 1;
14952            if next_offset >= end_offset {
14953                return Ok(());
14954            }
14955
14956            // Decode unknown envelopes for gaps in ordinals.
14957            while _next_ordinal_to_read < 1 {
14958                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14959                _next_ordinal_to_read += 1;
14960                next_offset += envelope_size;
14961            }
14962
14963            let next_out_of_line = decoder.next_out_of_line();
14964            let handles_before = decoder.remaining_handles();
14965            if let Some((inlined, num_bytes, num_handles)) =
14966                fidl::encoding::decode_envelope_header(decoder, next_offset)?
14967            {
14968                let member_inline_size =
14969                    <fidl::encoding::BoundedString<255> as fidl::encoding::TypeMarker>::inline_size(
14970                        decoder.context,
14971                    );
14972                if inlined != (member_inline_size <= 4) {
14973                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
14974                }
14975                let inner_offset;
14976                let mut inner_depth = depth.clone();
14977                if inlined {
14978                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
14979                    inner_offset = next_offset;
14980                } else {
14981                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
14982                    inner_depth.increment()?;
14983                }
14984                let val_ref = self
14985                    .name
14986                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<255>, D));
14987                fidl::decode!(
14988                    fidl::encoding::BoundedString<255>,
14989                    D,
14990                    val_ref,
14991                    decoder,
14992                    inner_offset,
14993                    inner_depth
14994                )?;
14995                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14996                {
14997                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
14998                }
14999                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
15000                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
15001                }
15002            }
15003
15004            next_offset += envelope_size;
15005            _next_ordinal_to_read += 1;
15006            if next_offset >= end_offset {
15007                return Ok(());
15008            }
15009
15010            // Decode unknown envelopes for gaps in ordinals.
15011            while _next_ordinal_to_read < 2 {
15012                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15013                _next_ordinal_to_read += 1;
15014                next_offset += envelope_size;
15015            }
15016
15017            let next_out_of_line = decoder.next_out_of_line();
15018            let handles_before = decoder.remaining_handles();
15019            if let Some((inlined, num_bytes, num_handles)) =
15020                fidl::encoding::decode_envelope_header(decoder, next_offset)?
15021            {
15022                let member_inline_size =
15023                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
15024                if inlined != (member_inline_size <= 4) {
15025                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
15026                }
15027                let inner_offset;
15028                let mut inner_depth = depth.clone();
15029                if inlined {
15030                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
15031                    inner_offset = next_offset;
15032                } else {
15033                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
15034                    inner_depth.increment()?;
15035                }
15036                let val_ref = self.deleted.get_or_insert_with(|| fidl::new_empty!(bool, D));
15037                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
15038                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
15039                {
15040                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
15041                }
15042                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
15043                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
15044                }
15045            }
15046
15047            next_offset += envelope_size;
15048            _next_ordinal_to_read += 1;
15049            if next_offset >= end_offset {
15050                return Ok(());
15051            }
15052
15053            // Decode unknown envelopes for gaps in ordinals.
15054            while _next_ordinal_to_read < 3 {
15055                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15056                _next_ordinal_to_read += 1;
15057                next_offset += envelope_size;
15058            }
15059
15060            let next_out_of_line = decoder.next_out_of_line();
15061            let handles_before = decoder.remaining_handles();
15062            if let Some((inlined, num_bytes, num_handles)) =
15063                fidl::encoding::decode_envelope_header(decoder, next_offset)?
15064            {
15065                let member_inline_size = <fidl::encoding::Vector<
15066                    fidl_fuchsia_net__common::Ipv6Address,
15067                    16,
15068                > as fidl::encoding::TypeMarker>::inline_size(
15069                    decoder.context
15070                );
15071                if inlined != (member_inline_size <= 4) {
15072                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
15073                }
15074                let inner_offset;
15075                let mut inner_depth = depth.clone();
15076                if inlined {
15077                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
15078                    inner_offset = next_offset;
15079                } else {
15080                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
15081                    inner_depth.increment()?;
15082                }
15083                let val_ref =
15084                self.addresses.get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<fidl_fuchsia_net__common::Ipv6Address, 16>, D));
15085                fidl::decode!(fidl::encoding::Vector<fidl_fuchsia_net__common::Ipv6Address, 16>, D, val_ref, decoder, inner_offset, inner_depth)?;
15086                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
15087                {
15088                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
15089                }
15090                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
15091                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
15092                }
15093            }
15094
15095            next_offset += envelope_size;
15096
15097            // Decode the remaining unknown envelopes.
15098            while next_offset < end_offset {
15099                _next_ordinal_to_read += 1;
15100                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15101                next_offset += envelope_size;
15102            }
15103
15104            Ok(())
15105        }
15106    }
15107
15108    impl SrpServerInfo {
15109        #[inline(always)]
15110        fn max_ordinal_present(&self) -> u64 {
15111            if let Some(_) = self.services {
15112                return 8;
15113            }
15114            if let Some(_) = self.hosts {
15115                return 7;
15116            }
15117            if let Some(_) = self.services_registration {
15118                return 6;
15119            }
15120            if let Some(_) = self.hosts_registration {
15121                return 5;
15122            }
15123            if let Some(_) = self.response_counters {
15124                return 4;
15125            }
15126            if let Some(_) = self.address_mode {
15127                return 3;
15128            }
15129            if let Some(_) = self.port {
15130                return 2;
15131            }
15132            if let Some(_) = self.state {
15133                return 1;
15134            }
15135            0
15136        }
15137    }
15138
15139    impl fidl::encoding::ValueTypeMarker for SrpServerInfo {
15140        type Borrowed<'a> = &'a Self;
15141        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
15142            value
15143        }
15144    }
15145
15146    unsafe impl fidl::encoding::TypeMarker for SrpServerInfo {
15147        type Owned = Self;
15148
15149        #[inline(always)]
15150        fn inline_align(_context: fidl::encoding::Context) -> usize {
15151            8
15152        }
15153
15154        #[inline(always)]
15155        fn inline_size(_context: fidl::encoding::Context) -> usize {
15156            16
15157        }
15158    }
15159
15160    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<SrpServerInfo, D>
15161        for &SrpServerInfo
15162    {
15163        unsafe fn encode(
15164            self,
15165            encoder: &mut fidl::encoding::Encoder<'_, D>,
15166            offset: usize,
15167            mut depth: fidl::encoding::Depth,
15168        ) -> fidl::Result<()> {
15169            encoder.debug_check_bounds::<SrpServerInfo>(offset);
15170            // Vector header
15171            let max_ordinal: u64 = self.max_ordinal_present();
15172            encoder.write_num(max_ordinal, offset);
15173            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
15174            // Calling encoder.out_of_line_offset(0) is not allowed.
15175            if max_ordinal == 0 {
15176                return Ok(());
15177            }
15178            depth.increment()?;
15179            let envelope_size = 8;
15180            let bytes_len = max_ordinal as usize * envelope_size;
15181            #[allow(unused_variables)]
15182            let offset = encoder.out_of_line_offset(bytes_len);
15183            let mut _prev_end_offset: usize = 0;
15184            if 1 > max_ordinal {
15185                return Ok(());
15186            }
15187
15188            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
15189            // are envelope_size bytes.
15190            let cur_offset: usize = (1 - 1) * envelope_size;
15191
15192            // Zero reserved fields.
15193            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
15194
15195            // Safety:
15196            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
15197            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
15198            //   envelope_size bytes, there is always sufficient room.
15199            fidl::encoding::encode_in_envelope_optional::<SrpServerState, D>(
15200                self.state
15201                    .as_ref()
15202                    .map(<SrpServerState as fidl::encoding::ValueTypeMarker>::borrow),
15203                encoder,
15204                offset + cur_offset,
15205                depth,
15206            )?;
15207
15208            _prev_end_offset = cur_offset + envelope_size;
15209            if 2 > max_ordinal {
15210                return Ok(());
15211            }
15212
15213            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
15214            // are envelope_size bytes.
15215            let cur_offset: usize = (2 - 1) * envelope_size;
15216
15217            // Zero reserved fields.
15218            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
15219
15220            // Safety:
15221            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
15222            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
15223            //   envelope_size bytes, there is always sufficient room.
15224            fidl::encoding::encode_in_envelope_optional::<u16, D>(
15225                self.port.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
15226                encoder,
15227                offset + cur_offset,
15228                depth,
15229            )?;
15230
15231            _prev_end_offset = cur_offset + envelope_size;
15232            if 3 > max_ordinal {
15233                return Ok(());
15234            }
15235
15236            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
15237            // are envelope_size bytes.
15238            let cur_offset: usize = (3 - 1) * envelope_size;
15239
15240            // Zero reserved fields.
15241            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
15242
15243            // Safety:
15244            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
15245            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
15246            //   envelope_size bytes, there is always sufficient room.
15247            fidl::encoding::encode_in_envelope_optional::<SrpServerAddressMode, D>(
15248                self.address_mode
15249                    .as_ref()
15250                    .map(<SrpServerAddressMode as fidl::encoding::ValueTypeMarker>::borrow),
15251                encoder,
15252                offset + cur_offset,
15253                depth,
15254            )?;
15255
15256            _prev_end_offset = cur_offset + envelope_size;
15257            if 4 > max_ordinal {
15258                return Ok(());
15259            }
15260
15261            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
15262            // are envelope_size bytes.
15263            let cur_offset: usize = (4 - 1) * envelope_size;
15264
15265            // Zero reserved fields.
15266            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
15267
15268            // Safety:
15269            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
15270            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
15271            //   envelope_size bytes, there is always sufficient room.
15272            fidl::encoding::encode_in_envelope_optional::<SrpServerResponseCounters, D>(
15273                self.response_counters
15274                    .as_ref()
15275                    .map(<SrpServerResponseCounters as fidl::encoding::ValueTypeMarker>::borrow),
15276                encoder,
15277                offset + cur_offset,
15278                depth,
15279            )?;
15280
15281            _prev_end_offset = cur_offset + envelope_size;
15282            if 5 > max_ordinal {
15283                return Ok(());
15284            }
15285
15286            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
15287            // are envelope_size bytes.
15288            let cur_offset: usize = (5 - 1) * envelope_size;
15289
15290            // Zero reserved fields.
15291            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
15292
15293            // Safety:
15294            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
15295            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
15296            //   envelope_size bytes, there is always sufficient room.
15297            fidl::encoding::encode_in_envelope_optional::<SrpServerRegistration, D>(
15298                self.hosts_registration
15299                    .as_ref()
15300                    .map(<SrpServerRegistration as fidl::encoding::ValueTypeMarker>::borrow),
15301                encoder,
15302                offset + cur_offset,
15303                depth,
15304            )?;
15305
15306            _prev_end_offset = cur_offset + envelope_size;
15307            if 6 > max_ordinal {
15308                return Ok(());
15309            }
15310
15311            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
15312            // are envelope_size bytes.
15313            let cur_offset: usize = (6 - 1) * envelope_size;
15314
15315            // Zero reserved fields.
15316            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
15317
15318            // Safety:
15319            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
15320            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
15321            //   envelope_size bytes, there is always sufficient room.
15322            fidl::encoding::encode_in_envelope_optional::<SrpServerRegistration, D>(
15323                self.services_registration
15324                    .as_ref()
15325                    .map(<SrpServerRegistration as fidl::encoding::ValueTypeMarker>::borrow),
15326                encoder,
15327                offset + cur_offset,
15328                depth,
15329            )?;
15330
15331            _prev_end_offset = cur_offset + envelope_size;
15332            if 7 > max_ordinal {
15333                return Ok(());
15334            }
15335
15336            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
15337            // are envelope_size bytes.
15338            let cur_offset: usize = (7 - 1) * envelope_size;
15339
15340            // Zero reserved fields.
15341            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
15342
15343            // Safety:
15344            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
15345            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
15346            //   envelope_size bytes, there is always sufficient room.
15347            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<SrpServerHost, 64>, D>(
15348            self.hosts.as_ref().map(<fidl::encoding::Vector<SrpServerHost, 64> as fidl::encoding::ValueTypeMarker>::borrow),
15349            encoder, offset + cur_offset, depth
15350        )?;
15351
15352            _prev_end_offset = cur_offset + envelope_size;
15353            if 8 > max_ordinal {
15354                return Ok(());
15355            }
15356
15357            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
15358            // are envelope_size bytes.
15359            let cur_offset: usize = (8 - 1) * envelope_size;
15360
15361            // Zero reserved fields.
15362            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
15363
15364            // Safety:
15365            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
15366            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
15367            //   envelope_size bytes, there is always sufficient room.
15368            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<SrpServerService, 64>, D>(
15369            self.services.as_ref().map(<fidl::encoding::Vector<SrpServerService, 64> as fidl::encoding::ValueTypeMarker>::borrow),
15370            encoder, offset + cur_offset, depth
15371        )?;
15372
15373            _prev_end_offset = cur_offset + envelope_size;
15374
15375            Ok(())
15376        }
15377    }
15378
15379    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SrpServerInfo {
15380        #[inline(always)]
15381        fn new_empty() -> Self {
15382            Self::default()
15383        }
15384
15385        unsafe fn decode(
15386            &mut self,
15387            decoder: &mut fidl::encoding::Decoder<'_, D>,
15388            offset: usize,
15389            mut depth: fidl::encoding::Depth,
15390        ) -> fidl::Result<()> {
15391            decoder.debug_check_bounds::<Self>(offset);
15392            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
15393                None => return Err(fidl::Error::NotNullable),
15394                Some(len) => len,
15395            };
15396            // Calling decoder.out_of_line_offset(0) is not allowed.
15397            if len == 0 {
15398                return Ok(());
15399            };
15400            depth.increment()?;
15401            let envelope_size = 8;
15402            let bytes_len = len * envelope_size;
15403            let offset = decoder.out_of_line_offset(bytes_len)?;
15404            // Decode the envelope for each type.
15405            let mut _next_ordinal_to_read = 0;
15406            let mut next_offset = offset;
15407            let end_offset = offset + bytes_len;
15408            _next_ordinal_to_read += 1;
15409            if next_offset >= end_offset {
15410                return Ok(());
15411            }
15412
15413            // Decode unknown envelopes for gaps in ordinals.
15414            while _next_ordinal_to_read < 1 {
15415                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15416                _next_ordinal_to_read += 1;
15417                next_offset += envelope_size;
15418            }
15419
15420            let next_out_of_line = decoder.next_out_of_line();
15421            let handles_before = decoder.remaining_handles();
15422            if let Some((inlined, num_bytes, num_handles)) =
15423                fidl::encoding::decode_envelope_header(decoder, next_offset)?
15424            {
15425                let member_inline_size =
15426                    <SrpServerState as fidl::encoding::TypeMarker>::inline_size(decoder.context);
15427                if inlined != (member_inline_size <= 4) {
15428                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
15429                }
15430                let inner_offset;
15431                let mut inner_depth = depth.clone();
15432                if inlined {
15433                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
15434                    inner_offset = next_offset;
15435                } else {
15436                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
15437                    inner_depth.increment()?;
15438                }
15439                let val_ref = self.state.get_or_insert_with(|| fidl::new_empty!(SrpServerState, D));
15440                fidl::decode!(SrpServerState, D, val_ref, decoder, inner_offset, inner_depth)?;
15441                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
15442                {
15443                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
15444                }
15445                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
15446                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
15447                }
15448            }
15449
15450            next_offset += envelope_size;
15451            _next_ordinal_to_read += 1;
15452            if next_offset >= end_offset {
15453                return Ok(());
15454            }
15455
15456            // Decode unknown envelopes for gaps in ordinals.
15457            while _next_ordinal_to_read < 2 {
15458                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15459                _next_ordinal_to_read += 1;
15460                next_offset += envelope_size;
15461            }
15462
15463            let next_out_of_line = decoder.next_out_of_line();
15464            let handles_before = decoder.remaining_handles();
15465            if let Some((inlined, num_bytes, num_handles)) =
15466                fidl::encoding::decode_envelope_header(decoder, next_offset)?
15467            {
15468                let member_inline_size =
15469                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
15470                if inlined != (member_inline_size <= 4) {
15471                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
15472                }
15473                let inner_offset;
15474                let mut inner_depth = depth.clone();
15475                if inlined {
15476                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
15477                    inner_offset = next_offset;
15478                } else {
15479                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
15480                    inner_depth.increment()?;
15481                }
15482                let val_ref = self.port.get_or_insert_with(|| fidl::new_empty!(u16, D));
15483                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
15484                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
15485                {
15486                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
15487                }
15488                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
15489                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
15490                }
15491            }
15492
15493            next_offset += envelope_size;
15494            _next_ordinal_to_read += 1;
15495            if next_offset >= end_offset {
15496                return Ok(());
15497            }
15498
15499            // Decode unknown envelopes for gaps in ordinals.
15500            while _next_ordinal_to_read < 3 {
15501                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15502                _next_ordinal_to_read += 1;
15503                next_offset += envelope_size;
15504            }
15505
15506            let next_out_of_line = decoder.next_out_of_line();
15507            let handles_before = decoder.remaining_handles();
15508            if let Some((inlined, num_bytes, num_handles)) =
15509                fidl::encoding::decode_envelope_header(decoder, next_offset)?
15510            {
15511                let member_inline_size =
15512                    <SrpServerAddressMode as fidl::encoding::TypeMarker>::inline_size(
15513                        decoder.context,
15514                    );
15515                if inlined != (member_inline_size <= 4) {
15516                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
15517                }
15518                let inner_offset;
15519                let mut inner_depth = depth.clone();
15520                if inlined {
15521                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
15522                    inner_offset = next_offset;
15523                } else {
15524                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
15525                    inner_depth.increment()?;
15526                }
15527                let val_ref = self
15528                    .address_mode
15529                    .get_or_insert_with(|| fidl::new_empty!(SrpServerAddressMode, D));
15530                fidl::decode!(
15531                    SrpServerAddressMode,
15532                    D,
15533                    val_ref,
15534                    decoder,
15535                    inner_offset,
15536                    inner_depth
15537                )?;
15538                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
15539                {
15540                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
15541                }
15542                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
15543                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
15544                }
15545            }
15546
15547            next_offset += envelope_size;
15548            _next_ordinal_to_read += 1;
15549            if next_offset >= end_offset {
15550                return Ok(());
15551            }
15552
15553            // Decode unknown envelopes for gaps in ordinals.
15554            while _next_ordinal_to_read < 4 {
15555                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15556                _next_ordinal_to_read += 1;
15557                next_offset += envelope_size;
15558            }
15559
15560            let next_out_of_line = decoder.next_out_of_line();
15561            let handles_before = decoder.remaining_handles();
15562            if let Some((inlined, num_bytes, num_handles)) =
15563                fidl::encoding::decode_envelope_header(decoder, next_offset)?
15564            {
15565                let member_inline_size =
15566                    <SrpServerResponseCounters as fidl::encoding::TypeMarker>::inline_size(
15567                        decoder.context,
15568                    );
15569                if inlined != (member_inline_size <= 4) {
15570                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
15571                }
15572                let inner_offset;
15573                let mut inner_depth = depth.clone();
15574                if inlined {
15575                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
15576                    inner_offset = next_offset;
15577                } else {
15578                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
15579                    inner_depth.increment()?;
15580                }
15581                let val_ref = self
15582                    .response_counters
15583                    .get_or_insert_with(|| fidl::new_empty!(SrpServerResponseCounters, D));
15584                fidl::decode!(
15585                    SrpServerResponseCounters,
15586                    D,
15587                    val_ref,
15588                    decoder,
15589                    inner_offset,
15590                    inner_depth
15591                )?;
15592                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
15593                {
15594                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
15595                }
15596                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
15597                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
15598                }
15599            }
15600
15601            next_offset += envelope_size;
15602            _next_ordinal_to_read += 1;
15603            if next_offset >= end_offset {
15604                return Ok(());
15605            }
15606
15607            // Decode unknown envelopes for gaps in ordinals.
15608            while _next_ordinal_to_read < 5 {
15609                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15610                _next_ordinal_to_read += 1;
15611                next_offset += envelope_size;
15612            }
15613
15614            let next_out_of_line = decoder.next_out_of_line();
15615            let handles_before = decoder.remaining_handles();
15616            if let Some((inlined, num_bytes, num_handles)) =
15617                fidl::encoding::decode_envelope_header(decoder, next_offset)?
15618            {
15619                let member_inline_size =
15620                    <SrpServerRegistration as fidl::encoding::TypeMarker>::inline_size(
15621                        decoder.context,
15622                    );
15623                if inlined != (member_inline_size <= 4) {
15624                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
15625                }
15626                let inner_offset;
15627                let mut inner_depth = depth.clone();
15628                if inlined {
15629                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
15630                    inner_offset = next_offset;
15631                } else {
15632                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
15633                    inner_depth.increment()?;
15634                }
15635                let val_ref = self
15636                    .hosts_registration
15637                    .get_or_insert_with(|| fidl::new_empty!(SrpServerRegistration, D));
15638                fidl::decode!(
15639                    SrpServerRegistration,
15640                    D,
15641                    val_ref,
15642                    decoder,
15643                    inner_offset,
15644                    inner_depth
15645                )?;
15646                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
15647                {
15648                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
15649                }
15650                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
15651                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
15652                }
15653            }
15654
15655            next_offset += envelope_size;
15656            _next_ordinal_to_read += 1;
15657            if next_offset >= end_offset {
15658                return Ok(());
15659            }
15660
15661            // Decode unknown envelopes for gaps in ordinals.
15662            while _next_ordinal_to_read < 6 {
15663                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15664                _next_ordinal_to_read += 1;
15665                next_offset += envelope_size;
15666            }
15667
15668            let next_out_of_line = decoder.next_out_of_line();
15669            let handles_before = decoder.remaining_handles();
15670            if let Some((inlined, num_bytes, num_handles)) =
15671                fidl::encoding::decode_envelope_header(decoder, next_offset)?
15672            {
15673                let member_inline_size =
15674                    <SrpServerRegistration as fidl::encoding::TypeMarker>::inline_size(
15675                        decoder.context,
15676                    );
15677                if inlined != (member_inline_size <= 4) {
15678                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
15679                }
15680                let inner_offset;
15681                let mut inner_depth = depth.clone();
15682                if inlined {
15683                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
15684                    inner_offset = next_offset;
15685                } else {
15686                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
15687                    inner_depth.increment()?;
15688                }
15689                let val_ref = self
15690                    .services_registration
15691                    .get_or_insert_with(|| fidl::new_empty!(SrpServerRegistration, D));
15692                fidl::decode!(
15693                    SrpServerRegistration,
15694                    D,
15695                    val_ref,
15696                    decoder,
15697                    inner_offset,
15698                    inner_depth
15699                )?;
15700                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
15701                {
15702                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
15703                }
15704                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
15705                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
15706                }
15707            }
15708
15709            next_offset += envelope_size;
15710            _next_ordinal_to_read += 1;
15711            if next_offset >= end_offset {
15712                return Ok(());
15713            }
15714
15715            // Decode unknown envelopes for gaps in ordinals.
15716            while _next_ordinal_to_read < 7 {
15717                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15718                _next_ordinal_to_read += 1;
15719                next_offset += envelope_size;
15720            }
15721
15722            let next_out_of_line = decoder.next_out_of_line();
15723            let handles_before = decoder.remaining_handles();
15724            if let Some((inlined, num_bytes, num_handles)) =
15725                fidl::encoding::decode_envelope_header(decoder, next_offset)?
15726            {
15727                let member_inline_size = <fidl::encoding::Vector<SrpServerHost, 64> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
15728                if inlined != (member_inline_size <= 4) {
15729                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
15730                }
15731                let inner_offset;
15732                let mut inner_depth = depth.clone();
15733                if inlined {
15734                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
15735                    inner_offset = next_offset;
15736                } else {
15737                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
15738                    inner_depth.increment()?;
15739                }
15740                let val_ref = self.hosts.get_or_insert_with(
15741                    || fidl::new_empty!(fidl::encoding::Vector<SrpServerHost, 64>, D),
15742                );
15743                fidl::decode!(fidl::encoding::Vector<SrpServerHost, 64>, D, val_ref, decoder, inner_offset, inner_depth)?;
15744                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
15745                {
15746                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
15747                }
15748                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
15749                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
15750                }
15751            }
15752
15753            next_offset += envelope_size;
15754            _next_ordinal_to_read += 1;
15755            if next_offset >= end_offset {
15756                return Ok(());
15757            }
15758
15759            // Decode unknown envelopes for gaps in ordinals.
15760            while _next_ordinal_to_read < 8 {
15761                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15762                _next_ordinal_to_read += 1;
15763                next_offset += envelope_size;
15764            }
15765
15766            let next_out_of_line = decoder.next_out_of_line();
15767            let handles_before = decoder.remaining_handles();
15768            if let Some((inlined, num_bytes, num_handles)) =
15769                fidl::encoding::decode_envelope_header(decoder, next_offset)?
15770            {
15771                let member_inline_size = <fidl::encoding::Vector<SrpServerService, 64> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
15772                if inlined != (member_inline_size <= 4) {
15773                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
15774                }
15775                let inner_offset;
15776                let mut inner_depth = depth.clone();
15777                if inlined {
15778                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
15779                    inner_offset = next_offset;
15780                } else {
15781                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
15782                    inner_depth.increment()?;
15783                }
15784                let val_ref = self.services.get_or_insert_with(
15785                    || fidl::new_empty!(fidl::encoding::Vector<SrpServerService, 64>, D),
15786                );
15787                fidl::decode!(fidl::encoding::Vector<SrpServerService, 64>, D, val_ref, decoder, inner_offset, inner_depth)?;
15788                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
15789                {
15790                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
15791                }
15792                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
15793                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
15794                }
15795            }
15796
15797            next_offset += envelope_size;
15798
15799            // Decode the remaining unknown envelopes.
15800            while next_offset < end_offset {
15801                _next_ordinal_to_read += 1;
15802                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15803                next_offset += envelope_size;
15804            }
15805
15806            Ok(())
15807        }
15808    }
15809
15810    impl SrpServerRegistration {
15811        #[inline(always)]
15812        fn max_ordinal_present(&self) -> u64 {
15813            if let Some(_) = self.remaining_key_lease_time_total {
15814                return 6;
15815            }
15816            if let Some(_) = self.remaining_lease_time_total {
15817                return 5;
15818            }
15819            if let Some(_) = self.key_lease_time_total {
15820                return 4;
15821            }
15822            if let Some(_) = self.lease_time_total {
15823                return 3;
15824            }
15825            if let Some(_) = self.deleted_count {
15826                return 2;
15827            }
15828            if let Some(_) = self.fresh_count {
15829                return 1;
15830            }
15831            0
15832        }
15833    }
15834
15835    impl fidl::encoding::ValueTypeMarker for SrpServerRegistration {
15836        type Borrowed<'a> = &'a Self;
15837        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
15838            value
15839        }
15840    }
15841
15842    unsafe impl fidl::encoding::TypeMarker for SrpServerRegistration {
15843        type Owned = Self;
15844
15845        #[inline(always)]
15846        fn inline_align(_context: fidl::encoding::Context) -> usize {
15847            8
15848        }
15849
15850        #[inline(always)]
15851        fn inline_size(_context: fidl::encoding::Context) -> usize {
15852            16
15853        }
15854    }
15855
15856    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<SrpServerRegistration, D>
15857        for &SrpServerRegistration
15858    {
15859        unsafe fn encode(
15860            self,
15861            encoder: &mut fidl::encoding::Encoder<'_, D>,
15862            offset: usize,
15863            mut depth: fidl::encoding::Depth,
15864        ) -> fidl::Result<()> {
15865            encoder.debug_check_bounds::<SrpServerRegistration>(offset);
15866            // Vector header
15867            let max_ordinal: u64 = self.max_ordinal_present();
15868            encoder.write_num(max_ordinal, offset);
15869            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
15870            // Calling encoder.out_of_line_offset(0) is not allowed.
15871            if max_ordinal == 0 {
15872                return Ok(());
15873            }
15874            depth.increment()?;
15875            let envelope_size = 8;
15876            let bytes_len = max_ordinal as usize * envelope_size;
15877            #[allow(unused_variables)]
15878            let offset = encoder.out_of_line_offset(bytes_len);
15879            let mut _prev_end_offset: usize = 0;
15880            if 1 > max_ordinal {
15881                return Ok(());
15882            }
15883
15884            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
15885            // are envelope_size bytes.
15886            let cur_offset: usize = (1 - 1) * envelope_size;
15887
15888            // Zero reserved fields.
15889            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
15890
15891            // Safety:
15892            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
15893            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
15894            //   envelope_size bytes, there is always sufficient room.
15895            fidl::encoding::encode_in_envelope_optional::<u32, D>(
15896                self.fresh_count.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
15897                encoder,
15898                offset + cur_offset,
15899                depth,
15900            )?;
15901
15902            _prev_end_offset = cur_offset + envelope_size;
15903            if 2 > max_ordinal {
15904                return Ok(());
15905            }
15906
15907            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
15908            // are envelope_size bytes.
15909            let cur_offset: usize = (2 - 1) * envelope_size;
15910
15911            // Zero reserved fields.
15912            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
15913
15914            // Safety:
15915            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
15916            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
15917            //   envelope_size bytes, there is always sufficient room.
15918            fidl::encoding::encode_in_envelope_optional::<u32, D>(
15919                self.deleted_count.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
15920                encoder,
15921                offset + cur_offset,
15922                depth,
15923            )?;
15924
15925            _prev_end_offset = cur_offset + envelope_size;
15926            if 3 > max_ordinal {
15927                return Ok(());
15928            }
15929
15930            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
15931            // are envelope_size bytes.
15932            let cur_offset: usize = (3 - 1) * envelope_size;
15933
15934            // Zero reserved fields.
15935            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
15936
15937            // Safety:
15938            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
15939            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
15940            //   envelope_size bytes, there is always sufficient room.
15941            fidl::encoding::encode_in_envelope_optional::<i64, D>(
15942                self.lease_time_total
15943                    .as_ref()
15944                    .map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
15945                encoder,
15946                offset + cur_offset,
15947                depth,
15948            )?;
15949
15950            _prev_end_offset = cur_offset + envelope_size;
15951            if 4 > max_ordinal {
15952                return Ok(());
15953            }
15954
15955            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
15956            // are envelope_size bytes.
15957            let cur_offset: usize = (4 - 1) * envelope_size;
15958
15959            // Zero reserved fields.
15960            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
15961
15962            // Safety:
15963            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
15964            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
15965            //   envelope_size bytes, there is always sufficient room.
15966            fidl::encoding::encode_in_envelope_optional::<i64, D>(
15967                self.key_lease_time_total
15968                    .as_ref()
15969                    .map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
15970                encoder,
15971                offset + cur_offset,
15972                depth,
15973            )?;
15974
15975            _prev_end_offset = cur_offset + envelope_size;
15976            if 5 > max_ordinal {
15977                return Ok(());
15978            }
15979
15980            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
15981            // are envelope_size bytes.
15982            let cur_offset: usize = (5 - 1) * envelope_size;
15983
15984            // Zero reserved fields.
15985            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
15986
15987            // Safety:
15988            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
15989            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
15990            //   envelope_size bytes, there is always sufficient room.
15991            fidl::encoding::encode_in_envelope_optional::<i64, D>(
15992                self.remaining_lease_time_total
15993                    .as_ref()
15994                    .map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
15995                encoder,
15996                offset + cur_offset,
15997                depth,
15998            )?;
15999
16000            _prev_end_offset = cur_offset + envelope_size;
16001            if 6 > max_ordinal {
16002                return Ok(());
16003            }
16004
16005            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
16006            // are envelope_size bytes.
16007            let cur_offset: usize = (6 - 1) * envelope_size;
16008
16009            // Zero reserved fields.
16010            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
16011
16012            // Safety:
16013            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
16014            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
16015            //   envelope_size bytes, there is always sufficient room.
16016            fidl::encoding::encode_in_envelope_optional::<i64, D>(
16017                self.remaining_key_lease_time_total
16018                    .as_ref()
16019                    .map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
16020                encoder,
16021                offset + cur_offset,
16022                depth,
16023            )?;
16024
16025            _prev_end_offset = cur_offset + envelope_size;
16026
16027            Ok(())
16028        }
16029    }
16030
16031    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SrpServerRegistration {
16032        #[inline(always)]
16033        fn new_empty() -> Self {
16034            Self::default()
16035        }
16036
16037        unsafe fn decode(
16038            &mut self,
16039            decoder: &mut fidl::encoding::Decoder<'_, D>,
16040            offset: usize,
16041            mut depth: fidl::encoding::Depth,
16042        ) -> fidl::Result<()> {
16043            decoder.debug_check_bounds::<Self>(offset);
16044            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
16045                None => return Err(fidl::Error::NotNullable),
16046                Some(len) => len,
16047            };
16048            // Calling decoder.out_of_line_offset(0) is not allowed.
16049            if len == 0 {
16050                return Ok(());
16051            };
16052            depth.increment()?;
16053            let envelope_size = 8;
16054            let bytes_len = len * envelope_size;
16055            let offset = decoder.out_of_line_offset(bytes_len)?;
16056            // Decode the envelope for each type.
16057            let mut _next_ordinal_to_read = 0;
16058            let mut next_offset = offset;
16059            let end_offset = offset + bytes_len;
16060            _next_ordinal_to_read += 1;
16061            if next_offset >= end_offset {
16062                return Ok(());
16063            }
16064
16065            // Decode unknown envelopes for gaps in ordinals.
16066            while _next_ordinal_to_read < 1 {
16067                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
16068                _next_ordinal_to_read += 1;
16069                next_offset += envelope_size;
16070            }
16071
16072            let next_out_of_line = decoder.next_out_of_line();
16073            let handles_before = decoder.remaining_handles();
16074            if let Some((inlined, num_bytes, num_handles)) =
16075                fidl::encoding::decode_envelope_header(decoder, next_offset)?
16076            {
16077                let member_inline_size =
16078                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
16079                if inlined != (member_inline_size <= 4) {
16080                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
16081                }
16082                let inner_offset;
16083                let mut inner_depth = depth.clone();
16084                if inlined {
16085                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
16086                    inner_offset = next_offset;
16087                } else {
16088                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
16089                    inner_depth.increment()?;
16090                }
16091                let val_ref = self.fresh_count.get_or_insert_with(|| fidl::new_empty!(u32, D));
16092                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
16093                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
16094                {
16095                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
16096                }
16097                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
16098                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
16099                }
16100            }
16101
16102            next_offset += envelope_size;
16103            _next_ordinal_to_read += 1;
16104            if next_offset >= end_offset {
16105                return Ok(());
16106            }
16107
16108            // Decode unknown envelopes for gaps in ordinals.
16109            while _next_ordinal_to_read < 2 {
16110                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
16111                _next_ordinal_to_read += 1;
16112                next_offset += envelope_size;
16113            }
16114
16115            let next_out_of_line = decoder.next_out_of_line();
16116            let handles_before = decoder.remaining_handles();
16117            if let Some((inlined, num_bytes, num_handles)) =
16118                fidl::encoding::decode_envelope_header(decoder, next_offset)?
16119            {
16120                let member_inline_size =
16121                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
16122                if inlined != (member_inline_size <= 4) {
16123                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
16124                }
16125                let inner_offset;
16126                let mut inner_depth = depth.clone();
16127                if inlined {
16128                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
16129                    inner_offset = next_offset;
16130                } else {
16131                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
16132                    inner_depth.increment()?;
16133                }
16134                let val_ref = self.deleted_count.get_or_insert_with(|| fidl::new_empty!(u32, D));
16135                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
16136                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
16137                {
16138                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
16139                }
16140                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
16141                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
16142                }
16143            }
16144
16145            next_offset += envelope_size;
16146            _next_ordinal_to_read += 1;
16147            if next_offset >= end_offset {
16148                return Ok(());
16149            }
16150
16151            // Decode unknown envelopes for gaps in ordinals.
16152            while _next_ordinal_to_read < 3 {
16153                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
16154                _next_ordinal_to_read += 1;
16155                next_offset += envelope_size;
16156            }
16157
16158            let next_out_of_line = decoder.next_out_of_line();
16159            let handles_before = decoder.remaining_handles();
16160            if let Some((inlined, num_bytes, num_handles)) =
16161                fidl::encoding::decode_envelope_header(decoder, next_offset)?
16162            {
16163                let member_inline_size =
16164                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
16165                if inlined != (member_inline_size <= 4) {
16166                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
16167                }
16168                let inner_offset;
16169                let mut inner_depth = depth.clone();
16170                if inlined {
16171                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
16172                    inner_offset = next_offset;
16173                } else {
16174                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
16175                    inner_depth.increment()?;
16176                }
16177                let val_ref = self.lease_time_total.get_or_insert_with(|| fidl::new_empty!(i64, D));
16178                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
16179                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
16180                {
16181                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
16182                }
16183                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
16184                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
16185                }
16186            }
16187
16188            next_offset += envelope_size;
16189            _next_ordinal_to_read += 1;
16190            if next_offset >= end_offset {
16191                return Ok(());
16192            }
16193
16194            // Decode unknown envelopes for gaps in ordinals.
16195            while _next_ordinal_to_read < 4 {
16196                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
16197                _next_ordinal_to_read += 1;
16198                next_offset += envelope_size;
16199            }
16200
16201            let next_out_of_line = decoder.next_out_of_line();
16202            let handles_before = decoder.remaining_handles();
16203            if let Some((inlined, num_bytes, num_handles)) =
16204                fidl::encoding::decode_envelope_header(decoder, next_offset)?
16205            {
16206                let member_inline_size =
16207                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
16208                if inlined != (member_inline_size <= 4) {
16209                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
16210                }
16211                let inner_offset;
16212                let mut inner_depth = depth.clone();
16213                if inlined {
16214                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
16215                    inner_offset = next_offset;
16216                } else {
16217                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
16218                    inner_depth.increment()?;
16219                }
16220                let val_ref =
16221                    self.key_lease_time_total.get_or_insert_with(|| fidl::new_empty!(i64, D));
16222                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
16223                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
16224                {
16225                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
16226                }
16227                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
16228                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
16229                }
16230            }
16231
16232            next_offset += envelope_size;
16233            _next_ordinal_to_read += 1;
16234            if next_offset >= end_offset {
16235                return Ok(());
16236            }
16237
16238            // Decode unknown envelopes for gaps in ordinals.
16239            while _next_ordinal_to_read < 5 {
16240                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
16241                _next_ordinal_to_read += 1;
16242                next_offset += envelope_size;
16243            }
16244
16245            let next_out_of_line = decoder.next_out_of_line();
16246            let handles_before = decoder.remaining_handles();
16247            if let Some((inlined, num_bytes, num_handles)) =
16248                fidl::encoding::decode_envelope_header(decoder, next_offset)?
16249            {
16250                let member_inline_size =
16251                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
16252                if inlined != (member_inline_size <= 4) {
16253                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
16254                }
16255                let inner_offset;
16256                let mut inner_depth = depth.clone();
16257                if inlined {
16258                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
16259                    inner_offset = next_offset;
16260                } else {
16261                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
16262                    inner_depth.increment()?;
16263                }
16264                let val_ref =
16265                    self.remaining_lease_time_total.get_or_insert_with(|| fidl::new_empty!(i64, D));
16266                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
16267                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
16268                {
16269                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
16270                }
16271                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
16272                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
16273                }
16274            }
16275
16276            next_offset += envelope_size;
16277            _next_ordinal_to_read += 1;
16278            if next_offset >= end_offset {
16279                return Ok(());
16280            }
16281
16282            // Decode unknown envelopes for gaps in ordinals.
16283            while _next_ordinal_to_read < 6 {
16284                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
16285                _next_ordinal_to_read += 1;
16286                next_offset += envelope_size;
16287            }
16288
16289            let next_out_of_line = decoder.next_out_of_line();
16290            let handles_before = decoder.remaining_handles();
16291            if let Some((inlined, num_bytes, num_handles)) =
16292                fidl::encoding::decode_envelope_header(decoder, next_offset)?
16293            {
16294                let member_inline_size =
16295                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
16296                if inlined != (member_inline_size <= 4) {
16297                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
16298                }
16299                let inner_offset;
16300                let mut inner_depth = depth.clone();
16301                if inlined {
16302                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
16303                    inner_offset = next_offset;
16304                } else {
16305                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
16306                    inner_depth.increment()?;
16307                }
16308                let val_ref = self
16309                    .remaining_key_lease_time_total
16310                    .get_or_insert_with(|| fidl::new_empty!(i64, D));
16311                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
16312                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
16313                {
16314                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
16315                }
16316                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
16317                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
16318                }
16319            }
16320
16321            next_offset += envelope_size;
16322
16323            // Decode the remaining unknown envelopes.
16324            while next_offset < end_offset {
16325                _next_ordinal_to_read += 1;
16326                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
16327                next_offset += envelope_size;
16328            }
16329
16330            Ok(())
16331        }
16332    }
16333
16334    impl SrpServerResponseCounters {
16335        #[inline(always)]
16336        fn max_ordinal_present(&self) -> u64 {
16337            if let Some(_) = self.other_response {
16338                return 6;
16339            }
16340            if let Some(_) = self.refused_response {
16341                return 5;
16342            }
16343            if let Some(_) = self.name_exists_response {
16344                return 4;
16345            }
16346            if let Some(_) = self.format_error_response {
16347                return 3;
16348            }
16349            if let Some(_) = self.server_failure_response {
16350                return 2;
16351            }
16352            if let Some(_) = self.success_response {
16353                return 1;
16354            }
16355            0
16356        }
16357    }
16358
16359    impl fidl::encoding::ValueTypeMarker for SrpServerResponseCounters {
16360        type Borrowed<'a> = &'a Self;
16361        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
16362            value
16363        }
16364    }
16365
16366    unsafe impl fidl::encoding::TypeMarker for SrpServerResponseCounters {
16367        type Owned = Self;
16368
16369        #[inline(always)]
16370        fn inline_align(_context: fidl::encoding::Context) -> usize {
16371            8
16372        }
16373
16374        #[inline(always)]
16375        fn inline_size(_context: fidl::encoding::Context) -> usize {
16376            16
16377        }
16378    }
16379
16380    unsafe impl<D: fidl::encoding::ResourceDialect>
16381        fidl::encoding::Encode<SrpServerResponseCounters, D> for &SrpServerResponseCounters
16382    {
16383        unsafe fn encode(
16384            self,
16385            encoder: &mut fidl::encoding::Encoder<'_, D>,
16386            offset: usize,
16387            mut depth: fidl::encoding::Depth,
16388        ) -> fidl::Result<()> {
16389            encoder.debug_check_bounds::<SrpServerResponseCounters>(offset);
16390            // Vector header
16391            let max_ordinal: u64 = self.max_ordinal_present();
16392            encoder.write_num(max_ordinal, offset);
16393            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
16394            // Calling encoder.out_of_line_offset(0) is not allowed.
16395            if max_ordinal == 0 {
16396                return Ok(());
16397            }
16398            depth.increment()?;
16399            let envelope_size = 8;
16400            let bytes_len = max_ordinal as usize * envelope_size;
16401            #[allow(unused_variables)]
16402            let offset = encoder.out_of_line_offset(bytes_len);
16403            let mut _prev_end_offset: usize = 0;
16404            if 1 > max_ordinal {
16405                return Ok(());
16406            }
16407
16408            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
16409            // are envelope_size bytes.
16410            let cur_offset: usize = (1 - 1) * envelope_size;
16411
16412            // Zero reserved fields.
16413            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
16414
16415            // Safety:
16416            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
16417            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
16418            //   envelope_size bytes, there is always sufficient room.
16419            fidl::encoding::encode_in_envelope_optional::<u32, D>(
16420                self.success_response
16421                    .as_ref()
16422                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
16423                encoder,
16424                offset + cur_offset,
16425                depth,
16426            )?;
16427
16428            _prev_end_offset = cur_offset + envelope_size;
16429            if 2 > max_ordinal {
16430                return Ok(());
16431            }
16432
16433            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
16434            // are envelope_size bytes.
16435            let cur_offset: usize = (2 - 1) * envelope_size;
16436
16437            // Zero reserved fields.
16438            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
16439
16440            // Safety:
16441            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
16442            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
16443            //   envelope_size bytes, there is always sufficient room.
16444            fidl::encoding::encode_in_envelope_optional::<u32, D>(
16445                self.server_failure_response
16446                    .as_ref()
16447                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
16448                encoder,
16449                offset + cur_offset,
16450                depth,
16451            )?;
16452
16453            _prev_end_offset = cur_offset + envelope_size;
16454            if 3 > max_ordinal {
16455                return Ok(());
16456            }
16457
16458            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
16459            // are envelope_size bytes.
16460            let cur_offset: usize = (3 - 1) * envelope_size;
16461
16462            // Zero reserved fields.
16463            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
16464
16465            // Safety:
16466            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
16467            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
16468            //   envelope_size bytes, there is always sufficient room.
16469            fidl::encoding::encode_in_envelope_optional::<u32, D>(
16470                self.format_error_response
16471                    .as_ref()
16472                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
16473                encoder,
16474                offset + cur_offset,
16475                depth,
16476            )?;
16477
16478            _prev_end_offset = cur_offset + envelope_size;
16479            if 4 > max_ordinal {
16480                return Ok(());
16481            }
16482
16483            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
16484            // are envelope_size bytes.
16485            let cur_offset: usize = (4 - 1) * envelope_size;
16486
16487            // Zero reserved fields.
16488            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
16489
16490            // Safety:
16491            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
16492            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
16493            //   envelope_size bytes, there is always sufficient room.
16494            fidl::encoding::encode_in_envelope_optional::<u32, D>(
16495                self.name_exists_response
16496                    .as_ref()
16497                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
16498                encoder,
16499                offset + cur_offset,
16500                depth,
16501            )?;
16502
16503            _prev_end_offset = cur_offset + envelope_size;
16504            if 5 > max_ordinal {
16505                return Ok(());
16506            }
16507
16508            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
16509            // are envelope_size bytes.
16510            let cur_offset: usize = (5 - 1) * envelope_size;
16511
16512            // Zero reserved fields.
16513            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
16514
16515            // Safety:
16516            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
16517            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
16518            //   envelope_size bytes, there is always sufficient room.
16519            fidl::encoding::encode_in_envelope_optional::<u32, D>(
16520                self.refused_response
16521                    .as_ref()
16522                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
16523                encoder,
16524                offset + cur_offset,
16525                depth,
16526            )?;
16527
16528            _prev_end_offset = cur_offset + envelope_size;
16529            if 6 > max_ordinal {
16530                return Ok(());
16531            }
16532
16533            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
16534            // are envelope_size bytes.
16535            let cur_offset: usize = (6 - 1) * envelope_size;
16536
16537            // Zero reserved fields.
16538            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
16539
16540            // Safety:
16541            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
16542            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
16543            //   envelope_size bytes, there is always sufficient room.
16544            fidl::encoding::encode_in_envelope_optional::<u32, D>(
16545                self.other_response.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
16546                encoder,
16547                offset + cur_offset,
16548                depth,
16549            )?;
16550
16551            _prev_end_offset = cur_offset + envelope_size;
16552
16553            Ok(())
16554        }
16555    }
16556
16557    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
16558        for SrpServerResponseCounters
16559    {
16560        #[inline(always)]
16561        fn new_empty() -> Self {
16562            Self::default()
16563        }
16564
16565        unsafe fn decode(
16566            &mut self,
16567            decoder: &mut fidl::encoding::Decoder<'_, D>,
16568            offset: usize,
16569            mut depth: fidl::encoding::Depth,
16570        ) -> fidl::Result<()> {
16571            decoder.debug_check_bounds::<Self>(offset);
16572            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
16573                None => return Err(fidl::Error::NotNullable),
16574                Some(len) => len,
16575            };
16576            // Calling decoder.out_of_line_offset(0) is not allowed.
16577            if len == 0 {
16578                return Ok(());
16579            };
16580            depth.increment()?;
16581            let envelope_size = 8;
16582            let bytes_len = len * envelope_size;
16583            let offset = decoder.out_of_line_offset(bytes_len)?;
16584            // Decode the envelope for each type.
16585            let mut _next_ordinal_to_read = 0;
16586            let mut next_offset = offset;
16587            let end_offset = offset + bytes_len;
16588            _next_ordinal_to_read += 1;
16589            if next_offset >= end_offset {
16590                return Ok(());
16591            }
16592
16593            // Decode unknown envelopes for gaps in ordinals.
16594            while _next_ordinal_to_read < 1 {
16595                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
16596                _next_ordinal_to_read += 1;
16597                next_offset += envelope_size;
16598            }
16599
16600            let next_out_of_line = decoder.next_out_of_line();
16601            let handles_before = decoder.remaining_handles();
16602            if let Some((inlined, num_bytes, num_handles)) =
16603                fidl::encoding::decode_envelope_header(decoder, next_offset)?
16604            {
16605                let member_inline_size =
16606                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
16607                if inlined != (member_inline_size <= 4) {
16608                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
16609                }
16610                let inner_offset;
16611                let mut inner_depth = depth.clone();
16612                if inlined {
16613                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
16614                    inner_offset = next_offset;
16615                } else {
16616                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
16617                    inner_depth.increment()?;
16618                }
16619                let val_ref = self.success_response.get_or_insert_with(|| fidl::new_empty!(u32, D));
16620                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
16621                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
16622                {
16623                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
16624                }
16625                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
16626                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
16627                }
16628            }
16629
16630            next_offset += envelope_size;
16631            _next_ordinal_to_read += 1;
16632            if next_offset >= end_offset {
16633                return Ok(());
16634            }
16635
16636            // Decode unknown envelopes for gaps in ordinals.
16637            while _next_ordinal_to_read < 2 {
16638                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
16639                _next_ordinal_to_read += 1;
16640                next_offset += envelope_size;
16641            }
16642
16643            let next_out_of_line = decoder.next_out_of_line();
16644            let handles_before = decoder.remaining_handles();
16645            if let Some((inlined, num_bytes, num_handles)) =
16646                fidl::encoding::decode_envelope_header(decoder, next_offset)?
16647            {
16648                let member_inline_size =
16649                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
16650                if inlined != (member_inline_size <= 4) {
16651                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
16652                }
16653                let inner_offset;
16654                let mut inner_depth = depth.clone();
16655                if inlined {
16656                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
16657                    inner_offset = next_offset;
16658                } else {
16659                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
16660                    inner_depth.increment()?;
16661                }
16662                let val_ref =
16663                    self.server_failure_response.get_or_insert_with(|| fidl::new_empty!(u32, D));
16664                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
16665                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
16666                {
16667                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
16668                }
16669                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
16670                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
16671                }
16672            }
16673
16674            next_offset += envelope_size;
16675            _next_ordinal_to_read += 1;
16676            if next_offset >= end_offset {
16677                return Ok(());
16678            }
16679
16680            // Decode unknown envelopes for gaps in ordinals.
16681            while _next_ordinal_to_read < 3 {
16682                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
16683                _next_ordinal_to_read += 1;
16684                next_offset += envelope_size;
16685            }
16686
16687            let next_out_of_line = decoder.next_out_of_line();
16688            let handles_before = decoder.remaining_handles();
16689            if let Some((inlined, num_bytes, num_handles)) =
16690                fidl::encoding::decode_envelope_header(decoder, next_offset)?
16691            {
16692                let member_inline_size =
16693                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
16694                if inlined != (member_inline_size <= 4) {
16695                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
16696                }
16697                let inner_offset;
16698                let mut inner_depth = depth.clone();
16699                if inlined {
16700                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
16701                    inner_offset = next_offset;
16702                } else {
16703                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
16704                    inner_depth.increment()?;
16705                }
16706                let val_ref =
16707                    self.format_error_response.get_or_insert_with(|| fidl::new_empty!(u32, D));
16708                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
16709                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
16710                {
16711                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
16712                }
16713                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
16714                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
16715                }
16716            }
16717
16718            next_offset += envelope_size;
16719            _next_ordinal_to_read += 1;
16720            if next_offset >= end_offset {
16721                return Ok(());
16722            }
16723
16724            // Decode unknown envelopes for gaps in ordinals.
16725            while _next_ordinal_to_read < 4 {
16726                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
16727                _next_ordinal_to_read += 1;
16728                next_offset += envelope_size;
16729            }
16730
16731            let next_out_of_line = decoder.next_out_of_line();
16732            let handles_before = decoder.remaining_handles();
16733            if let Some((inlined, num_bytes, num_handles)) =
16734                fidl::encoding::decode_envelope_header(decoder, next_offset)?
16735            {
16736                let member_inline_size =
16737                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
16738                if inlined != (member_inline_size <= 4) {
16739                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
16740                }
16741                let inner_offset;
16742                let mut inner_depth = depth.clone();
16743                if inlined {
16744                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
16745                    inner_offset = next_offset;
16746                } else {
16747                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
16748                    inner_depth.increment()?;
16749                }
16750                let val_ref =
16751                    self.name_exists_response.get_or_insert_with(|| fidl::new_empty!(u32, D));
16752                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
16753                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
16754                {
16755                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
16756                }
16757                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
16758                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
16759                }
16760            }
16761
16762            next_offset += envelope_size;
16763            _next_ordinal_to_read += 1;
16764            if next_offset >= end_offset {
16765                return Ok(());
16766            }
16767
16768            // Decode unknown envelopes for gaps in ordinals.
16769            while _next_ordinal_to_read < 5 {
16770                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
16771                _next_ordinal_to_read += 1;
16772                next_offset += envelope_size;
16773            }
16774
16775            let next_out_of_line = decoder.next_out_of_line();
16776            let handles_before = decoder.remaining_handles();
16777            if let Some((inlined, num_bytes, num_handles)) =
16778                fidl::encoding::decode_envelope_header(decoder, next_offset)?
16779            {
16780                let member_inline_size =
16781                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
16782                if inlined != (member_inline_size <= 4) {
16783                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
16784                }
16785                let inner_offset;
16786                let mut inner_depth = depth.clone();
16787                if inlined {
16788                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
16789                    inner_offset = next_offset;
16790                } else {
16791                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
16792                    inner_depth.increment()?;
16793                }
16794                let val_ref = self.refused_response.get_or_insert_with(|| fidl::new_empty!(u32, D));
16795                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
16796                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
16797                {
16798                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
16799                }
16800                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
16801                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
16802                }
16803            }
16804
16805            next_offset += envelope_size;
16806            _next_ordinal_to_read += 1;
16807            if next_offset >= end_offset {
16808                return Ok(());
16809            }
16810
16811            // Decode unknown envelopes for gaps in ordinals.
16812            while _next_ordinal_to_read < 6 {
16813                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
16814                _next_ordinal_to_read += 1;
16815                next_offset += envelope_size;
16816            }
16817
16818            let next_out_of_line = decoder.next_out_of_line();
16819            let handles_before = decoder.remaining_handles();
16820            if let Some((inlined, num_bytes, num_handles)) =
16821                fidl::encoding::decode_envelope_header(decoder, next_offset)?
16822            {
16823                let member_inline_size =
16824                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
16825                if inlined != (member_inline_size <= 4) {
16826                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
16827                }
16828                let inner_offset;
16829                let mut inner_depth = depth.clone();
16830                if inlined {
16831                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
16832                    inner_offset = next_offset;
16833                } else {
16834                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
16835                    inner_depth.increment()?;
16836                }
16837                let val_ref = self.other_response.get_or_insert_with(|| fidl::new_empty!(u32, D));
16838                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
16839                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
16840                {
16841                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
16842                }
16843                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
16844                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
16845                }
16846            }
16847
16848            next_offset += envelope_size;
16849
16850            // Decode the remaining unknown envelopes.
16851            while next_offset < end_offset {
16852                _next_ordinal_to_read += 1;
16853                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
16854                next_offset += envelope_size;
16855            }
16856
16857            Ok(())
16858        }
16859    }
16860
16861    impl SrpServerService {
16862        #[inline(always)]
16863        fn max_ordinal_present(&self) -> u64 {
16864            if let Some(_) = self.host {
16865                return 11;
16866            }
16867            if let Some(_) = self.txt_data {
16868                return 10;
16869            }
16870            if let Some(_) = self.key_lease {
16871                return 9;
16872            }
16873            if let Some(_) = self.lease {
16874                return 8;
16875            }
16876            if let Some(_) = self.ttl {
16877                return 7;
16878            }
16879            if let Some(_) = self.weight {
16880                return 6;
16881            }
16882            if let Some(_) = self.priority {
16883                return 5;
16884            }
16885            if let Some(_) = self.port {
16886                return 4;
16887            }
16888            if let Some(_) = self.subtypes {
16889                return 3;
16890            }
16891            if let Some(_) = self.deleted {
16892                return 2;
16893            }
16894            if let Some(_) = self.instance_name {
16895                return 1;
16896            }
16897            0
16898        }
16899    }
16900
16901    impl fidl::encoding::ValueTypeMarker for SrpServerService {
16902        type Borrowed<'a> = &'a Self;
16903        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
16904            value
16905        }
16906    }
16907
16908    unsafe impl fidl::encoding::TypeMarker for SrpServerService {
16909        type Owned = Self;
16910
16911        #[inline(always)]
16912        fn inline_align(_context: fidl::encoding::Context) -> usize {
16913            8
16914        }
16915
16916        #[inline(always)]
16917        fn inline_size(_context: fidl::encoding::Context) -> usize {
16918            16
16919        }
16920    }
16921
16922    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<SrpServerService, D>
16923        for &SrpServerService
16924    {
16925        unsafe fn encode(
16926            self,
16927            encoder: &mut fidl::encoding::Encoder<'_, D>,
16928            offset: usize,
16929            mut depth: fidl::encoding::Depth,
16930        ) -> fidl::Result<()> {
16931            encoder.debug_check_bounds::<SrpServerService>(offset);
16932            // Vector header
16933            let max_ordinal: u64 = self.max_ordinal_present();
16934            encoder.write_num(max_ordinal, offset);
16935            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
16936            // Calling encoder.out_of_line_offset(0) is not allowed.
16937            if max_ordinal == 0 {
16938                return Ok(());
16939            }
16940            depth.increment()?;
16941            let envelope_size = 8;
16942            let bytes_len = max_ordinal as usize * envelope_size;
16943            #[allow(unused_variables)]
16944            let offset = encoder.out_of_line_offset(bytes_len);
16945            let mut _prev_end_offset: usize = 0;
16946            if 1 > max_ordinal {
16947                return Ok(());
16948            }
16949
16950            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
16951            // are envelope_size bytes.
16952            let cur_offset: usize = (1 - 1) * envelope_size;
16953
16954            // Zero reserved fields.
16955            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
16956
16957            // Safety:
16958            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
16959            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
16960            //   envelope_size bytes, there is always sufficient room.
16961            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<255>, D>(
16962                self.instance_name.as_ref().map(
16963                    <fidl::encoding::BoundedString<255> as fidl::encoding::ValueTypeMarker>::borrow,
16964                ),
16965                encoder,
16966                offset + cur_offset,
16967                depth,
16968            )?;
16969
16970            _prev_end_offset = cur_offset + envelope_size;
16971            if 2 > max_ordinal {
16972                return Ok(());
16973            }
16974
16975            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
16976            // are envelope_size bytes.
16977            let cur_offset: usize = (2 - 1) * envelope_size;
16978
16979            // Zero reserved fields.
16980            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
16981
16982            // Safety:
16983            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
16984            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
16985            //   envelope_size bytes, there is always sufficient room.
16986            fidl::encoding::encode_in_envelope_optional::<bool, D>(
16987                self.deleted.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
16988                encoder,
16989                offset + cur_offset,
16990                depth,
16991            )?;
16992
16993            _prev_end_offset = cur_offset + envelope_size;
16994            if 3 > max_ordinal {
16995                return Ok(());
16996            }
16997
16998            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
16999            // are envelope_size bytes.
17000            let cur_offset: usize = (3 - 1) * envelope_size;
17001
17002            // Zero reserved fields.
17003            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
17004
17005            // Safety:
17006            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
17007            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
17008            //   envelope_size bytes, there is always sufficient room.
17009            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<fidl::encoding::BoundedString<63>, 6>, D>(
17010            self.subtypes.as_ref().map(<fidl::encoding::Vector<fidl::encoding::BoundedString<63>, 6> as fidl::encoding::ValueTypeMarker>::borrow),
17011            encoder, offset + cur_offset, depth
17012        )?;
17013
17014            _prev_end_offset = cur_offset + envelope_size;
17015            if 4 > max_ordinal {
17016                return Ok(());
17017            }
17018
17019            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
17020            // are envelope_size bytes.
17021            let cur_offset: usize = (4 - 1) * envelope_size;
17022
17023            // Zero reserved fields.
17024            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
17025
17026            // Safety:
17027            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
17028            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
17029            //   envelope_size bytes, there is always sufficient room.
17030            fidl::encoding::encode_in_envelope_optional::<u16, D>(
17031                self.port.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
17032                encoder,
17033                offset + cur_offset,
17034                depth,
17035            )?;
17036
17037            _prev_end_offset = cur_offset + envelope_size;
17038            if 5 > max_ordinal {
17039                return Ok(());
17040            }
17041
17042            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
17043            // are envelope_size bytes.
17044            let cur_offset: usize = (5 - 1) * envelope_size;
17045
17046            // Zero reserved fields.
17047            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
17048
17049            // Safety:
17050            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
17051            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
17052            //   envelope_size bytes, there is always sufficient room.
17053            fidl::encoding::encode_in_envelope_optional::<u16, D>(
17054                self.priority.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
17055                encoder,
17056                offset + cur_offset,
17057                depth,
17058            )?;
17059
17060            _prev_end_offset = cur_offset + envelope_size;
17061            if 6 > max_ordinal {
17062                return Ok(());
17063            }
17064
17065            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
17066            // are envelope_size bytes.
17067            let cur_offset: usize = (6 - 1) * envelope_size;
17068
17069            // Zero reserved fields.
17070            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
17071
17072            // Safety:
17073            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
17074            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
17075            //   envelope_size bytes, there is always sufficient room.
17076            fidl::encoding::encode_in_envelope_optional::<u16, D>(
17077                self.weight.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
17078                encoder,
17079                offset + cur_offset,
17080                depth,
17081            )?;
17082
17083            _prev_end_offset = cur_offset + envelope_size;
17084            if 7 > max_ordinal {
17085                return Ok(());
17086            }
17087
17088            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
17089            // are envelope_size bytes.
17090            let cur_offset: usize = (7 - 1) * envelope_size;
17091
17092            // Zero reserved fields.
17093            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
17094
17095            // Safety:
17096            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
17097            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
17098            //   envelope_size bytes, there is always sufficient room.
17099            fidl::encoding::encode_in_envelope_optional::<i64, D>(
17100                self.ttl.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
17101                encoder,
17102                offset + cur_offset,
17103                depth,
17104            )?;
17105
17106            _prev_end_offset = cur_offset + envelope_size;
17107            if 8 > max_ordinal {
17108                return Ok(());
17109            }
17110
17111            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
17112            // are envelope_size bytes.
17113            let cur_offset: usize = (8 - 1) * envelope_size;
17114
17115            // Zero reserved fields.
17116            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
17117
17118            // Safety:
17119            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
17120            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
17121            //   envelope_size bytes, there is always sufficient room.
17122            fidl::encoding::encode_in_envelope_optional::<i64, D>(
17123                self.lease.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
17124                encoder,
17125                offset + cur_offset,
17126                depth,
17127            )?;
17128
17129            _prev_end_offset = cur_offset + envelope_size;
17130            if 9 > max_ordinal {
17131                return Ok(());
17132            }
17133
17134            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
17135            // are envelope_size bytes.
17136            let cur_offset: usize = (9 - 1) * envelope_size;
17137
17138            // Zero reserved fields.
17139            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
17140
17141            // Safety:
17142            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
17143            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
17144            //   envelope_size bytes, there is always sufficient room.
17145            fidl::encoding::encode_in_envelope_optional::<i64, D>(
17146                self.key_lease.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
17147                encoder,
17148                offset + cur_offset,
17149                depth,
17150            )?;
17151
17152            _prev_end_offset = cur_offset + envelope_size;
17153            if 10 > max_ordinal {
17154                return Ok(());
17155            }
17156
17157            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
17158            // are envelope_size bytes.
17159            let cur_offset: usize = (10 - 1) * envelope_size;
17160
17161            // Zero reserved fields.
17162            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
17163
17164            // Safety:
17165            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
17166            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
17167            //   envelope_size bytes, there is always sufficient room.
17168            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<DnsTxtEntry>, D>(
17169            self.txt_data.as_ref().map(<fidl::encoding::UnboundedVector<DnsTxtEntry> as fidl::encoding::ValueTypeMarker>::borrow),
17170            encoder, offset + cur_offset, depth
17171        )?;
17172
17173            _prev_end_offset = cur_offset + envelope_size;
17174            if 11 > max_ordinal {
17175                return Ok(());
17176            }
17177
17178            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
17179            // are envelope_size bytes.
17180            let cur_offset: usize = (11 - 1) * envelope_size;
17181
17182            // Zero reserved fields.
17183            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
17184
17185            // Safety:
17186            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
17187            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
17188            //   envelope_size bytes, there is always sufficient room.
17189            fidl::encoding::encode_in_envelope_optional::<SrpServerHost, D>(
17190                self.host.as_ref().map(<SrpServerHost as fidl::encoding::ValueTypeMarker>::borrow),
17191                encoder,
17192                offset + cur_offset,
17193                depth,
17194            )?;
17195
17196            _prev_end_offset = cur_offset + envelope_size;
17197
17198            Ok(())
17199        }
17200    }
17201
17202    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SrpServerService {
17203        #[inline(always)]
17204        fn new_empty() -> Self {
17205            Self::default()
17206        }
17207
17208        unsafe fn decode(
17209            &mut self,
17210            decoder: &mut fidl::encoding::Decoder<'_, D>,
17211            offset: usize,
17212            mut depth: fidl::encoding::Depth,
17213        ) -> fidl::Result<()> {
17214            decoder.debug_check_bounds::<Self>(offset);
17215            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
17216                None => return Err(fidl::Error::NotNullable),
17217                Some(len) => len,
17218            };
17219            // Calling decoder.out_of_line_offset(0) is not allowed.
17220            if len == 0 {
17221                return Ok(());
17222            };
17223            depth.increment()?;
17224            let envelope_size = 8;
17225            let bytes_len = len * envelope_size;
17226            let offset = decoder.out_of_line_offset(bytes_len)?;
17227            // Decode the envelope for each type.
17228            let mut _next_ordinal_to_read = 0;
17229            let mut next_offset = offset;
17230            let end_offset = offset + bytes_len;
17231            _next_ordinal_to_read += 1;
17232            if next_offset >= end_offset {
17233                return Ok(());
17234            }
17235
17236            // Decode unknown envelopes for gaps in ordinals.
17237            while _next_ordinal_to_read < 1 {
17238                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
17239                _next_ordinal_to_read += 1;
17240                next_offset += envelope_size;
17241            }
17242
17243            let next_out_of_line = decoder.next_out_of_line();
17244            let handles_before = decoder.remaining_handles();
17245            if let Some((inlined, num_bytes, num_handles)) =
17246                fidl::encoding::decode_envelope_header(decoder, next_offset)?
17247            {
17248                let member_inline_size =
17249                    <fidl::encoding::BoundedString<255> as fidl::encoding::TypeMarker>::inline_size(
17250                        decoder.context,
17251                    );
17252                if inlined != (member_inline_size <= 4) {
17253                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
17254                }
17255                let inner_offset;
17256                let mut inner_depth = depth.clone();
17257                if inlined {
17258                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
17259                    inner_offset = next_offset;
17260                } else {
17261                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
17262                    inner_depth.increment()?;
17263                }
17264                let val_ref = self
17265                    .instance_name
17266                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<255>, D));
17267                fidl::decode!(
17268                    fidl::encoding::BoundedString<255>,
17269                    D,
17270                    val_ref,
17271                    decoder,
17272                    inner_offset,
17273                    inner_depth
17274                )?;
17275                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
17276                {
17277                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
17278                }
17279                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
17280                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
17281                }
17282            }
17283
17284            next_offset += envelope_size;
17285            _next_ordinal_to_read += 1;
17286            if next_offset >= end_offset {
17287                return Ok(());
17288            }
17289
17290            // Decode unknown envelopes for gaps in ordinals.
17291            while _next_ordinal_to_read < 2 {
17292                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
17293                _next_ordinal_to_read += 1;
17294                next_offset += envelope_size;
17295            }
17296
17297            let next_out_of_line = decoder.next_out_of_line();
17298            let handles_before = decoder.remaining_handles();
17299            if let Some((inlined, num_bytes, num_handles)) =
17300                fidl::encoding::decode_envelope_header(decoder, next_offset)?
17301            {
17302                let member_inline_size =
17303                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
17304                if inlined != (member_inline_size <= 4) {
17305                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
17306                }
17307                let inner_offset;
17308                let mut inner_depth = depth.clone();
17309                if inlined {
17310                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
17311                    inner_offset = next_offset;
17312                } else {
17313                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
17314                    inner_depth.increment()?;
17315                }
17316                let val_ref = self.deleted.get_or_insert_with(|| fidl::new_empty!(bool, D));
17317                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
17318                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
17319                {
17320                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
17321                }
17322                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
17323                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
17324                }
17325            }
17326
17327            next_offset += envelope_size;
17328            _next_ordinal_to_read += 1;
17329            if next_offset >= end_offset {
17330                return Ok(());
17331            }
17332
17333            // Decode unknown envelopes for gaps in ordinals.
17334            while _next_ordinal_to_read < 3 {
17335                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
17336                _next_ordinal_to_read += 1;
17337                next_offset += envelope_size;
17338            }
17339
17340            let next_out_of_line = decoder.next_out_of_line();
17341            let handles_before = decoder.remaining_handles();
17342            if let Some((inlined, num_bytes, num_handles)) =
17343                fidl::encoding::decode_envelope_header(decoder, next_offset)?
17344            {
17345                let member_inline_size = <fidl::encoding::Vector<
17346                    fidl::encoding::BoundedString<63>,
17347                    6,
17348                > as fidl::encoding::TypeMarker>::inline_size(
17349                    decoder.context
17350                );
17351                if inlined != (member_inline_size <= 4) {
17352                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
17353                }
17354                let inner_offset;
17355                let mut inner_depth = depth.clone();
17356                if inlined {
17357                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
17358                    inner_offset = next_offset;
17359                } else {
17360                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
17361                    inner_depth.increment()?;
17362                }
17363                let val_ref = self.subtypes.get_or_insert_with(|| {
17364                    fidl::new_empty!(
17365                        fidl::encoding::Vector<fidl::encoding::BoundedString<63>, 6>,
17366                        D
17367                    )
17368                });
17369                fidl::decode!(
17370                    fidl::encoding::Vector<fidl::encoding::BoundedString<63>, 6>,
17371                    D,
17372                    val_ref,
17373                    decoder,
17374                    inner_offset,
17375                    inner_depth
17376                )?;
17377                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
17378                {
17379                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
17380                }
17381                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
17382                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
17383                }
17384            }
17385
17386            next_offset += envelope_size;
17387            _next_ordinal_to_read += 1;
17388            if next_offset >= end_offset {
17389                return Ok(());
17390            }
17391
17392            // Decode unknown envelopes for gaps in ordinals.
17393            while _next_ordinal_to_read < 4 {
17394                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
17395                _next_ordinal_to_read += 1;
17396                next_offset += envelope_size;
17397            }
17398
17399            let next_out_of_line = decoder.next_out_of_line();
17400            let handles_before = decoder.remaining_handles();
17401            if let Some((inlined, num_bytes, num_handles)) =
17402                fidl::encoding::decode_envelope_header(decoder, next_offset)?
17403            {
17404                let member_inline_size =
17405                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
17406                if inlined != (member_inline_size <= 4) {
17407                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
17408                }
17409                let inner_offset;
17410                let mut inner_depth = depth.clone();
17411                if inlined {
17412                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
17413                    inner_offset = next_offset;
17414                } else {
17415                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
17416                    inner_depth.increment()?;
17417                }
17418                let val_ref = self.port.get_or_insert_with(|| fidl::new_empty!(u16, D));
17419                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
17420                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
17421                {
17422                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
17423                }
17424                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
17425                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
17426                }
17427            }
17428
17429            next_offset += envelope_size;
17430            _next_ordinal_to_read += 1;
17431            if next_offset >= end_offset {
17432                return Ok(());
17433            }
17434
17435            // Decode unknown envelopes for gaps in ordinals.
17436            while _next_ordinal_to_read < 5 {
17437                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
17438                _next_ordinal_to_read += 1;
17439                next_offset += envelope_size;
17440            }
17441
17442            let next_out_of_line = decoder.next_out_of_line();
17443            let handles_before = decoder.remaining_handles();
17444            if let Some((inlined, num_bytes, num_handles)) =
17445                fidl::encoding::decode_envelope_header(decoder, next_offset)?
17446            {
17447                let member_inline_size =
17448                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
17449                if inlined != (member_inline_size <= 4) {
17450                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
17451                }
17452                let inner_offset;
17453                let mut inner_depth = depth.clone();
17454                if inlined {
17455                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
17456                    inner_offset = next_offset;
17457                } else {
17458                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
17459                    inner_depth.increment()?;
17460                }
17461                let val_ref = self.priority.get_or_insert_with(|| fidl::new_empty!(u16, D));
17462                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
17463                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
17464                {
17465                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
17466                }
17467                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
17468                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
17469                }
17470            }
17471
17472            next_offset += envelope_size;
17473            _next_ordinal_to_read += 1;
17474            if next_offset >= end_offset {
17475                return Ok(());
17476            }
17477
17478            // Decode unknown envelopes for gaps in ordinals.
17479            while _next_ordinal_to_read < 6 {
17480                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
17481                _next_ordinal_to_read += 1;
17482                next_offset += envelope_size;
17483            }
17484
17485            let next_out_of_line = decoder.next_out_of_line();
17486            let handles_before = decoder.remaining_handles();
17487            if let Some((inlined, num_bytes, num_handles)) =
17488                fidl::encoding::decode_envelope_header(decoder, next_offset)?
17489            {
17490                let member_inline_size =
17491                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
17492                if inlined != (member_inline_size <= 4) {
17493                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
17494                }
17495                let inner_offset;
17496                let mut inner_depth = depth.clone();
17497                if inlined {
17498                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
17499                    inner_offset = next_offset;
17500                } else {
17501                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
17502                    inner_depth.increment()?;
17503                }
17504                let val_ref = self.weight.get_or_insert_with(|| fidl::new_empty!(u16, D));
17505                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
17506                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
17507                {
17508                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
17509                }
17510                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
17511                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
17512                }
17513            }
17514
17515            next_offset += envelope_size;
17516            _next_ordinal_to_read += 1;
17517            if next_offset >= end_offset {
17518                return Ok(());
17519            }
17520
17521            // Decode unknown envelopes for gaps in ordinals.
17522            while _next_ordinal_to_read < 7 {
17523                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
17524                _next_ordinal_to_read += 1;
17525                next_offset += envelope_size;
17526            }
17527
17528            let next_out_of_line = decoder.next_out_of_line();
17529            let handles_before = decoder.remaining_handles();
17530            if let Some((inlined, num_bytes, num_handles)) =
17531                fidl::encoding::decode_envelope_header(decoder, next_offset)?
17532            {
17533                let member_inline_size =
17534                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
17535                if inlined != (member_inline_size <= 4) {
17536                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
17537                }
17538                let inner_offset;
17539                let mut inner_depth = depth.clone();
17540                if inlined {
17541                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
17542                    inner_offset = next_offset;
17543                } else {
17544                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
17545                    inner_depth.increment()?;
17546                }
17547                let val_ref = self.ttl.get_or_insert_with(|| fidl::new_empty!(i64, D));
17548                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
17549                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
17550                {
17551                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
17552                }
17553                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
17554                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
17555                }
17556            }
17557
17558            next_offset += envelope_size;
17559            _next_ordinal_to_read += 1;
17560            if next_offset >= end_offset {
17561                return Ok(());
17562            }
17563
17564            // Decode unknown envelopes for gaps in ordinals.
17565            while _next_ordinal_to_read < 8 {
17566                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
17567                _next_ordinal_to_read += 1;
17568                next_offset += envelope_size;
17569            }
17570
17571            let next_out_of_line = decoder.next_out_of_line();
17572            let handles_before = decoder.remaining_handles();
17573            if let Some((inlined, num_bytes, num_handles)) =
17574                fidl::encoding::decode_envelope_header(decoder, next_offset)?
17575            {
17576                let member_inline_size =
17577                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
17578                if inlined != (member_inline_size <= 4) {
17579                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
17580                }
17581                let inner_offset;
17582                let mut inner_depth = depth.clone();
17583                if inlined {
17584                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
17585                    inner_offset = next_offset;
17586                } else {
17587                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
17588                    inner_depth.increment()?;
17589                }
17590                let val_ref = self.lease.get_or_insert_with(|| fidl::new_empty!(i64, D));
17591                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
17592                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
17593                {
17594                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
17595                }
17596                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
17597                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
17598                }
17599            }
17600
17601            next_offset += envelope_size;
17602            _next_ordinal_to_read += 1;
17603            if next_offset >= end_offset {
17604                return Ok(());
17605            }
17606
17607            // Decode unknown envelopes for gaps in ordinals.
17608            while _next_ordinal_to_read < 9 {
17609                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
17610                _next_ordinal_to_read += 1;
17611                next_offset += envelope_size;
17612            }
17613
17614            let next_out_of_line = decoder.next_out_of_line();
17615            let handles_before = decoder.remaining_handles();
17616            if let Some((inlined, num_bytes, num_handles)) =
17617                fidl::encoding::decode_envelope_header(decoder, next_offset)?
17618            {
17619                let member_inline_size =
17620                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
17621                if inlined != (member_inline_size <= 4) {
17622                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
17623                }
17624                let inner_offset;
17625                let mut inner_depth = depth.clone();
17626                if inlined {
17627                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
17628                    inner_offset = next_offset;
17629                } else {
17630                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
17631                    inner_depth.increment()?;
17632                }
17633                let val_ref = self.key_lease.get_or_insert_with(|| fidl::new_empty!(i64, D));
17634                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
17635                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
17636                {
17637                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
17638                }
17639                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
17640                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
17641                }
17642            }
17643
17644            next_offset += envelope_size;
17645            _next_ordinal_to_read += 1;
17646            if next_offset >= end_offset {
17647                return Ok(());
17648            }
17649
17650            // Decode unknown envelopes for gaps in ordinals.
17651            while _next_ordinal_to_read < 10 {
17652                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
17653                _next_ordinal_to_read += 1;
17654                next_offset += envelope_size;
17655            }
17656
17657            let next_out_of_line = decoder.next_out_of_line();
17658            let handles_before = decoder.remaining_handles();
17659            if let Some((inlined, num_bytes, num_handles)) =
17660                fidl::encoding::decode_envelope_header(decoder, next_offset)?
17661            {
17662                let member_inline_size = <fidl::encoding::UnboundedVector<DnsTxtEntry> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
17663                if inlined != (member_inline_size <= 4) {
17664                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
17665                }
17666                let inner_offset;
17667                let mut inner_depth = depth.clone();
17668                if inlined {
17669                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
17670                    inner_offset = next_offset;
17671                } else {
17672                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
17673                    inner_depth.increment()?;
17674                }
17675                let val_ref = self.txt_data.get_or_insert_with(|| {
17676                    fidl::new_empty!(fidl::encoding::UnboundedVector<DnsTxtEntry>, D)
17677                });
17678                fidl::decode!(
17679                    fidl::encoding::UnboundedVector<DnsTxtEntry>,
17680                    D,
17681                    val_ref,
17682                    decoder,
17683                    inner_offset,
17684                    inner_depth
17685                )?;
17686                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
17687                {
17688                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
17689                }
17690                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
17691                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
17692                }
17693            }
17694
17695            next_offset += envelope_size;
17696            _next_ordinal_to_read += 1;
17697            if next_offset >= end_offset {
17698                return Ok(());
17699            }
17700
17701            // Decode unknown envelopes for gaps in ordinals.
17702            while _next_ordinal_to_read < 11 {
17703                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
17704                _next_ordinal_to_read += 1;
17705                next_offset += envelope_size;
17706            }
17707
17708            let next_out_of_line = decoder.next_out_of_line();
17709            let handles_before = decoder.remaining_handles();
17710            if let Some((inlined, num_bytes, num_handles)) =
17711                fidl::encoding::decode_envelope_header(decoder, next_offset)?
17712            {
17713                let member_inline_size =
17714                    <SrpServerHost as fidl::encoding::TypeMarker>::inline_size(decoder.context);
17715                if inlined != (member_inline_size <= 4) {
17716                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
17717                }
17718                let inner_offset;
17719                let mut inner_depth = depth.clone();
17720                if inlined {
17721                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
17722                    inner_offset = next_offset;
17723                } else {
17724                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
17725                    inner_depth.increment()?;
17726                }
17727                let val_ref = self.host.get_or_insert_with(|| fidl::new_empty!(SrpServerHost, D));
17728                fidl::decode!(SrpServerHost, D, val_ref, decoder, inner_offset, inner_depth)?;
17729                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
17730                {
17731                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
17732                }
17733                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
17734                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
17735                }
17736            }
17737
17738            next_offset += envelope_size;
17739
17740            // Decode the remaining unknown envelopes.
17741            while next_offset < end_offset {
17742                _next_ordinal_to_read += 1;
17743                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
17744                next_offset += envelope_size;
17745            }
17746
17747            Ok(())
17748        }
17749    }
17750
17751    impl Telemetry {
17752        #[inline(always)]
17753        fn max_ordinal_present(&self) -> u64 {
17754            if let Some(_) = self.active_dataset {
17755                return 30;
17756            }
17757            if let Some(_) = self.border_routing_routers {
17758                return 29;
17759            }
17760            if let Some(_) = self.border_routing_peers {
17761                return 28;
17762            }
17763            if let Some(_) = self.extended_pan_id {
17764                return 27;
17765            }
17766            if let Some(_) = self.multi_ail_detected {
17767                return 26;
17768            }
17769            if let Some(_) = self.border_agent_counters {
17770                return 25;
17771            }
17772            if let Some(_) = self.link_metrics_entries {
17773                return 24;
17774            }
17775            if let Some(_) = self.dhcp6pd_info {
17776                return 23;
17777            }
17778            if let Some(_) = self.upstream_dns_info {
17779                return 22;
17780            }
17781            if let Some(_) = self.trel_peers_info {
17782                return 21;
17783            }
17784            if let Some(_) = self.trel_counters {
17785                return 20;
17786            }
17787            if let Some(_) = self.nat64_info {
17788                return 19;
17789            }
17790            if let Some(_) = self.uptime {
17791                return 18;
17792            }
17793            if let Some(_) = self.leader_data {
17794                return 17;
17795            }
17796            if let Some(_) = self.dnssd_counters {
17797                return 16;
17798            }
17799            if let Some(_) = self.srp_server_info {
17800                return 15;
17801            }
17802            if let Some(_) = self.thread_border_routing_counters {
17803                return 14;
17804            }
17805            if let Some(_) = self.thread_stable_network_data {
17806                return 13;
17807            }
17808            if let Some(_) = self.thread_network_data {
17809                return 12;
17810            }
17811            if let Some(_) = self.thread_stable_network_data_version {
17812                return 11;
17813            }
17814            if let Some(_) = self.thread_network_data_version {
17815                return 10;
17816            }
17817            if let Some(_) = self.thread_rloc {
17818                return 9;
17819            }
17820            if let Some(_) = self.thread_router_id {
17821                return 8;
17822            }
17823            if let Some(_) = self.thread_link_mode {
17824                return 7;
17825            }
17826            if let Some(_) = self.rcp_version {
17827                return 6;
17828            }
17829            if let Some(_) = self.stack_version {
17830                return 5;
17831            }
17832            if let Some(_) = self.partition_id {
17833                return 4;
17834            }
17835            if let Some(_) = self.channel_index {
17836                return 3;
17837            }
17838            if let Some(_) = self.tx_power {
17839                return 2;
17840            }
17841            if let Some(_) = self.rssi {
17842                return 1;
17843            }
17844            0
17845        }
17846    }
17847
17848    impl fidl::encoding::ValueTypeMarker for Telemetry {
17849        type Borrowed<'a> = &'a Self;
17850        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
17851            value
17852        }
17853    }
17854
17855    unsafe impl fidl::encoding::TypeMarker for Telemetry {
17856        type Owned = Self;
17857
17858        #[inline(always)]
17859        fn inline_align(_context: fidl::encoding::Context) -> usize {
17860            8
17861        }
17862
17863        #[inline(always)]
17864        fn inline_size(_context: fidl::encoding::Context) -> usize {
17865            16
17866        }
17867    }
17868
17869    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Telemetry, D>
17870        for &Telemetry
17871    {
17872        unsafe fn encode(
17873            self,
17874            encoder: &mut fidl::encoding::Encoder<'_, D>,
17875            offset: usize,
17876            mut depth: fidl::encoding::Depth,
17877        ) -> fidl::Result<()> {
17878            encoder.debug_check_bounds::<Telemetry>(offset);
17879            // Vector header
17880            let max_ordinal: u64 = self.max_ordinal_present();
17881            encoder.write_num(max_ordinal, offset);
17882            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
17883            // Calling encoder.out_of_line_offset(0) is not allowed.
17884            if max_ordinal == 0 {
17885                return Ok(());
17886            }
17887            depth.increment()?;
17888            let envelope_size = 8;
17889            let bytes_len = max_ordinal as usize * envelope_size;
17890            #[allow(unused_variables)]
17891            let offset = encoder.out_of_line_offset(bytes_len);
17892            let mut _prev_end_offset: usize = 0;
17893            if 1 > max_ordinal {
17894                return Ok(());
17895            }
17896
17897            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
17898            // are envelope_size bytes.
17899            let cur_offset: usize = (1 - 1) * envelope_size;
17900
17901            // Zero reserved fields.
17902            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
17903
17904            // Safety:
17905            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
17906            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
17907            //   envelope_size bytes, there is always sufficient room.
17908            fidl::encoding::encode_in_envelope_optional::<i8, D>(
17909                self.rssi.as_ref().map(<i8 as fidl::encoding::ValueTypeMarker>::borrow),
17910                encoder,
17911                offset + cur_offset,
17912                depth,
17913            )?;
17914
17915            _prev_end_offset = cur_offset + envelope_size;
17916            if 2 > max_ordinal {
17917                return Ok(());
17918            }
17919
17920            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
17921            // are envelope_size bytes.
17922            let cur_offset: usize = (2 - 1) * envelope_size;
17923
17924            // Zero reserved fields.
17925            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
17926
17927            // Safety:
17928            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
17929            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
17930            //   envelope_size bytes, there is always sufficient room.
17931            fidl::encoding::encode_in_envelope_optional::<i8, D>(
17932                self.tx_power.as_ref().map(<i8 as fidl::encoding::ValueTypeMarker>::borrow),
17933                encoder,
17934                offset + cur_offset,
17935                depth,
17936            )?;
17937
17938            _prev_end_offset = cur_offset + envelope_size;
17939            if 3 > max_ordinal {
17940                return Ok(());
17941            }
17942
17943            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
17944            // are envelope_size bytes.
17945            let cur_offset: usize = (3 - 1) * envelope_size;
17946
17947            // Zero reserved fields.
17948            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
17949
17950            // Safety:
17951            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
17952            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
17953            //   envelope_size bytes, there is always sufficient room.
17954            fidl::encoding::encode_in_envelope_optional::<u16, D>(
17955                self.channel_index.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
17956                encoder,
17957                offset + cur_offset,
17958                depth,
17959            )?;
17960
17961            _prev_end_offset = cur_offset + envelope_size;
17962            if 4 > max_ordinal {
17963                return Ok(());
17964            }
17965
17966            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
17967            // are envelope_size bytes.
17968            let cur_offset: usize = (4 - 1) * envelope_size;
17969
17970            // Zero reserved fields.
17971            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
17972
17973            // Safety:
17974            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
17975            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
17976            //   envelope_size bytes, there is always sufficient room.
17977            fidl::encoding::encode_in_envelope_optional::<u32, D>(
17978                self.partition_id.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
17979                encoder,
17980                offset + cur_offset,
17981                depth,
17982            )?;
17983
17984            _prev_end_offset = cur_offset + envelope_size;
17985            if 5 > max_ordinal {
17986                return Ok(());
17987            }
17988
17989            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
17990            // are envelope_size bytes.
17991            let cur_offset: usize = (5 - 1) * envelope_size;
17992
17993            // Zero reserved fields.
17994            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
17995
17996            // Safety:
17997            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
17998            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
17999            //   envelope_size bytes, there is always sufficient room.
18000            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<256>, D>(
18001                self.stack_version.as_ref().map(
18002                    <fidl::encoding::BoundedString<256> as fidl::encoding::ValueTypeMarker>::borrow,
18003                ),
18004                encoder,
18005                offset + cur_offset,
18006                depth,
18007            )?;
18008
18009            _prev_end_offset = cur_offset + envelope_size;
18010            if 6 > max_ordinal {
18011                return Ok(());
18012            }
18013
18014            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
18015            // are envelope_size bytes.
18016            let cur_offset: usize = (6 - 1) * envelope_size;
18017
18018            // Zero reserved fields.
18019            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
18020
18021            // Safety:
18022            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
18023            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
18024            //   envelope_size bytes, there is always sufficient room.
18025            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<256>, D>(
18026                self.rcp_version.as_ref().map(
18027                    <fidl::encoding::BoundedString<256> as fidl::encoding::ValueTypeMarker>::borrow,
18028                ),
18029                encoder,
18030                offset + cur_offset,
18031                depth,
18032            )?;
18033
18034            _prev_end_offset = cur_offset + envelope_size;
18035            if 7 > max_ordinal {
18036                return Ok(());
18037            }
18038
18039            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
18040            // are envelope_size bytes.
18041            let cur_offset: usize = (7 - 1) * envelope_size;
18042
18043            // Zero reserved fields.
18044            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
18045
18046            // Safety:
18047            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
18048            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
18049            //   envelope_size bytes, there is always sufficient room.
18050            fidl::encoding::encode_in_envelope_optional::<u8, D>(
18051                self.thread_link_mode.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
18052                encoder,
18053                offset + cur_offset,
18054                depth,
18055            )?;
18056
18057            _prev_end_offset = cur_offset + envelope_size;
18058            if 8 > max_ordinal {
18059                return Ok(());
18060            }
18061
18062            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
18063            // are envelope_size bytes.
18064            let cur_offset: usize = (8 - 1) * envelope_size;
18065
18066            // Zero reserved fields.
18067            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
18068
18069            // Safety:
18070            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
18071            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
18072            //   envelope_size bytes, there is always sufficient room.
18073            fidl::encoding::encode_in_envelope_optional::<u8, D>(
18074                self.thread_router_id.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
18075                encoder,
18076                offset + cur_offset,
18077                depth,
18078            )?;
18079
18080            _prev_end_offset = cur_offset + envelope_size;
18081            if 9 > max_ordinal {
18082                return Ok(());
18083            }
18084
18085            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
18086            // are envelope_size bytes.
18087            let cur_offset: usize = (9 - 1) * envelope_size;
18088
18089            // Zero reserved fields.
18090            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
18091
18092            // Safety:
18093            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
18094            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
18095            //   envelope_size bytes, there is always sufficient room.
18096            fidl::encoding::encode_in_envelope_optional::<u16, D>(
18097                self.thread_rloc.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
18098                encoder,
18099                offset + cur_offset,
18100                depth,
18101            )?;
18102
18103            _prev_end_offset = cur_offset + envelope_size;
18104            if 10 > max_ordinal {
18105                return Ok(());
18106            }
18107
18108            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
18109            // are envelope_size bytes.
18110            let cur_offset: usize = (10 - 1) * envelope_size;
18111
18112            // Zero reserved fields.
18113            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
18114
18115            // Safety:
18116            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
18117            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
18118            //   envelope_size bytes, there is always sufficient room.
18119            fidl::encoding::encode_in_envelope_optional::<u8, D>(
18120                self.thread_network_data_version
18121                    .as_ref()
18122                    .map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
18123                encoder,
18124                offset + cur_offset,
18125                depth,
18126            )?;
18127
18128            _prev_end_offset = cur_offset + envelope_size;
18129            if 11 > max_ordinal {
18130                return Ok(());
18131            }
18132
18133            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
18134            // are envelope_size bytes.
18135            let cur_offset: usize = (11 - 1) * envelope_size;
18136
18137            // Zero reserved fields.
18138            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
18139
18140            // Safety:
18141            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
18142            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
18143            //   envelope_size bytes, there is always sufficient room.
18144            fidl::encoding::encode_in_envelope_optional::<u8, D>(
18145                self.thread_stable_network_data_version
18146                    .as_ref()
18147                    .map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
18148                encoder,
18149                offset + cur_offset,
18150                depth,
18151            )?;
18152
18153            _prev_end_offset = cur_offset + envelope_size;
18154            if 12 > max_ordinal {
18155                return Ok(());
18156            }
18157
18158            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
18159            // are envelope_size bytes.
18160            let cur_offset: usize = (12 - 1) * envelope_size;
18161
18162            // Zero reserved fields.
18163            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
18164
18165            // Safety:
18166            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
18167            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
18168            //   envelope_size bytes, there is always sufficient room.
18169            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u8, 255>, D>(
18170                self.thread_network_data.as_ref().map(
18171                    <fidl::encoding::Vector<u8, 255> as fidl::encoding::ValueTypeMarker>::borrow,
18172                ),
18173                encoder,
18174                offset + cur_offset,
18175                depth,
18176            )?;
18177
18178            _prev_end_offset = cur_offset + envelope_size;
18179            if 13 > max_ordinal {
18180                return Ok(());
18181            }
18182
18183            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
18184            // are envelope_size bytes.
18185            let cur_offset: usize = (13 - 1) * envelope_size;
18186
18187            // Zero reserved fields.
18188            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
18189
18190            // Safety:
18191            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
18192            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
18193            //   envelope_size bytes, there is always sufficient room.
18194            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u8, 255>, D>(
18195                self.thread_stable_network_data.as_ref().map(
18196                    <fidl::encoding::Vector<u8, 255> as fidl::encoding::ValueTypeMarker>::borrow,
18197                ),
18198                encoder,
18199                offset + cur_offset,
18200                depth,
18201            )?;
18202
18203            _prev_end_offset = cur_offset + envelope_size;
18204            if 14 > max_ordinal {
18205                return Ok(());
18206            }
18207
18208            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
18209            // are envelope_size bytes.
18210            let cur_offset: usize = (14 - 1) * envelope_size;
18211
18212            // Zero reserved fields.
18213            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
18214
18215            // Safety:
18216            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
18217            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
18218            //   envelope_size bytes, there is always sufficient room.
18219            fidl::encoding::encode_in_envelope_optional::<BorderRoutingCounters, D>(
18220                self.thread_border_routing_counters
18221                    .as_ref()
18222                    .map(<BorderRoutingCounters as fidl::encoding::ValueTypeMarker>::borrow),
18223                encoder,
18224                offset + cur_offset,
18225                depth,
18226            )?;
18227
18228            _prev_end_offset = cur_offset + envelope_size;
18229            if 15 > max_ordinal {
18230                return Ok(());
18231            }
18232
18233            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
18234            // are envelope_size bytes.
18235            let cur_offset: usize = (15 - 1) * envelope_size;
18236
18237            // Zero reserved fields.
18238            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
18239
18240            // Safety:
18241            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
18242            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
18243            //   envelope_size bytes, there is always sufficient room.
18244            fidl::encoding::encode_in_envelope_optional::<SrpServerInfo, D>(
18245                self.srp_server_info
18246                    .as_ref()
18247                    .map(<SrpServerInfo as fidl::encoding::ValueTypeMarker>::borrow),
18248                encoder,
18249                offset + cur_offset,
18250                depth,
18251            )?;
18252
18253            _prev_end_offset = cur_offset + envelope_size;
18254            if 16 > max_ordinal {
18255                return Ok(());
18256            }
18257
18258            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
18259            // are envelope_size bytes.
18260            let cur_offset: usize = (16 - 1) * envelope_size;
18261
18262            // Zero reserved fields.
18263            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
18264
18265            // Safety:
18266            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
18267            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
18268            //   envelope_size bytes, there is always sufficient room.
18269            fidl::encoding::encode_in_envelope_optional::<DnssdCounters, D>(
18270                self.dnssd_counters
18271                    .as_ref()
18272                    .map(<DnssdCounters as fidl::encoding::ValueTypeMarker>::borrow),
18273                encoder,
18274                offset + cur_offset,
18275                depth,
18276            )?;
18277
18278            _prev_end_offset = cur_offset + envelope_size;
18279            if 17 > max_ordinal {
18280                return Ok(());
18281            }
18282
18283            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
18284            // are envelope_size bytes.
18285            let cur_offset: usize = (17 - 1) * envelope_size;
18286
18287            // Zero reserved fields.
18288            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
18289
18290            // Safety:
18291            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
18292            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
18293            //   envelope_size bytes, there is always sufficient room.
18294            fidl::encoding::encode_in_envelope_optional::<LeaderData, D>(
18295                self.leader_data
18296                    .as_ref()
18297                    .map(<LeaderData as fidl::encoding::ValueTypeMarker>::borrow),
18298                encoder,
18299                offset + cur_offset,
18300                depth,
18301            )?;
18302
18303            _prev_end_offset = cur_offset + envelope_size;
18304            if 18 > max_ordinal {
18305                return Ok(());
18306            }
18307
18308            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
18309            // are envelope_size bytes.
18310            let cur_offset: usize = (18 - 1) * envelope_size;
18311
18312            // Zero reserved fields.
18313            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
18314
18315            // Safety:
18316            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
18317            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
18318            //   envelope_size bytes, there is always sufficient room.
18319            fidl::encoding::encode_in_envelope_optional::<i64, D>(
18320                self.uptime.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
18321                encoder,
18322                offset + cur_offset,
18323                depth,
18324            )?;
18325
18326            _prev_end_offset = cur_offset + envelope_size;
18327            if 19 > max_ordinal {
18328                return Ok(());
18329            }
18330
18331            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
18332            // are envelope_size bytes.
18333            let cur_offset: usize = (19 - 1) * envelope_size;
18334
18335            // Zero reserved fields.
18336            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
18337
18338            // Safety:
18339            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
18340            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
18341            //   envelope_size bytes, there is always sufficient room.
18342            fidl::encoding::encode_in_envelope_optional::<Nat64Info, D>(
18343                self.nat64_info
18344                    .as_ref()
18345                    .map(<Nat64Info as fidl::encoding::ValueTypeMarker>::borrow),
18346                encoder,
18347                offset + cur_offset,
18348                depth,
18349            )?;
18350
18351            _prev_end_offset = cur_offset + envelope_size;
18352            if 20 > max_ordinal {
18353                return Ok(());
18354            }
18355
18356            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
18357            // are envelope_size bytes.
18358            let cur_offset: usize = (20 - 1) * envelope_size;
18359
18360            // Zero reserved fields.
18361            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
18362
18363            // Safety:
18364            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
18365            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
18366            //   envelope_size bytes, there is always sufficient room.
18367            fidl::encoding::encode_in_envelope_optional::<TrelCounters, D>(
18368                self.trel_counters
18369                    .as_ref()
18370                    .map(<TrelCounters as fidl::encoding::ValueTypeMarker>::borrow),
18371                encoder,
18372                offset + cur_offset,
18373                depth,
18374            )?;
18375
18376            _prev_end_offset = cur_offset + envelope_size;
18377            if 21 > max_ordinal {
18378                return Ok(());
18379            }
18380
18381            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
18382            // are envelope_size bytes.
18383            let cur_offset: usize = (21 - 1) * envelope_size;
18384
18385            // Zero reserved fields.
18386            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
18387
18388            // Safety:
18389            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
18390            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
18391            //   envelope_size bytes, there is always sufficient room.
18392            fidl::encoding::encode_in_envelope_optional::<TrelPeersInfo, D>(
18393                self.trel_peers_info
18394                    .as_ref()
18395                    .map(<TrelPeersInfo as fidl::encoding::ValueTypeMarker>::borrow),
18396                encoder,
18397                offset + cur_offset,
18398                depth,
18399            )?;
18400
18401            _prev_end_offset = cur_offset + envelope_size;
18402            if 22 > max_ordinal {
18403                return Ok(());
18404            }
18405
18406            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
18407            // are envelope_size bytes.
18408            let cur_offset: usize = (22 - 1) * envelope_size;
18409
18410            // Zero reserved fields.
18411            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
18412
18413            // Safety:
18414            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
18415            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
18416            //   envelope_size bytes, there is always sufficient room.
18417            fidl::encoding::encode_in_envelope_optional::<UpstreamDnsInfo, D>(
18418                self.upstream_dns_info
18419                    .as_ref()
18420                    .map(<UpstreamDnsInfo as fidl::encoding::ValueTypeMarker>::borrow),
18421                encoder,
18422                offset + cur_offset,
18423                depth,
18424            )?;
18425
18426            _prev_end_offset = cur_offset + envelope_size;
18427            if 23 > max_ordinal {
18428                return Ok(());
18429            }
18430
18431            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
18432            // are envelope_size bytes.
18433            let cur_offset: usize = (23 - 1) * envelope_size;
18434
18435            // Zero reserved fields.
18436            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
18437
18438            // Safety:
18439            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
18440            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
18441            //   envelope_size bytes, there is always sufficient room.
18442            fidl::encoding::encode_in_envelope_optional::<Dhcp6PdInfo, D>(
18443                self.dhcp6pd_info
18444                    .as_ref()
18445                    .map(<Dhcp6PdInfo as fidl::encoding::ValueTypeMarker>::borrow),
18446                encoder,
18447                offset + cur_offset,
18448                depth,
18449            )?;
18450
18451            _prev_end_offset = cur_offset + envelope_size;
18452            if 24 > max_ordinal {
18453                return Ok(());
18454            }
18455
18456            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
18457            // are envelope_size bytes.
18458            let cur_offset: usize = (24 - 1) * envelope_size;
18459
18460            // Zero reserved fields.
18461            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
18462
18463            // Safety:
18464            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
18465            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
18466            //   envelope_size bytes, there is always sufficient room.
18467            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<LinkMetricsEntry, 64>, D>(
18468            self.link_metrics_entries.as_ref().map(<fidl::encoding::Vector<LinkMetricsEntry, 64> as fidl::encoding::ValueTypeMarker>::borrow),
18469            encoder, offset + cur_offset, depth
18470        )?;
18471
18472            _prev_end_offset = cur_offset + envelope_size;
18473            if 25 > max_ordinal {
18474                return Ok(());
18475            }
18476
18477            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
18478            // are envelope_size bytes.
18479            let cur_offset: usize = (25 - 1) * envelope_size;
18480
18481            // Zero reserved fields.
18482            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
18483
18484            // Safety:
18485            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
18486            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
18487            //   envelope_size bytes, there is always sufficient room.
18488            fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_lowpan_device__common::BorderAgentCounters, D>(
18489            self.border_agent_counters.as_ref().map(<fidl_fuchsia_lowpan_device__common::BorderAgentCounters as fidl::encoding::ValueTypeMarker>::borrow),
18490            encoder, offset + cur_offset, depth
18491        )?;
18492
18493            _prev_end_offset = cur_offset + envelope_size;
18494            if 26 > max_ordinal {
18495                return Ok(());
18496            }
18497
18498            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
18499            // are envelope_size bytes.
18500            let cur_offset: usize = (26 - 1) * envelope_size;
18501
18502            // Zero reserved fields.
18503            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
18504
18505            // Safety:
18506            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
18507            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
18508            //   envelope_size bytes, there is always sufficient room.
18509            fidl::encoding::encode_in_envelope_optional::<bool, D>(
18510                self.multi_ail_detected
18511                    .as_ref()
18512                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
18513                encoder,
18514                offset + cur_offset,
18515                depth,
18516            )?;
18517
18518            _prev_end_offset = cur_offset + envelope_size;
18519            if 27 > max_ordinal {
18520                return Ok(());
18521            }
18522
18523            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
18524            // are envelope_size bytes.
18525            let cur_offset: usize = (27 - 1) * envelope_size;
18526
18527            // Zero reserved fields.
18528            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
18529
18530            // Safety:
18531            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
18532            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
18533            //   envelope_size bytes, there is always sufficient room.
18534            fidl::encoding::encode_in_envelope_optional::<u64, D>(
18535                self.extended_pan_id.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
18536                encoder,
18537                offset + cur_offset,
18538                depth,
18539            )?;
18540
18541            _prev_end_offset = cur_offset + envelope_size;
18542            if 28 > max_ordinal {
18543                return Ok(());
18544            }
18545
18546            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
18547            // are envelope_size bytes.
18548            let cur_offset: usize = (28 - 1) * envelope_size;
18549
18550            // Zero reserved fields.
18551            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
18552
18553            // Safety:
18554            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
18555            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
18556            //   envelope_size bytes, there is always sufficient room.
18557            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<BorderRoutingPeer, 64>, D>(
18558            self.border_routing_peers.as_ref().map(<fidl::encoding::Vector<BorderRoutingPeer, 64> as fidl::encoding::ValueTypeMarker>::borrow),
18559            encoder, offset + cur_offset, depth
18560        )?;
18561
18562            _prev_end_offset = cur_offset + envelope_size;
18563            if 29 > max_ordinal {
18564                return Ok(());
18565            }
18566
18567            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
18568            // are envelope_size bytes.
18569            let cur_offset: usize = (29 - 1) * envelope_size;
18570
18571            // Zero reserved fields.
18572            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
18573
18574            // Safety:
18575            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
18576            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
18577            //   envelope_size bytes, there is always sufficient room.
18578            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<BorderRoutingRouter, 64>, D>(
18579            self.border_routing_routers.as_ref().map(<fidl::encoding::Vector<BorderRoutingRouter, 64> as fidl::encoding::ValueTypeMarker>::borrow),
18580            encoder, offset + cur_offset, depth
18581        )?;
18582
18583            _prev_end_offset = cur_offset + envelope_size;
18584            if 30 > max_ordinal {
18585                return Ok(());
18586            }
18587
18588            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
18589            // are envelope_size bytes.
18590            let cur_offset: usize = (30 - 1) * envelope_size;
18591
18592            // Zero reserved fields.
18593            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
18594
18595            // Safety:
18596            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
18597            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
18598            //   envelope_size bytes, there is always sufficient room.
18599            fidl::encoding::encode_in_envelope_optional::<OperationalDataset, D>(
18600                self.active_dataset
18601                    .as_ref()
18602                    .map(<OperationalDataset as fidl::encoding::ValueTypeMarker>::borrow),
18603                encoder,
18604                offset + cur_offset,
18605                depth,
18606            )?;
18607
18608            _prev_end_offset = cur_offset + envelope_size;
18609
18610            Ok(())
18611        }
18612    }
18613
18614    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Telemetry {
18615        #[inline(always)]
18616        fn new_empty() -> Self {
18617            Self::default()
18618        }
18619
18620        unsafe fn decode(
18621            &mut self,
18622            decoder: &mut fidl::encoding::Decoder<'_, D>,
18623            offset: usize,
18624            mut depth: fidl::encoding::Depth,
18625        ) -> fidl::Result<()> {
18626            decoder.debug_check_bounds::<Self>(offset);
18627            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
18628                None => return Err(fidl::Error::NotNullable),
18629                Some(len) => len,
18630            };
18631            // Calling decoder.out_of_line_offset(0) is not allowed.
18632            if len == 0 {
18633                return Ok(());
18634            };
18635            depth.increment()?;
18636            let envelope_size = 8;
18637            let bytes_len = len * envelope_size;
18638            let offset = decoder.out_of_line_offset(bytes_len)?;
18639            // Decode the envelope for each type.
18640            let mut _next_ordinal_to_read = 0;
18641            let mut next_offset = offset;
18642            let end_offset = offset + bytes_len;
18643            _next_ordinal_to_read += 1;
18644            if next_offset >= end_offset {
18645                return Ok(());
18646            }
18647
18648            // Decode unknown envelopes for gaps in ordinals.
18649            while _next_ordinal_to_read < 1 {
18650                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
18651                _next_ordinal_to_read += 1;
18652                next_offset += envelope_size;
18653            }
18654
18655            let next_out_of_line = decoder.next_out_of_line();
18656            let handles_before = decoder.remaining_handles();
18657            if let Some((inlined, num_bytes, num_handles)) =
18658                fidl::encoding::decode_envelope_header(decoder, next_offset)?
18659            {
18660                let member_inline_size =
18661                    <i8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
18662                if inlined != (member_inline_size <= 4) {
18663                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
18664                }
18665                let inner_offset;
18666                let mut inner_depth = depth.clone();
18667                if inlined {
18668                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
18669                    inner_offset = next_offset;
18670                } else {
18671                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
18672                    inner_depth.increment()?;
18673                }
18674                let val_ref = self.rssi.get_or_insert_with(|| fidl::new_empty!(i8, D));
18675                fidl::decode!(i8, D, val_ref, decoder, inner_offset, inner_depth)?;
18676                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
18677                {
18678                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
18679                }
18680                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
18681                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
18682                }
18683            }
18684
18685            next_offset += envelope_size;
18686            _next_ordinal_to_read += 1;
18687            if next_offset >= end_offset {
18688                return Ok(());
18689            }
18690
18691            // Decode unknown envelopes for gaps in ordinals.
18692            while _next_ordinal_to_read < 2 {
18693                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
18694                _next_ordinal_to_read += 1;
18695                next_offset += envelope_size;
18696            }
18697
18698            let next_out_of_line = decoder.next_out_of_line();
18699            let handles_before = decoder.remaining_handles();
18700            if let Some((inlined, num_bytes, num_handles)) =
18701                fidl::encoding::decode_envelope_header(decoder, next_offset)?
18702            {
18703                let member_inline_size =
18704                    <i8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
18705                if inlined != (member_inline_size <= 4) {
18706                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
18707                }
18708                let inner_offset;
18709                let mut inner_depth = depth.clone();
18710                if inlined {
18711                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
18712                    inner_offset = next_offset;
18713                } else {
18714                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
18715                    inner_depth.increment()?;
18716                }
18717                let val_ref = self.tx_power.get_or_insert_with(|| fidl::new_empty!(i8, D));
18718                fidl::decode!(i8, D, val_ref, decoder, inner_offset, inner_depth)?;
18719                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
18720                {
18721                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
18722                }
18723                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
18724                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
18725                }
18726            }
18727
18728            next_offset += envelope_size;
18729            _next_ordinal_to_read += 1;
18730            if next_offset >= end_offset {
18731                return Ok(());
18732            }
18733
18734            // Decode unknown envelopes for gaps in ordinals.
18735            while _next_ordinal_to_read < 3 {
18736                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
18737                _next_ordinal_to_read += 1;
18738                next_offset += envelope_size;
18739            }
18740
18741            let next_out_of_line = decoder.next_out_of_line();
18742            let handles_before = decoder.remaining_handles();
18743            if let Some((inlined, num_bytes, num_handles)) =
18744                fidl::encoding::decode_envelope_header(decoder, next_offset)?
18745            {
18746                let member_inline_size =
18747                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
18748                if inlined != (member_inline_size <= 4) {
18749                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
18750                }
18751                let inner_offset;
18752                let mut inner_depth = depth.clone();
18753                if inlined {
18754                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
18755                    inner_offset = next_offset;
18756                } else {
18757                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
18758                    inner_depth.increment()?;
18759                }
18760                let val_ref = self.channel_index.get_or_insert_with(|| fidl::new_empty!(u16, D));
18761                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
18762                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
18763                {
18764                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
18765                }
18766                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
18767                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
18768                }
18769            }
18770
18771            next_offset += envelope_size;
18772            _next_ordinal_to_read += 1;
18773            if next_offset >= end_offset {
18774                return Ok(());
18775            }
18776
18777            // Decode unknown envelopes for gaps in ordinals.
18778            while _next_ordinal_to_read < 4 {
18779                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
18780                _next_ordinal_to_read += 1;
18781                next_offset += envelope_size;
18782            }
18783
18784            let next_out_of_line = decoder.next_out_of_line();
18785            let handles_before = decoder.remaining_handles();
18786            if let Some((inlined, num_bytes, num_handles)) =
18787                fidl::encoding::decode_envelope_header(decoder, next_offset)?
18788            {
18789                let member_inline_size =
18790                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
18791                if inlined != (member_inline_size <= 4) {
18792                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
18793                }
18794                let inner_offset;
18795                let mut inner_depth = depth.clone();
18796                if inlined {
18797                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
18798                    inner_offset = next_offset;
18799                } else {
18800                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
18801                    inner_depth.increment()?;
18802                }
18803                let val_ref = self.partition_id.get_or_insert_with(|| fidl::new_empty!(u32, D));
18804                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
18805                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
18806                {
18807                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
18808                }
18809                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
18810                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
18811                }
18812            }
18813
18814            next_offset += envelope_size;
18815            _next_ordinal_to_read += 1;
18816            if next_offset >= end_offset {
18817                return Ok(());
18818            }
18819
18820            // Decode unknown envelopes for gaps in ordinals.
18821            while _next_ordinal_to_read < 5 {
18822                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
18823                _next_ordinal_to_read += 1;
18824                next_offset += envelope_size;
18825            }
18826
18827            let next_out_of_line = decoder.next_out_of_line();
18828            let handles_before = decoder.remaining_handles();
18829            if let Some((inlined, num_bytes, num_handles)) =
18830                fidl::encoding::decode_envelope_header(decoder, next_offset)?
18831            {
18832                let member_inline_size =
18833                    <fidl::encoding::BoundedString<256> as fidl::encoding::TypeMarker>::inline_size(
18834                        decoder.context,
18835                    );
18836                if inlined != (member_inline_size <= 4) {
18837                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
18838                }
18839                let inner_offset;
18840                let mut inner_depth = depth.clone();
18841                if inlined {
18842                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
18843                    inner_offset = next_offset;
18844                } else {
18845                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
18846                    inner_depth.increment()?;
18847                }
18848                let val_ref = self
18849                    .stack_version
18850                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<256>, D));
18851                fidl::decode!(
18852                    fidl::encoding::BoundedString<256>,
18853                    D,
18854                    val_ref,
18855                    decoder,
18856                    inner_offset,
18857                    inner_depth
18858                )?;
18859                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
18860                {
18861                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
18862                }
18863                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
18864                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
18865                }
18866            }
18867
18868            next_offset += envelope_size;
18869            _next_ordinal_to_read += 1;
18870            if next_offset >= end_offset {
18871                return Ok(());
18872            }
18873
18874            // Decode unknown envelopes for gaps in ordinals.
18875            while _next_ordinal_to_read < 6 {
18876                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
18877                _next_ordinal_to_read += 1;
18878                next_offset += envelope_size;
18879            }
18880
18881            let next_out_of_line = decoder.next_out_of_line();
18882            let handles_before = decoder.remaining_handles();
18883            if let Some((inlined, num_bytes, num_handles)) =
18884                fidl::encoding::decode_envelope_header(decoder, next_offset)?
18885            {
18886                let member_inline_size =
18887                    <fidl::encoding::BoundedString<256> as fidl::encoding::TypeMarker>::inline_size(
18888                        decoder.context,
18889                    );
18890                if inlined != (member_inline_size <= 4) {
18891                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
18892                }
18893                let inner_offset;
18894                let mut inner_depth = depth.clone();
18895                if inlined {
18896                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
18897                    inner_offset = next_offset;
18898                } else {
18899                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
18900                    inner_depth.increment()?;
18901                }
18902                let val_ref = self
18903                    .rcp_version
18904                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<256>, D));
18905                fidl::decode!(
18906                    fidl::encoding::BoundedString<256>,
18907                    D,
18908                    val_ref,
18909                    decoder,
18910                    inner_offset,
18911                    inner_depth
18912                )?;
18913                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
18914                {
18915                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
18916                }
18917                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
18918                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
18919                }
18920            }
18921
18922            next_offset += envelope_size;
18923            _next_ordinal_to_read += 1;
18924            if next_offset >= end_offset {
18925                return Ok(());
18926            }
18927
18928            // Decode unknown envelopes for gaps in ordinals.
18929            while _next_ordinal_to_read < 7 {
18930                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
18931                _next_ordinal_to_read += 1;
18932                next_offset += envelope_size;
18933            }
18934
18935            let next_out_of_line = decoder.next_out_of_line();
18936            let handles_before = decoder.remaining_handles();
18937            if let Some((inlined, num_bytes, num_handles)) =
18938                fidl::encoding::decode_envelope_header(decoder, next_offset)?
18939            {
18940                let member_inline_size =
18941                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
18942                if inlined != (member_inline_size <= 4) {
18943                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
18944                }
18945                let inner_offset;
18946                let mut inner_depth = depth.clone();
18947                if inlined {
18948                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
18949                    inner_offset = next_offset;
18950                } else {
18951                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
18952                    inner_depth.increment()?;
18953                }
18954                let val_ref = self.thread_link_mode.get_or_insert_with(|| fidl::new_empty!(u8, D));
18955                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
18956                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
18957                {
18958                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
18959                }
18960                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
18961                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
18962                }
18963            }
18964
18965            next_offset += envelope_size;
18966            _next_ordinal_to_read += 1;
18967            if next_offset >= end_offset {
18968                return Ok(());
18969            }
18970
18971            // Decode unknown envelopes for gaps in ordinals.
18972            while _next_ordinal_to_read < 8 {
18973                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
18974                _next_ordinal_to_read += 1;
18975                next_offset += envelope_size;
18976            }
18977
18978            let next_out_of_line = decoder.next_out_of_line();
18979            let handles_before = decoder.remaining_handles();
18980            if let Some((inlined, num_bytes, num_handles)) =
18981                fidl::encoding::decode_envelope_header(decoder, next_offset)?
18982            {
18983                let member_inline_size =
18984                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
18985                if inlined != (member_inline_size <= 4) {
18986                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
18987                }
18988                let inner_offset;
18989                let mut inner_depth = depth.clone();
18990                if inlined {
18991                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
18992                    inner_offset = next_offset;
18993                } else {
18994                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
18995                    inner_depth.increment()?;
18996                }
18997                let val_ref = self.thread_router_id.get_or_insert_with(|| fidl::new_empty!(u8, D));
18998                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
18999                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
19000                {
19001                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
19002                }
19003                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
19004                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
19005                }
19006            }
19007
19008            next_offset += envelope_size;
19009            _next_ordinal_to_read += 1;
19010            if next_offset >= end_offset {
19011                return Ok(());
19012            }
19013
19014            // Decode unknown envelopes for gaps in ordinals.
19015            while _next_ordinal_to_read < 9 {
19016                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
19017                _next_ordinal_to_read += 1;
19018                next_offset += envelope_size;
19019            }
19020
19021            let next_out_of_line = decoder.next_out_of_line();
19022            let handles_before = decoder.remaining_handles();
19023            if let Some((inlined, num_bytes, num_handles)) =
19024                fidl::encoding::decode_envelope_header(decoder, next_offset)?
19025            {
19026                let member_inline_size =
19027                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
19028                if inlined != (member_inline_size <= 4) {
19029                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
19030                }
19031                let inner_offset;
19032                let mut inner_depth = depth.clone();
19033                if inlined {
19034                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
19035                    inner_offset = next_offset;
19036                } else {
19037                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
19038                    inner_depth.increment()?;
19039                }
19040                let val_ref = self.thread_rloc.get_or_insert_with(|| fidl::new_empty!(u16, D));
19041                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
19042                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
19043                {
19044                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
19045                }
19046                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
19047                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
19048                }
19049            }
19050
19051            next_offset += envelope_size;
19052            _next_ordinal_to_read += 1;
19053            if next_offset >= end_offset {
19054                return Ok(());
19055            }
19056
19057            // Decode unknown envelopes for gaps in ordinals.
19058            while _next_ordinal_to_read < 10 {
19059                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
19060                _next_ordinal_to_read += 1;
19061                next_offset += envelope_size;
19062            }
19063
19064            let next_out_of_line = decoder.next_out_of_line();
19065            let handles_before = decoder.remaining_handles();
19066            if let Some((inlined, num_bytes, num_handles)) =
19067                fidl::encoding::decode_envelope_header(decoder, next_offset)?
19068            {
19069                let member_inline_size =
19070                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
19071                if inlined != (member_inline_size <= 4) {
19072                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
19073                }
19074                let inner_offset;
19075                let mut inner_depth = depth.clone();
19076                if inlined {
19077                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
19078                    inner_offset = next_offset;
19079                } else {
19080                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
19081                    inner_depth.increment()?;
19082                }
19083                let val_ref =
19084                    self.thread_network_data_version.get_or_insert_with(|| fidl::new_empty!(u8, D));
19085                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
19086                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
19087                {
19088                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
19089                }
19090                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
19091                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
19092                }
19093            }
19094
19095            next_offset += envelope_size;
19096            _next_ordinal_to_read += 1;
19097            if next_offset >= end_offset {
19098                return Ok(());
19099            }
19100
19101            // Decode unknown envelopes for gaps in ordinals.
19102            while _next_ordinal_to_read < 11 {
19103                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
19104                _next_ordinal_to_read += 1;
19105                next_offset += envelope_size;
19106            }
19107
19108            let next_out_of_line = decoder.next_out_of_line();
19109            let handles_before = decoder.remaining_handles();
19110            if let Some((inlined, num_bytes, num_handles)) =
19111                fidl::encoding::decode_envelope_header(decoder, next_offset)?
19112            {
19113                let member_inline_size =
19114                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
19115                if inlined != (member_inline_size <= 4) {
19116                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
19117                }
19118                let inner_offset;
19119                let mut inner_depth = depth.clone();
19120                if inlined {
19121                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
19122                    inner_offset = next_offset;
19123                } else {
19124                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
19125                    inner_depth.increment()?;
19126                }
19127                let val_ref = self
19128                    .thread_stable_network_data_version
19129                    .get_or_insert_with(|| fidl::new_empty!(u8, D));
19130                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
19131                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
19132                {
19133                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
19134                }
19135                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
19136                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
19137                }
19138            }
19139
19140            next_offset += envelope_size;
19141            _next_ordinal_to_read += 1;
19142            if next_offset >= end_offset {
19143                return Ok(());
19144            }
19145
19146            // Decode unknown envelopes for gaps in ordinals.
19147            while _next_ordinal_to_read < 12 {
19148                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
19149                _next_ordinal_to_read += 1;
19150                next_offset += envelope_size;
19151            }
19152
19153            let next_out_of_line = decoder.next_out_of_line();
19154            let handles_before = decoder.remaining_handles();
19155            if let Some((inlined, num_bytes, num_handles)) =
19156                fidl::encoding::decode_envelope_header(decoder, next_offset)?
19157            {
19158                let member_inline_size =
19159                    <fidl::encoding::Vector<u8, 255> as fidl::encoding::TypeMarker>::inline_size(
19160                        decoder.context,
19161                    );
19162                if inlined != (member_inline_size <= 4) {
19163                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
19164                }
19165                let inner_offset;
19166                let mut inner_depth = depth.clone();
19167                if inlined {
19168                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
19169                    inner_offset = next_offset;
19170                } else {
19171                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
19172                    inner_depth.increment()?;
19173                }
19174                let val_ref = self
19175                    .thread_network_data
19176                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u8, 255>, D));
19177                fidl::decode!(fidl::encoding::Vector<u8, 255>, D, val_ref, decoder, inner_offset, inner_depth)?;
19178                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
19179                {
19180                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
19181                }
19182                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
19183                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
19184                }
19185            }
19186
19187            next_offset += envelope_size;
19188            _next_ordinal_to_read += 1;
19189            if next_offset >= end_offset {
19190                return Ok(());
19191            }
19192
19193            // Decode unknown envelopes for gaps in ordinals.
19194            while _next_ordinal_to_read < 13 {
19195                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
19196                _next_ordinal_to_read += 1;
19197                next_offset += envelope_size;
19198            }
19199
19200            let next_out_of_line = decoder.next_out_of_line();
19201            let handles_before = decoder.remaining_handles();
19202            if let Some((inlined, num_bytes, num_handles)) =
19203                fidl::encoding::decode_envelope_header(decoder, next_offset)?
19204            {
19205                let member_inline_size =
19206                    <fidl::encoding::Vector<u8, 255> as fidl::encoding::TypeMarker>::inline_size(
19207                        decoder.context,
19208                    );
19209                if inlined != (member_inline_size <= 4) {
19210                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
19211                }
19212                let inner_offset;
19213                let mut inner_depth = depth.clone();
19214                if inlined {
19215                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
19216                    inner_offset = next_offset;
19217                } else {
19218                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
19219                    inner_depth.increment()?;
19220                }
19221                let val_ref = self
19222                    .thread_stable_network_data
19223                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u8, 255>, D));
19224                fidl::decode!(fidl::encoding::Vector<u8, 255>, D, val_ref, decoder, inner_offset, inner_depth)?;
19225                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
19226                {
19227                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
19228                }
19229                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
19230                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
19231                }
19232            }
19233
19234            next_offset += envelope_size;
19235            _next_ordinal_to_read += 1;
19236            if next_offset >= end_offset {
19237                return Ok(());
19238            }
19239
19240            // Decode unknown envelopes for gaps in ordinals.
19241            while _next_ordinal_to_read < 14 {
19242                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
19243                _next_ordinal_to_read += 1;
19244                next_offset += envelope_size;
19245            }
19246
19247            let next_out_of_line = decoder.next_out_of_line();
19248            let handles_before = decoder.remaining_handles();
19249            if let Some((inlined, num_bytes, num_handles)) =
19250                fidl::encoding::decode_envelope_header(decoder, next_offset)?
19251            {
19252                let member_inline_size =
19253                    <BorderRoutingCounters as fidl::encoding::TypeMarker>::inline_size(
19254                        decoder.context,
19255                    );
19256                if inlined != (member_inline_size <= 4) {
19257                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
19258                }
19259                let inner_offset;
19260                let mut inner_depth = depth.clone();
19261                if inlined {
19262                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
19263                    inner_offset = next_offset;
19264                } else {
19265                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
19266                    inner_depth.increment()?;
19267                }
19268                let val_ref = self
19269                    .thread_border_routing_counters
19270                    .get_or_insert_with(|| fidl::new_empty!(BorderRoutingCounters, D));
19271                fidl::decode!(
19272                    BorderRoutingCounters,
19273                    D,
19274                    val_ref,
19275                    decoder,
19276                    inner_offset,
19277                    inner_depth
19278                )?;
19279                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
19280                {
19281                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
19282                }
19283                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
19284                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
19285                }
19286            }
19287
19288            next_offset += envelope_size;
19289            _next_ordinal_to_read += 1;
19290            if next_offset >= end_offset {
19291                return Ok(());
19292            }
19293
19294            // Decode unknown envelopes for gaps in ordinals.
19295            while _next_ordinal_to_read < 15 {
19296                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
19297                _next_ordinal_to_read += 1;
19298                next_offset += envelope_size;
19299            }
19300
19301            let next_out_of_line = decoder.next_out_of_line();
19302            let handles_before = decoder.remaining_handles();
19303            if let Some((inlined, num_bytes, num_handles)) =
19304                fidl::encoding::decode_envelope_header(decoder, next_offset)?
19305            {
19306                let member_inline_size =
19307                    <SrpServerInfo as fidl::encoding::TypeMarker>::inline_size(decoder.context);
19308                if inlined != (member_inline_size <= 4) {
19309                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
19310                }
19311                let inner_offset;
19312                let mut inner_depth = depth.clone();
19313                if inlined {
19314                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
19315                    inner_offset = next_offset;
19316                } else {
19317                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
19318                    inner_depth.increment()?;
19319                }
19320                let val_ref =
19321                    self.srp_server_info.get_or_insert_with(|| fidl::new_empty!(SrpServerInfo, D));
19322                fidl::decode!(SrpServerInfo, D, val_ref, decoder, inner_offset, inner_depth)?;
19323                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
19324                {
19325                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
19326                }
19327                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
19328                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
19329                }
19330            }
19331
19332            next_offset += envelope_size;
19333            _next_ordinal_to_read += 1;
19334            if next_offset >= end_offset {
19335                return Ok(());
19336            }
19337
19338            // Decode unknown envelopes for gaps in ordinals.
19339            while _next_ordinal_to_read < 16 {
19340                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
19341                _next_ordinal_to_read += 1;
19342                next_offset += envelope_size;
19343            }
19344
19345            let next_out_of_line = decoder.next_out_of_line();
19346            let handles_before = decoder.remaining_handles();
19347            if let Some((inlined, num_bytes, num_handles)) =
19348                fidl::encoding::decode_envelope_header(decoder, next_offset)?
19349            {
19350                let member_inline_size =
19351                    <DnssdCounters as fidl::encoding::TypeMarker>::inline_size(decoder.context);
19352                if inlined != (member_inline_size <= 4) {
19353                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
19354                }
19355                let inner_offset;
19356                let mut inner_depth = depth.clone();
19357                if inlined {
19358                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
19359                    inner_offset = next_offset;
19360                } else {
19361                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
19362                    inner_depth.increment()?;
19363                }
19364                let val_ref =
19365                    self.dnssd_counters.get_or_insert_with(|| fidl::new_empty!(DnssdCounters, D));
19366                fidl::decode!(DnssdCounters, D, val_ref, decoder, inner_offset, inner_depth)?;
19367                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
19368                {
19369                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
19370                }
19371                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
19372                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
19373                }
19374            }
19375
19376            next_offset += envelope_size;
19377            _next_ordinal_to_read += 1;
19378            if next_offset >= end_offset {
19379                return Ok(());
19380            }
19381
19382            // Decode unknown envelopes for gaps in ordinals.
19383            while _next_ordinal_to_read < 17 {
19384                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
19385                _next_ordinal_to_read += 1;
19386                next_offset += envelope_size;
19387            }
19388
19389            let next_out_of_line = decoder.next_out_of_line();
19390            let handles_before = decoder.remaining_handles();
19391            if let Some((inlined, num_bytes, num_handles)) =
19392                fidl::encoding::decode_envelope_header(decoder, next_offset)?
19393            {
19394                let member_inline_size =
19395                    <LeaderData as fidl::encoding::TypeMarker>::inline_size(decoder.context);
19396                if inlined != (member_inline_size <= 4) {
19397                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
19398                }
19399                let inner_offset;
19400                let mut inner_depth = depth.clone();
19401                if inlined {
19402                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
19403                    inner_offset = next_offset;
19404                } else {
19405                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
19406                    inner_depth.increment()?;
19407                }
19408                let val_ref =
19409                    self.leader_data.get_or_insert_with(|| fidl::new_empty!(LeaderData, D));
19410                fidl::decode!(LeaderData, D, val_ref, decoder, inner_offset, inner_depth)?;
19411                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
19412                {
19413                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
19414                }
19415                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
19416                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
19417                }
19418            }
19419
19420            next_offset += envelope_size;
19421            _next_ordinal_to_read += 1;
19422            if next_offset >= end_offset {
19423                return Ok(());
19424            }
19425
19426            // Decode unknown envelopes for gaps in ordinals.
19427            while _next_ordinal_to_read < 18 {
19428                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
19429                _next_ordinal_to_read += 1;
19430                next_offset += envelope_size;
19431            }
19432
19433            let next_out_of_line = decoder.next_out_of_line();
19434            let handles_before = decoder.remaining_handles();
19435            if let Some((inlined, num_bytes, num_handles)) =
19436                fidl::encoding::decode_envelope_header(decoder, next_offset)?
19437            {
19438                let member_inline_size =
19439                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
19440                if inlined != (member_inline_size <= 4) {
19441                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
19442                }
19443                let inner_offset;
19444                let mut inner_depth = depth.clone();
19445                if inlined {
19446                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
19447                    inner_offset = next_offset;
19448                } else {
19449                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
19450                    inner_depth.increment()?;
19451                }
19452                let val_ref = self.uptime.get_or_insert_with(|| fidl::new_empty!(i64, D));
19453                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
19454                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
19455                {
19456                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
19457                }
19458                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
19459                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
19460                }
19461            }
19462
19463            next_offset += envelope_size;
19464            _next_ordinal_to_read += 1;
19465            if next_offset >= end_offset {
19466                return Ok(());
19467            }
19468
19469            // Decode unknown envelopes for gaps in ordinals.
19470            while _next_ordinal_to_read < 19 {
19471                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
19472                _next_ordinal_to_read += 1;
19473                next_offset += envelope_size;
19474            }
19475
19476            let next_out_of_line = decoder.next_out_of_line();
19477            let handles_before = decoder.remaining_handles();
19478            if let Some((inlined, num_bytes, num_handles)) =
19479                fidl::encoding::decode_envelope_header(decoder, next_offset)?
19480            {
19481                let member_inline_size =
19482                    <Nat64Info as fidl::encoding::TypeMarker>::inline_size(decoder.context);
19483                if inlined != (member_inline_size <= 4) {
19484                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
19485                }
19486                let inner_offset;
19487                let mut inner_depth = depth.clone();
19488                if inlined {
19489                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
19490                    inner_offset = next_offset;
19491                } else {
19492                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
19493                    inner_depth.increment()?;
19494                }
19495                let val_ref = self.nat64_info.get_or_insert_with(|| fidl::new_empty!(Nat64Info, D));
19496                fidl::decode!(Nat64Info, D, val_ref, decoder, inner_offset, inner_depth)?;
19497                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
19498                {
19499                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
19500                }
19501                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
19502                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
19503                }
19504            }
19505
19506            next_offset += envelope_size;
19507            _next_ordinal_to_read += 1;
19508            if next_offset >= end_offset {
19509                return Ok(());
19510            }
19511
19512            // Decode unknown envelopes for gaps in ordinals.
19513            while _next_ordinal_to_read < 20 {
19514                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
19515                _next_ordinal_to_read += 1;
19516                next_offset += envelope_size;
19517            }
19518
19519            let next_out_of_line = decoder.next_out_of_line();
19520            let handles_before = decoder.remaining_handles();
19521            if let Some((inlined, num_bytes, num_handles)) =
19522                fidl::encoding::decode_envelope_header(decoder, next_offset)?
19523            {
19524                let member_inline_size =
19525                    <TrelCounters as fidl::encoding::TypeMarker>::inline_size(decoder.context);
19526                if inlined != (member_inline_size <= 4) {
19527                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
19528                }
19529                let inner_offset;
19530                let mut inner_depth = depth.clone();
19531                if inlined {
19532                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
19533                    inner_offset = next_offset;
19534                } else {
19535                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
19536                    inner_depth.increment()?;
19537                }
19538                let val_ref =
19539                    self.trel_counters.get_or_insert_with(|| fidl::new_empty!(TrelCounters, D));
19540                fidl::decode!(TrelCounters, D, val_ref, decoder, inner_offset, inner_depth)?;
19541                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
19542                {
19543                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
19544                }
19545                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
19546                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
19547                }
19548            }
19549
19550            next_offset += envelope_size;
19551            _next_ordinal_to_read += 1;
19552            if next_offset >= end_offset {
19553                return Ok(());
19554            }
19555
19556            // Decode unknown envelopes for gaps in ordinals.
19557            while _next_ordinal_to_read < 21 {
19558                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
19559                _next_ordinal_to_read += 1;
19560                next_offset += envelope_size;
19561            }
19562
19563            let next_out_of_line = decoder.next_out_of_line();
19564            let handles_before = decoder.remaining_handles();
19565            if let Some((inlined, num_bytes, num_handles)) =
19566                fidl::encoding::decode_envelope_header(decoder, next_offset)?
19567            {
19568                let member_inline_size =
19569                    <TrelPeersInfo as fidl::encoding::TypeMarker>::inline_size(decoder.context);
19570                if inlined != (member_inline_size <= 4) {
19571                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
19572                }
19573                let inner_offset;
19574                let mut inner_depth = depth.clone();
19575                if inlined {
19576                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
19577                    inner_offset = next_offset;
19578                } else {
19579                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
19580                    inner_depth.increment()?;
19581                }
19582                let val_ref =
19583                    self.trel_peers_info.get_or_insert_with(|| fidl::new_empty!(TrelPeersInfo, D));
19584                fidl::decode!(TrelPeersInfo, D, val_ref, decoder, inner_offset, inner_depth)?;
19585                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
19586                {
19587                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
19588                }
19589                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
19590                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
19591                }
19592            }
19593
19594            next_offset += envelope_size;
19595            _next_ordinal_to_read += 1;
19596            if next_offset >= end_offset {
19597                return Ok(());
19598            }
19599
19600            // Decode unknown envelopes for gaps in ordinals.
19601            while _next_ordinal_to_read < 22 {
19602                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
19603                _next_ordinal_to_read += 1;
19604                next_offset += envelope_size;
19605            }
19606
19607            let next_out_of_line = decoder.next_out_of_line();
19608            let handles_before = decoder.remaining_handles();
19609            if let Some((inlined, num_bytes, num_handles)) =
19610                fidl::encoding::decode_envelope_header(decoder, next_offset)?
19611            {
19612                let member_inline_size =
19613                    <UpstreamDnsInfo as fidl::encoding::TypeMarker>::inline_size(decoder.context);
19614                if inlined != (member_inline_size <= 4) {
19615                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
19616                }
19617                let inner_offset;
19618                let mut inner_depth = depth.clone();
19619                if inlined {
19620                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
19621                    inner_offset = next_offset;
19622                } else {
19623                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
19624                    inner_depth.increment()?;
19625                }
19626                let val_ref = self
19627                    .upstream_dns_info
19628                    .get_or_insert_with(|| fidl::new_empty!(UpstreamDnsInfo, D));
19629                fidl::decode!(UpstreamDnsInfo, D, val_ref, decoder, inner_offset, inner_depth)?;
19630                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
19631                {
19632                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
19633                }
19634                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
19635                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
19636                }
19637            }
19638
19639            next_offset += envelope_size;
19640            _next_ordinal_to_read += 1;
19641            if next_offset >= end_offset {
19642                return Ok(());
19643            }
19644
19645            // Decode unknown envelopes for gaps in ordinals.
19646            while _next_ordinal_to_read < 23 {
19647                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
19648                _next_ordinal_to_read += 1;
19649                next_offset += envelope_size;
19650            }
19651
19652            let next_out_of_line = decoder.next_out_of_line();
19653            let handles_before = decoder.remaining_handles();
19654            if let Some((inlined, num_bytes, num_handles)) =
19655                fidl::encoding::decode_envelope_header(decoder, next_offset)?
19656            {
19657                let member_inline_size =
19658                    <Dhcp6PdInfo as fidl::encoding::TypeMarker>::inline_size(decoder.context);
19659                if inlined != (member_inline_size <= 4) {
19660                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
19661                }
19662                let inner_offset;
19663                let mut inner_depth = depth.clone();
19664                if inlined {
19665                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
19666                    inner_offset = next_offset;
19667                } else {
19668                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
19669                    inner_depth.increment()?;
19670                }
19671                let val_ref =
19672                    self.dhcp6pd_info.get_or_insert_with(|| fidl::new_empty!(Dhcp6PdInfo, D));
19673                fidl::decode!(Dhcp6PdInfo, D, val_ref, decoder, inner_offset, inner_depth)?;
19674                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
19675                {
19676                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
19677                }
19678                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
19679                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
19680                }
19681            }
19682
19683            next_offset += envelope_size;
19684            _next_ordinal_to_read += 1;
19685            if next_offset >= end_offset {
19686                return Ok(());
19687            }
19688
19689            // Decode unknown envelopes for gaps in ordinals.
19690            while _next_ordinal_to_read < 24 {
19691                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
19692                _next_ordinal_to_read += 1;
19693                next_offset += envelope_size;
19694            }
19695
19696            let next_out_of_line = decoder.next_out_of_line();
19697            let handles_before = decoder.remaining_handles();
19698            if let Some((inlined, num_bytes, num_handles)) =
19699                fidl::encoding::decode_envelope_header(decoder, next_offset)?
19700            {
19701                let member_inline_size = <fidl::encoding::Vector<LinkMetricsEntry, 64> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
19702                if inlined != (member_inline_size <= 4) {
19703                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
19704                }
19705                let inner_offset;
19706                let mut inner_depth = depth.clone();
19707                if inlined {
19708                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
19709                    inner_offset = next_offset;
19710                } else {
19711                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
19712                    inner_depth.increment()?;
19713                }
19714                let val_ref = self.link_metrics_entries.get_or_insert_with(
19715                    || fidl::new_empty!(fidl::encoding::Vector<LinkMetricsEntry, 64>, D),
19716                );
19717                fidl::decode!(fidl::encoding::Vector<LinkMetricsEntry, 64>, D, val_ref, decoder, inner_offset, inner_depth)?;
19718                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
19719                {
19720                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
19721                }
19722                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
19723                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
19724                }
19725            }
19726
19727            next_offset += envelope_size;
19728            _next_ordinal_to_read += 1;
19729            if next_offset >= end_offset {
19730                return Ok(());
19731            }
19732
19733            // Decode unknown envelopes for gaps in ordinals.
19734            while _next_ordinal_to_read < 25 {
19735                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
19736                _next_ordinal_to_read += 1;
19737                next_offset += envelope_size;
19738            }
19739
19740            let next_out_of_line = decoder.next_out_of_line();
19741            let handles_before = decoder.remaining_handles();
19742            if let Some((inlined, num_bytes, num_handles)) =
19743                fidl::encoding::decode_envelope_header(decoder, next_offset)?
19744            {
19745                let member_inline_size = <fidl_fuchsia_lowpan_device__common::BorderAgentCounters as fidl::encoding::TypeMarker>::inline_size(decoder.context);
19746                if inlined != (member_inline_size <= 4) {
19747                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
19748                }
19749                let inner_offset;
19750                let mut inner_depth = depth.clone();
19751                if inlined {
19752                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
19753                    inner_offset = next_offset;
19754                } else {
19755                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
19756                    inner_depth.increment()?;
19757                }
19758                let val_ref = self.border_agent_counters.get_or_insert_with(|| {
19759                    fidl::new_empty!(fidl_fuchsia_lowpan_device__common::BorderAgentCounters, D)
19760                });
19761                fidl::decode!(
19762                    fidl_fuchsia_lowpan_device__common::BorderAgentCounters,
19763                    D,
19764                    val_ref,
19765                    decoder,
19766                    inner_offset,
19767                    inner_depth
19768                )?;
19769                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
19770                {
19771                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
19772                }
19773                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
19774                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
19775                }
19776            }
19777
19778            next_offset += envelope_size;
19779            _next_ordinal_to_read += 1;
19780            if next_offset >= end_offset {
19781                return Ok(());
19782            }
19783
19784            // Decode unknown envelopes for gaps in ordinals.
19785            while _next_ordinal_to_read < 26 {
19786                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
19787                _next_ordinal_to_read += 1;
19788                next_offset += envelope_size;
19789            }
19790
19791            let next_out_of_line = decoder.next_out_of_line();
19792            let handles_before = decoder.remaining_handles();
19793            if let Some((inlined, num_bytes, num_handles)) =
19794                fidl::encoding::decode_envelope_header(decoder, next_offset)?
19795            {
19796                let member_inline_size =
19797                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
19798                if inlined != (member_inline_size <= 4) {
19799                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
19800                }
19801                let inner_offset;
19802                let mut inner_depth = depth.clone();
19803                if inlined {
19804                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
19805                    inner_offset = next_offset;
19806                } else {
19807                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
19808                    inner_depth.increment()?;
19809                }
19810                let val_ref =
19811                    self.multi_ail_detected.get_or_insert_with(|| fidl::new_empty!(bool, D));
19812                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
19813                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
19814                {
19815                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
19816                }
19817                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
19818                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
19819                }
19820            }
19821
19822            next_offset += envelope_size;
19823            _next_ordinal_to_read += 1;
19824            if next_offset >= end_offset {
19825                return Ok(());
19826            }
19827
19828            // Decode unknown envelopes for gaps in ordinals.
19829            while _next_ordinal_to_read < 27 {
19830                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
19831                _next_ordinal_to_read += 1;
19832                next_offset += envelope_size;
19833            }
19834
19835            let next_out_of_line = decoder.next_out_of_line();
19836            let handles_before = decoder.remaining_handles();
19837            if let Some((inlined, num_bytes, num_handles)) =
19838                fidl::encoding::decode_envelope_header(decoder, next_offset)?
19839            {
19840                let member_inline_size =
19841                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
19842                if inlined != (member_inline_size <= 4) {
19843                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
19844                }
19845                let inner_offset;
19846                let mut inner_depth = depth.clone();
19847                if inlined {
19848                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
19849                    inner_offset = next_offset;
19850                } else {
19851                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
19852                    inner_depth.increment()?;
19853                }
19854                let val_ref = self.extended_pan_id.get_or_insert_with(|| fidl::new_empty!(u64, D));
19855                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
19856                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
19857                {
19858                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
19859                }
19860                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
19861                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
19862                }
19863            }
19864
19865            next_offset += envelope_size;
19866            _next_ordinal_to_read += 1;
19867            if next_offset >= end_offset {
19868                return Ok(());
19869            }
19870
19871            // Decode unknown envelopes for gaps in ordinals.
19872            while _next_ordinal_to_read < 28 {
19873                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
19874                _next_ordinal_to_read += 1;
19875                next_offset += envelope_size;
19876            }
19877
19878            let next_out_of_line = decoder.next_out_of_line();
19879            let handles_before = decoder.remaining_handles();
19880            if let Some((inlined, num_bytes, num_handles)) =
19881                fidl::encoding::decode_envelope_header(decoder, next_offset)?
19882            {
19883                let member_inline_size = <fidl::encoding::Vector<BorderRoutingPeer, 64> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
19884                if inlined != (member_inline_size <= 4) {
19885                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
19886                }
19887                let inner_offset;
19888                let mut inner_depth = depth.clone();
19889                if inlined {
19890                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
19891                    inner_offset = next_offset;
19892                } else {
19893                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
19894                    inner_depth.increment()?;
19895                }
19896                let val_ref = self.border_routing_peers.get_or_insert_with(
19897                    || fidl::new_empty!(fidl::encoding::Vector<BorderRoutingPeer, 64>, D),
19898                );
19899                fidl::decode!(fidl::encoding::Vector<BorderRoutingPeer, 64>, D, val_ref, decoder, inner_offset, inner_depth)?;
19900                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
19901                {
19902                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
19903                }
19904                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
19905                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
19906                }
19907            }
19908
19909            next_offset += envelope_size;
19910            _next_ordinal_to_read += 1;
19911            if next_offset >= end_offset {
19912                return Ok(());
19913            }
19914
19915            // Decode unknown envelopes for gaps in ordinals.
19916            while _next_ordinal_to_read < 29 {
19917                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
19918                _next_ordinal_to_read += 1;
19919                next_offset += envelope_size;
19920            }
19921
19922            let next_out_of_line = decoder.next_out_of_line();
19923            let handles_before = decoder.remaining_handles();
19924            if let Some((inlined, num_bytes, num_handles)) =
19925                fidl::encoding::decode_envelope_header(decoder, next_offset)?
19926            {
19927                let member_inline_size = <fidl::encoding::Vector<BorderRoutingRouter, 64> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
19928                if inlined != (member_inline_size <= 4) {
19929                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
19930                }
19931                let inner_offset;
19932                let mut inner_depth = depth.clone();
19933                if inlined {
19934                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
19935                    inner_offset = next_offset;
19936                } else {
19937                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
19938                    inner_depth.increment()?;
19939                }
19940                let val_ref = self.border_routing_routers.get_or_insert_with(
19941                    || fidl::new_empty!(fidl::encoding::Vector<BorderRoutingRouter, 64>, D),
19942                );
19943                fidl::decode!(fidl::encoding::Vector<BorderRoutingRouter, 64>, D, val_ref, decoder, inner_offset, inner_depth)?;
19944                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
19945                {
19946                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
19947                }
19948                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
19949                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
19950                }
19951            }
19952
19953            next_offset += envelope_size;
19954            _next_ordinal_to_read += 1;
19955            if next_offset >= end_offset {
19956                return Ok(());
19957            }
19958
19959            // Decode unknown envelopes for gaps in ordinals.
19960            while _next_ordinal_to_read < 30 {
19961                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
19962                _next_ordinal_to_read += 1;
19963                next_offset += envelope_size;
19964            }
19965
19966            let next_out_of_line = decoder.next_out_of_line();
19967            let handles_before = decoder.remaining_handles();
19968            if let Some((inlined, num_bytes, num_handles)) =
19969                fidl::encoding::decode_envelope_header(decoder, next_offset)?
19970            {
19971                let member_inline_size =
19972                    <OperationalDataset as fidl::encoding::TypeMarker>::inline_size(
19973                        decoder.context,
19974                    );
19975                if inlined != (member_inline_size <= 4) {
19976                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
19977                }
19978                let inner_offset;
19979                let mut inner_depth = depth.clone();
19980                if inlined {
19981                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
19982                    inner_offset = next_offset;
19983                } else {
19984                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
19985                    inner_depth.increment()?;
19986                }
19987                let val_ref = self
19988                    .active_dataset
19989                    .get_or_insert_with(|| fidl::new_empty!(OperationalDataset, D));
19990                fidl::decode!(OperationalDataset, D, val_ref, decoder, inner_offset, inner_depth)?;
19991                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
19992                {
19993                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
19994                }
19995                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
19996                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
19997                }
19998            }
19999
20000            next_offset += envelope_size;
20001
20002            // Decode the remaining unknown envelopes.
20003            while next_offset < end_offset {
20004                _next_ordinal_to_read += 1;
20005                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
20006                next_offset += envelope_size;
20007            }
20008
20009            Ok(())
20010        }
20011    }
20012
20013    impl TrelCounters {
20014        #[inline(always)]
20015        fn max_ordinal_present(&self) -> u64 {
20016            if let Some(_) = self.tx_packets {
20017                return 5;
20018            }
20019            if let Some(_) = self.tx_failure {
20020                return 4;
20021            }
20022            if let Some(_) = self.tx_bytes {
20023                return 3;
20024            }
20025            if let Some(_) = self.rx_packets {
20026                return 2;
20027            }
20028            if let Some(_) = self.rx_bytes {
20029                return 1;
20030            }
20031            0
20032        }
20033    }
20034
20035    impl fidl::encoding::ValueTypeMarker for TrelCounters {
20036        type Borrowed<'a> = &'a Self;
20037        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
20038            value
20039        }
20040    }
20041
20042    unsafe impl fidl::encoding::TypeMarker for TrelCounters {
20043        type Owned = Self;
20044
20045        #[inline(always)]
20046        fn inline_align(_context: fidl::encoding::Context) -> usize {
20047            8
20048        }
20049
20050        #[inline(always)]
20051        fn inline_size(_context: fidl::encoding::Context) -> usize {
20052            16
20053        }
20054    }
20055
20056    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<TrelCounters, D>
20057        for &TrelCounters
20058    {
20059        unsafe fn encode(
20060            self,
20061            encoder: &mut fidl::encoding::Encoder<'_, D>,
20062            offset: usize,
20063            mut depth: fidl::encoding::Depth,
20064        ) -> fidl::Result<()> {
20065            encoder.debug_check_bounds::<TrelCounters>(offset);
20066            // Vector header
20067            let max_ordinal: u64 = self.max_ordinal_present();
20068            encoder.write_num(max_ordinal, offset);
20069            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
20070            // Calling encoder.out_of_line_offset(0) is not allowed.
20071            if max_ordinal == 0 {
20072                return Ok(());
20073            }
20074            depth.increment()?;
20075            let envelope_size = 8;
20076            let bytes_len = max_ordinal as usize * envelope_size;
20077            #[allow(unused_variables)]
20078            let offset = encoder.out_of_line_offset(bytes_len);
20079            let mut _prev_end_offset: usize = 0;
20080            if 1 > max_ordinal {
20081                return Ok(());
20082            }
20083
20084            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
20085            // are envelope_size bytes.
20086            let cur_offset: usize = (1 - 1) * envelope_size;
20087
20088            // Zero reserved fields.
20089            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
20090
20091            // Safety:
20092            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
20093            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
20094            //   envelope_size bytes, there is always sufficient room.
20095            fidl::encoding::encode_in_envelope_optional::<u64, D>(
20096                self.rx_bytes.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
20097                encoder,
20098                offset + cur_offset,
20099                depth,
20100            )?;
20101
20102            _prev_end_offset = cur_offset + envelope_size;
20103            if 2 > max_ordinal {
20104                return Ok(());
20105            }
20106
20107            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
20108            // are envelope_size bytes.
20109            let cur_offset: usize = (2 - 1) * envelope_size;
20110
20111            // Zero reserved fields.
20112            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
20113
20114            // Safety:
20115            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
20116            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
20117            //   envelope_size bytes, there is always sufficient room.
20118            fidl::encoding::encode_in_envelope_optional::<u64, D>(
20119                self.rx_packets.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
20120                encoder,
20121                offset + cur_offset,
20122                depth,
20123            )?;
20124
20125            _prev_end_offset = cur_offset + envelope_size;
20126            if 3 > max_ordinal {
20127                return Ok(());
20128            }
20129
20130            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
20131            // are envelope_size bytes.
20132            let cur_offset: usize = (3 - 1) * envelope_size;
20133
20134            // Zero reserved fields.
20135            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
20136
20137            // Safety:
20138            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
20139            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
20140            //   envelope_size bytes, there is always sufficient room.
20141            fidl::encoding::encode_in_envelope_optional::<u64, D>(
20142                self.tx_bytes.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
20143                encoder,
20144                offset + cur_offset,
20145                depth,
20146            )?;
20147
20148            _prev_end_offset = cur_offset + envelope_size;
20149            if 4 > max_ordinal {
20150                return Ok(());
20151            }
20152
20153            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
20154            // are envelope_size bytes.
20155            let cur_offset: usize = (4 - 1) * envelope_size;
20156
20157            // Zero reserved fields.
20158            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
20159
20160            // Safety:
20161            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
20162            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
20163            //   envelope_size bytes, there is always sufficient room.
20164            fidl::encoding::encode_in_envelope_optional::<u64, D>(
20165                self.tx_failure.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
20166                encoder,
20167                offset + cur_offset,
20168                depth,
20169            )?;
20170
20171            _prev_end_offset = cur_offset + envelope_size;
20172            if 5 > max_ordinal {
20173                return Ok(());
20174            }
20175
20176            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
20177            // are envelope_size bytes.
20178            let cur_offset: usize = (5 - 1) * envelope_size;
20179
20180            // Zero reserved fields.
20181            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
20182
20183            // Safety:
20184            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
20185            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
20186            //   envelope_size bytes, there is always sufficient room.
20187            fidl::encoding::encode_in_envelope_optional::<u64, D>(
20188                self.tx_packets.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
20189                encoder,
20190                offset + cur_offset,
20191                depth,
20192            )?;
20193
20194            _prev_end_offset = cur_offset + envelope_size;
20195
20196            Ok(())
20197        }
20198    }
20199
20200    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for TrelCounters {
20201        #[inline(always)]
20202        fn new_empty() -> Self {
20203            Self::default()
20204        }
20205
20206        unsafe fn decode(
20207            &mut self,
20208            decoder: &mut fidl::encoding::Decoder<'_, D>,
20209            offset: usize,
20210            mut depth: fidl::encoding::Depth,
20211        ) -> fidl::Result<()> {
20212            decoder.debug_check_bounds::<Self>(offset);
20213            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
20214                None => return Err(fidl::Error::NotNullable),
20215                Some(len) => len,
20216            };
20217            // Calling decoder.out_of_line_offset(0) is not allowed.
20218            if len == 0 {
20219                return Ok(());
20220            };
20221            depth.increment()?;
20222            let envelope_size = 8;
20223            let bytes_len = len * envelope_size;
20224            let offset = decoder.out_of_line_offset(bytes_len)?;
20225            // Decode the envelope for each type.
20226            let mut _next_ordinal_to_read = 0;
20227            let mut next_offset = offset;
20228            let end_offset = offset + bytes_len;
20229            _next_ordinal_to_read += 1;
20230            if next_offset >= end_offset {
20231                return Ok(());
20232            }
20233
20234            // Decode unknown envelopes for gaps in ordinals.
20235            while _next_ordinal_to_read < 1 {
20236                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
20237                _next_ordinal_to_read += 1;
20238                next_offset += envelope_size;
20239            }
20240
20241            let next_out_of_line = decoder.next_out_of_line();
20242            let handles_before = decoder.remaining_handles();
20243            if let Some((inlined, num_bytes, num_handles)) =
20244                fidl::encoding::decode_envelope_header(decoder, next_offset)?
20245            {
20246                let member_inline_size =
20247                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
20248                if inlined != (member_inline_size <= 4) {
20249                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
20250                }
20251                let inner_offset;
20252                let mut inner_depth = depth.clone();
20253                if inlined {
20254                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
20255                    inner_offset = next_offset;
20256                } else {
20257                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
20258                    inner_depth.increment()?;
20259                }
20260                let val_ref = self.rx_bytes.get_or_insert_with(|| fidl::new_empty!(u64, D));
20261                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
20262                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
20263                {
20264                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
20265                }
20266                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
20267                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
20268                }
20269            }
20270
20271            next_offset += envelope_size;
20272            _next_ordinal_to_read += 1;
20273            if next_offset >= end_offset {
20274                return Ok(());
20275            }
20276
20277            // Decode unknown envelopes for gaps in ordinals.
20278            while _next_ordinal_to_read < 2 {
20279                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
20280                _next_ordinal_to_read += 1;
20281                next_offset += envelope_size;
20282            }
20283
20284            let next_out_of_line = decoder.next_out_of_line();
20285            let handles_before = decoder.remaining_handles();
20286            if let Some((inlined, num_bytes, num_handles)) =
20287                fidl::encoding::decode_envelope_header(decoder, next_offset)?
20288            {
20289                let member_inline_size =
20290                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
20291                if inlined != (member_inline_size <= 4) {
20292                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
20293                }
20294                let inner_offset;
20295                let mut inner_depth = depth.clone();
20296                if inlined {
20297                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
20298                    inner_offset = next_offset;
20299                } else {
20300                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
20301                    inner_depth.increment()?;
20302                }
20303                let val_ref = self.rx_packets.get_or_insert_with(|| fidl::new_empty!(u64, D));
20304                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
20305                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
20306                {
20307                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
20308                }
20309                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
20310                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
20311                }
20312            }
20313
20314            next_offset += envelope_size;
20315            _next_ordinal_to_read += 1;
20316            if next_offset >= end_offset {
20317                return Ok(());
20318            }
20319
20320            // Decode unknown envelopes for gaps in ordinals.
20321            while _next_ordinal_to_read < 3 {
20322                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
20323                _next_ordinal_to_read += 1;
20324                next_offset += envelope_size;
20325            }
20326
20327            let next_out_of_line = decoder.next_out_of_line();
20328            let handles_before = decoder.remaining_handles();
20329            if let Some((inlined, num_bytes, num_handles)) =
20330                fidl::encoding::decode_envelope_header(decoder, next_offset)?
20331            {
20332                let member_inline_size =
20333                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
20334                if inlined != (member_inline_size <= 4) {
20335                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
20336                }
20337                let inner_offset;
20338                let mut inner_depth = depth.clone();
20339                if inlined {
20340                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
20341                    inner_offset = next_offset;
20342                } else {
20343                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
20344                    inner_depth.increment()?;
20345                }
20346                let val_ref = self.tx_bytes.get_or_insert_with(|| fidl::new_empty!(u64, D));
20347                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
20348                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
20349                {
20350                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
20351                }
20352                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
20353                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
20354                }
20355            }
20356
20357            next_offset += envelope_size;
20358            _next_ordinal_to_read += 1;
20359            if next_offset >= end_offset {
20360                return Ok(());
20361            }
20362
20363            // Decode unknown envelopes for gaps in ordinals.
20364            while _next_ordinal_to_read < 4 {
20365                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
20366                _next_ordinal_to_read += 1;
20367                next_offset += envelope_size;
20368            }
20369
20370            let next_out_of_line = decoder.next_out_of_line();
20371            let handles_before = decoder.remaining_handles();
20372            if let Some((inlined, num_bytes, num_handles)) =
20373                fidl::encoding::decode_envelope_header(decoder, next_offset)?
20374            {
20375                let member_inline_size =
20376                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
20377                if inlined != (member_inline_size <= 4) {
20378                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
20379                }
20380                let inner_offset;
20381                let mut inner_depth = depth.clone();
20382                if inlined {
20383                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
20384                    inner_offset = next_offset;
20385                } else {
20386                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
20387                    inner_depth.increment()?;
20388                }
20389                let val_ref = self.tx_failure.get_or_insert_with(|| fidl::new_empty!(u64, D));
20390                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
20391                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
20392                {
20393                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
20394                }
20395                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
20396                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
20397                }
20398            }
20399
20400            next_offset += envelope_size;
20401            _next_ordinal_to_read += 1;
20402            if next_offset >= end_offset {
20403                return Ok(());
20404            }
20405
20406            // Decode unknown envelopes for gaps in ordinals.
20407            while _next_ordinal_to_read < 5 {
20408                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
20409                _next_ordinal_to_read += 1;
20410                next_offset += envelope_size;
20411            }
20412
20413            let next_out_of_line = decoder.next_out_of_line();
20414            let handles_before = decoder.remaining_handles();
20415            if let Some((inlined, num_bytes, num_handles)) =
20416                fidl::encoding::decode_envelope_header(decoder, next_offset)?
20417            {
20418                let member_inline_size =
20419                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
20420                if inlined != (member_inline_size <= 4) {
20421                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
20422                }
20423                let inner_offset;
20424                let mut inner_depth = depth.clone();
20425                if inlined {
20426                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
20427                    inner_offset = next_offset;
20428                } else {
20429                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
20430                    inner_depth.increment()?;
20431                }
20432                let val_ref = self.tx_packets.get_or_insert_with(|| fidl::new_empty!(u64, D));
20433                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
20434                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
20435                {
20436                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
20437                }
20438                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
20439                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
20440                }
20441            }
20442
20443            next_offset += envelope_size;
20444
20445            // Decode the remaining unknown envelopes.
20446            while next_offset < end_offset {
20447                _next_ordinal_to_read += 1;
20448                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
20449                next_offset += envelope_size;
20450            }
20451
20452            Ok(())
20453        }
20454    }
20455
20456    impl TrelPeersInfo {
20457        #[inline(always)]
20458        fn max_ordinal_present(&self) -> u64 {
20459            if let Some(_) = self.num_trel_peers {
20460                return 1;
20461            }
20462            0
20463        }
20464    }
20465
20466    impl fidl::encoding::ValueTypeMarker for TrelPeersInfo {
20467        type Borrowed<'a> = &'a Self;
20468        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
20469            value
20470        }
20471    }
20472
20473    unsafe impl fidl::encoding::TypeMarker for TrelPeersInfo {
20474        type Owned = Self;
20475
20476        #[inline(always)]
20477        fn inline_align(_context: fidl::encoding::Context) -> usize {
20478            8
20479        }
20480
20481        #[inline(always)]
20482        fn inline_size(_context: fidl::encoding::Context) -> usize {
20483            16
20484        }
20485    }
20486
20487    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<TrelPeersInfo, D>
20488        for &TrelPeersInfo
20489    {
20490        unsafe fn encode(
20491            self,
20492            encoder: &mut fidl::encoding::Encoder<'_, D>,
20493            offset: usize,
20494            mut depth: fidl::encoding::Depth,
20495        ) -> fidl::Result<()> {
20496            encoder.debug_check_bounds::<TrelPeersInfo>(offset);
20497            // Vector header
20498            let max_ordinal: u64 = self.max_ordinal_present();
20499            encoder.write_num(max_ordinal, offset);
20500            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
20501            // Calling encoder.out_of_line_offset(0) is not allowed.
20502            if max_ordinal == 0 {
20503                return Ok(());
20504            }
20505            depth.increment()?;
20506            let envelope_size = 8;
20507            let bytes_len = max_ordinal as usize * envelope_size;
20508            #[allow(unused_variables)]
20509            let offset = encoder.out_of_line_offset(bytes_len);
20510            let mut _prev_end_offset: usize = 0;
20511            if 1 > max_ordinal {
20512                return Ok(());
20513            }
20514
20515            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
20516            // are envelope_size bytes.
20517            let cur_offset: usize = (1 - 1) * envelope_size;
20518
20519            // Zero reserved fields.
20520            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
20521
20522            // Safety:
20523            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
20524            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
20525            //   envelope_size bytes, there is always sufficient room.
20526            fidl::encoding::encode_in_envelope_optional::<u16, D>(
20527                self.num_trel_peers.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
20528                encoder,
20529                offset + cur_offset,
20530                depth,
20531            )?;
20532
20533            _prev_end_offset = cur_offset + envelope_size;
20534
20535            Ok(())
20536        }
20537    }
20538
20539    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for TrelPeersInfo {
20540        #[inline(always)]
20541        fn new_empty() -> Self {
20542            Self::default()
20543        }
20544
20545        unsafe fn decode(
20546            &mut self,
20547            decoder: &mut fidl::encoding::Decoder<'_, D>,
20548            offset: usize,
20549            mut depth: fidl::encoding::Depth,
20550        ) -> fidl::Result<()> {
20551            decoder.debug_check_bounds::<Self>(offset);
20552            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
20553                None => return Err(fidl::Error::NotNullable),
20554                Some(len) => len,
20555            };
20556            // Calling decoder.out_of_line_offset(0) is not allowed.
20557            if len == 0 {
20558                return Ok(());
20559            };
20560            depth.increment()?;
20561            let envelope_size = 8;
20562            let bytes_len = len * envelope_size;
20563            let offset = decoder.out_of_line_offset(bytes_len)?;
20564            // Decode the envelope for each type.
20565            let mut _next_ordinal_to_read = 0;
20566            let mut next_offset = offset;
20567            let end_offset = offset + bytes_len;
20568            _next_ordinal_to_read += 1;
20569            if next_offset >= end_offset {
20570                return Ok(());
20571            }
20572
20573            // Decode unknown envelopes for gaps in ordinals.
20574            while _next_ordinal_to_read < 1 {
20575                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
20576                _next_ordinal_to_read += 1;
20577                next_offset += envelope_size;
20578            }
20579
20580            let next_out_of_line = decoder.next_out_of_line();
20581            let handles_before = decoder.remaining_handles();
20582            if let Some((inlined, num_bytes, num_handles)) =
20583                fidl::encoding::decode_envelope_header(decoder, next_offset)?
20584            {
20585                let member_inline_size =
20586                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
20587                if inlined != (member_inline_size <= 4) {
20588                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
20589                }
20590                let inner_offset;
20591                let mut inner_depth = depth.clone();
20592                if inlined {
20593                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
20594                    inner_offset = next_offset;
20595                } else {
20596                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
20597                    inner_depth.increment()?;
20598                }
20599                let val_ref = self.num_trel_peers.get_or_insert_with(|| fidl::new_empty!(u16, D));
20600                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
20601                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
20602                {
20603                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
20604                }
20605                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
20606                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
20607                }
20608            }
20609
20610            next_offset += envelope_size;
20611
20612            // Decode the remaining unknown envelopes.
20613            while next_offset < end_offset {
20614                _next_ordinal_to_read += 1;
20615                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
20616                next_offset += envelope_size;
20617            }
20618
20619            Ok(())
20620        }
20621    }
20622
20623    impl UpstreamDnsCounters {
20624        #[inline(always)]
20625        fn max_ordinal_present(&self) -> u64 {
20626            if let Some(_) = self.failures {
20627                return 3;
20628            }
20629            if let Some(_) = self.responses {
20630                return 2;
20631            }
20632            if let Some(_) = self.queries {
20633                return 1;
20634            }
20635            0
20636        }
20637    }
20638
20639    impl fidl::encoding::ValueTypeMarker for UpstreamDnsCounters {
20640        type Borrowed<'a> = &'a Self;
20641        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
20642            value
20643        }
20644    }
20645
20646    unsafe impl fidl::encoding::TypeMarker for UpstreamDnsCounters {
20647        type Owned = Self;
20648
20649        #[inline(always)]
20650        fn inline_align(_context: fidl::encoding::Context) -> usize {
20651            8
20652        }
20653
20654        #[inline(always)]
20655        fn inline_size(_context: fidl::encoding::Context) -> usize {
20656            16
20657        }
20658    }
20659
20660    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<UpstreamDnsCounters, D>
20661        for &UpstreamDnsCounters
20662    {
20663        unsafe fn encode(
20664            self,
20665            encoder: &mut fidl::encoding::Encoder<'_, D>,
20666            offset: usize,
20667            mut depth: fidl::encoding::Depth,
20668        ) -> fidl::Result<()> {
20669            encoder.debug_check_bounds::<UpstreamDnsCounters>(offset);
20670            // Vector header
20671            let max_ordinal: u64 = self.max_ordinal_present();
20672            encoder.write_num(max_ordinal, offset);
20673            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
20674            // Calling encoder.out_of_line_offset(0) is not allowed.
20675            if max_ordinal == 0 {
20676                return Ok(());
20677            }
20678            depth.increment()?;
20679            let envelope_size = 8;
20680            let bytes_len = max_ordinal as usize * envelope_size;
20681            #[allow(unused_variables)]
20682            let offset = encoder.out_of_line_offset(bytes_len);
20683            let mut _prev_end_offset: usize = 0;
20684            if 1 > max_ordinal {
20685                return Ok(());
20686            }
20687
20688            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
20689            // are envelope_size bytes.
20690            let cur_offset: usize = (1 - 1) * envelope_size;
20691
20692            // Zero reserved fields.
20693            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
20694
20695            // Safety:
20696            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
20697            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
20698            //   envelope_size bytes, there is always sufficient room.
20699            fidl::encoding::encode_in_envelope_optional::<u32, D>(
20700                self.queries.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
20701                encoder,
20702                offset + cur_offset,
20703                depth,
20704            )?;
20705
20706            _prev_end_offset = cur_offset + envelope_size;
20707            if 2 > max_ordinal {
20708                return Ok(());
20709            }
20710
20711            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
20712            // are envelope_size bytes.
20713            let cur_offset: usize = (2 - 1) * envelope_size;
20714
20715            // Zero reserved fields.
20716            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
20717
20718            // Safety:
20719            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
20720            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
20721            //   envelope_size bytes, there is always sufficient room.
20722            fidl::encoding::encode_in_envelope_optional::<u32, D>(
20723                self.responses.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
20724                encoder,
20725                offset + cur_offset,
20726                depth,
20727            )?;
20728
20729            _prev_end_offset = cur_offset + envelope_size;
20730            if 3 > max_ordinal {
20731                return Ok(());
20732            }
20733
20734            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
20735            // are envelope_size bytes.
20736            let cur_offset: usize = (3 - 1) * envelope_size;
20737
20738            // Zero reserved fields.
20739            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
20740
20741            // Safety:
20742            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
20743            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
20744            //   envelope_size bytes, there is always sufficient room.
20745            fidl::encoding::encode_in_envelope_optional::<u32, D>(
20746                self.failures.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
20747                encoder,
20748                offset + cur_offset,
20749                depth,
20750            )?;
20751
20752            _prev_end_offset = cur_offset + envelope_size;
20753
20754            Ok(())
20755        }
20756    }
20757
20758    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for UpstreamDnsCounters {
20759        #[inline(always)]
20760        fn new_empty() -> Self {
20761            Self::default()
20762        }
20763
20764        unsafe fn decode(
20765            &mut self,
20766            decoder: &mut fidl::encoding::Decoder<'_, D>,
20767            offset: usize,
20768            mut depth: fidl::encoding::Depth,
20769        ) -> fidl::Result<()> {
20770            decoder.debug_check_bounds::<Self>(offset);
20771            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
20772                None => return Err(fidl::Error::NotNullable),
20773                Some(len) => len,
20774            };
20775            // Calling decoder.out_of_line_offset(0) is not allowed.
20776            if len == 0 {
20777                return Ok(());
20778            };
20779            depth.increment()?;
20780            let envelope_size = 8;
20781            let bytes_len = len * envelope_size;
20782            let offset = decoder.out_of_line_offset(bytes_len)?;
20783            // Decode the envelope for each type.
20784            let mut _next_ordinal_to_read = 0;
20785            let mut next_offset = offset;
20786            let end_offset = offset + bytes_len;
20787            _next_ordinal_to_read += 1;
20788            if next_offset >= end_offset {
20789                return Ok(());
20790            }
20791
20792            // Decode unknown envelopes for gaps in ordinals.
20793            while _next_ordinal_to_read < 1 {
20794                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
20795                _next_ordinal_to_read += 1;
20796                next_offset += envelope_size;
20797            }
20798
20799            let next_out_of_line = decoder.next_out_of_line();
20800            let handles_before = decoder.remaining_handles();
20801            if let Some((inlined, num_bytes, num_handles)) =
20802                fidl::encoding::decode_envelope_header(decoder, next_offset)?
20803            {
20804                let member_inline_size =
20805                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
20806                if inlined != (member_inline_size <= 4) {
20807                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
20808                }
20809                let inner_offset;
20810                let mut inner_depth = depth.clone();
20811                if inlined {
20812                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
20813                    inner_offset = next_offset;
20814                } else {
20815                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
20816                    inner_depth.increment()?;
20817                }
20818                let val_ref = self.queries.get_or_insert_with(|| fidl::new_empty!(u32, D));
20819                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
20820                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
20821                {
20822                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
20823                }
20824                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
20825                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
20826                }
20827            }
20828
20829            next_offset += envelope_size;
20830            _next_ordinal_to_read += 1;
20831            if next_offset >= end_offset {
20832                return Ok(());
20833            }
20834
20835            // Decode unknown envelopes for gaps in ordinals.
20836            while _next_ordinal_to_read < 2 {
20837                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
20838                _next_ordinal_to_read += 1;
20839                next_offset += envelope_size;
20840            }
20841
20842            let next_out_of_line = decoder.next_out_of_line();
20843            let handles_before = decoder.remaining_handles();
20844            if let Some((inlined, num_bytes, num_handles)) =
20845                fidl::encoding::decode_envelope_header(decoder, next_offset)?
20846            {
20847                let member_inline_size =
20848                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
20849                if inlined != (member_inline_size <= 4) {
20850                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
20851                }
20852                let inner_offset;
20853                let mut inner_depth = depth.clone();
20854                if inlined {
20855                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
20856                    inner_offset = next_offset;
20857                } else {
20858                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
20859                    inner_depth.increment()?;
20860                }
20861                let val_ref = self.responses.get_or_insert_with(|| fidl::new_empty!(u32, D));
20862                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
20863                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
20864                {
20865                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
20866                }
20867                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
20868                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
20869                }
20870            }
20871
20872            next_offset += envelope_size;
20873            _next_ordinal_to_read += 1;
20874            if next_offset >= end_offset {
20875                return Ok(());
20876            }
20877
20878            // Decode unknown envelopes for gaps in ordinals.
20879            while _next_ordinal_to_read < 3 {
20880                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
20881                _next_ordinal_to_read += 1;
20882                next_offset += envelope_size;
20883            }
20884
20885            let next_out_of_line = decoder.next_out_of_line();
20886            let handles_before = decoder.remaining_handles();
20887            if let Some((inlined, num_bytes, num_handles)) =
20888                fidl::encoding::decode_envelope_header(decoder, next_offset)?
20889            {
20890                let member_inline_size =
20891                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
20892                if inlined != (member_inline_size <= 4) {
20893                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
20894                }
20895                let inner_offset;
20896                let mut inner_depth = depth.clone();
20897                if inlined {
20898                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
20899                    inner_offset = next_offset;
20900                } else {
20901                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
20902                    inner_depth.increment()?;
20903                }
20904                let val_ref = self.failures.get_or_insert_with(|| fidl::new_empty!(u32, D));
20905                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
20906                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
20907                {
20908                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
20909                }
20910                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
20911                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
20912                }
20913            }
20914
20915            next_offset += envelope_size;
20916
20917            // Decode the remaining unknown envelopes.
20918            while next_offset < end_offset {
20919                _next_ordinal_to_read += 1;
20920                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
20921                next_offset += envelope_size;
20922            }
20923
20924            Ok(())
20925        }
20926    }
20927
20928    impl UpstreamDnsInfo {
20929        #[inline(always)]
20930        fn max_ordinal_present(&self) -> u64 {
20931            if let Some(_) = self.upstream_dns_query_state {
20932                return 1;
20933            }
20934            0
20935        }
20936    }
20937
20938    impl fidl::encoding::ValueTypeMarker for UpstreamDnsInfo {
20939        type Borrowed<'a> = &'a Self;
20940        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
20941            value
20942        }
20943    }
20944
20945    unsafe impl fidl::encoding::TypeMarker for UpstreamDnsInfo {
20946        type Owned = Self;
20947
20948        #[inline(always)]
20949        fn inline_align(_context: fidl::encoding::Context) -> usize {
20950            8
20951        }
20952
20953        #[inline(always)]
20954        fn inline_size(_context: fidl::encoding::Context) -> usize {
20955            16
20956        }
20957    }
20958
20959    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<UpstreamDnsInfo, D>
20960        for &UpstreamDnsInfo
20961    {
20962        unsafe fn encode(
20963            self,
20964            encoder: &mut fidl::encoding::Encoder<'_, D>,
20965            offset: usize,
20966            mut depth: fidl::encoding::Depth,
20967        ) -> fidl::Result<()> {
20968            encoder.debug_check_bounds::<UpstreamDnsInfo>(offset);
20969            // Vector header
20970            let max_ordinal: u64 = self.max_ordinal_present();
20971            encoder.write_num(max_ordinal, offset);
20972            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
20973            // Calling encoder.out_of_line_offset(0) is not allowed.
20974            if max_ordinal == 0 {
20975                return Ok(());
20976            }
20977            depth.increment()?;
20978            let envelope_size = 8;
20979            let bytes_len = max_ordinal as usize * envelope_size;
20980            #[allow(unused_variables)]
20981            let offset = encoder.out_of_line_offset(bytes_len);
20982            let mut _prev_end_offset: usize = 0;
20983            if 1 > max_ordinal {
20984                return Ok(());
20985            }
20986
20987            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
20988            // are envelope_size bytes.
20989            let cur_offset: usize = (1 - 1) * envelope_size;
20990
20991            // Zero reserved fields.
20992            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
20993
20994            // Safety:
20995            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
20996            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
20997            //   envelope_size bytes, there is always sufficient room.
20998            fidl::encoding::encode_in_envelope_optional::<UpstreamDnsQueryState, D>(
20999                self.upstream_dns_query_state
21000                    .as_ref()
21001                    .map(<UpstreamDnsQueryState as fidl::encoding::ValueTypeMarker>::borrow),
21002                encoder,
21003                offset + cur_offset,
21004                depth,
21005            )?;
21006
21007            _prev_end_offset = cur_offset + envelope_size;
21008
21009            Ok(())
21010        }
21011    }
21012
21013    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for UpstreamDnsInfo {
21014        #[inline(always)]
21015        fn new_empty() -> Self {
21016            Self::default()
21017        }
21018
21019        unsafe fn decode(
21020            &mut self,
21021            decoder: &mut fidl::encoding::Decoder<'_, D>,
21022            offset: usize,
21023            mut depth: fidl::encoding::Depth,
21024        ) -> fidl::Result<()> {
21025            decoder.debug_check_bounds::<Self>(offset);
21026            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
21027                None => return Err(fidl::Error::NotNullable),
21028                Some(len) => len,
21029            };
21030            // Calling decoder.out_of_line_offset(0) is not allowed.
21031            if len == 0 {
21032                return Ok(());
21033            };
21034            depth.increment()?;
21035            let envelope_size = 8;
21036            let bytes_len = len * envelope_size;
21037            let offset = decoder.out_of_line_offset(bytes_len)?;
21038            // Decode the envelope for each type.
21039            let mut _next_ordinal_to_read = 0;
21040            let mut next_offset = offset;
21041            let end_offset = offset + bytes_len;
21042            _next_ordinal_to_read += 1;
21043            if next_offset >= end_offset {
21044                return Ok(());
21045            }
21046
21047            // Decode unknown envelopes for gaps in ordinals.
21048            while _next_ordinal_to_read < 1 {
21049                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
21050                _next_ordinal_to_read += 1;
21051                next_offset += envelope_size;
21052            }
21053
21054            let next_out_of_line = decoder.next_out_of_line();
21055            let handles_before = decoder.remaining_handles();
21056            if let Some((inlined, num_bytes, num_handles)) =
21057                fidl::encoding::decode_envelope_header(decoder, next_offset)?
21058            {
21059                let member_inline_size =
21060                    <UpstreamDnsQueryState as fidl::encoding::TypeMarker>::inline_size(
21061                        decoder.context,
21062                    );
21063                if inlined != (member_inline_size <= 4) {
21064                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
21065                }
21066                let inner_offset;
21067                let mut inner_depth = depth.clone();
21068                if inlined {
21069                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
21070                    inner_offset = next_offset;
21071                } else {
21072                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
21073                    inner_depth.increment()?;
21074                }
21075                let val_ref = self
21076                    .upstream_dns_query_state
21077                    .get_or_insert_with(|| fidl::new_empty!(UpstreamDnsQueryState, D));
21078                fidl::decode!(
21079                    UpstreamDnsQueryState,
21080                    D,
21081                    val_ref,
21082                    decoder,
21083                    inner_offset,
21084                    inner_depth
21085                )?;
21086                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
21087                {
21088                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
21089                }
21090                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
21091                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
21092                }
21093            }
21094
21095            next_offset += envelope_size;
21096
21097            // Decode the remaining unknown envelopes.
21098            while next_offset < end_offset {
21099                _next_ordinal_to_read += 1;
21100                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
21101                next_offset += envelope_size;
21102            }
21103
21104            Ok(())
21105        }
21106    }
21107
21108    impl fidl::encoding::ValueTypeMarker for JoinParams {
21109        type Borrowed<'a> = &'a Self;
21110        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
21111            value
21112        }
21113    }
21114
21115    unsafe impl fidl::encoding::TypeMarker for JoinParams {
21116        type Owned = Self;
21117
21118        #[inline(always)]
21119        fn inline_align(_context: fidl::encoding::Context) -> usize {
21120            8
21121        }
21122
21123        #[inline(always)]
21124        fn inline_size(_context: fidl::encoding::Context) -> usize {
21125            16
21126        }
21127    }
21128
21129    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<JoinParams, D>
21130        for &JoinParams
21131    {
21132        #[inline]
21133        unsafe fn encode(
21134            self,
21135            encoder: &mut fidl::encoding::Encoder<'_, D>,
21136            offset: usize,
21137            _depth: fidl::encoding::Depth,
21138        ) -> fidl::Result<()> {
21139            encoder.debug_check_bounds::<JoinParams>(offset);
21140            encoder.write_num::<u64>(self.ordinal(), offset);
21141            match self {
21142            JoinParams::ProvisioningParameter(ref val) => {
21143                fidl::encoding::encode_in_envelope::<fidl_fuchsia_lowpan_device__common::ProvisioningParams, D>(
21144                    <fidl_fuchsia_lowpan_device__common::ProvisioningParams as fidl::encoding::ValueTypeMarker>::borrow(val),
21145                    encoder, offset + 8, _depth
21146                )
21147            }
21148            JoinParams::JoinerParameter(ref val) => {
21149                fidl::encoding::encode_in_envelope::<JoinerCommissioningParams, D>(
21150                    <JoinerCommissioningParams as fidl::encoding::ValueTypeMarker>::borrow(val),
21151                    encoder, offset + 8, _depth
21152                )
21153            }
21154            JoinParams::__SourceBreaking { .. } => Err(fidl::Error::UnknownUnionTag),
21155        }
21156        }
21157    }
21158
21159    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for JoinParams {
21160        #[inline(always)]
21161        fn new_empty() -> Self {
21162            Self::__SourceBreaking { unknown_ordinal: 0 }
21163        }
21164
21165        #[inline]
21166        unsafe fn decode(
21167            &mut self,
21168            decoder: &mut fidl::encoding::Decoder<'_, D>,
21169            offset: usize,
21170            mut depth: fidl::encoding::Depth,
21171        ) -> fidl::Result<()> {
21172            decoder.debug_check_bounds::<Self>(offset);
21173            #[allow(unused_variables)]
21174            let next_out_of_line = decoder.next_out_of_line();
21175            let handles_before = decoder.remaining_handles();
21176            let (ordinal, inlined, num_bytes, num_handles) =
21177                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
21178
21179            let member_inline_size = match ordinal {
21180            1 => <fidl_fuchsia_lowpan_device__common::ProvisioningParams as fidl::encoding::TypeMarker>::inline_size(decoder.context),
21181            2 => <JoinerCommissioningParams as fidl::encoding::TypeMarker>::inline_size(decoder.context),
21182            0 => return Err(fidl::Error::UnknownUnionTag),
21183            _ => num_bytes as usize,
21184        };
21185
21186            if inlined != (member_inline_size <= 4) {
21187                return Err(fidl::Error::InvalidInlineBitInEnvelope);
21188            }
21189            let _inner_offset;
21190            if inlined {
21191                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
21192                _inner_offset = offset + 8;
21193            } else {
21194                depth.increment()?;
21195                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
21196            }
21197            match ordinal {
21198                1 => {
21199                    #[allow(irrefutable_let_patterns)]
21200                    if let JoinParams::ProvisioningParameter(_) = self {
21201                        // Do nothing, read the value into the object
21202                    } else {
21203                        // Initialize `self` to the right variant
21204                        *self = JoinParams::ProvisioningParameter(fidl::new_empty!(
21205                            fidl_fuchsia_lowpan_device__common::ProvisioningParams,
21206                            D
21207                        ));
21208                    }
21209                    #[allow(irrefutable_let_patterns)]
21210                    if let JoinParams::ProvisioningParameter(ref mut val) = self {
21211                        fidl::decode!(
21212                            fidl_fuchsia_lowpan_device__common::ProvisioningParams,
21213                            D,
21214                            val,
21215                            decoder,
21216                            _inner_offset,
21217                            depth
21218                        )?;
21219                    } else {
21220                        unreachable!()
21221                    }
21222                }
21223                2 => {
21224                    #[allow(irrefutable_let_patterns)]
21225                    if let JoinParams::JoinerParameter(_) = self {
21226                        // Do nothing, read the value into the object
21227                    } else {
21228                        // Initialize `self` to the right variant
21229                        *self = JoinParams::JoinerParameter(fidl::new_empty!(
21230                            JoinerCommissioningParams,
21231                            D
21232                        ));
21233                    }
21234                    #[allow(irrefutable_let_patterns)]
21235                    if let JoinParams::JoinerParameter(ref mut val) = self {
21236                        fidl::decode!(
21237                            JoinerCommissioningParams,
21238                            D,
21239                            val,
21240                            decoder,
21241                            _inner_offset,
21242                            depth
21243                        )?;
21244                    } else {
21245                        unreachable!()
21246                    }
21247                }
21248                #[allow(deprecated)]
21249                ordinal => {
21250                    for _ in 0..num_handles {
21251                        decoder.drop_next_handle()?;
21252                    }
21253                    *self = JoinParams::__SourceBreaking { unknown_ordinal: ordinal };
21254                }
21255            }
21256            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
21257                return Err(fidl::Error::InvalidNumBytesInEnvelope);
21258            }
21259            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
21260                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
21261            }
21262            Ok(())
21263        }
21264    }
21265
21266    impl fidl::encoding::ValueTypeMarker for ProvisioningProgress {
21267        type Borrowed<'a> = &'a Self;
21268        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
21269            value
21270        }
21271    }
21272
21273    unsafe impl fidl::encoding::TypeMarker for ProvisioningProgress {
21274        type Owned = Self;
21275
21276        #[inline(always)]
21277        fn inline_align(_context: fidl::encoding::Context) -> usize {
21278            8
21279        }
21280
21281        #[inline(always)]
21282        fn inline_size(_context: fidl::encoding::Context) -> usize {
21283            16
21284        }
21285    }
21286
21287    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<ProvisioningProgress, D>
21288        for &ProvisioningProgress
21289    {
21290        #[inline]
21291        unsafe fn encode(
21292            self,
21293            encoder: &mut fidl::encoding::Encoder<'_, D>,
21294            offset: usize,
21295            _depth: fidl::encoding::Depth,
21296        ) -> fidl::Result<()> {
21297            encoder.debug_check_bounds::<ProvisioningProgress>(offset);
21298            encoder.write_num::<u64>(self.ordinal(), offset);
21299            match self {
21300            ProvisioningProgress::Progress(ref val) => {
21301                fidl::encoding::encode_in_envelope::<f32, D>(
21302                    <f32 as fidl::encoding::ValueTypeMarker>::borrow(val),
21303                    encoder, offset + 8, _depth
21304                )
21305            }
21306            ProvisioningProgress::Identity(ref val) => {
21307                fidl::encoding::encode_in_envelope::<fidl_fuchsia_lowpan_device__common::Identity, D>(
21308                    <fidl_fuchsia_lowpan_device__common::Identity as fidl::encoding::ValueTypeMarker>::borrow(val),
21309                    encoder, offset + 8, _depth
21310                )
21311            }
21312            ProvisioningProgress::__SourceBreaking { .. } => Err(fidl::Error::UnknownUnionTag),
21313        }
21314        }
21315    }
21316
21317    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ProvisioningProgress {
21318        #[inline(always)]
21319        fn new_empty() -> Self {
21320            Self::__SourceBreaking { unknown_ordinal: 0 }
21321        }
21322
21323        #[inline]
21324        unsafe fn decode(
21325            &mut self,
21326            decoder: &mut fidl::encoding::Decoder<'_, D>,
21327            offset: usize,
21328            mut depth: fidl::encoding::Depth,
21329        ) -> fidl::Result<()> {
21330            decoder.debug_check_bounds::<Self>(offset);
21331            #[allow(unused_variables)]
21332            let next_out_of_line = decoder.next_out_of_line();
21333            let handles_before = decoder.remaining_handles();
21334            let (ordinal, inlined, num_bytes, num_handles) =
21335                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
21336
21337            let member_inline_size = match ordinal {
21338            1 => <f32 as fidl::encoding::TypeMarker>::inline_size(decoder.context),
21339            2 => <fidl_fuchsia_lowpan_device__common::Identity as fidl::encoding::TypeMarker>::inline_size(decoder.context),
21340            0 => return Err(fidl::Error::UnknownUnionTag),
21341            _ => num_bytes as usize,
21342        };
21343
21344            if inlined != (member_inline_size <= 4) {
21345                return Err(fidl::Error::InvalidInlineBitInEnvelope);
21346            }
21347            let _inner_offset;
21348            if inlined {
21349                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
21350                _inner_offset = offset + 8;
21351            } else {
21352                depth.increment()?;
21353                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
21354            }
21355            match ordinal {
21356                1 => {
21357                    #[allow(irrefutable_let_patterns)]
21358                    if let ProvisioningProgress::Progress(_) = self {
21359                        // Do nothing, read the value into the object
21360                    } else {
21361                        // Initialize `self` to the right variant
21362                        *self = ProvisioningProgress::Progress(fidl::new_empty!(f32, D));
21363                    }
21364                    #[allow(irrefutable_let_patterns)]
21365                    if let ProvisioningProgress::Progress(ref mut val) = self {
21366                        fidl::decode!(f32, D, val, decoder, _inner_offset, depth)?;
21367                    } else {
21368                        unreachable!()
21369                    }
21370                }
21371                2 => {
21372                    #[allow(irrefutable_let_patterns)]
21373                    if let ProvisioningProgress::Identity(_) = self {
21374                        // Do nothing, read the value into the object
21375                    } else {
21376                        // Initialize `self` to the right variant
21377                        *self = ProvisioningProgress::Identity(fidl::new_empty!(
21378                            fidl_fuchsia_lowpan_device__common::Identity,
21379                            D
21380                        ));
21381                    }
21382                    #[allow(irrefutable_let_patterns)]
21383                    if let ProvisioningProgress::Identity(ref mut val) = self {
21384                        fidl::decode!(
21385                            fidl_fuchsia_lowpan_device__common::Identity,
21386                            D,
21387                            val,
21388                            decoder,
21389                            _inner_offset,
21390                            depth
21391                        )?;
21392                    } else {
21393                        unreachable!()
21394                    }
21395                }
21396                #[allow(deprecated)]
21397                ordinal => {
21398                    for _ in 0..num_handles {
21399                        decoder.drop_next_handle()?;
21400                    }
21401                    *self = ProvisioningProgress::__SourceBreaking { unknown_ordinal: ordinal };
21402                }
21403            }
21404            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
21405                return Err(fidl::Error::InvalidNumBytesInEnvelope);
21406            }
21407            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
21408                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
21409            }
21410            Ok(())
21411        }
21412    }
21413}