Skip to main content

fidl_fuchsia_lowpan_experimental__common/
fidl_fuchsia_lowpan_experimental__common.rs

1// WARNING: This file is machine generated by fidlgen.
2
3#![warn(clippy::all)]
4#![allow(unused_parens, unused_mut, unused_imports, nonstandard_style)]
5
6use bitflags::bitflags;
7use fidl::encoding::{MessageBufFor, ProxyChannelBox, ResourceDialect};
8use futures::future::{self, MaybeDone, TryFutureExt};
9use zx_status;
10
11pub const MAX_EXTERNAL_ROUTES: u32 = 32;
12
13/// The maximum number of entries in Network Data 6LoWPAN Context ID information list,
14/// the maximum size should be aligned with on-mesh prefixes.
15pub const MAX_LOWPAN_CONTEXTS: u32 = 32;
16
17/// The maximum number of entries allowed in the neighbor-related inspect
18/// dump. This prevents the inspect tree from becoming excessively large.
19pub const MAX_NEIGHBOR_INSPECT_ENTRIES: u32 = 64;
20
21pub const MAX_ON_MESH_PREFIXES: u32 = 32;
22
23pub const MAX_PROVISION_URL_LEN: u16 = 64;
24
25/// The maximum size of Server Data in bytes.
26/// Theoretical limit, practically much lower, align with
27/// OT_SERVER_DATA_MAX_SIZE(252).
28pub const MAX_SERVER_DATA_SIZE: u32 = 252;
29
30/// The maximum size of Service Data in bytes, align with
31/// OT_SERVICE_DATA_MAX_SIZE(252).
32pub const MAX_SERVICE_DATA_SIZE: u32 = 252;
33
34/// The maximum number of entries in Network Data Service list, making it consistent
35/// with the sizing for on-mesh prefixes and external routes.
36pub const MAX_SERVICE_ENTRIES: u32 = 32;
37
38/// The maximum number of SRP hosts and services included in the inspect dump.
39/// This limit prevents the inspect tree from becoming excessively large.
40pub const MAX_SRP_INSPECT_ENTRIES: u32 = 64;
41
42/// The maximum Steering Data length in bytes, align with
43/// OT_STEERING_DATA_MAX_LENGTH(16).
44pub const MAX_STEERING_DATA_LENGTH: u32 = 16;
45
46pub const MAX_VENDOR_DATA_LEN: u16 = 64;
47
48pub const MAX_VENDOR_MODEL_LEN: u16 = 32;
49
50pub const MAX_VENDOR_NAME_LEN: u16 = 32;
51
52pub const MAX_VENDOR_SW_VER_LEN: u16 = 16;
53
54pub const PSKD_LEN: u16 = 32;
55
56/// Represents the DHCPv6 PD state.
57#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
58pub enum Dhcp6PdState {
59    Dhcp6PdStateUnspecified,
60    /// DHCPv6 PD is disabled on the border router.
61    Dhcp6PdStateDisabled,
62    /// DHCPv6 PD is enabled but won't try to request and publish a prefix.
63    Dhcp6PdStateStopped,
64    /// DHCPv6 PD is enabled and will try to request and publish a prefix.
65    Dhcp6PdStateRunning,
66    /// DHCPv6 PD is idle; Higher-prf prefix published by other BRs.
67    Dhcp6PdStateIdle,
68    #[doc(hidden)]
69    __SourceBreaking {
70        unknown_ordinal: u32,
71    },
72}
73
74/// Pattern that matches an unknown `Dhcp6PdState` member.
75#[macro_export]
76macro_rules! Dhcp6PdStateUnknown {
77    () => {
78        _
79    };
80}
81
82impl Dhcp6PdState {
83    #[inline]
84    pub fn from_primitive(prim: u32) -> Option<Self> {
85        match prim {
86            0 => Some(Self::Dhcp6PdStateUnspecified),
87            1 => Some(Self::Dhcp6PdStateDisabled),
88            2 => Some(Self::Dhcp6PdStateStopped),
89            3 => Some(Self::Dhcp6PdStateRunning),
90            4 => Some(Self::Dhcp6PdStateIdle),
91            _ => None,
92        }
93    }
94
95    #[inline]
96    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
97        match prim {
98            0 => Self::Dhcp6PdStateUnspecified,
99            1 => Self::Dhcp6PdStateDisabled,
100            2 => Self::Dhcp6PdStateStopped,
101            3 => Self::Dhcp6PdStateRunning,
102            4 => Self::Dhcp6PdStateIdle,
103            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
104        }
105    }
106
107    #[inline]
108    pub fn unknown() -> Self {
109        Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
110    }
111
112    #[inline]
113    pub const fn into_primitive(self) -> u32 {
114        match self {
115            Self::Dhcp6PdStateUnspecified => 0,
116            Self::Dhcp6PdStateDisabled => 1,
117            Self::Dhcp6PdStateStopped => 2,
118            Self::Dhcp6PdStateRunning => 3,
119            Self::Dhcp6PdStateIdle => 4,
120            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
121        }
122    }
123
124    #[inline]
125    pub fn is_unknown(&self) -> bool {
126        match self {
127            Self::__SourceBreaking { unknown_ordinal: _ } => true,
128            _ => false,
129        }
130    }
131}
132
133#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
134pub enum Nat64State {
135    Nat64StateUnspecified,
136    Nat64StateDisabled,
137    Nat64StateNotRunning,
138    Nat64StateIdle,
139    Nat64StateActive,
140    #[doc(hidden)]
141    __SourceBreaking {
142        unknown_ordinal: u32,
143    },
144}
145
146/// Pattern that matches an unknown `Nat64State` member.
147#[macro_export]
148macro_rules! Nat64StateUnknown {
149    () => {
150        _
151    };
152}
153
154impl Nat64State {
155    #[inline]
156    pub fn from_primitive(prim: u32) -> Option<Self> {
157        match prim {
158            0 => Some(Self::Nat64StateUnspecified),
159            1 => Some(Self::Nat64StateDisabled),
160            2 => Some(Self::Nat64StateNotRunning),
161            3 => Some(Self::Nat64StateIdle),
162            4 => Some(Self::Nat64StateActive),
163            _ => None,
164        }
165    }
166
167    #[inline]
168    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
169        match prim {
170            0 => Self::Nat64StateUnspecified,
171            1 => Self::Nat64StateDisabled,
172            2 => Self::Nat64StateNotRunning,
173            3 => Self::Nat64StateIdle,
174            4 => Self::Nat64StateActive,
175            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
176        }
177    }
178
179    #[inline]
180    pub fn unknown() -> Self {
181        Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
182    }
183
184    #[inline]
185    pub const fn into_primitive(self) -> u32 {
186        match self {
187            Self::Nat64StateUnspecified => 0,
188            Self::Nat64StateDisabled => 1,
189            Self::Nat64StateNotRunning => 2,
190            Self::Nat64StateIdle => 3,
191            Self::Nat64StateActive => 4,
192            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
193        }
194    }
195
196    #[inline]
197    pub fn is_unknown(&self) -> bool {
198        match self {
199            Self::__SourceBreaking { unknown_ordinal: _ } => true,
200            _ => false,
201        }
202    }
203}
204
205/// LoWPAN Provisioning Error
206///
207/// Returned by [`ProvisioningMonitor.WatchProgress`].
208#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
209pub enum ProvisionError {
210    /// Provisioning did not successfully complete because the
211    /// credential was rejected. For example, the key was incorrect.
212    ///
213    /// This may be interpreted as an argument error.
214    CredentialRejected,
215    /// Provisioning did not successfully complete because the
216    /// no peers on the requested network are in range.
217    NetworkNotFound,
218    /// Forming a new network did not successfully complete because the
219    /// a peer with the requested network identity is in range.
220    NetworkAlreadyExists,
221    /// This operation was canceled due to an incompatible operation
222    /// being started before this one was finished.
223    Canceled,
224    #[doc(hidden)]
225    __SourceBreaking { unknown_ordinal: i32 },
226}
227
228/// Pattern that matches an unknown `ProvisionError` member.
229#[macro_export]
230macro_rules! ProvisionErrorUnknown {
231    () => {
232        _
233    };
234}
235
236impl ProvisionError {
237    #[inline]
238    pub fn from_primitive(prim: i32) -> Option<Self> {
239        match prim {
240            1 => Some(Self::CredentialRejected),
241            2 => Some(Self::NetworkNotFound),
242            3 => Some(Self::NetworkAlreadyExists),
243            4 => Some(Self::Canceled),
244            _ => None,
245        }
246    }
247
248    #[inline]
249    pub fn from_primitive_allow_unknown(prim: i32) -> Self {
250        match prim {
251            1 => Self::CredentialRejected,
252            2 => Self::NetworkNotFound,
253            3 => Self::NetworkAlreadyExists,
254            4 => Self::Canceled,
255            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
256        }
257    }
258
259    #[inline]
260    pub fn unknown() -> Self {
261        Self::__SourceBreaking { unknown_ordinal: 0x7fffffff }
262    }
263
264    #[inline]
265    pub const fn into_primitive(self) -> i32 {
266        match self {
267            Self::CredentialRejected => 1,
268            Self::NetworkNotFound => 2,
269            Self::NetworkAlreadyExists => 3,
270            Self::Canceled => 4,
271            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
272        }
273    }
274
275    #[inline]
276    pub fn is_unknown(&self) -> bool {
277        match self {
278            Self::__SourceBreaking { unknown_ordinal: _ } => true,
279            _ => false,
280        }
281    }
282}
283
284/// Route preference, as described in RFC4191.
285#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
286#[repr(i8)]
287pub enum RoutePreference {
288    /// Low route preference.
289    Low = -1,
290    /// Medium route preference.
291    Medium = 0,
292    /// High route preference.
293    High = 1,
294}
295
296impl RoutePreference {
297    #[inline]
298    pub fn from_primitive(prim: i8) -> Option<Self> {
299        match prim {
300            -1 => Some(Self::Low),
301            0 => Some(Self::Medium),
302            1 => Some(Self::High),
303            _ => None,
304        }
305    }
306
307    #[inline]
308    pub const fn into_primitive(self) -> i8 {
309        self as i8
310    }
311}
312
313#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
314#[repr(u32)]
315pub enum SrpServerAddressMode {
316    /// Thread network data is published as unicast addresses.
317    Unicast = 1,
318    /// Thread network data is published as anycast addresses.
319    Anycast = 2,
320}
321
322impl SrpServerAddressMode {
323    #[inline]
324    pub fn from_primitive(prim: u32) -> Option<Self> {
325        match prim {
326            1 => Some(Self::Unicast),
327            2 => Some(Self::Anycast),
328            _ => None,
329        }
330    }
331
332    #[inline]
333    pub const fn into_primitive(self) -> u32 {
334        self as u32
335    }
336}
337
338#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
339#[repr(u32)]
340pub enum SrpServerState {
341    /// The server is disabled.
342    Disabled = 1,
343    /// The server is enabled and running.
344    Running = 2,
345    /// The server is enabled, but stopped.
346    Stopped = 3,
347}
348
349impl SrpServerState {
350    #[inline]
351    pub fn from_primitive(prim: u32) -> Option<Self> {
352        match prim {
353            1 => Some(Self::Disabled),
354            2 => Some(Self::Running),
355            3 => Some(Self::Stopped),
356            _ => None,
357        }
358    }
359
360    #[inline]
361    pub const fn into_primitive(self) -> u32 {
362        self as u32
363    }
364}
365
366/// Represents the Upstream DNS state
367#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
368pub enum UpstreamDnsQueryState {
369    UpstreamdnsQueryStateUnspecified,
370    UpstreamdnsQueryStateEnabled,
371    UpstreamdnsQueryStateDisabled,
372    #[doc(hidden)]
373    __SourceBreaking {
374        unknown_ordinal: u32,
375    },
376}
377
378/// Pattern that matches an unknown `UpstreamDnsQueryState` member.
379#[macro_export]
380macro_rules! UpstreamDnsQueryStateUnknown {
381    () => {
382        _
383    };
384}
385
386impl UpstreamDnsQueryState {
387    #[inline]
388    pub fn from_primitive(prim: u32) -> Option<Self> {
389        match prim {
390            0 => Some(Self::UpstreamdnsQueryStateUnspecified),
391            1 => Some(Self::UpstreamdnsQueryStateEnabled),
392            2 => Some(Self::UpstreamdnsQueryStateDisabled),
393            _ => None,
394        }
395    }
396
397    #[inline]
398    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
399        match prim {
400            0 => Self::UpstreamdnsQueryStateUnspecified,
401            1 => Self::UpstreamdnsQueryStateEnabled,
402            2 => Self::UpstreamdnsQueryStateDisabled,
403            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
404        }
405    }
406
407    #[inline]
408    pub fn unknown() -> Self {
409        Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
410    }
411
412    #[inline]
413    pub const fn into_primitive(self) -> u32 {
414        match self {
415            Self::UpstreamdnsQueryStateUnspecified => 0,
416            Self::UpstreamdnsQueryStateEnabled => 1,
417            Self::UpstreamdnsQueryStateDisabled => 2,
418            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
419        }
420    }
421
422    #[inline]
423    pub fn is_unknown(&self) -> bool {
424        match self {
425            Self::__SourceBreaking { unknown_ordinal: _ } => true,
426            _ => false,
427        }
428    }
429}
430
431#[derive(Clone, Debug, PartialEq)]
432pub struct BeaconInfoStreamNextResponse {
433    pub beacons: Vec<BeaconInfo>,
434}
435
436impl fidl::Persistable for BeaconInfoStreamNextResponse {}
437
438#[derive(Clone, Debug, PartialEq)]
439pub struct DeviceGetSupportedChannelsResponse {
440    pub channels_info: Vec<ChannelInfo>,
441}
442
443impl fidl::Persistable for DeviceGetSupportedChannelsResponse {}
444
445#[derive(Clone, Debug, PartialEq)]
446pub struct DeviceRouteExtraGetLocalExternalRoutesResponse {
447    pub external_routes: Vec<ExternalRoute>,
448}
449
450impl fidl::Persistable for DeviceRouteExtraGetLocalExternalRoutesResponse {}
451
452#[derive(Clone, Debug, PartialEq)]
453pub struct DeviceRouteExtraGetLocalOnMeshPrefixesResponse {
454    pub prefixes: Vec<OnMeshPrefix>,
455}
456
457impl fidl::Persistable for DeviceRouteExtraGetLocalOnMeshPrefixesResponse {}
458
459#[derive(Clone, Debug, PartialEq)]
460pub struct DeviceRouteRegisterExternalRouteRequest {
461    pub external_route: ExternalRoute,
462}
463
464impl fidl::Persistable for DeviceRouteRegisterExternalRouteRequest {}
465
466#[derive(Clone, Debug, PartialEq)]
467pub struct DeviceRouteRegisterOnMeshPrefixRequest {
468    pub prefix: OnMeshPrefix,
469}
470
471impl fidl::Persistable for DeviceRouteRegisterOnMeshPrefixRequest {}
472
473#[derive(Clone, Debug, PartialEq)]
474pub struct DeviceRouteUnregisterExternalRouteRequest {
475    pub subnet: fidl_fuchsia_net__common::Ipv6AddressWithPrefix,
476}
477
478impl fidl::Persistable for DeviceRouteUnregisterExternalRouteRequest {}
479
480#[derive(Clone, Debug, PartialEq)]
481pub struct DeviceRouteUnregisterOnMeshPrefixRequest {
482    pub subnet: fidl_fuchsia_net__common::Ipv6AddressWithPrefix,
483}
484
485impl fidl::Persistable for DeviceRouteUnregisterOnMeshPrefixRequest {}
486
487#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
488#[repr(C)]
489pub struct LegacyJoiningMakeJoinableRequest {
490    pub duration: i64,
491    pub port: u16,
492}
493
494impl fidl::Persistable for LegacyJoiningMakeJoinableRequest {}
495
496#[derive(Clone, Debug, PartialEq)]
497pub struct ProvisioningMonitorWatchProgressResponse {
498    pub progress: ProvisioningProgress,
499}
500
501impl fidl::Persistable for ProvisioningMonitorWatchProgressResponse {}
502
503#[derive(Clone, Debug, PartialEq)]
504pub struct TelemetryProviderGetTelemetryResponse {
505    pub telemetry: Telemetry,
506}
507
508impl fidl::Persistable for TelemetryProviderGetTelemetryResponse {}
509
510#[derive(Clone, Debug, Default, PartialEq)]
511pub struct BeaconInfo {
512    /// The MAC address associated with this beacon.
513    pub address: Option<fidl_fuchsia_lowpan__common::MacAddress>,
514    /// The identity of the network being advertised by
515    /// this beacon.
516    pub identity: Option<fidl_fuchsia_lowpan_device__common::Identity>,
517    /// RSSI of the beacon, measured in dBm.
518    ///
519    /// A value of -128 should be treated as if this
520    /// field was absent.
521    pub rssi: Option<i8>,
522    /// Link Quality Index (LQI) of the beacon.
523    ///
524    /// * A value of 0 should be treated as if this
525    ///   field was absent.
526    /// * A value of 1 indicates the worst possible
527    ///   quality where the decoded beacon is still valid.
528    /// * A value of 255 indicates the best possible
529    ///   quality that can be recognized by the radio
530    ///   hardware.
531    /// * Values 2-254 are intended to represent relative
532    ///   quality levels evenly distributed between the
533    ///   worst and best, with lower values always
534    ///   indicating a worse quality than higher values.
535    pub lqi: Option<u8>,
536    #[doc(hidden)]
537    pub __source_breaking: fidl::marker::SourceBreaking,
538}
539
540impl fidl::Persistable for BeaconInfo {}
541
542/// Represents a Border Router configuration.
543///
544/// Derived from `otBorderRouterConfig`(https://openthread.io/reference/struct/ot-border-router-config)
545#[derive(Clone, Debug, Default, PartialEq)]
546pub struct BorderRouterConfig {
547    /// The IPv6 prefix.
548    ///
549    /// Required.
550    pub prefix: Option<String>,
551    /// A 2-bit signed int preference (OT_ROUTE_PREFERENCE_* values).
552    ///
553    /// Required.
554    pub preference: Option<i8>,
555    /// Whether prefix is preferred.
556    ///
557    /// Required.
558    pub preferred: Option<bool>,
559    /// Whether prefix can be used for address auto-configuration (SLAAC).
560    ///
561    /// Required.
562    pub slaac: Option<bool>,
563    /// Whether border router is DHCPv6 Agent.
564    ///
565    /// Required.
566    pub dhcp: Option<bool>,
567    /// Whether DHCPv6 Agent supplying other config data.
568    ///
569    /// Required.
570    pub configure: Option<bool>,
571    /// Whether border router is a default router for prefix.
572    ///
573    /// Required.
574    pub default_route: Option<bool>,
575    /// Whether this prefix is considered on-mesh.
576    ///
577    /// Required.
578    pub on_mesh: Option<bool>,
579    /// Whether this configuration is considered Stable Network Data.
580    ///
581    /// Required.
582    pub stable: Option<bool>,
583    /// Whether this border router can supply DNS information via ND.
584    ///
585    /// Required.
586    pub nd_dns: Option<bool>,
587    /// Whether prefix is a Thread Domain Prefix (added since Thread 1.2).
588    ///
589    /// Required.
590    pub dp: Option<bool>,
591    /// The border router's RLOC16.
592    ///
593    /// Required.
594    pub rloc16: Option<u16>,
595    #[doc(hidden)]
596    pub __source_breaking: fidl::marker::SourceBreaking,
597}
598
599impl fidl::Persistable for BorderRouterConfig {}
600
601/// Counters associated with border routing.
602#[derive(Clone, Debug, Default, PartialEq)]
603pub struct BorderRoutingCounters {
604    /// The number of packets associated with inbound unicast messages.
605    ///
606    /// Required.
607    pub inbound_unicast_packets: Option<u64>,
608    /// The number of bytes associated with inbound unicast messages.
609    ///
610    /// Required.
611    pub inbound_unicast_bytes: Option<u64>,
612    /// The number of packets associated with inbound multicast messages.
613    ///
614    /// Required.
615    pub inbound_multicast_packets: Option<u64>,
616    /// The number of bytes associated with inbound multicast messages.
617    ///
618    /// Required.
619    pub inbound_multicast_bytes: Option<u64>,
620    /// The number of packets associated with outbound unicast messages.
621    ///
622    /// Required.
623    pub outbound_unicast_packets: Option<u64>,
624    /// The number of bytes associated with outbound unicast messages.
625    ///
626    /// Required.
627    pub outbound_unicast_bytes: Option<u64>,
628    /// The number of packets associated with outbound multicast messages.
629    ///
630    /// Required.
631    pub outbound_multicast_packets: Option<u64>,
632    /// The number of bytes associated with outbound multicast messages.
633    ///
634    /// Required.
635    pub outbound_multicast_bytes: Option<u64>,
636    /// The number of received RA packets.
637    ///
638    /// Required.
639    pub ra_rx: Option<u32>,
640    /// The number of RA packets successfully transmitted.
641    ///
642    /// Required.
643    pub ra_tx_success: Option<u32>,
644    /// The number of RA packets failed to transmit.
645    ///
646    /// Required.
647    pub ra_tx_failure: Option<u32>,
648    /// The number of received RS packets.
649    ///
650    /// Required.
651    pub rs_rx: Option<u32>,
652    /// The number of RS packets successfully transmitted.
653    ///
654    /// Required.
655    pub rs_tx_success: Option<u32>,
656    /// The number of RS packets failed to transmit.
657    ///
658    /// Required.
659    pub rs_tx_failure: Option<u32>,
660    /// Inbound Internet packets when DHCPv6 PD enabled.
661    ///
662    /// Optional.
663    pub inbound_internet_packets: Option<u64>,
664    /// Inbound Internet bytes when DHCPv6 PD enabled.
665    ///
666    /// Optional.
667    pub inbound_internet_bytes: Option<u64>,
668    /// Outbound Internet packets when DHCPv6 PD enabled.
669    ///
670    /// Optional.
671    pub outbound_internet_packets: Option<u64>,
672    /// Outbound Internet bytes when DHCPv6 PD enabled.
673    ///
674    /// Optional.
675    pub outbound_internet_bytes: Option<u64>,
676    #[doc(hidden)]
677    pub __source_breaking: fidl::marker::SourceBreaking,
678}
679
680impl fidl::Persistable for BorderRoutingCounters {}
681
682/// Information about the state of components of NAT64
683#[derive(Clone, Debug, Default, PartialEq)]
684pub struct BorderRoutingNat64State {
685    /// prefix manager state
686    pub prefix_manager_state: Option<Nat64State>,
687    /// translator state
688    pub translator_state: Option<Nat64State>,
689    #[doc(hidden)]
690    pub __source_breaking: fidl::marker::SourceBreaking,
691}
692
693impl fidl::Persistable for BorderRoutingNat64State {}
694
695/// The peer BR's info found in Network Data entries.
696#[derive(Clone, Debug, Default, PartialEq)]
697pub struct BorderRoutingPeer {
698    /// IEEE 802.15.4 short address of neighbor.
699    ///
700    /// Required.
701    pub thread_rloc: Option<u16>,
702    /// The age of this entry in the neighbor table.
703    ///
704    /// Required.
705    pub age: Option<i64>,
706    #[doc(hidden)]
707    pub __source_breaking: fidl::marker::SourceBreaking,
708}
709
710impl fidl::Persistable for BorderRoutingPeer {}
711
712/// The discovered routers by Border Routing Manager on the infrastructure link.
713#[derive(Clone, Debug, Default, PartialEq)]
714pub struct BorderRoutingRouter {
715    /// IPv6 address string of the router.
716    ///
717    /// Required.
718    pub address: Option<String>,
719    /// Duration since last update (any message rx) from this router.
720    ///
721    /// Required.
722    pub duration_since_last_update: Option<i64>,
723    /// The router's age (duration since its first discovery).
724    ///
725    /// Required.
726    pub age: Option<i64>,
727    /// The router's Managed Address Config flag (`M` flag).
728    ///
729    /// Required.
730    pub managed_address_config_flag: Option<bool>,
731    /// The router's Other Config flag (`O` flag).
732    ///
733    /// Required.
734    pub other_config_flag: Option<bool>,
735    /// The router's SNAC Router flag (`S` flag).
736    ///
737    /// Required.
738    pub snac_router_flag: Option<bool>,
739    /// This router is the local device (this BR).
740    ///
741    /// Required.
742    pub is_local_device: Option<bool>,
743    /// This router is reachable.
744    ///
745    /// Required.
746    pub is_reachable: Option<bool>,
747    /// This router is (likely) a peer BR.
748    ///
749    /// Required.
750    pub is_peer_br: Option<bool>,
751    #[doc(hidden)]
752    pub __source_breaking: fidl::marker::SourceBreaking,
753}
754
755impl fidl::Persistable for BorderRoutingRouter {}
756
757#[derive(Clone, Debug, Default, PartialEq)]
758pub struct ChannelInfo {
759    /// The index used by the interface to identify
760    /// this channel.
761    pub index: Option<u16>,
762    /// Human-readable identifier for channel.
763    ///
764    /// For most network types, this is just
765    /// the string representation of the index.
766    /// However, some network types might have
767    /// non-integer ways of identifying specific
768    /// channels. This field allows the application
769    /// to display the name of the channel correctly
770    /// under such circumstances.
771    ///
772    /// The allowed characters include:
773    ///
774    ///  * Dash (`-`), Underscore (`_`), Plus(`+`), Semicolon(`:`)
775    ///  * Numbers (`0`-`9`)
776    ///  * Letters (`a`-`z`, `A`-`Z`)
777    pub id: Option<String>,
778    /// The maximum transmit power allowed on
779    /// this channel, in dBm.
780    pub max_transmit_power_dbm: Option<i8>,
781    /// The center RF frequency of this channel, in Hz.
782    ///
783    /// For example, 802.15.4 has the following values:
784    ///
785    /// Channel | Center Frequency (Hz)
786    /// --------|----------------------
787    /// 11      | 2,405,000,000
788    /// 12      | 2,410,000,000
789    /// 13      | 2,415,000,000
790    /// 14      | 2,420,000,000
791    /// 15      | 2,425,000,000
792    /// 16      | 2,430,000,000
793    /// 17      | 2,435,000,000
794    /// 18      | 2,440,000,000
795    /// 19      | 2,445,000,000
796    /// 20      | 2,450,000,000
797    /// 21      | 2,455,000,000
798    /// 22      | 2,460,000,000
799    /// 23      | 2,465,000,000
800    /// 24      | 2,470,000,000
801    /// 25      | 2,475,000,000
802    /// 26      | 2,480,000,000
803    pub spectrum_center_frequency_hz: Option<u64>,
804    /// The RF spectrum bandwidth used by this
805    /// channel where the power level is expected to
806    /// be higher than -20dBr, in Hz.
807    ///
808    /// For example, 802.15.4 channels 11 thru 26 would
809    /// have the value 2,000,000 (2 MHz).
810    pub spectrum_bandwidth_hz: Option<u64>,
811    /// Indicates if this channel is masked by the
812    /// current regulatory domain and is thus unable
813    /// to be used.
814    pub masked_by_regulatory_domain: Option<bool>,
815    #[doc(hidden)]
816    pub __source_breaking: fidl::marker::SourceBreaking,
817}
818
819impl fidl::Persistable for ChannelInfo {}
820
821/// Represents a Commissioning Dataset.
822///
823/// Derived from `otCommissioningDataset`(https://openthread.io/reference/struct/ot-commissioning-dataset)
824#[derive(Clone, Debug, Default, PartialEq)]
825pub struct CommissioningDataset {
826    /// Border Router RLOC16.
827    ///
828    /// Required.
829    pub locator: Option<u16>,
830    /// Commissioner Session Id.
831    ///
832    /// Required.
833    pub session_id: Option<u16>,
834    /// Steering Data.
835    ///
836    /// Required.
837    pub steering_data: Option<Vec<u8>>,
838    /// Joiner UDP Port.
839    ///
840    /// Required.
841    pub joiner_udp_port: Option<u16>,
842    /// Whether Border Router RLOC16 is set.
843    ///
844    /// Required.
845    pub is_locator_set: Option<bool>,
846    /// Whether Commissioner Session Id is set.
847    ///
848    /// Required.
849    pub is_session_id_set: Option<bool>,
850    /// Whether Steering Data is set.
851    ///
852    /// Required.
853    pub is_steering_data_set: Option<bool>,
854    /// Whether Joiner UDP Port is set.
855    ///
856    /// Required.
857    pub is_joiner_udp_port_set: Option<bool>,
858    /// Whether the Dataset contains any extra unknown sub-TLV.
859    ///
860    /// Required.
861    pub has_extra_tlv: Option<bool>,
862    #[doc(hidden)]
863    pub __source_breaking: fidl::marker::SourceBreaking,
864}
865
866impl fidl::Persistable for CommissioningDataset {}
867
868/// DHCPv6 PD related info.
869#[derive(Clone, Debug, Default, PartialEq)]
870pub struct Dhcp6PdInfo {
871    /// DHCPv6 PD state.
872    ///
873    /// Required.
874    pub dhcp6pd_state: Option<Dhcp6PdState>,
875    /// DHCPv6 PD processed RA Info.
876    ///
877    /// Optional.
878    pub pd_processed_ra_info: Option<PdProcessedRaInfo>,
879    /// DHCPv6 PD prefix.
880    ///
881    /// Optional.
882    pub hashed_pd_prefix: Option<Vec<u8>>,
883    #[doc(hidden)]
884    pub __source_breaking: fidl::marker::SourceBreaking,
885}
886
887impl fidl::Persistable for Dhcp6PdInfo {}
888
889/// Represents a TXT record entry representing a key/value pair (RFC 6763 - section 6.3).
890#[derive(Clone, Debug, Default, PartialEq)]
891pub struct DnsTxtEntry {
892    /// The key string of the TXT record.
893    ///
894    /// Maximum length of TXT key string supported by `otDnsTxtEntryIterator` is 64,
895    /// see OT_DNS_TXT_KEY_ITER_MAX_LENGTH.
896    ///
897    /// Required.
898    pub key: Option<String>,
899    /// The value of the TXT record.
900    ///
901    /// The overall key-value pair encoded length (including the key and "=") must be 255
902    /// bytes or less.
903    ///
904    /// Required.
905    pub value: Option<Vec<u8>>,
906    #[doc(hidden)]
907    pub __source_breaking: fidl::marker::SourceBreaking,
908}
909
910impl fidl::Persistable for DnsTxtEntry {}
911
912/// Counters associated with the DNS-SD server.
913#[derive(Clone, Debug, Default, PartialEq)]
914pub struct DnssdCounters {
915    /// The number of successful responses.
916    ///
917    /// Required.
918    pub success_response: Option<u32>,
919    /// The number of 'server failure' responses.
920    ///
921    /// Required.
922    pub server_failure_response: Option<u32>,
923    /// The number of 'format error' responses.
924    ///
925    /// Required.
926    pub format_error_response: Option<u32>,
927    /// The number of 'name error' responses.
928    ///
929    /// Required.
930    pub name_error_response: Option<u32>,
931    /// The number of 'not implemented' responses.
932    ///
933    /// Required.
934    pub not_implemented_response: Option<u32>,
935    /// The number of 'other' responses.
936    ///
937    /// Required.
938    pub other_response: Option<u32>,
939    /// The number of queries completely resolved by the local SRP server.
940    ///
941    /// Required.
942    pub resolved_by_srp: Option<u32>,
943    /// The counters of upstream DNS feature.
944    ///
945    /// Optional.
946    pub upstream_dns_counters: Option<UpstreamDnsCounters>,
947    #[doc(hidden)]
948    pub __source_breaking: fidl::marker::SourceBreaking,
949}
950
951impl fidl::Persistable for DnssdCounters {}
952
953/// LoWPAN External Route.
954///
955/// Informed by the Thread 1.1.1 Specification, section 5.13.3.
956#[derive(Clone, Debug, Default, PartialEq)]
957pub struct ExternalRoute {
958    /// Subnet for route. Required.
959    pub subnet: Option<fidl_fuchsia_net__common::Ipv6AddressWithPrefix>,
960    /// Indicates the what preference this route should be given relative
961    /// to other devices offering the same external route. If not present,
962    /// `MEDIUM` preference is assumed.
963    ///
964    /// Based on `R_preference` from Section 5.13.3 of the Thread 1.1.1
965    /// Specification.
966    pub route_preference: Option<RoutePreference>,
967    /// True if the route is expected to be available for at least Thread's
968    /// `MIN_STABLE_LIFETIME`; otherwise, `false`. If not present, assumed to
969    /// be `false`.
970    ///
971    /// The Thread specification defines `MIN_STABLE_LIFETIME` as 168 hours.
972    ///
973    /// Based on `R_stable` from Section 5.13.3 of the Thread 1.1.1
974    /// Specification.
975    pub stable: Option<bool>,
976    #[doc(hidden)]
977    pub __source_breaking: fidl::marker::SourceBreaking,
978}
979
980impl fidl::Persistable for ExternalRoute {}
981
982/// Represents an External Route configuration.
983///
984/// Derived from `otExternalRouteConfig`(https://openthread.io/reference/struct/ot-external-route-config)
985#[derive(Clone, Debug, Default, PartialEq)]
986pub struct ExternalRouteConfig {
987    /// IPv6 prefix.
988    ///
989    /// Required.
990    pub prefix: Option<String>,
991    /// The border router's RLOC16.
992    ///
993    /// Required.
994    pub rloc16: Option<u16>,
995    /// A 2-bit signed int preference.
996    ///
997    /// Required.
998    pub preference: Option<i8>,
999    /// Whether this is a NAT64 prefix.
1000    ///
1001    /// Required.
1002    pub nat64: Option<bool>,
1003    /// Whether this configuration is considered Stable Network Data.
1004    ///
1005    /// Required.
1006    pub stable: Option<bool>,
1007    /// Whether the next hop is this device.
1008    ///
1009    /// Required.
1010    pub next_hop_is_this_device: Option<bool>,
1011    /// Whether or not BR is advertising a ULA prefix in PIO (AP flag).
1012    ///
1013    /// Required.
1014    pub adv_pio: Option<bool>,
1015    #[doc(hidden)]
1016    pub __source_breaking: fidl::marker::SourceBreaking,
1017}
1018
1019impl fidl::Persistable for ExternalRouteConfig {}
1020
1021/// Parameters for joiner commissioning.
1022///
1023/// More information:
1024/// https://www.threadgroup.org/Portals/0/documents/support/CommissioningWhitePaper_658_2.pdf
1025#[derive(Clone, Debug, Default, PartialEq)]
1026pub struct JoinerCommissioningParams {
1027    /// Commissioning PSKd. Required.
1028    pub pskd: Option<String>,
1029    /// Provisioning URL. Optional.
1030    pub provisioning_url: Option<String>,
1031    /// Vendor name. Optional.
1032    pub vendor_name: Option<String>,
1033    /// Vendor model. Optional.
1034    pub vendor_model: Option<String>,
1035    /// Vendor Software Version. Optional.
1036    pub vendor_sw_version: Option<String>,
1037    /// Vendor data string. Optional.
1038    pub vendor_data_string: Option<String>,
1039    #[doc(hidden)]
1040    pub __source_breaking: fidl::marker::SourceBreaking,
1041}
1042
1043impl fidl::Persistable for JoinerCommissioningParams {}
1044
1045/// Node information for Thread network leaders.
1046#[derive(Clone, Debug, Default, PartialEq)]
1047pub struct LeaderData {
1048    /// The network partition ID of the leader.
1049    ///
1050    /// Required.
1051    pub partition_id: Option<u32>,
1052    /// The weight of this leader on the network.
1053    ///
1054    /// Required.
1055    pub weight: Option<u8>,
1056    /// The full network data version.
1057    ///
1058    /// Required.
1059    pub network_data_version: Option<u8>,
1060    /// The stable network data version.
1061    ///
1062    /// Required.
1063    pub stable_network_data_version: Option<u8>,
1064    /// The router ID of the leader.
1065    ///
1066    /// Required.
1067    pub router_id: Option<u8>,
1068    #[doc(hidden)]
1069    pub __source_breaking: fidl::marker::SourceBreaking,
1070}
1071
1072impl fidl::Persistable for LeaderData {}
1073
1074/// Link Metrics info of the neighbors.
1075#[derive(Clone, Debug, Default, PartialEq)]
1076pub struct LinkMetricsEntry {
1077    /// Link Margin value of the neighbor
1078    pub link_margin: Option<u8>,
1079    /// RSSI value of the neighbor
1080    pub rssi: Option<i8>,
1081    #[doc(hidden)]
1082    pub __source_breaking: fidl::marker::SourceBreaking,
1083}
1084
1085impl fidl::Persistable for LinkMetricsEntry {}
1086
1087/// Represents 6LoWPAN Context ID information associated with a prefix in Network Data.
1088///
1089/// Derived from `otLowpanContextInfo`(https://openthread.io/reference/struct/ot-lowpan-context-info)
1090#[derive(Clone, Debug, Default, PartialEq)]
1091pub struct LowpanContextInfo {
1092    /// The 6LoWPAN Context ID.
1093    ///
1094    /// Required.
1095    pub context_id: Option<u8>,
1096    /// The compress flag.
1097    ///
1098    /// Required.
1099    pub compress_flag: Option<bool>,
1100    /// Whether the Context TLV is marked as Stable Network Data.
1101    ///
1102    /// Required.
1103    pub stable: Option<bool>,
1104    /// The associated IPv6 prefix.
1105    ///
1106    /// Required.
1107    pub prefix: Option<String>,
1108    #[doc(hidden)]
1109    pub __source_breaking: fidl::marker::SourceBreaking,
1110}
1111
1112impl fidl::Persistable for LowpanContextInfo {}
1113
1114/// Multi radio link info associated with a neighbor.
1115#[derive(Clone, Debug, Default, PartialEq)]
1116pub struct MultiRadioNeighborInfo {
1117    /// IEEE 802.15.4 Extended Address.
1118    ///
1119    /// Required.
1120    pub extended_address: Option<Vec<u8>>,
1121    /// IEEE 802.15.4 short address of neighbor.
1122    ///
1123    /// Required.
1124    pub thread_rloc: Option<u16>,
1125    /// Multi radio link info. So far only '15.4' and 'TREL' links.
1126    /// Considering a potential future expansion to other links, set
1127    /// the MAX capability to 5.
1128    ///
1129    /// Required.
1130    pub radio_link_info: Option<Vec<RadioLinkInfo>>,
1131    #[doc(hidden)]
1132    pub __source_breaking: fidl::marker::SourceBreaking,
1133}
1134
1135impl fidl::Persistable for MultiRadioNeighborInfo {}
1136
1137#[derive(Clone, Debug, Default, PartialEq)]
1138pub struct Nat64ErrorCounters {
1139    /// Packet drop for unknown reasons
1140    pub unknown: Option<Nat64PacketCounters>,
1141    /// Packet drop due to failed to parse the datagram
1142    pub illegal_packet: Option<Nat64PacketCounters>,
1143    /// Packet drop due to unsupported IP protocol
1144    pub unsupported_protocol: Option<Nat64PacketCounters>,
1145    /// Packet drop due to no mappings found or mapping pool exhausted
1146    pub no_mapping: Option<Nat64PacketCounters>,
1147    #[doc(hidden)]
1148    pub __source_breaking: fidl::marker::SourceBreaking,
1149}
1150
1151impl fidl::Persistable for Nat64ErrorCounters {}
1152
1153#[derive(Clone, Debug, Default, PartialEq)]
1154pub struct Nat64Info {
1155    /// NAT64 border routing state
1156    pub nat64_state: Option<BorderRoutingNat64State>,
1157    /// NAT64 mapping
1158    pub nat64_mappings: Option<Vec<Nat64Mapping>>,
1159    /// NAT64 error counters
1160    pub nat64_error_counters: Option<Nat64ErrorCounters>,
1161    /// NAT64 protocol counters
1162    pub nat64_protocol_counters: Option<Nat64ProtocolCounters>,
1163    #[doc(hidden)]
1164    pub __source_breaking: fidl::marker::SourceBreaking,
1165}
1166
1167impl fidl::Persistable for Nat64Info {}
1168
1169/// Information about the mappings of NAT64 translator
1170#[derive(Clone, Debug, Default, PartialEq)]
1171pub struct Nat64Mapping {
1172    /// The unique id for a mapping session
1173    pub mapping_id: Option<u64>,
1174    /// The IPv4 address of the mapping
1175    pub ip4_addr: Option<Vec<u8>>,
1176    /// The IPv6 address of the mapping
1177    pub ip6_addr: Option<Vec<u8>>,
1178    /// Remaining time before expiry in milliseconds
1179    pub remaining_time_ms: Option<u32>,
1180    /// Nat64 Counters
1181    pub counters: Option<Nat64ProtocolCounters>,
1182    #[doc(hidden)]
1183    pub __source_breaking: fidl::marker::SourceBreaking,
1184}
1185
1186impl fidl::Persistable for Nat64Mapping {}
1187
1188#[derive(Clone, Debug, Default, PartialEq)]
1189pub struct Nat64PacketCounters {
1190    /// Number of packets translated from IPv4 to IPv6
1191    pub ipv4_to_ipv6_packets: Option<u64>,
1192    /// Number of packets translated from IPv6 to IPv4
1193    pub ipv6_to_ipv4_packets: Option<u64>,
1194    #[doc(hidden)]
1195    pub __source_breaking: fidl::marker::SourceBreaking,
1196}
1197
1198impl fidl::Persistable for Nat64PacketCounters {}
1199
1200#[derive(Clone, Debug, Default, PartialEq)]
1201pub struct Nat64ProtocolCounters {
1202    /// TCP counters
1203    pub tcp: Option<Nat64TrafficCounters>,
1204    /// UDP counters
1205    pub udp: Option<Nat64TrafficCounters>,
1206    /// ICMP counters
1207    pub icmp: Option<Nat64TrafficCounters>,
1208    /// Total counters
1209    pub total: Option<Nat64TrafficCounters>,
1210    #[doc(hidden)]
1211    pub __source_breaking: fidl::marker::SourceBreaking,
1212}
1213
1214impl fidl::Persistable for Nat64ProtocolCounters {}
1215
1216#[derive(Clone, Debug, Default, PartialEq)]
1217pub struct Nat64TrafficCounters {
1218    /// Number of packets translated from IPv4 to IPv6
1219    pub ipv4_to_ipv6_packets: Option<u64>,
1220    /// Sum of size of packets translated from IPv4 to IPv6
1221    pub ipv4_to_ipv6_bytes: Option<u64>,
1222    /// Number of packets translated from IPv6 to IPv4
1223    pub ipv6_to_ipv4_packets: Option<u64>,
1224    /// Sum of size of packets translated from IPv6 to IPv4
1225    pub ipv6_to_ipv4_bytes: Option<u64>,
1226    #[doc(hidden)]
1227    pub __source_breaking: fidl::marker::SourceBreaking,
1228}
1229
1230impl fidl::Persistable for Nat64TrafficCounters {}
1231
1232/// Represents the full Network Data received from the Leader.
1233#[derive(Clone, Debug, Default, PartialEq)]
1234pub struct NetworkData {
1235    /// On-mesh prefixes.
1236    ///
1237    /// Required.
1238    pub on_mesh_prefixes: Option<Vec<BorderRouterConfig>>,
1239    /// External Routes.
1240    ///
1241    /// Required.
1242    pub external_routes: Option<Vec<ExternalRouteConfig>>,
1243    /// SRP service entries.
1244    ///
1245    /// Required.
1246    pub services: Option<Vec<ServiceConfig>>,
1247    /// 6LoWPAN Context IDs.
1248    ///
1249    /// Required.
1250    pub contexts: Option<Vec<LowpanContextInfo>>,
1251    /// Commissioning Dataset information.
1252    ///
1253    /// Required.
1254    pub commissioning_dataset: Option<CommissioningDataset>,
1255    #[doc(hidden)]
1256    pub __source_breaking: fidl::marker::SourceBreaking,
1257}
1258
1259impl fidl::Persistable for NetworkData {}
1260
1261/// Describes the parameters of a network scan.
1262#[derive(Clone, Debug, Default, PartialEq)]
1263pub struct NetworkScanParameters {
1264    /// Subset of channels to scan.
1265    ///
1266    /// If unspecified, all channels will be scanned.
1267    pub channels: Option<Vec<u16>>,
1268    /// Transmit power (in dBm to the antenna) for transmitting
1269    /// beacon requests.
1270    ///
1271    /// Note that hardware limitations may cause the actual
1272    /// used transmit power to differ from what is specified.
1273    /// In that case the used transmit power will always be
1274    /// the highest available transmit power that is less than
1275    /// the specified transmit power. If the desired transmit
1276    /// power is lower than the lowest transmit power supported
1277    /// by the hardware, then that will be used instead.
1278    pub tx_power_dbm: Option<i8>,
1279    #[doc(hidden)]
1280    pub __source_breaking: fidl::marker::SourceBreaking,
1281}
1282
1283impl fidl::Persistable for NetworkScanParameters {}
1284
1285/// LoWPAN On-Mesh Prefix.
1286///
1287/// Informed by the Thread 1.1.1 Specification, section 5.13.2.
1288#[derive(Clone, Debug, Default, PartialEq)]
1289pub struct OnMeshPrefix {
1290    /// Subnet to advertise for devices to use on the network. Required.
1291    pub subnet: Option<fidl_fuchsia_net__common::Ipv6AddressWithPrefix>,
1292    /// If present, indicates that this device is offering a default route
1293    /// as well as indicating the what preference this default
1294    /// route should be given relative to other devices offering default
1295    /// routes. If not present, no default route is advertised.
1296    ///
1297    /// Based on `P_default` and `P_preference` from Section 5.13.2 of the
1298    /// Thread 1.1.1 Specification.
1299    pub default_route_preference: Option<RoutePreference>,
1300    /// True if the route is expected to be available for at least Thread's
1301    /// `MIN_STABLE_LIFETIME`; otherwise `false`. If not present, assumed to
1302    /// be `false`.
1303    ///
1304    /// The Thread specification defines `MIN_STABLE_LIFETIME` as 168 hours.
1305    ///
1306    /// Based on `P_stable` from Section 5.13.2 of the
1307    /// Thread 1.1.1 Specification.
1308    pub stable: Option<bool>,
1309    /// True if network devices are allowed to use previously configured
1310    /// addresses using this prefix. If not present, assumed to be `false`.
1311    ///
1312    /// "SLAAC" referrs to StateLess Address Auto Configuration, described in
1313    /// [RFC4862](https://tools.ietf.org/html/rfc4862).
1314    ///
1315    /// Based on `P_slaac_preferred` from Section 5.13.2 of the
1316    /// Thread 1.1.1 Specification.
1317    pub slaac_preferred: Option<bool>,
1318    /// True if network devices are allowed to autoconfigure addresses using
1319    /// this prefix. If not present, assumed to be `false`.
1320    ///
1321    /// "SLAAC" referrs to StateLess Address Auto Configuration, described in
1322    /// [RFC4862](https://tools.ietf.org/html/rfc4862).
1323    ///
1324    /// Based on `P_slaac_valid` from Section 5.13.2 of the
1325    /// Thread 1.1.1 Specification.
1326    pub slaac_valid: Option<bool>,
1327    #[doc(hidden)]
1328    pub __source_breaking: fidl::marker::SourceBreaking,
1329}
1330
1331impl fidl::Persistable for OnMeshPrefix {}
1332
1333/// Represents an Thread Active or Pending Operational Dataset.
1334#[derive(Clone, Debug, Default, PartialEq)]
1335pub struct OperationalDataset {
1336    /// Active Timestamp.
1337    ///
1338    /// Required.
1339    pub active_timestamp: Option<i64>,
1340    /// Pending Timestamp.
1341    ///
1342    /// Required.
1343    pub pending_timestamp: Option<i64>,
1344    /// Network Key.
1345    ///
1346    /// Required.
1347    pub network_key: Option<Vec<u8>>,
1348    /// Network Name.
1349    ///
1350    /// Required.
1351    pub network_name: Option<Vec<u8>>,
1352    /// Extended PAN ID.
1353    ///
1354    /// Required.
1355    pub extended_pan_id: Option<Vec<u8>>,
1356    /// Mesh Local Prefix.
1357    ///
1358    /// Required.
1359    pub mesh_local_prefix: Option<Vec<u8>>,
1360    /// Delay Timer.
1361    ///
1362    /// Required.
1363    pub delay: Option<u32>,
1364    /// PAN ID.
1365    ///
1366    /// Required.
1367    pub pan_id: Option<u16>,
1368    /// Channel.
1369    ///
1370    /// Required.
1371    pub channel: Option<u16>,
1372    /// Wake-up Channel.
1373    ///
1374    /// Required.
1375    pub wakeup_channel: Option<u16>,
1376    /// PSKc.
1377    ///
1378    /// Required.
1379    pub pskc: Option<Vec<u8>>,
1380    /// Security Policy.
1381    ///
1382    /// Required.
1383    pub security_policy: Option<SecurityPolicy>,
1384    /// Channel Mask.
1385    ///
1386    /// Required.
1387    pub channel_mask: Option<u32>,
1388    #[doc(hidden)]
1389    pub __source_breaking: fidl::marker::SourceBreaking,
1390}
1391
1392impl fidl::Persistable for OperationalDataset {}
1393
1394/// Platform counters related to processed RA info when DHCPv6 PD is enabled.
1395#[derive(Clone, Debug, Default, PartialEq)]
1396pub struct PdProcessedRaInfo {
1397    /// The number of platform generated RA handled by ApplyPlatformGeneratedRa.
1398    ///
1399    /// Required.
1400    pub num_platform_ra_received: Option<u32>,
1401    /// The number of PIO processed for adding OMR prefixes.
1402    ///
1403    /// Required.
1404    pub num_platform_pio_processed: Option<u32>,
1405    /// The duration since the last processed RA message.
1406    ///
1407    /// Required.
1408    pub last_platform_ra_msec: Option<u32>,
1409    #[doc(hidden)]
1410    pub __source_breaking: fidl::marker::SourceBreaking,
1411}
1412
1413impl fidl::Persistable for PdProcessedRaInfo {}
1414
1415/// Represents information associated with a radio link.
1416#[derive(Clone, Debug, Default, PartialEq)]
1417pub struct RadioLinkInfo {
1418    /// Radio Link Type, e.g., '15.4' or 'TREL'.
1419    /// Considering a potential future expansion to other links, set
1420    /// the MAX capability to 10.
1421    ///
1422    /// Required.
1423    pub link_type: Option<String>,
1424    /// Preference level of radio link.
1425    ///
1426    /// Required.
1427    pub preference: Option<u8>,
1428    #[doc(hidden)]
1429    pub __source_breaking: fidl::marker::SourceBreaking,
1430}
1431
1432impl fidl::Persistable for RadioLinkInfo {}
1433
1434/// Represents the diagnostic information for a Thread Router.
1435#[derive(Clone, Debug, Default, PartialEq)]
1436pub struct RouterInfo {
1437    /// IEEE 802.15.4 Extended Address
1438    ///
1439    /// Required.
1440    pub extended_address: Option<Vec<u8>>,
1441    /// IEEE 802.15.4 short address of neighbor.
1442    ///
1443    /// Required.
1444    pub thread_rloc: Option<u16>,
1445    /// Router ID.
1446    ///
1447    /// Required.
1448    pub router_id: Option<u8>,
1449    /// Next hop to router.
1450    ///
1451    /// Required.
1452    pub next_hop: Option<u8>,
1453    /// Path cost to router.
1454    ///
1455    /// Required.
1456    pub path_cost: Option<u8>,
1457    /// Link Quality In.
1458    ///
1459    /// Required.
1460    pub link_quality_in: Option<u8>,
1461    /// Link Quality Out.
1462    ///
1463    /// Required.
1464    pub link_quality_out: Option<u8>,
1465    /// The router's age (duration since last heard).
1466    ///
1467    /// Required.
1468    pub age: Option<i64>,
1469    /// Whether link established with Router ID or not.
1470    ///
1471    /// Required.
1472    pub link_established: Option<bool>,
1473    #[doc(hidden)]
1474    pub __source_breaking: fidl::marker::SourceBreaking,
1475}
1476
1477impl fidl::Persistable for RouterInfo {}
1478
1479/// Represents the Thread Security Policy.
1480#[derive(Clone, Debug, Default, PartialEq)]
1481pub struct SecurityPolicy {
1482    /// Key Rotation time value, in uints of hours.
1483    ///
1484    /// Required.
1485    pub rotation_time: Option<u16>,
1486    /// Whether Obtaining the Network Key for out-of-band commissioning is enabled.
1487    ///
1488    /// Required.
1489    pub obtain_network_key_enabled: Option<bool>,
1490    /// Whether Native Commissioning using PSKc is allowed.
1491    ///
1492    /// Required.
1493    pub native_commissioning_enabled: Option<bool>,
1494    /// Whether Thread 1.0/1.1.x Routers are enabled.
1495    ///
1496    /// Required.
1497    pub routers_enabled: Option<bool>,
1498    /// Whether External Commissioner authentication is allowed.
1499    ///
1500    /// Required.
1501    pub external_commissioning_enabled: Option<bool>,
1502    /// Whether Autonomous Enrollment is enabled.
1503    ///
1504    /// Required.
1505    pub autonomous_enrollment_enabled: Option<bool>,
1506    /// Whether Network Key Provisioning is enabled.
1507    ///
1508    /// Required.
1509    pub network_key_provisioning_enabled: Option<bool>,
1510    /// Whether ToBLE link is enabled.
1511    ///
1512    /// Required.
1513    pub toble_link_enabled: Option<bool>,
1514    /// Whether Non-CCM Routers enabled.
1515    ///
1516    /// Required.
1517    pub nonccm_routers_enabled: Option<bool>,
1518    /// The Version-threshold for Routing.
1519    ///
1520    /// Required.
1521    pub version_threshold_for_routing: Option<u8>,
1522    #[doc(hidden)]
1523    pub __source_breaking: fidl::marker::SourceBreaking,
1524}
1525
1526impl fidl::Persistable for SecurityPolicy {}
1527
1528/// Represents a Server configuration.
1529///
1530/// Derived from `otServerConfig`(https://openthread.io/reference/struct/ot-server-config)
1531#[derive(Clone, Debug, Default, PartialEq)]
1532pub struct ServerConfig {
1533    /// Whether this config is considered Stable Network Data.
1534    ///
1535    /// Required.
1536    pub stable: Option<bool>,
1537    /// Length of server data.
1538    ///
1539    /// Required.
1540    pub server_data_length: Option<u8>,
1541    /// Server data bytes.
1542    ///
1543    /// Required.
1544    pub server_data: Option<Vec<u8>>,
1545    /// The Server RLOC16.
1546    ///
1547    /// Required.
1548    pub rloc16: Option<u16>,
1549    #[doc(hidden)]
1550    pub __source_breaking: fidl::marker::SourceBreaking,
1551}
1552
1553impl fidl::Persistable for ServerConfig {}
1554
1555/// Represents a Service configuration.
1556///
1557/// Derived from `otServiceConfig`(https://openthread.io/reference/struct/ot-service-config)
1558#[derive(Clone, Debug, Default, PartialEq)]
1559pub struct ServiceConfig {
1560    /// The service ID.
1561    ///
1562    /// Required.
1563    pub service_id: Option<u8>,
1564    /// IANA Enterprise Number.
1565    ///
1566    /// Required.
1567    pub enterprise_number: Option<u32>,
1568    /// Length of service data.
1569    ///
1570    /// Required.
1571    pub service_data_length: Option<u8>,
1572    /// Service data bytes.
1573    ///
1574    /// Required.
1575    pub service_data: Option<Vec<u8>>,
1576    /// The Server configuration.
1577    ///
1578    /// Required.
1579    pub server_config: Option<ServerConfig>,
1580    #[doc(hidden)]
1581    pub __source_breaking: fidl::marker::SourceBreaking,
1582}
1583
1584impl fidl::Persistable for ServiceConfig {}
1585
1586/// Represents a SRP service host.
1587#[derive(Clone, Debug, Default, PartialEq)]
1588pub struct SrpServerHost {
1589    /// The full name of host.
1590    ///
1591    /// Required.
1592    pub name: Option<String>,
1593    /// Whether the SRP service host has been deleted.
1594    ///
1595    /// Required.
1596    pub deleted: Option<bool>,
1597    /// The IPv6 addresses of the SPR service host.
1598    ///
1599    /// Required.
1600    pub addresses: Option<Vec<fidl_fuchsia_net__common::Ipv6Address>>,
1601    #[doc(hidden)]
1602    pub __source_breaking: fidl::marker::SourceBreaking,
1603}
1604
1605impl fidl::Persistable for SrpServerHost {}
1606
1607/// State information about the SRP server.
1608#[derive(Clone, Debug, Default, PartialEq)]
1609pub struct SrpServerInfo {
1610    /// The operational state of the SRP server.
1611    ///
1612    /// Required.
1613    pub state: Option<SrpServerState>,
1614    /// The port the SRP server is listening to.
1615    ///
1616    /// Optional. The port may be omitted when `state` is `DISABLED`.
1617    pub port: Option<u16>,
1618    /// The address mode of the SRP server.
1619    ///
1620    /// Required.
1621    pub address_mode: Option<SrpServerAddressMode>,
1622    /// The response counters of the SRP server.
1623    ///
1624    /// Required.
1625    pub response_counters: Option<SrpServerResponseCounters>,
1626    /// The registration information of SRP hosts.
1627    ///
1628    /// Required.
1629    pub hosts_registration: Option<SrpServerRegistration>,
1630    /// The registration information of SRP services.
1631    ///
1632    /// Required.
1633    pub services_registration: Option<SrpServerRegistration>,
1634    /// The detailed registration information of SRP hosts.
1635    ///
1636    /// Required.
1637    pub hosts: Option<Vec<SrpServerHost>>,
1638    /// The detailed registration information of SRP services.
1639    ///
1640    /// Required.
1641    pub services: Option<Vec<SrpServerService>>,
1642    #[doc(hidden)]
1643    pub __source_breaking: fidl::marker::SourceBreaking,
1644}
1645
1646impl fidl::Persistable for SrpServerInfo {}
1647
1648/// Registration information about the SRP server.
1649#[derive(Clone, Debug, Default, PartialEq)]
1650pub struct SrpServerRegistration {
1651    /// Number of hosts/services that have not been deleted.
1652    ///
1653    /// Required.
1654    pub fresh_count: Option<u32>,
1655    /// Number of hosts/services that have been deleted.
1656    ///
1657    /// Required.
1658    pub deleted_count: Option<u32>,
1659    /// Total lease time.
1660    ///
1661    /// Required.
1662    pub lease_time_total: Option<i64>,
1663    /// Total key lease time.
1664    ///
1665    /// Required.
1666    pub key_lease_time_total: Option<i64>,
1667    /// Total remaining lease time.
1668    ///
1669    /// Required.
1670    pub remaining_lease_time_total: Option<i64>,
1671    /// Total remaining key lease time.
1672    ///
1673    /// Required.
1674    pub remaining_key_lease_time_total: Option<i64>,
1675    #[doc(hidden)]
1676    pub __source_breaking: fidl::marker::SourceBreaking,
1677}
1678
1679impl fidl::Persistable for SrpServerRegistration {}
1680
1681#[derive(Clone, Debug, Default, PartialEq)]
1682pub struct SrpServerResponseCounters {
1683    /// The number of successful responses.
1684    ///
1685    /// Required.
1686    pub success_response: Option<u32>,
1687    /// The number of 'server failure' responses.
1688    ///
1689    /// Required.
1690    pub server_failure_response: Option<u32>,
1691    /// The number of 'format error' responses.
1692    ///
1693    /// Required.
1694    pub format_error_response: Option<u32>,
1695    /// The number of 'name exists' responses.
1696    ///
1697    /// Required.
1698    pub name_exists_response: Option<u32>,
1699    /// The number of 'refused' responses.
1700    ///
1701    /// Required.
1702    pub refused_response: Option<u32>,
1703    /// The number of 'other' responses.
1704    ///
1705    /// Required.
1706    pub other_response: Option<u32>,
1707    #[doc(hidden)]
1708    pub __source_breaking: fidl::marker::SourceBreaking,
1709}
1710
1711impl fidl::Persistable for SrpServerResponseCounters {}
1712
1713/// Represents a SRP service.
1714#[derive(Clone, Debug, Default, PartialEq)]
1715pub struct SrpServerService {
1716    /// The full service instance name of the service.
1717    ///
1718    /// Required.
1719    pub instance_name: Option<String>,
1720    /// Whether the SRP service host has been deleted.
1721    ///
1722    /// Required.
1723    pub deleted: Option<bool>,
1724    /// The sub-type service name (full name) of the service.
1725    ///
1726    /// The maximum number of service subtype labels in the SRP service is 6,
1727    /// see OPENTHREAD_CONFIG_SRP_CLIENT_BUFFERS_SERVICE_MAX_SUB_TYPES.
1728    ///
1729    /// The maximum length for a single DNS label (sub-type) is 63 characters.
1730    ///
1731    /// Required.
1732    pub subtypes: Option<Vec<String>>,
1733    /// The port of the service instance.
1734    ///
1735    /// Required.
1736    pub port: Option<u16>,
1737    /// The priority of the service instance.
1738    ///
1739    /// Required.
1740    pub priority: Option<u16>,
1741    /// The weight of the service instance.
1742    ///
1743    /// Required.
1744    pub weight: Option<u16>,
1745    /// The TTL of the service instance.
1746    ///
1747    /// Required.
1748    pub ttl: Option<i64>,
1749    /// The lease time of a service.
1750    ///
1751    /// Required.
1752    pub lease: Option<i64>,
1753    /// The key lease time of a host/service.
1754    ///
1755    /// Required.
1756    pub key_lease: Option<i64>,
1757    /// The TXT record data.
1758    ///
1759    /// Required.
1760    pub txt_data: Option<Vec<DnsTxtEntry>>,
1761    /// The information of a service host.
1762    ///
1763    /// Required.
1764    pub host: Option<SrpServerHost>,
1765    #[doc(hidden)]
1766    pub __source_breaking: fidl::marker::SourceBreaking,
1767}
1768
1769impl fidl::Persistable for SrpServerService {}
1770
1771/// LoWPAN Interface Telemetry Information.
1772///
1773/// The fields in this table are used for providing low-level telemetry and information about the
1774/// LoWPAN interface for debugging and statistics purposes.
1775///
1776/// All fields are optional.
1777#[derive(Clone, Debug, Default, PartialEq)]
1778pub struct Telemetry {
1779    /// The current RSSI of the radio.
1780    pub rssi: Option<i8>,
1781    /// The configured transmit power of the radio.
1782    pub tx_power: Option<i8>,
1783    /// The current channel index of the radio.
1784    pub channel_index: Option<u16>,
1785    /// The partition ID of the currently associated network partition.
1786    pub partition_id: Option<u32>,
1787    /// The version string describing the underlying mesh stack.
1788    pub stack_version: Option<String>,
1789    /// The version string describing the underlying radio control firmware.
1790    pub rcp_version: Option<String>,
1791    /// Thread link mode byte.
1792    ///
1793    /// Only present on Thread networks.
1794    ///
1795    /// Defined by section 4.5.2 of the Thread 1.1.1 specification ("Mode TLV").
1796    pub thread_link_mode: Option<u8>,
1797    /// The router ID of this device in the currently associated network.
1798    ///
1799    /// Only present on Thread networks.
1800    pub thread_router_id: Option<u8>,
1801    /// The current RLOC16 address of this node.
1802    ///
1803    /// Only present on Thread networks.
1804    pub thread_rloc: Option<u16>,
1805    /// The full network data version.
1806    ///
1807    /// Only present on Thread networks.
1808    pub thread_network_data_version: Option<u8>,
1809    /// The stable network data version.
1810    ///
1811    /// Only present on Thread networks.
1812    pub thread_stable_network_data_version: Option<u8>,
1813    /// The current Thread network data, in raw binary form, as defined in section 5.13 of
1814    /// the Thread 1.1.1 specification.
1815    ///
1816    /// Only present on Thread networks.
1817    pub thread_network_data: Option<Vec<u8>>,
1818    /// The current Thread stable network data, in raw binary form, as defined in section 5.13 of
1819    /// the Thread 1.1.1 specification.
1820    ///
1821    /// Only present on Thread networks.
1822    pub thread_stable_network_data: Option<Vec<u8>>,
1823    /// The counters associated with border routing messages.
1824    ///
1825    /// Only present on Thread networks.
1826    pub thread_border_routing_counters: Option<BorderRoutingCounters>,
1827    /// The SRP server information.
1828    ///
1829    /// Only present on Thread networks.
1830    pub srp_server_info: Option<SrpServerInfo>,
1831    /// The DNS-SD server counters.
1832    ///
1833    /// Only present on Thread networks.
1834    pub dnssd_counters: Option<DnssdCounters>,
1835    /// The data associated with the leader of the currently associated Thread network.
1836    ///
1837    /// Only present on Thread networks.
1838    pub leader_data: Option<LeaderData>,
1839    /// The uptime of the current instance.
1840    ///
1841    /// Required.
1842    pub uptime: Option<i64>,
1843    /// Information about the NAT64
1844    ///
1845    /// Only present on Thread networks.
1846    pub nat64_info: Option<Nat64Info>,
1847    /// Information about the TREL interface, if available.
1848    ///
1849    /// Only present on Thread networks.
1850    pub trel_counters: Option<TrelCounters>,
1851    /// Information about the TREL peers, if available.
1852    ///
1853    /// Only present on Thread networks.
1854    pub trel_peers_info: Option<TrelPeersInfo>,
1855    /// Information about the Upstream DNS feature, if available.
1856    ///
1857    /// Only present on Thread networks.
1858    pub upstream_dns_info: Option<UpstreamDnsInfo>,
1859    /// Information about the DHCPv6 PD feature, if available.
1860    ///
1861    /// Only present on Thread networks.
1862    pub dhcp6pd_info: Option<Dhcp6PdInfo>,
1863    /// Link Metrics Manager related info, if available.
1864    ///
1865    /// Only present on Thread networks.
1866    pub link_metrics_entries: Option<Vec<LinkMetricsEntry>>,
1867    /// Counters related to border agent functionality.
1868    ///
1869    /// Only present on Thread networks.
1870    pub border_agent_counters: Option<fidl_fuchsia_lowpan_device__common::BorderAgentCounters>,
1871    /// Whether multi-AIL (Adjacent Infrastructure Link) scenario is detected.
1872    ///
1873    /// Only present on Thread networks.
1874    pub multi_ail_detected: Option<bool>,
1875    /// The Extended PAN ID of the currently associated Thread network. This 8-byte unique
1876    /// identifier is used to distinguish different Thread networks.
1877    ///
1878    /// Only present on Thread networks.
1879    pub extended_pan_id: Option<u64>,
1880    /// Thread Border Routing peers information.
1881    ///
1882    /// Only present on Thread networks.
1883    pub border_routing_peers: Option<Vec<BorderRoutingPeer>>,
1884    /// Thread Border Routing discovered routers by Border Routing Manager on the infrastructure link.
1885    ///
1886    /// Only present on Thread networks.
1887    pub border_routing_routers: Option<Vec<BorderRoutingRouter>>,
1888    /// Thread Active Operational Dataset.
1889    ///
1890    /// Only present on Thread networks.
1891    pub active_dataset: Option<OperationalDataset>,
1892    /// The multi radio link information associated with a neighbor with a given Extended Address.
1893    ///
1894    /// Only present on Thread networks.
1895    pub multiradio_neighbor_info: Option<Vec<MultiRadioNeighborInfo>>,
1896    /// Information regarding all active routers within the Thread network.
1897    ///
1898    /// Only present on Thread networks.
1899    pub router_info: Option<Vec<RouterInfo>>,
1900    /// Full Network Data received from the Leader.
1901    ///
1902    /// Only present on Thread networks.
1903    pub network_data: Option<NetworkData>,
1904    #[doc(hidden)]
1905    pub __source_breaking: fidl::marker::SourceBreaking,
1906}
1907
1908impl fidl::Persistable for Telemetry {}
1909
1910/// Represents a group of TREL related counters in the platform layer.
1911///
1912/// Derived from [`otPlatTrelCounters`](https://openthread.io/reference/struct/ot-plat-trel-counters).
1913#[derive(Clone, Debug, Default, PartialEq)]
1914pub struct TrelCounters {
1915    /// Sum of size of packets received through TREL.
1916    pub rx_bytes: Option<u64>,
1917    /// Number of packets received through TREL.
1918    pub rx_packets: Option<u64>,
1919    /// Sum of size of packets successfully transmitted through TREL.
1920    pub tx_bytes: Option<u64>,
1921    /// Number of packet transmission failures through TREL.
1922    pub tx_failure: Option<u64>,
1923    /// Number of packets successfully transmitted through TREL.
1924    pub tx_packets: Option<u64>,
1925    #[doc(hidden)]
1926    pub __source_breaking: fidl::marker::SourceBreaking,
1927}
1928
1929impl fidl::Persistable for TrelCounters {}
1930
1931/// Represents the TREL peer related info.
1932///
1933/// The info is available in OpenThread via https://openthread.io/reference/group/api-trel
1934/// More fields may be added per request.
1935#[derive(Clone, Debug, Default, PartialEq)]
1936pub struct TrelPeersInfo {
1937    /// Number of TREL peers for this Thread Border Router.
1938    ///
1939    /// Required.
1940    pub num_trel_peers: Option<u16>,
1941    #[doc(hidden)]
1942    pub __source_breaking: fidl::marker::SourceBreaking,
1943}
1944
1945impl fidl::Persistable for TrelPeersInfo {}
1946
1947/// Represents the count of queries, responses, failures handled by upstream DNS server
1948///
1949/// Derived from `otUpstreamDnsCounters`(https://openthread.io/reference/group/api-dnssd-server)
1950#[derive(Clone, Debug, Default, PartialEq)]
1951pub struct UpstreamDnsCounters {
1952    /// The number of queries forwarded
1953    ///
1954    /// Required.
1955    pub queries: Option<u32>,
1956    /// The number of responses forwarded
1957    ///
1958    /// Required.
1959    pub responses: Option<u32>,
1960    /// The number of upstream DNS failures
1961    ///
1962    /// Required.
1963    pub failures: Option<u32>,
1964    #[doc(hidden)]
1965    pub __source_breaking: fidl::marker::SourceBreaking,
1966}
1967
1968impl fidl::Persistable for UpstreamDnsCounters {}
1969
1970/// Represents the Upstream DNS related info.
1971///
1972/// The info is available in OpenThread via https://openthread.io/reference/group/api-dnssd-server
1973/// More fields may be added per request.
1974#[derive(Clone, Debug, Default, PartialEq)]
1975pub struct UpstreamDnsInfo {
1976    /// State of upstream DNS query.
1977    ///
1978    /// Required.
1979    pub upstream_dns_query_state: Option<UpstreamDnsQueryState>,
1980    #[doc(hidden)]
1981    pub __source_breaking: fidl::marker::SourceBreaking,
1982}
1983
1984impl fidl::Persistable for UpstreamDnsInfo {}
1985
1986/// Parameters for DeviceExtra::JoinNetwork command.
1987#[derive(Clone, Debug)]
1988pub enum JoinParams {
1989    /// Attempts to find and join a known pre-existing network.
1990    ProvisioningParameter(fidl_fuchsia_lowpan_device__common::ProvisioningParams),
1991    /// Attempts to find and join an unknown pre-existing network
1992    /// that is configured to accept and provision devices with
1993    /// the given shared secret, or PSKd. This allows new devices to
1994    /// join existing networks without knowing the credentials for
1995    /// the specific network.
1996    JoinerParameter(JoinerCommissioningParams),
1997    #[doc(hidden)]
1998    __SourceBreaking { unknown_ordinal: u64 },
1999}
2000
2001/// Pattern that matches an unknown `JoinParams` member.
2002#[macro_export]
2003macro_rules! JoinParamsUnknown {
2004    () => {
2005        _
2006    };
2007}
2008
2009// Custom PartialEq so that unknown variants are not equal to themselves.
2010impl PartialEq for JoinParams {
2011    fn eq(&self, other: &Self) -> bool {
2012        match (self, other) {
2013            (Self::ProvisioningParameter(x), Self::ProvisioningParameter(y)) => *x == *y,
2014            (Self::JoinerParameter(x), Self::JoinerParameter(y)) => *x == *y,
2015            _ => false,
2016        }
2017    }
2018}
2019
2020impl JoinParams {
2021    #[inline]
2022    pub fn ordinal(&self) -> u64 {
2023        match *self {
2024            Self::ProvisioningParameter(_) => 1,
2025            Self::JoinerParameter(_) => 2,
2026            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
2027        }
2028    }
2029
2030    #[inline]
2031    pub fn unknown_variant_for_testing() -> Self {
2032        Self::__SourceBreaking { unknown_ordinal: 0 }
2033    }
2034
2035    #[inline]
2036    pub fn is_unknown(&self) -> bool {
2037        match self {
2038            Self::__SourceBreaking { .. } => true,
2039            _ => false,
2040        }
2041    }
2042}
2043
2044impl fidl::Persistable for JoinParams {}
2045
2046/// Indicates the current status of the form/join operation.
2047///
2048/// Returned by [`ProvisioningMonitor.WatchProgress`].
2049#[derive(Clone, Debug)]
2050pub enum ProvisioningProgress {
2051    /// Approximate percent complete indication for a user interface.
2052    Progress(f32),
2053    /// The final Identity when the operation has completed successfully.
2054    Identity(fidl_fuchsia_lowpan_device__common::Identity),
2055    #[doc(hidden)]
2056    __SourceBreaking { unknown_ordinal: u64 },
2057}
2058
2059/// Pattern that matches an unknown `ProvisioningProgress` member.
2060#[macro_export]
2061macro_rules! ProvisioningProgressUnknown {
2062    () => {
2063        _
2064    };
2065}
2066
2067// Custom PartialEq so that unknown variants are not equal to themselves.
2068impl PartialEq for ProvisioningProgress {
2069    fn eq(&self, other: &Self) -> bool {
2070        match (self, other) {
2071            (Self::Progress(x), Self::Progress(y)) => *x == *y,
2072            (Self::Identity(x), Self::Identity(y)) => *x == *y,
2073            _ => false,
2074        }
2075    }
2076}
2077
2078impl ProvisioningProgress {
2079    #[inline]
2080    pub fn ordinal(&self) -> u64 {
2081        match *self {
2082            Self::Progress(_) => 1,
2083            Self::Identity(_) => 2,
2084            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
2085        }
2086    }
2087
2088    #[inline]
2089    pub fn unknown_variant_for_testing() -> Self {
2090        Self::__SourceBreaking { unknown_ordinal: 0 }
2091    }
2092
2093    #[inline]
2094    pub fn is_unknown(&self) -> bool {
2095        match self {
2096            Self::__SourceBreaking { .. } => true,
2097            _ => false,
2098        }
2099    }
2100}
2101
2102impl fidl::Persistable for ProvisioningProgress {}
2103
2104pub mod beacon_info_stream_ordinals {
2105    pub const NEXT: u64 = 0x367a557363a340b6;
2106}
2107
2108pub mod device_ordinals {
2109    pub const GET_SUPPORTED_CHANNELS: u64 = 0x2d8b969a9bd70f23;
2110}
2111
2112pub mod device_connector_ordinals {
2113    pub const CONNECT: u64 = 0x296896c9304836cd;
2114}
2115
2116pub mod device_extra_ordinals {
2117    pub const FORM_NETWORK: u64 = 0x6a8135f84bfc90e;
2118    pub const JOIN_NETWORK: u64 = 0x3ea583bab79f81c0;
2119    pub const START_NETWORK_SCAN: u64 = 0x6288c73b79188b40;
2120}
2121
2122pub mod device_extra_connector_ordinals {
2123    pub const CONNECT: u64 = 0x3fcb37e4226c81e9;
2124}
2125
2126pub mod device_route_ordinals {
2127    pub const REGISTER_ON_MESH_PREFIX: u64 = 0x2c4135231eb97f61;
2128    pub const UNREGISTER_ON_MESH_PREFIX: u64 = 0x82d5184028b797f;
2129    pub const REGISTER_EXTERNAL_ROUTE: u64 = 0x75f70f0fc34a5a73;
2130    pub const UNREGISTER_EXTERNAL_ROUTE: u64 = 0x3769be353b1d7088;
2131}
2132
2133pub mod device_route_connector_ordinals {
2134    pub const CONNECT: u64 = 0x19cd5fdcb971f4ac;
2135}
2136
2137pub mod device_route_extra_ordinals {
2138    pub const GET_LOCAL_ON_MESH_PREFIXES: u64 = 0xf192c43311c811;
2139    pub const GET_LOCAL_EXTERNAL_ROUTES: u64 = 0x5a688c2e62c766a6;
2140}
2141
2142pub mod device_route_extra_connector_ordinals {
2143    pub const CONNECT: u64 = 0x12f72df7b1348fe2;
2144}
2145
2146pub mod legacy_joining_ordinals {
2147    pub const MAKE_JOINABLE: u64 = 0x1739a6ae36d5c5aa;
2148}
2149
2150pub mod legacy_joining_connector_ordinals {
2151    pub const CONNECT: u64 = 0x3c8dfeb943bb8d06;
2152}
2153
2154pub mod provisioning_monitor_ordinals {
2155    pub const WATCH_PROGRESS: u64 = 0xc35336fc43ac0c;
2156}
2157
2158pub mod telemetry_provider_ordinals {
2159    pub const GET_TELEMETRY: u64 = 0xc34f2fff7dacc41;
2160}
2161
2162pub mod telemetry_provider_connector_ordinals {
2163    pub const CONNECT: u64 = 0x24a5bf1be73e2fad;
2164}
2165
2166mod internal {
2167    use super::*;
2168    unsafe impl fidl::encoding::TypeMarker for Dhcp6PdState {
2169        type Owned = Self;
2170
2171        #[inline(always)]
2172        fn inline_align(_context: fidl::encoding::Context) -> usize {
2173            std::mem::align_of::<u32>()
2174        }
2175
2176        #[inline(always)]
2177        fn inline_size(_context: fidl::encoding::Context) -> usize {
2178            std::mem::size_of::<u32>()
2179        }
2180
2181        #[inline(always)]
2182        fn encode_is_copy() -> bool {
2183            false
2184        }
2185
2186        #[inline(always)]
2187        fn decode_is_copy() -> bool {
2188            false
2189        }
2190    }
2191
2192    impl fidl::encoding::ValueTypeMarker for Dhcp6PdState {
2193        type Borrowed<'a> = Self;
2194        #[inline(always)]
2195        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2196            *value
2197        }
2198    }
2199
2200    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for Dhcp6PdState {
2201        #[inline]
2202        unsafe fn encode(
2203            self,
2204            encoder: &mut fidl::encoding::Encoder<'_, D>,
2205            offset: usize,
2206            _depth: fidl::encoding::Depth,
2207        ) -> fidl::Result<()> {
2208            encoder.debug_check_bounds::<Self>(offset);
2209            encoder.write_num(self.into_primitive(), offset);
2210            Ok(())
2211        }
2212    }
2213
2214    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Dhcp6PdState {
2215        #[inline(always)]
2216        fn new_empty() -> Self {
2217            Self::unknown()
2218        }
2219
2220        #[inline]
2221        unsafe fn decode(
2222            &mut self,
2223            decoder: &mut fidl::encoding::Decoder<'_, D>,
2224            offset: usize,
2225            _depth: fidl::encoding::Depth,
2226        ) -> fidl::Result<()> {
2227            decoder.debug_check_bounds::<Self>(offset);
2228            let prim = decoder.read_num::<u32>(offset);
2229
2230            *self = Self::from_primitive_allow_unknown(prim);
2231            Ok(())
2232        }
2233    }
2234    unsafe impl fidl::encoding::TypeMarker for Nat64State {
2235        type Owned = Self;
2236
2237        #[inline(always)]
2238        fn inline_align(_context: fidl::encoding::Context) -> usize {
2239            std::mem::align_of::<u32>()
2240        }
2241
2242        #[inline(always)]
2243        fn inline_size(_context: fidl::encoding::Context) -> usize {
2244            std::mem::size_of::<u32>()
2245        }
2246
2247        #[inline(always)]
2248        fn encode_is_copy() -> bool {
2249            false
2250        }
2251
2252        #[inline(always)]
2253        fn decode_is_copy() -> bool {
2254            false
2255        }
2256    }
2257
2258    impl fidl::encoding::ValueTypeMarker for Nat64State {
2259        type Borrowed<'a> = Self;
2260        #[inline(always)]
2261        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2262            *value
2263        }
2264    }
2265
2266    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for Nat64State {
2267        #[inline]
2268        unsafe fn encode(
2269            self,
2270            encoder: &mut fidl::encoding::Encoder<'_, D>,
2271            offset: usize,
2272            _depth: fidl::encoding::Depth,
2273        ) -> fidl::Result<()> {
2274            encoder.debug_check_bounds::<Self>(offset);
2275            encoder.write_num(self.into_primitive(), offset);
2276            Ok(())
2277        }
2278    }
2279
2280    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Nat64State {
2281        #[inline(always)]
2282        fn new_empty() -> Self {
2283            Self::unknown()
2284        }
2285
2286        #[inline]
2287        unsafe fn decode(
2288            &mut self,
2289            decoder: &mut fidl::encoding::Decoder<'_, D>,
2290            offset: usize,
2291            _depth: fidl::encoding::Depth,
2292        ) -> fidl::Result<()> {
2293            decoder.debug_check_bounds::<Self>(offset);
2294            let prim = decoder.read_num::<u32>(offset);
2295
2296            *self = Self::from_primitive_allow_unknown(prim);
2297            Ok(())
2298        }
2299    }
2300    unsafe impl fidl::encoding::TypeMarker for ProvisionError {
2301        type Owned = Self;
2302
2303        #[inline(always)]
2304        fn inline_align(_context: fidl::encoding::Context) -> usize {
2305            std::mem::align_of::<i32>()
2306        }
2307
2308        #[inline(always)]
2309        fn inline_size(_context: fidl::encoding::Context) -> usize {
2310            std::mem::size_of::<i32>()
2311        }
2312
2313        #[inline(always)]
2314        fn encode_is_copy() -> bool {
2315            false
2316        }
2317
2318        #[inline(always)]
2319        fn decode_is_copy() -> bool {
2320            false
2321        }
2322    }
2323
2324    impl fidl::encoding::ValueTypeMarker for ProvisionError {
2325        type Borrowed<'a> = Self;
2326        #[inline(always)]
2327        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2328            *value
2329        }
2330    }
2331
2332    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for ProvisionError {
2333        #[inline]
2334        unsafe fn encode(
2335            self,
2336            encoder: &mut fidl::encoding::Encoder<'_, D>,
2337            offset: usize,
2338            _depth: fidl::encoding::Depth,
2339        ) -> fidl::Result<()> {
2340            encoder.debug_check_bounds::<Self>(offset);
2341            encoder.write_num(self.into_primitive(), offset);
2342            Ok(())
2343        }
2344    }
2345
2346    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ProvisionError {
2347        #[inline(always)]
2348        fn new_empty() -> Self {
2349            Self::unknown()
2350        }
2351
2352        #[inline]
2353        unsafe fn decode(
2354            &mut self,
2355            decoder: &mut fidl::encoding::Decoder<'_, D>,
2356            offset: usize,
2357            _depth: fidl::encoding::Depth,
2358        ) -> fidl::Result<()> {
2359            decoder.debug_check_bounds::<Self>(offset);
2360            let prim = decoder.read_num::<i32>(offset);
2361
2362            *self = Self::from_primitive_allow_unknown(prim);
2363            Ok(())
2364        }
2365    }
2366    unsafe impl fidl::encoding::TypeMarker for RoutePreference {
2367        type Owned = Self;
2368
2369        #[inline(always)]
2370        fn inline_align(_context: fidl::encoding::Context) -> usize {
2371            std::mem::align_of::<i8>()
2372        }
2373
2374        #[inline(always)]
2375        fn inline_size(_context: fidl::encoding::Context) -> usize {
2376            std::mem::size_of::<i8>()
2377        }
2378
2379        #[inline(always)]
2380        fn encode_is_copy() -> bool {
2381            true
2382        }
2383
2384        #[inline(always)]
2385        fn decode_is_copy() -> bool {
2386            false
2387        }
2388    }
2389
2390    impl fidl::encoding::ValueTypeMarker for RoutePreference {
2391        type Borrowed<'a> = Self;
2392        #[inline(always)]
2393        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2394            *value
2395        }
2396    }
2397
2398    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
2399        for RoutePreference
2400    {
2401        #[inline]
2402        unsafe fn encode(
2403            self,
2404            encoder: &mut fidl::encoding::Encoder<'_, D>,
2405            offset: usize,
2406            _depth: fidl::encoding::Depth,
2407        ) -> fidl::Result<()> {
2408            encoder.debug_check_bounds::<Self>(offset);
2409            encoder.write_num(self.into_primitive(), offset);
2410            Ok(())
2411        }
2412    }
2413
2414    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for RoutePreference {
2415        #[inline(always)]
2416        fn new_empty() -> Self {
2417            Self::Low
2418        }
2419
2420        #[inline]
2421        unsafe fn decode(
2422            &mut self,
2423            decoder: &mut fidl::encoding::Decoder<'_, D>,
2424            offset: usize,
2425            _depth: fidl::encoding::Depth,
2426        ) -> fidl::Result<()> {
2427            decoder.debug_check_bounds::<Self>(offset);
2428            let prim = decoder.read_num::<i8>(offset);
2429
2430            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
2431            Ok(())
2432        }
2433    }
2434    unsafe impl fidl::encoding::TypeMarker for SrpServerAddressMode {
2435        type Owned = Self;
2436
2437        #[inline(always)]
2438        fn inline_align(_context: fidl::encoding::Context) -> usize {
2439            std::mem::align_of::<u32>()
2440        }
2441
2442        #[inline(always)]
2443        fn inline_size(_context: fidl::encoding::Context) -> usize {
2444            std::mem::size_of::<u32>()
2445        }
2446
2447        #[inline(always)]
2448        fn encode_is_copy() -> bool {
2449            true
2450        }
2451
2452        #[inline(always)]
2453        fn decode_is_copy() -> bool {
2454            false
2455        }
2456    }
2457
2458    impl fidl::encoding::ValueTypeMarker for SrpServerAddressMode {
2459        type Borrowed<'a> = Self;
2460        #[inline(always)]
2461        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2462            *value
2463        }
2464    }
2465
2466    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
2467        for SrpServerAddressMode
2468    {
2469        #[inline]
2470        unsafe fn encode(
2471            self,
2472            encoder: &mut fidl::encoding::Encoder<'_, D>,
2473            offset: usize,
2474            _depth: fidl::encoding::Depth,
2475        ) -> fidl::Result<()> {
2476            encoder.debug_check_bounds::<Self>(offset);
2477            encoder.write_num(self.into_primitive(), offset);
2478            Ok(())
2479        }
2480    }
2481
2482    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SrpServerAddressMode {
2483        #[inline(always)]
2484        fn new_empty() -> Self {
2485            Self::Unicast
2486        }
2487
2488        #[inline]
2489        unsafe fn decode(
2490            &mut self,
2491            decoder: &mut fidl::encoding::Decoder<'_, D>,
2492            offset: usize,
2493            _depth: fidl::encoding::Depth,
2494        ) -> fidl::Result<()> {
2495            decoder.debug_check_bounds::<Self>(offset);
2496            let prim = decoder.read_num::<u32>(offset);
2497
2498            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
2499            Ok(())
2500        }
2501    }
2502    unsafe impl fidl::encoding::TypeMarker for SrpServerState {
2503        type Owned = Self;
2504
2505        #[inline(always)]
2506        fn inline_align(_context: fidl::encoding::Context) -> usize {
2507            std::mem::align_of::<u32>()
2508        }
2509
2510        #[inline(always)]
2511        fn inline_size(_context: fidl::encoding::Context) -> usize {
2512            std::mem::size_of::<u32>()
2513        }
2514
2515        #[inline(always)]
2516        fn encode_is_copy() -> bool {
2517            true
2518        }
2519
2520        #[inline(always)]
2521        fn decode_is_copy() -> bool {
2522            false
2523        }
2524    }
2525
2526    impl fidl::encoding::ValueTypeMarker for SrpServerState {
2527        type Borrowed<'a> = Self;
2528        #[inline(always)]
2529        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2530            *value
2531        }
2532    }
2533
2534    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for SrpServerState {
2535        #[inline]
2536        unsafe fn encode(
2537            self,
2538            encoder: &mut fidl::encoding::Encoder<'_, D>,
2539            offset: usize,
2540            _depth: fidl::encoding::Depth,
2541        ) -> fidl::Result<()> {
2542            encoder.debug_check_bounds::<Self>(offset);
2543            encoder.write_num(self.into_primitive(), offset);
2544            Ok(())
2545        }
2546    }
2547
2548    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SrpServerState {
2549        #[inline(always)]
2550        fn new_empty() -> Self {
2551            Self::Disabled
2552        }
2553
2554        #[inline]
2555        unsafe fn decode(
2556            &mut self,
2557            decoder: &mut fidl::encoding::Decoder<'_, D>,
2558            offset: usize,
2559            _depth: fidl::encoding::Depth,
2560        ) -> fidl::Result<()> {
2561            decoder.debug_check_bounds::<Self>(offset);
2562            let prim = decoder.read_num::<u32>(offset);
2563
2564            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
2565            Ok(())
2566        }
2567    }
2568    unsafe impl fidl::encoding::TypeMarker for UpstreamDnsQueryState {
2569        type Owned = Self;
2570
2571        #[inline(always)]
2572        fn inline_align(_context: fidl::encoding::Context) -> usize {
2573            std::mem::align_of::<u32>()
2574        }
2575
2576        #[inline(always)]
2577        fn inline_size(_context: fidl::encoding::Context) -> usize {
2578            std::mem::size_of::<u32>()
2579        }
2580
2581        #[inline(always)]
2582        fn encode_is_copy() -> bool {
2583            false
2584        }
2585
2586        #[inline(always)]
2587        fn decode_is_copy() -> bool {
2588            false
2589        }
2590    }
2591
2592    impl fidl::encoding::ValueTypeMarker for UpstreamDnsQueryState {
2593        type Borrowed<'a> = Self;
2594        #[inline(always)]
2595        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2596            *value
2597        }
2598    }
2599
2600    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
2601        for UpstreamDnsQueryState
2602    {
2603        #[inline]
2604        unsafe fn encode(
2605            self,
2606            encoder: &mut fidl::encoding::Encoder<'_, D>,
2607            offset: usize,
2608            _depth: fidl::encoding::Depth,
2609        ) -> fidl::Result<()> {
2610            encoder.debug_check_bounds::<Self>(offset);
2611            encoder.write_num(self.into_primitive(), offset);
2612            Ok(())
2613        }
2614    }
2615
2616    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for UpstreamDnsQueryState {
2617        #[inline(always)]
2618        fn new_empty() -> Self {
2619            Self::unknown()
2620        }
2621
2622        #[inline]
2623        unsafe fn decode(
2624            &mut self,
2625            decoder: &mut fidl::encoding::Decoder<'_, D>,
2626            offset: usize,
2627            _depth: fidl::encoding::Depth,
2628        ) -> fidl::Result<()> {
2629            decoder.debug_check_bounds::<Self>(offset);
2630            let prim = decoder.read_num::<u32>(offset);
2631
2632            *self = Self::from_primitive_allow_unknown(prim);
2633            Ok(())
2634        }
2635    }
2636
2637    impl fidl::encoding::ValueTypeMarker for BeaconInfoStreamNextResponse {
2638        type Borrowed<'a> = &'a Self;
2639        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2640            value
2641        }
2642    }
2643
2644    unsafe impl fidl::encoding::TypeMarker for BeaconInfoStreamNextResponse {
2645        type Owned = Self;
2646
2647        #[inline(always)]
2648        fn inline_align(_context: fidl::encoding::Context) -> usize {
2649            8
2650        }
2651
2652        #[inline(always)]
2653        fn inline_size(_context: fidl::encoding::Context) -> usize {
2654            16
2655        }
2656    }
2657
2658    unsafe impl<D: fidl::encoding::ResourceDialect>
2659        fidl::encoding::Encode<BeaconInfoStreamNextResponse, D> for &BeaconInfoStreamNextResponse
2660    {
2661        #[inline]
2662        unsafe fn encode(
2663            self,
2664            encoder: &mut fidl::encoding::Encoder<'_, D>,
2665            offset: usize,
2666            _depth: fidl::encoding::Depth,
2667        ) -> fidl::Result<()> {
2668            encoder.debug_check_bounds::<BeaconInfoStreamNextResponse>(offset);
2669            // Delegate to tuple encoding.
2670            fidl::encoding::Encode::<BeaconInfoStreamNextResponse, D>::encode(
2671                (
2672                    <fidl::encoding::Vector<BeaconInfo, 32> as fidl::encoding::ValueTypeMarker>::borrow(&self.beacons),
2673                ),
2674                encoder, offset, _depth
2675            )
2676        }
2677    }
2678    unsafe impl<
2679        D: fidl::encoding::ResourceDialect,
2680        T0: fidl::encoding::Encode<fidl::encoding::Vector<BeaconInfo, 32>, D>,
2681    > fidl::encoding::Encode<BeaconInfoStreamNextResponse, D> for (T0,)
2682    {
2683        #[inline]
2684        unsafe fn encode(
2685            self,
2686            encoder: &mut fidl::encoding::Encoder<'_, D>,
2687            offset: usize,
2688            depth: fidl::encoding::Depth,
2689        ) -> fidl::Result<()> {
2690            encoder.debug_check_bounds::<BeaconInfoStreamNextResponse>(offset);
2691            // Zero out padding regions. There's no need to apply masks
2692            // because the unmasked parts will be overwritten by fields.
2693            // Write the fields.
2694            self.0.encode(encoder, offset + 0, depth)?;
2695            Ok(())
2696        }
2697    }
2698
2699    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2700        for BeaconInfoStreamNextResponse
2701    {
2702        #[inline(always)]
2703        fn new_empty() -> Self {
2704            Self { beacons: fidl::new_empty!(fidl::encoding::Vector<BeaconInfo, 32>, D) }
2705        }
2706
2707        #[inline]
2708        unsafe fn decode(
2709            &mut self,
2710            decoder: &mut fidl::encoding::Decoder<'_, D>,
2711            offset: usize,
2712            _depth: fidl::encoding::Depth,
2713        ) -> fidl::Result<()> {
2714            decoder.debug_check_bounds::<Self>(offset);
2715            // Verify that padding bytes are zero.
2716            fidl::decode!(fidl::encoding::Vector<BeaconInfo, 32>, D, &mut self.beacons, decoder, offset + 0, _depth)?;
2717            Ok(())
2718        }
2719    }
2720
2721    impl fidl::encoding::ValueTypeMarker for DeviceGetSupportedChannelsResponse {
2722        type Borrowed<'a> = &'a Self;
2723        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2724            value
2725        }
2726    }
2727
2728    unsafe impl fidl::encoding::TypeMarker for DeviceGetSupportedChannelsResponse {
2729        type Owned = Self;
2730
2731        #[inline(always)]
2732        fn inline_align(_context: fidl::encoding::Context) -> usize {
2733            8
2734        }
2735
2736        #[inline(always)]
2737        fn inline_size(_context: fidl::encoding::Context) -> usize {
2738            16
2739        }
2740    }
2741
2742    unsafe impl<D: fidl::encoding::ResourceDialect>
2743        fidl::encoding::Encode<DeviceGetSupportedChannelsResponse, D>
2744        for &DeviceGetSupportedChannelsResponse
2745    {
2746        #[inline]
2747        unsafe fn encode(
2748            self,
2749            encoder: &mut fidl::encoding::Encoder<'_, D>,
2750            offset: usize,
2751            _depth: fidl::encoding::Depth,
2752        ) -> fidl::Result<()> {
2753            encoder.debug_check_bounds::<DeviceGetSupportedChannelsResponse>(offset);
2754            // Delegate to tuple encoding.
2755            fidl::encoding::Encode::<DeviceGetSupportedChannelsResponse, D>::encode(
2756                (
2757                    <fidl::encoding::Vector<ChannelInfo, 200> as fidl::encoding::ValueTypeMarker>::borrow(&self.channels_info),
2758                ),
2759                encoder, offset, _depth
2760            )
2761        }
2762    }
2763    unsafe impl<
2764        D: fidl::encoding::ResourceDialect,
2765        T0: fidl::encoding::Encode<fidl::encoding::Vector<ChannelInfo, 200>, D>,
2766    > fidl::encoding::Encode<DeviceGetSupportedChannelsResponse, D> for (T0,)
2767    {
2768        #[inline]
2769        unsafe fn encode(
2770            self,
2771            encoder: &mut fidl::encoding::Encoder<'_, D>,
2772            offset: usize,
2773            depth: fidl::encoding::Depth,
2774        ) -> fidl::Result<()> {
2775            encoder.debug_check_bounds::<DeviceGetSupportedChannelsResponse>(offset);
2776            // Zero out padding regions. There's no need to apply masks
2777            // because the unmasked parts will be overwritten by fields.
2778            // Write the fields.
2779            self.0.encode(encoder, offset + 0, depth)?;
2780            Ok(())
2781        }
2782    }
2783
2784    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2785        for DeviceGetSupportedChannelsResponse
2786    {
2787        #[inline(always)]
2788        fn new_empty() -> Self {
2789            Self { channels_info: fidl::new_empty!(fidl::encoding::Vector<ChannelInfo, 200>, D) }
2790        }
2791
2792        #[inline]
2793        unsafe fn decode(
2794            &mut self,
2795            decoder: &mut fidl::encoding::Decoder<'_, D>,
2796            offset: usize,
2797            _depth: fidl::encoding::Depth,
2798        ) -> fidl::Result<()> {
2799            decoder.debug_check_bounds::<Self>(offset);
2800            // Verify that padding bytes are zero.
2801            fidl::decode!(fidl::encoding::Vector<ChannelInfo, 200>, D, &mut self.channels_info, decoder, offset + 0, _depth)?;
2802            Ok(())
2803        }
2804    }
2805
2806    impl fidl::encoding::ValueTypeMarker for DeviceRouteExtraGetLocalExternalRoutesResponse {
2807        type Borrowed<'a> = &'a Self;
2808        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2809            value
2810        }
2811    }
2812
2813    unsafe impl fidl::encoding::TypeMarker for DeviceRouteExtraGetLocalExternalRoutesResponse {
2814        type Owned = Self;
2815
2816        #[inline(always)]
2817        fn inline_align(_context: fidl::encoding::Context) -> usize {
2818            8
2819        }
2820
2821        #[inline(always)]
2822        fn inline_size(_context: fidl::encoding::Context) -> usize {
2823            16
2824        }
2825    }
2826
2827    unsafe impl<D: fidl::encoding::ResourceDialect>
2828        fidl::encoding::Encode<DeviceRouteExtraGetLocalExternalRoutesResponse, D>
2829        for &DeviceRouteExtraGetLocalExternalRoutesResponse
2830    {
2831        #[inline]
2832        unsafe fn encode(
2833            self,
2834            encoder: &mut fidl::encoding::Encoder<'_, D>,
2835            offset: usize,
2836            _depth: fidl::encoding::Depth,
2837        ) -> fidl::Result<()> {
2838            encoder.debug_check_bounds::<DeviceRouteExtraGetLocalExternalRoutesResponse>(offset);
2839            // Delegate to tuple encoding.
2840            fidl::encoding::Encode::<DeviceRouteExtraGetLocalExternalRoutesResponse, D>::encode(
2841                (
2842                    <fidl::encoding::Vector<ExternalRoute, 32> as fidl::encoding::ValueTypeMarker>::borrow(&self.external_routes),
2843                ),
2844                encoder, offset, _depth
2845            )
2846        }
2847    }
2848    unsafe impl<
2849        D: fidl::encoding::ResourceDialect,
2850        T0: fidl::encoding::Encode<fidl::encoding::Vector<ExternalRoute, 32>, D>,
2851    > fidl::encoding::Encode<DeviceRouteExtraGetLocalExternalRoutesResponse, D> for (T0,)
2852    {
2853        #[inline]
2854        unsafe fn encode(
2855            self,
2856            encoder: &mut fidl::encoding::Encoder<'_, D>,
2857            offset: usize,
2858            depth: fidl::encoding::Depth,
2859        ) -> fidl::Result<()> {
2860            encoder.debug_check_bounds::<DeviceRouteExtraGetLocalExternalRoutesResponse>(offset);
2861            // Zero out padding regions. There's no need to apply masks
2862            // because the unmasked parts will be overwritten by fields.
2863            // Write the fields.
2864            self.0.encode(encoder, offset + 0, depth)?;
2865            Ok(())
2866        }
2867    }
2868
2869    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2870        for DeviceRouteExtraGetLocalExternalRoutesResponse
2871    {
2872        #[inline(always)]
2873        fn new_empty() -> Self {
2874            Self { external_routes: fidl::new_empty!(fidl::encoding::Vector<ExternalRoute, 32>, D) }
2875        }
2876
2877        #[inline]
2878        unsafe fn decode(
2879            &mut self,
2880            decoder: &mut fidl::encoding::Decoder<'_, D>,
2881            offset: usize,
2882            _depth: fidl::encoding::Depth,
2883        ) -> fidl::Result<()> {
2884            decoder.debug_check_bounds::<Self>(offset);
2885            // Verify that padding bytes are zero.
2886            fidl::decode!(fidl::encoding::Vector<ExternalRoute, 32>, D, &mut self.external_routes, decoder, offset + 0, _depth)?;
2887            Ok(())
2888        }
2889    }
2890
2891    impl fidl::encoding::ValueTypeMarker for DeviceRouteExtraGetLocalOnMeshPrefixesResponse {
2892        type Borrowed<'a> = &'a Self;
2893        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2894            value
2895        }
2896    }
2897
2898    unsafe impl fidl::encoding::TypeMarker for DeviceRouteExtraGetLocalOnMeshPrefixesResponse {
2899        type Owned = Self;
2900
2901        #[inline(always)]
2902        fn inline_align(_context: fidl::encoding::Context) -> usize {
2903            8
2904        }
2905
2906        #[inline(always)]
2907        fn inline_size(_context: fidl::encoding::Context) -> usize {
2908            16
2909        }
2910    }
2911
2912    unsafe impl<D: fidl::encoding::ResourceDialect>
2913        fidl::encoding::Encode<DeviceRouteExtraGetLocalOnMeshPrefixesResponse, D>
2914        for &DeviceRouteExtraGetLocalOnMeshPrefixesResponse
2915    {
2916        #[inline]
2917        unsafe fn encode(
2918            self,
2919            encoder: &mut fidl::encoding::Encoder<'_, D>,
2920            offset: usize,
2921            _depth: fidl::encoding::Depth,
2922        ) -> fidl::Result<()> {
2923            encoder.debug_check_bounds::<DeviceRouteExtraGetLocalOnMeshPrefixesResponse>(offset);
2924            // Delegate to tuple encoding.
2925            fidl::encoding::Encode::<DeviceRouteExtraGetLocalOnMeshPrefixesResponse, D>::encode(
2926                (
2927                    <fidl::encoding::Vector<OnMeshPrefix, 32> as fidl::encoding::ValueTypeMarker>::borrow(&self.prefixes),
2928                ),
2929                encoder, offset, _depth
2930            )
2931        }
2932    }
2933    unsafe impl<
2934        D: fidl::encoding::ResourceDialect,
2935        T0: fidl::encoding::Encode<fidl::encoding::Vector<OnMeshPrefix, 32>, D>,
2936    > fidl::encoding::Encode<DeviceRouteExtraGetLocalOnMeshPrefixesResponse, D> for (T0,)
2937    {
2938        #[inline]
2939        unsafe fn encode(
2940            self,
2941            encoder: &mut fidl::encoding::Encoder<'_, D>,
2942            offset: usize,
2943            depth: fidl::encoding::Depth,
2944        ) -> fidl::Result<()> {
2945            encoder.debug_check_bounds::<DeviceRouteExtraGetLocalOnMeshPrefixesResponse>(offset);
2946            // Zero out padding regions. There's no need to apply masks
2947            // because the unmasked parts will be overwritten by fields.
2948            // Write the fields.
2949            self.0.encode(encoder, offset + 0, depth)?;
2950            Ok(())
2951        }
2952    }
2953
2954    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2955        for DeviceRouteExtraGetLocalOnMeshPrefixesResponse
2956    {
2957        #[inline(always)]
2958        fn new_empty() -> Self {
2959            Self { prefixes: fidl::new_empty!(fidl::encoding::Vector<OnMeshPrefix, 32>, D) }
2960        }
2961
2962        #[inline]
2963        unsafe fn decode(
2964            &mut self,
2965            decoder: &mut fidl::encoding::Decoder<'_, D>,
2966            offset: usize,
2967            _depth: fidl::encoding::Depth,
2968        ) -> fidl::Result<()> {
2969            decoder.debug_check_bounds::<Self>(offset);
2970            // Verify that padding bytes are zero.
2971            fidl::decode!(fidl::encoding::Vector<OnMeshPrefix, 32>, D, &mut self.prefixes, decoder, offset + 0, _depth)?;
2972            Ok(())
2973        }
2974    }
2975
2976    impl fidl::encoding::ValueTypeMarker for DeviceRouteRegisterExternalRouteRequest {
2977        type Borrowed<'a> = &'a Self;
2978        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2979            value
2980        }
2981    }
2982
2983    unsafe impl fidl::encoding::TypeMarker for DeviceRouteRegisterExternalRouteRequest {
2984        type Owned = Self;
2985
2986        #[inline(always)]
2987        fn inline_align(_context: fidl::encoding::Context) -> usize {
2988            8
2989        }
2990
2991        #[inline(always)]
2992        fn inline_size(_context: fidl::encoding::Context) -> usize {
2993            16
2994        }
2995    }
2996
2997    unsafe impl<D: fidl::encoding::ResourceDialect>
2998        fidl::encoding::Encode<DeviceRouteRegisterExternalRouteRequest, D>
2999        for &DeviceRouteRegisterExternalRouteRequest
3000    {
3001        #[inline]
3002        unsafe fn encode(
3003            self,
3004            encoder: &mut fidl::encoding::Encoder<'_, D>,
3005            offset: usize,
3006            _depth: fidl::encoding::Depth,
3007        ) -> fidl::Result<()> {
3008            encoder.debug_check_bounds::<DeviceRouteRegisterExternalRouteRequest>(offset);
3009            // Delegate to tuple encoding.
3010            fidl::encoding::Encode::<DeviceRouteRegisterExternalRouteRequest, D>::encode(
3011                (<ExternalRoute as fidl::encoding::ValueTypeMarker>::borrow(&self.external_route),),
3012                encoder,
3013                offset,
3014                _depth,
3015            )
3016        }
3017    }
3018    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<ExternalRoute, D>>
3019        fidl::encoding::Encode<DeviceRouteRegisterExternalRouteRequest, D> for (T0,)
3020    {
3021        #[inline]
3022        unsafe fn encode(
3023            self,
3024            encoder: &mut fidl::encoding::Encoder<'_, D>,
3025            offset: usize,
3026            depth: fidl::encoding::Depth,
3027        ) -> fidl::Result<()> {
3028            encoder.debug_check_bounds::<DeviceRouteRegisterExternalRouteRequest>(offset);
3029            // Zero out padding regions. There's no need to apply masks
3030            // because the unmasked parts will be overwritten by fields.
3031            // Write the fields.
3032            self.0.encode(encoder, offset + 0, depth)?;
3033            Ok(())
3034        }
3035    }
3036
3037    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
3038        for DeviceRouteRegisterExternalRouteRequest
3039    {
3040        #[inline(always)]
3041        fn new_empty() -> Self {
3042            Self { external_route: fidl::new_empty!(ExternalRoute, D) }
3043        }
3044
3045        #[inline]
3046        unsafe fn decode(
3047            &mut self,
3048            decoder: &mut fidl::encoding::Decoder<'_, D>,
3049            offset: usize,
3050            _depth: fidl::encoding::Depth,
3051        ) -> fidl::Result<()> {
3052            decoder.debug_check_bounds::<Self>(offset);
3053            // Verify that padding bytes are zero.
3054            fidl::decode!(ExternalRoute, D, &mut self.external_route, decoder, offset + 0, _depth)?;
3055            Ok(())
3056        }
3057    }
3058
3059    impl fidl::encoding::ValueTypeMarker for DeviceRouteRegisterOnMeshPrefixRequest {
3060        type Borrowed<'a> = &'a Self;
3061        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3062            value
3063        }
3064    }
3065
3066    unsafe impl fidl::encoding::TypeMarker for DeviceRouteRegisterOnMeshPrefixRequest {
3067        type Owned = Self;
3068
3069        #[inline(always)]
3070        fn inline_align(_context: fidl::encoding::Context) -> usize {
3071            8
3072        }
3073
3074        #[inline(always)]
3075        fn inline_size(_context: fidl::encoding::Context) -> usize {
3076            16
3077        }
3078    }
3079
3080    unsafe impl<D: fidl::encoding::ResourceDialect>
3081        fidl::encoding::Encode<DeviceRouteRegisterOnMeshPrefixRequest, D>
3082        for &DeviceRouteRegisterOnMeshPrefixRequest
3083    {
3084        #[inline]
3085        unsafe fn encode(
3086            self,
3087            encoder: &mut fidl::encoding::Encoder<'_, D>,
3088            offset: usize,
3089            _depth: fidl::encoding::Depth,
3090        ) -> fidl::Result<()> {
3091            encoder.debug_check_bounds::<DeviceRouteRegisterOnMeshPrefixRequest>(offset);
3092            // Delegate to tuple encoding.
3093            fidl::encoding::Encode::<DeviceRouteRegisterOnMeshPrefixRequest, D>::encode(
3094                (<OnMeshPrefix as fidl::encoding::ValueTypeMarker>::borrow(&self.prefix),),
3095                encoder,
3096                offset,
3097                _depth,
3098            )
3099        }
3100    }
3101    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<OnMeshPrefix, D>>
3102        fidl::encoding::Encode<DeviceRouteRegisterOnMeshPrefixRequest, D> for (T0,)
3103    {
3104        #[inline]
3105        unsafe fn encode(
3106            self,
3107            encoder: &mut fidl::encoding::Encoder<'_, D>,
3108            offset: usize,
3109            depth: fidl::encoding::Depth,
3110        ) -> fidl::Result<()> {
3111            encoder.debug_check_bounds::<DeviceRouteRegisterOnMeshPrefixRequest>(offset);
3112            // Zero out padding regions. There's no need to apply masks
3113            // because the unmasked parts will be overwritten by fields.
3114            // Write the fields.
3115            self.0.encode(encoder, offset + 0, depth)?;
3116            Ok(())
3117        }
3118    }
3119
3120    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
3121        for DeviceRouteRegisterOnMeshPrefixRequest
3122    {
3123        #[inline(always)]
3124        fn new_empty() -> Self {
3125            Self { prefix: fidl::new_empty!(OnMeshPrefix, D) }
3126        }
3127
3128        #[inline]
3129        unsafe fn decode(
3130            &mut self,
3131            decoder: &mut fidl::encoding::Decoder<'_, D>,
3132            offset: usize,
3133            _depth: fidl::encoding::Depth,
3134        ) -> fidl::Result<()> {
3135            decoder.debug_check_bounds::<Self>(offset);
3136            // Verify that padding bytes are zero.
3137            fidl::decode!(OnMeshPrefix, D, &mut self.prefix, decoder, offset + 0, _depth)?;
3138            Ok(())
3139        }
3140    }
3141
3142    impl fidl::encoding::ValueTypeMarker for DeviceRouteUnregisterExternalRouteRequest {
3143        type Borrowed<'a> = &'a Self;
3144        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3145            value
3146        }
3147    }
3148
3149    unsafe impl fidl::encoding::TypeMarker for DeviceRouteUnregisterExternalRouteRequest {
3150        type Owned = Self;
3151
3152        #[inline(always)]
3153        fn inline_align(_context: fidl::encoding::Context) -> usize {
3154            1
3155        }
3156
3157        #[inline(always)]
3158        fn inline_size(_context: fidl::encoding::Context) -> usize {
3159            17
3160        }
3161    }
3162
3163    unsafe impl<D: fidl::encoding::ResourceDialect>
3164        fidl::encoding::Encode<DeviceRouteUnregisterExternalRouteRequest, D>
3165        for &DeviceRouteUnregisterExternalRouteRequest
3166    {
3167        #[inline]
3168        unsafe fn encode(
3169            self,
3170            encoder: &mut fidl::encoding::Encoder<'_, D>,
3171            offset: usize,
3172            _depth: fidl::encoding::Depth,
3173        ) -> fidl::Result<()> {
3174            encoder.debug_check_bounds::<DeviceRouteUnregisterExternalRouteRequest>(offset);
3175            // Delegate to tuple encoding.
3176            fidl::encoding::Encode::<DeviceRouteUnregisterExternalRouteRequest, D>::encode(
3177                (
3178                    <fidl_fuchsia_net__common::Ipv6AddressWithPrefix as fidl::encoding::ValueTypeMarker>::borrow(&self.subnet),
3179                ),
3180                encoder, offset, _depth
3181            )
3182        }
3183    }
3184    unsafe impl<
3185        D: fidl::encoding::ResourceDialect,
3186        T0: fidl::encoding::Encode<fidl_fuchsia_net__common::Ipv6AddressWithPrefix, D>,
3187    > fidl::encoding::Encode<DeviceRouteUnregisterExternalRouteRequest, D> for (T0,)
3188    {
3189        #[inline]
3190        unsafe fn encode(
3191            self,
3192            encoder: &mut fidl::encoding::Encoder<'_, D>,
3193            offset: usize,
3194            depth: fidl::encoding::Depth,
3195        ) -> fidl::Result<()> {
3196            encoder.debug_check_bounds::<DeviceRouteUnregisterExternalRouteRequest>(offset);
3197            // Zero out padding regions. There's no need to apply masks
3198            // because the unmasked parts will be overwritten by fields.
3199            // Write the fields.
3200            self.0.encode(encoder, offset + 0, depth)?;
3201            Ok(())
3202        }
3203    }
3204
3205    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
3206        for DeviceRouteUnregisterExternalRouteRequest
3207    {
3208        #[inline(always)]
3209        fn new_empty() -> Self {
3210            Self { subnet: fidl::new_empty!(fidl_fuchsia_net__common::Ipv6AddressWithPrefix, D) }
3211        }
3212
3213        #[inline]
3214        unsafe fn decode(
3215            &mut self,
3216            decoder: &mut fidl::encoding::Decoder<'_, D>,
3217            offset: usize,
3218            _depth: fidl::encoding::Depth,
3219        ) -> fidl::Result<()> {
3220            decoder.debug_check_bounds::<Self>(offset);
3221            // Verify that padding bytes are zero.
3222            fidl::decode!(
3223                fidl_fuchsia_net__common::Ipv6AddressWithPrefix,
3224                D,
3225                &mut self.subnet,
3226                decoder,
3227                offset + 0,
3228                _depth
3229            )?;
3230            Ok(())
3231        }
3232    }
3233
3234    impl fidl::encoding::ValueTypeMarker for DeviceRouteUnregisterOnMeshPrefixRequest {
3235        type Borrowed<'a> = &'a Self;
3236        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3237            value
3238        }
3239    }
3240
3241    unsafe impl fidl::encoding::TypeMarker for DeviceRouteUnregisterOnMeshPrefixRequest {
3242        type Owned = Self;
3243
3244        #[inline(always)]
3245        fn inline_align(_context: fidl::encoding::Context) -> usize {
3246            1
3247        }
3248
3249        #[inline(always)]
3250        fn inline_size(_context: fidl::encoding::Context) -> usize {
3251            17
3252        }
3253    }
3254
3255    unsafe impl<D: fidl::encoding::ResourceDialect>
3256        fidl::encoding::Encode<DeviceRouteUnregisterOnMeshPrefixRequest, D>
3257        for &DeviceRouteUnregisterOnMeshPrefixRequest
3258    {
3259        #[inline]
3260        unsafe fn encode(
3261            self,
3262            encoder: &mut fidl::encoding::Encoder<'_, D>,
3263            offset: usize,
3264            _depth: fidl::encoding::Depth,
3265        ) -> fidl::Result<()> {
3266            encoder.debug_check_bounds::<DeviceRouteUnregisterOnMeshPrefixRequest>(offset);
3267            // Delegate to tuple encoding.
3268            fidl::encoding::Encode::<DeviceRouteUnregisterOnMeshPrefixRequest, D>::encode(
3269                (
3270                    <fidl_fuchsia_net__common::Ipv6AddressWithPrefix as fidl::encoding::ValueTypeMarker>::borrow(&self.subnet),
3271                ),
3272                encoder, offset, _depth
3273            )
3274        }
3275    }
3276    unsafe impl<
3277        D: fidl::encoding::ResourceDialect,
3278        T0: fidl::encoding::Encode<fidl_fuchsia_net__common::Ipv6AddressWithPrefix, D>,
3279    > fidl::encoding::Encode<DeviceRouteUnregisterOnMeshPrefixRequest, D> for (T0,)
3280    {
3281        #[inline]
3282        unsafe fn encode(
3283            self,
3284            encoder: &mut fidl::encoding::Encoder<'_, D>,
3285            offset: usize,
3286            depth: fidl::encoding::Depth,
3287        ) -> fidl::Result<()> {
3288            encoder.debug_check_bounds::<DeviceRouteUnregisterOnMeshPrefixRequest>(offset);
3289            // Zero out padding regions. There's no need to apply masks
3290            // because the unmasked parts will be overwritten by fields.
3291            // Write the fields.
3292            self.0.encode(encoder, offset + 0, depth)?;
3293            Ok(())
3294        }
3295    }
3296
3297    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
3298        for DeviceRouteUnregisterOnMeshPrefixRequest
3299    {
3300        #[inline(always)]
3301        fn new_empty() -> Self {
3302            Self { subnet: fidl::new_empty!(fidl_fuchsia_net__common::Ipv6AddressWithPrefix, D) }
3303        }
3304
3305        #[inline]
3306        unsafe fn decode(
3307            &mut self,
3308            decoder: &mut fidl::encoding::Decoder<'_, D>,
3309            offset: usize,
3310            _depth: fidl::encoding::Depth,
3311        ) -> fidl::Result<()> {
3312            decoder.debug_check_bounds::<Self>(offset);
3313            // Verify that padding bytes are zero.
3314            fidl::decode!(
3315                fidl_fuchsia_net__common::Ipv6AddressWithPrefix,
3316                D,
3317                &mut self.subnet,
3318                decoder,
3319                offset + 0,
3320                _depth
3321            )?;
3322            Ok(())
3323        }
3324    }
3325
3326    impl fidl::encoding::ValueTypeMarker for LegacyJoiningMakeJoinableRequest {
3327        type Borrowed<'a> = &'a Self;
3328        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3329            value
3330        }
3331    }
3332
3333    unsafe impl fidl::encoding::TypeMarker for LegacyJoiningMakeJoinableRequest {
3334        type Owned = Self;
3335
3336        #[inline(always)]
3337        fn inline_align(_context: fidl::encoding::Context) -> usize {
3338            8
3339        }
3340
3341        #[inline(always)]
3342        fn inline_size(_context: fidl::encoding::Context) -> usize {
3343            16
3344        }
3345    }
3346
3347    unsafe impl<D: fidl::encoding::ResourceDialect>
3348        fidl::encoding::Encode<LegacyJoiningMakeJoinableRequest, D>
3349        for &LegacyJoiningMakeJoinableRequest
3350    {
3351        #[inline]
3352        unsafe fn encode(
3353            self,
3354            encoder: &mut fidl::encoding::Encoder<'_, D>,
3355            offset: usize,
3356            _depth: fidl::encoding::Depth,
3357        ) -> fidl::Result<()> {
3358            encoder.debug_check_bounds::<LegacyJoiningMakeJoinableRequest>(offset);
3359            unsafe {
3360                // Copy the object into the buffer.
3361                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
3362                (buf_ptr as *mut LegacyJoiningMakeJoinableRequest)
3363                    .write_unaligned((self as *const LegacyJoiningMakeJoinableRequest).read());
3364                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
3365                // done second because the memcpy will write garbage to these bytes.
3366                let padding_ptr = buf_ptr.offset(8) as *mut u64;
3367                let padding_mask = 0xffffffffffff0000u64;
3368                padding_ptr.write_unaligned(padding_ptr.read_unaligned() & !padding_mask);
3369            }
3370            Ok(())
3371        }
3372    }
3373    unsafe impl<
3374        D: fidl::encoding::ResourceDialect,
3375        T0: fidl::encoding::Encode<i64, D>,
3376        T1: fidl::encoding::Encode<u16, D>,
3377    > fidl::encoding::Encode<LegacyJoiningMakeJoinableRequest, D> for (T0, T1)
3378    {
3379        #[inline]
3380        unsafe fn encode(
3381            self,
3382            encoder: &mut fidl::encoding::Encoder<'_, D>,
3383            offset: usize,
3384            depth: fidl::encoding::Depth,
3385        ) -> fidl::Result<()> {
3386            encoder.debug_check_bounds::<LegacyJoiningMakeJoinableRequest>(offset);
3387            // Zero out padding regions. There's no need to apply masks
3388            // because the unmasked parts will be overwritten by fields.
3389            unsafe {
3390                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(8);
3391                (ptr as *mut u64).write_unaligned(0);
3392            }
3393            // Write the fields.
3394            self.0.encode(encoder, offset + 0, depth)?;
3395            self.1.encode(encoder, offset + 8, depth)?;
3396            Ok(())
3397        }
3398    }
3399
3400    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
3401        for LegacyJoiningMakeJoinableRequest
3402    {
3403        #[inline(always)]
3404        fn new_empty() -> Self {
3405            Self { duration: fidl::new_empty!(i64, D), port: fidl::new_empty!(u16, D) }
3406        }
3407
3408        #[inline]
3409        unsafe fn decode(
3410            &mut self,
3411            decoder: &mut fidl::encoding::Decoder<'_, D>,
3412            offset: usize,
3413            _depth: fidl::encoding::Depth,
3414        ) -> fidl::Result<()> {
3415            decoder.debug_check_bounds::<Self>(offset);
3416            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
3417            // Verify that padding bytes are zero.
3418            let ptr = unsafe { buf_ptr.offset(8) };
3419            let padval = unsafe { (ptr as *const u64).read_unaligned() };
3420            let mask = 0xffffffffffff0000u64;
3421            let maskedval = padval & mask;
3422            if maskedval != 0 {
3423                return Err(fidl::Error::NonZeroPadding {
3424                    padding_start: offset + 8 + ((mask as u64).trailing_zeros() / 8) as usize,
3425                });
3426            }
3427            // Copy from the buffer into the object.
3428            unsafe {
3429                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 16);
3430            }
3431            Ok(())
3432        }
3433    }
3434
3435    impl fidl::encoding::ValueTypeMarker for ProvisioningMonitorWatchProgressResponse {
3436        type Borrowed<'a> = &'a Self;
3437        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3438            value
3439        }
3440    }
3441
3442    unsafe impl fidl::encoding::TypeMarker for ProvisioningMonitorWatchProgressResponse {
3443        type Owned = Self;
3444
3445        #[inline(always)]
3446        fn inline_align(_context: fidl::encoding::Context) -> usize {
3447            8
3448        }
3449
3450        #[inline(always)]
3451        fn inline_size(_context: fidl::encoding::Context) -> usize {
3452            16
3453        }
3454    }
3455
3456    unsafe impl<D: fidl::encoding::ResourceDialect>
3457        fidl::encoding::Encode<ProvisioningMonitorWatchProgressResponse, D>
3458        for &ProvisioningMonitorWatchProgressResponse
3459    {
3460        #[inline]
3461        unsafe fn encode(
3462            self,
3463            encoder: &mut fidl::encoding::Encoder<'_, D>,
3464            offset: usize,
3465            _depth: fidl::encoding::Depth,
3466        ) -> fidl::Result<()> {
3467            encoder.debug_check_bounds::<ProvisioningMonitorWatchProgressResponse>(offset);
3468            // Delegate to tuple encoding.
3469            fidl::encoding::Encode::<ProvisioningMonitorWatchProgressResponse, D>::encode(
3470                (<ProvisioningProgress as fidl::encoding::ValueTypeMarker>::borrow(&self.progress),),
3471                encoder,
3472                offset,
3473                _depth,
3474            )
3475        }
3476    }
3477    unsafe impl<
3478        D: fidl::encoding::ResourceDialect,
3479        T0: fidl::encoding::Encode<ProvisioningProgress, D>,
3480    > fidl::encoding::Encode<ProvisioningMonitorWatchProgressResponse, D> for (T0,)
3481    {
3482        #[inline]
3483        unsafe fn encode(
3484            self,
3485            encoder: &mut fidl::encoding::Encoder<'_, D>,
3486            offset: usize,
3487            depth: fidl::encoding::Depth,
3488        ) -> fidl::Result<()> {
3489            encoder.debug_check_bounds::<ProvisioningMonitorWatchProgressResponse>(offset);
3490            // Zero out padding regions. There's no need to apply masks
3491            // because the unmasked parts will be overwritten by fields.
3492            // Write the fields.
3493            self.0.encode(encoder, offset + 0, depth)?;
3494            Ok(())
3495        }
3496    }
3497
3498    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
3499        for ProvisioningMonitorWatchProgressResponse
3500    {
3501        #[inline(always)]
3502        fn new_empty() -> Self {
3503            Self { progress: fidl::new_empty!(ProvisioningProgress, D) }
3504        }
3505
3506        #[inline]
3507        unsafe fn decode(
3508            &mut self,
3509            decoder: &mut fidl::encoding::Decoder<'_, D>,
3510            offset: usize,
3511            _depth: fidl::encoding::Depth,
3512        ) -> fidl::Result<()> {
3513            decoder.debug_check_bounds::<Self>(offset);
3514            // Verify that padding bytes are zero.
3515            fidl::decode!(
3516                ProvisioningProgress,
3517                D,
3518                &mut self.progress,
3519                decoder,
3520                offset + 0,
3521                _depth
3522            )?;
3523            Ok(())
3524        }
3525    }
3526
3527    impl fidl::encoding::ValueTypeMarker for TelemetryProviderGetTelemetryResponse {
3528        type Borrowed<'a> = &'a Self;
3529        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3530            value
3531        }
3532    }
3533
3534    unsafe impl fidl::encoding::TypeMarker for TelemetryProviderGetTelemetryResponse {
3535        type Owned = Self;
3536
3537        #[inline(always)]
3538        fn inline_align(_context: fidl::encoding::Context) -> usize {
3539            8
3540        }
3541
3542        #[inline(always)]
3543        fn inline_size(_context: fidl::encoding::Context) -> usize {
3544            16
3545        }
3546    }
3547
3548    unsafe impl<D: fidl::encoding::ResourceDialect>
3549        fidl::encoding::Encode<TelemetryProviderGetTelemetryResponse, D>
3550        for &TelemetryProviderGetTelemetryResponse
3551    {
3552        #[inline]
3553        unsafe fn encode(
3554            self,
3555            encoder: &mut fidl::encoding::Encoder<'_, D>,
3556            offset: usize,
3557            _depth: fidl::encoding::Depth,
3558        ) -> fidl::Result<()> {
3559            encoder.debug_check_bounds::<TelemetryProviderGetTelemetryResponse>(offset);
3560            // Delegate to tuple encoding.
3561            fidl::encoding::Encode::<TelemetryProviderGetTelemetryResponse, D>::encode(
3562                (<Telemetry as fidl::encoding::ValueTypeMarker>::borrow(&self.telemetry),),
3563                encoder,
3564                offset,
3565                _depth,
3566            )
3567        }
3568    }
3569    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<Telemetry, D>>
3570        fidl::encoding::Encode<TelemetryProviderGetTelemetryResponse, D> for (T0,)
3571    {
3572        #[inline]
3573        unsafe fn encode(
3574            self,
3575            encoder: &mut fidl::encoding::Encoder<'_, D>,
3576            offset: usize,
3577            depth: fidl::encoding::Depth,
3578        ) -> fidl::Result<()> {
3579            encoder.debug_check_bounds::<TelemetryProviderGetTelemetryResponse>(offset);
3580            // Zero out padding regions. There's no need to apply masks
3581            // because the unmasked parts will be overwritten by fields.
3582            // Write the fields.
3583            self.0.encode(encoder, offset + 0, depth)?;
3584            Ok(())
3585        }
3586    }
3587
3588    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
3589        for TelemetryProviderGetTelemetryResponse
3590    {
3591        #[inline(always)]
3592        fn new_empty() -> Self {
3593            Self { telemetry: fidl::new_empty!(Telemetry, D) }
3594        }
3595
3596        #[inline]
3597        unsafe fn decode(
3598            &mut self,
3599            decoder: &mut fidl::encoding::Decoder<'_, D>,
3600            offset: usize,
3601            _depth: fidl::encoding::Depth,
3602        ) -> fidl::Result<()> {
3603            decoder.debug_check_bounds::<Self>(offset);
3604            // Verify that padding bytes are zero.
3605            fidl::decode!(Telemetry, D, &mut self.telemetry, decoder, offset + 0, _depth)?;
3606            Ok(())
3607        }
3608    }
3609
3610    impl BeaconInfo {
3611        #[inline(always)]
3612        fn max_ordinal_present(&self) -> u64 {
3613            if let Some(_) = self.lqi {
3614                return 4;
3615            }
3616            if let Some(_) = self.rssi {
3617                return 3;
3618            }
3619            if let Some(_) = self.identity {
3620                return 2;
3621            }
3622            if let Some(_) = self.address {
3623                return 1;
3624            }
3625            0
3626        }
3627    }
3628
3629    impl fidl::encoding::ValueTypeMarker for BeaconInfo {
3630        type Borrowed<'a> = &'a Self;
3631        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3632            value
3633        }
3634    }
3635
3636    unsafe impl fidl::encoding::TypeMarker for BeaconInfo {
3637        type Owned = Self;
3638
3639        #[inline(always)]
3640        fn inline_align(_context: fidl::encoding::Context) -> usize {
3641            8
3642        }
3643
3644        #[inline(always)]
3645        fn inline_size(_context: fidl::encoding::Context) -> usize {
3646            16
3647        }
3648    }
3649
3650    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<BeaconInfo, D>
3651        for &BeaconInfo
3652    {
3653        unsafe fn encode(
3654            self,
3655            encoder: &mut fidl::encoding::Encoder<'_, D>,
3656            offset: usize,
3657            mut depth: fidl::encoding::Depth,
3658        ) -> fidl::Result<()> {
3659            encoder.debug_check_bounds::<BeaconInfo>(offset);
3660            // Vector header
3661            let max_ordinal: u64 = self.max_ordinal_present();
3662            encoder.write_num(max_ordinal, offset);
3663            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
3664            // Calling encoder.out_of_line_offset(0) is not allowed.
3665            if max_ordinal == 0 {
3666                return Ok(());
3667            }
3668            depth.increment()?;
3669            let envelope_size = 8;
3670            let bytes_len = max_ordinal as usize * envelope_size;
3671            #[allow(unused_variables)]
3672            let offset = encoder.out_of_line_offset(bytes_len);
3673            let mut _prev_end_offset: usize = 0;
3674            if 1 > max_ordinal {
3675                return Ok(());
3676            }
3677
3678            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3679            // are envelope_size bytes.
3680            let cur_offset: usize = (1 - 1) * envelope_size;
3681
3682            // Zero reserved fields.
3683            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3684
3685            // Safety:
3686            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3687            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3688            //   envelope_size bytes, there is always sufficient room.
3689            fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_lowpan__common::MacAddress, D>(
3690            self.address.as_ref().map(<fidl_fuchsia_lowpan__common::MacAddress as fidl::encoding::ValueTypeMarker>::borrow),
3691            encoder, offset + cur_offset, depth
3692        )?;
3693
3694            _prev_end_offset = cur_offset + envelope_size;
3695            if 2 > max_ordinal {
3696                return Ok(());
3697            }
3698
3699            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3700            // are envelope_size bytes.
3701            let cur_offset: usize = (2 - 1) * envelope_size;
3702
3703            // Zero reserved fields.
3704            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3705
3706            // Safety:
3707            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3708            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3709            //   envelope_size bytes, there is always sufficient room.
3710            fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_lowpan_device__common::Identity, D>(
3711            self.identity.as_ref().map(<fidl_fuchsia_lowpan_device__common::Identity as fidl::encoding::ValueTypeMarker>::borrow),
3712            encoder, offset + cur_offset, depth
3713        )?;
3714
3715            _prev_end_offset = cur_offset + envelope_size;
3716            if 3 > max_ordinal {
3717                return Ok(());
3718            }
3719
3720            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3721            // are envelope_size bytes.
3722            let cur_offset: usize = (3 - 1) * envelope_size;
3723
3724            // Zero reserved fields.
3725            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3726
3727            // Safety:
3728            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3729            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3730            //   envelope_size bytes, there is always sufficient room.
3731            fidl::encoding::encode_in_envelope_optional::<i8, D>(
3732                self.rssi.as_ref().map(<i8 as fidl::encoding::ValueTypeMarker>::borrow),
3733                encoder,
3734                offset + cur_offset,
3735                depth,
3736            )?;
3737
3738            _prev_end_offset = cur_offset + envelope_size;
3739            if 4 > max_ordinal {
3740                return Ok(());
3741            }
3742
3743            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3744            // are envelope_size bytes.
3745            let cur_offset: usize = (4 - 1) * envelope_size;
3746
3747            // Zero reserved fields.
3748            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3749
3750            // Safety:
3751            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3752            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3753            //   envelope_size bytes, there is always sufficient room.
3754            fidl::encoding::encode_in_envelope_optional::<u8, D>(
3755                self.lqi.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
3756                encoder,
3757                offset + cur_offset,
3758                depth,
3759            )?;
3760
3761            _prev_end_offset = cur_offset + envelope_size;
3762
3763            Ok(())
3764        }
3765    }
3766
3767    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for BeaconInfo {
3768        #[inline(always)]
3769        fn new_empty() -> Self {
3770            Self::default()
3771        }
3772
3773        unsafe fn decode(
3774            &mut self,
3775            decoder: &mut fidl::encoding::Decoder<'_, D>,
3776            offset: usize,
3777            mut depth: fidl::encoding::Depth,
3778        ) -> fidl::Result<()> {
3779            decoder.debug_check_bounds::<Self>(offset);
3780            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
3781                None => return Err(fidl::Error::NotNullable),
3782                Some(len) => len,
3783            };
3784            // Calling decoder.out_of_line_offset(0) is not allowed.
3785            if len == 0 {
3786                return Ok(());
3787            };
3788            depth.increment()?;
3789            let envelope_size = 8;
3790            let bytes_len = len * envelope_size;
3791            let offset = decoder.out_of_line_offset(bytes_len)?;
3792            // Decode the envelope for each type.
3793            let mut _next_ordinal_to_read = 0;
3794            let mut next_offset = offset;
3795            let end_offset = offset + bytes_len;
3796            _next_ordinal_to_read += 1;
3797            if next_offset >= end_offset {
3798                return Ok(());
3799            }
3800
3801            // Decode unknown envelopes for gaps in ordinals.
3802            while _next_ordinal_to_read < 1 {
3803                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3804                _next_ordinal_to_read += 1;
3805                next_offset += envelope_size;
3806            }
3807
3808            let next_out_of_line = decoder.next_out_of_line();
3809            let handles_before = decoder.remaining_handles();
3810            if let Some((inlined, num_bytes, num_handles)) =
3811                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3812            {
3813                let member_inline_size = <fidl_fuchsia_lowpan__common::MacAddress as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3814                if inlined != (member_inline_size <= 4) {
3815                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3816                }
3817                let inner_offset;
3818                let mut inner_depth = depth.clone();
3819                if inlined {
3820                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3821                    inner_offset = next_offset;
3822                } else {
3823                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3824                    inner_depth.increment()?;
3825                }
3826                let val_ref = self.address.get_or_insert_with(|| {
3827                    fidl::new_empty!(fidl_fuchsia_lowpan__common::MacAddress, D)
3828                });
3829                fidl::decode!(
3830                    fidl_fuchsia_lowpan__common::MacAddress,
3831                    D,
3832                    val_ref,
3833                    decoder,
3834                    inner_offset,
3835                    inner_depth
3836                )?;
3837                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3838                {
3839                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3840                }
3841                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3842                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3843                }
3844            }
3845
3846            next_offset += envelope_size;
3847            _next_ordinal_to_read += 1;
3848            if next_offset >= end_offset {
3849                return Ok(());
3850            }
3851
3852            // Decode unknown envelopes for gaps in ordinals.
3853            while _next_ordinal_to_read < 2 {
3854                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3855                _next_ordinal_to_read += 1;
3856                next_offset += envelope_size;
3857            }
3858
3859            let next_out_of_line = decoder.next_out_of_line();
3860            let handles_before = decoder.remaining_handles();
3861            if let Some((inlined, num_bytes, num_handles)) =
3862                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3863            {
3864                let member_inline_size = <fidl_fuchsia_lowpan_device__common::Identity as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3865                if inlined != (member_inline_size <= 4) {
3866                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3867                }
3868                let inner_offset;
3869                let mut inner_depth = depth.clone();
3870                if inlined {
3871                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3872                    inner_offset = next_offset;
3873                } else {
3874                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3875                    inner_depth.increment()?;
3876                }
3877                let val_ref = self.identity.get_or_insert_with(|| {
3878                    fidl::new_empty!(fidl_fuchsia_lowpan_device__common::Identity, D)
3879                });
3880                fidl::decode!(
3881                    fidl_fuchsia_lowpan_device__common::Identity,
3882                    D,
3883                    val_ref,
3884                    decoder,
3885                    inner_offset,
3886                    inner_depth
3887                )?;
3888                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3889                {
3890                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3891                }
3892                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3893                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3894                }
3895            }
3896
3897            next_offset += envelope_size;
3898            _next_ordinal_to_read += 1;
3899            if next_offset >= end_offset {
3900                return Ok(());
3901            }
3902
3903            // Decode unknown envelopes for gaps in ordinals.
3904            while _next_ordinal_to_read < 3 {
3905                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3906                _next_ordinal_to_read += 1;
3907                next_offset += envelope_size;
3908            }
3909
3910            let next_out_of_line = decoder.next_out_of_line();
3911            let handles_before = decoder.remaining_handles();
3912            if let Some((inlined, num_bytes, num_handles)) =
3913                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3914            {
3915                let member_inline_size =
3916                    <i8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3917                if inlined != (member_inline_size <= 4) {
3918                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3919                }
3920                let inner_offset;
3921                let mut inner_depth = depth.clone();
3922                if inlined {
3923                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3924                    inner_offset = next_offset;
3925                } else {
3926                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3927                    inner_depth.increment()?;
3928                }
3929                let val_ref = self.rssi.get_or_insert_with(|| fidl::new_empty!(i8, D));
3930                fidl::decode!(i8, D, val_ref, decoder, inner_offset, inner_depth)?;
3931                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3932                {
3933                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3934                }
3935                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3936                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3937                }
3938            }
3939
3940            next_offset += envelope_size;
3941            _next_ordinal_to_read += 1;
3942            if next_offset >= end_offset {
3943                return Ok(());
3944            }
3945
3946            // Decode unknown envelopes for gaps in ordinals.
3947            while _next_ordinal_to_read < 4 {
3948                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3949                _next_ordinal_to_read += 1;
3950                next_offset += envelope_size;
3951            }
3952
3953            let next_out_of_line = decoder.next_out_of_line();
3954            let handles_before = decoder.remaining_handles();
3955            if let Some((inlined, num_bytes, num_handles)) =
3956                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3957            {
3958                let member_inline_size =
3959                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3960                if inlined != (member_inline_size <= 4) {
3961                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3962                }
3963                let inner_offset;
3964                let mut inner_depth = depth.clone();
3965                if inlined {
3966                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3967                    inner_offset = next_offset;
3968                } else {
3969                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3970                    inner_depth.increment()?;
3971                }
3972                let val_ref = self.lqi.get_or_insert_with(|| fidl::new_empty!(u8, D));
3973                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
3974                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3975                {
3976                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3977                }
3978                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3979                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3980                }
3981            }
3982
3983            next_offset += envelope_size;
3984
3985            // Decode the remaining unknown envelopes.
3986            while next_offset < end_offset {
3987                _next_ordinal_to_read += 1;
3988                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3989                next_offset += envelope_size;
3990            }
3991
3992            Ok(())
3993        }
3994    }
3995
3996    impl BorderRouterConfig {
3997        #[inline(always)]
3998        fn max_ordinal_present(&self) -> u64 {
3999            if let Some(_) = self.rloc16 {
4000                return 12;
4001            }
4002            if let Some(_) = self.dp {
4003                return 11;
4004            }
4005            if let Some(_) = self.nd_dns {
4006                return 10;
4007            }
4008            if let Some(_) = self.stable {
4009                return 9;
4010            }
4011            if let Some(_) = self.on_mesh {
4012                return 8;
4013            }
4014            if let Some(_) = self.default_route {
4015                return 7;
4016            }
4017            if let Some(_) = self.configure {
4018                return 6;
4019            }
4020            if let Some(_) = self.dhcp {
4021                return 5;
4022            }
4023            if let Some(_) = self.slaac {
4024                return 4;
4025            }
4026            if let Some(_) = self.preferred {
4027                return 3;
4028            }
4029            if let Some(_) = self.preference {
4030                return 2;
4031            }
4032            if let Some(_) = self.prefix {
4033                return 1;
4034            }
4035            0
4036        }
4037    }
4038
4039    impl fidl::encoding::ValueTypeMarker for BorderRouterConfig {
4040        type Borrowed<'a> = &'a Self;
4041        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4042            value
4043        }
4044    }
4045
4046    unsafe impl fidl::encoding::TypeMarker for BorderRouterConfig {
4047        type Owned = Self;
4048
4049        #[inline(always)]
4050        fn inline_align(_context: fidl::encoding::Context) -> usize {
4051            8
4052        }
4053
4054        #[inline(always)]
4055        fn inline_size(_context: fidl::encoding::Context) -> usize {
4056            16
4057        }
4058    }
4059
4060    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<BorderRouterConfig, D>
4061        for &BorderRouterConfig
4062    {
4063        unsafe fn encode(
4064            self,
4065            encoder: &mut fidl::encoding::Encoder<'_, D>,
4066            offset: usize,
4067            mut depth: fidl::encoding::Depth,
4068        ) -> fidl::Result<()> {
4069            encoder.debug_check_bounds::<BorderRouterConfig>(offset);
4070            // Vector header
4071            let max_ordinal: u64 = self.max_ordinal_present();
4072            encoder.write_num(max_ordinal, offset);
4073            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
4074            // Calling encoder.out_of_line_offset(0) is not allowed.
4075            if max_ordinal == 0 {
4076                return Ok(());
4077            }
4078            depth.increment()?;
4079            let envelope_size = 8;
4080            let bytes_len = max_ordinal as usize * envelope_size;
4081            #[allow(unused_variables)]
4082            let offset = encoder.out_of_line_offset(bytes_len);
4083            let mut _prev_end_offset: usize = 0;
4084            if 1 > max_ordinal {
4085                return Ok(());
4086            }
4087
4088            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4089            // are envelope_size bytes.
4090            let cur_offset: usize = (1 - 1) * envelope_size;
4091
4092            // Zero reserved fields.
4093            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4094
4095            // Safety:
4096            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4097            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4098            //   envelope_size bytes, there is always sufficient room.
4099            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<64>, D>(
4100                self.prefix.as_ref().map(
4101                    <fidl::encoding::BoundedString<64> as fidl::encoding::ValueTypeMarker>::borrow,
4102                ),
4103                encoder,
4104                offset + cur_offset,
4105                depth,
4106            )?;
4107
4108            _prev_end_offset = cur_offset + envelope_size;
4109            if 2 > max_ordinal {
4110                return Ok(());
4111            }
4112
4113            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4114            // are envelope_size bytes.
4115            let cur_offset: usize = (2 - 1) * envelope_size;
4116
4117            // Zero reserved fields.
4118            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4119
4120            // Safety:
4121            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4122            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4123            //   envelope_size bytes, there is always sufficient room.
4124            fidl::encoding::encode_in_envelope_optional::<i8, D>(
4125                self.preference.as_ref().map(<i8 as fidl::encoding::ValueTypeMarker>::borrow),
4126                encoder,
4127                offset + cur_offset,
4128                depth,
4129            )?;
4130
4131            _prev_end_offset = cur_offset + envelope_size;
4132            if 3 > max_ordinal {
4133                return Ok(());
4134            }
4135
4136            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4137            // are envelope_size bytes.
4138            let cur_offset: usize = (3 - 1) * envelope_size;
4139
4140            // Zero reserved fields.
4141            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4142
4143            // Safety:
4144            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4145            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4146            //   envelope_size bytes, there is always sufficient room.
4147            fidl::encoding::encode_in_envelope_optional::<bool, D>(
4148                self.preferred.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
4149                encoder,
4150                offset + cur_offset,
4151                depth,
4152            )?;
4153
4154            _prev_end_offset = cur_offset + envelope_size;
4155            if 4 > max_ordinal {
4156                return Ok(());
4157            }
4158
4159            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4160            // are envelope_size bytes.
4161            let cur_offset: usize = (4 - 1) * envelope_size;
4162
4163            // Zero reserved fields.
4164            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4165
4166            // Safety:
4167            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4168            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4169            //   envelope_size bytes, there is always sufficient room.
4170            fidl::encoding::encode_in_envelope_optional::<bool, D>(
4171                self.slaac.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
4172                encoder,
4173                offset + cur_offset,
4174                depth,
4175            )?;
4176
4177            _prev_end_offset = cur_offset + envelope_size;
4178            if 5 > max_ordinal {
4179                return Ok(());
4180            }
4181
4182            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4183            // are envelope_size bytes.
4184            let cur_offset: usize = (5 - 1) * envelope_size;
4185
4186            // Zero reserved fields.
4187            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4188
4189            // Safety:
4190            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4191            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4192            //   envelope_size bytes, there is always sufficient room.
4193            fidl::encoding::encode_in_envelope_optional::<bool, D>(
4194                self.dhcp.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
4195                encoder,
4196                offset + cur_offset,
4197                depth,
4198            )?;
4199
4200            _prev_end_offset = cur_offset + envelope_size;
4201            if 6 > max_ordinal {
4202                return Ok(());
4203            }
4204
4205            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4206            // are envelope_size bytes.
4207            let cur_offset: usize = (6 - 1) * envelope_size;
4208
4209            // Zero reserved fields.
4210            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4211
4212            // Safety:
4213            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4214            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4215            //   envelope_size bytes, there is always sufficient room.
4216            fidl::encoding::encode_in_envelope_optional::<bool, D>(
4217                self.configure.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
4218                encoder,
4219                offset + cur_offset,
4220                depth,
4221            )?;
4222
4223            _prev_end_offset = cur_offset + envelope_size;
4224            if 7 > max_ordinal {
4225                return Ok(());
4226            }
4227
4228            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4229            // are envelope_size bytes.
4230            let cur_offset: usize = (7 - 1) * envelope_size;
4231
4232            // Zero reserved fields.
4233            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4234
4235            // Safety:
4236            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4237            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4238            //   envelope_size bytes, there is always sufficient room.
4239            fidl::encoding::encode_in_envelope_optional::<bool, D>(
4240                self.default_route.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
4241                encoder,
4242                offset + cur_offset,
4243                depth,
4244            )?;
4245
4246            _prev_end_offset = cur_offset + envelope_size;
4247            if 8 > max_ordinal {
4248                return Ok(());
4249            }
4250
4251            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4252            // are envelope_size bytes.
4253            let cur_offset: usize = (8 - 1) * envelope_size;
4254
4255            // Zero reserved fields.
4256            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4257
4258            // Safety:
4259            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4260            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4261            //   envelope_size bytes, there is always sufficient room.
4262            fidl::encoding::encode_in_envelope_optional::<bool, D>(
4263                self.on_mesh.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
4264                encoder,
4265                offset + cur_offset,
4266                depth,
4267            )?;
4268
4269            _prev_end_offset = cur_offset + envelope_size;
4270            if 9 > max_ordinal {
4271                return Ok(());
4272            }
4273
4274            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4275            // are envelope_size bytes.
4276            let cur_offset: usize = (9 - 1) * envelope_size;
4277
4278            // Zero reserved fields.
4279            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4280
4281            // Safety:
4282            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4283            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4284            //   envelope_size bytes, there is always sufficient room.
4285            fidl::encoding::encode_in_envelope_optional::<bool, D>(
4286                self.stable.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
4287                encoder,
4288                offset + cur_offset,
4289                depth,
4290            )?;
4291
4292            _prev_end_offset = cur_offset + envelope_size;
4293            if 10 > max_ordinal {
4294                return Ok(());
4295            }
4296
4297            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4298            // are envelope_size bytes.
4299            let cur_offset: usize = (10 - 1) * envelope_size;
4300
4301            // Zero reserved fields.
4302            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4303
4304            // Safety:
4305            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4306            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4307            //   envelope_size bytes, there is always sufficient room.
4308            fidl::encoding::encode_in_envelope_optional::<bool, D>(
4309                self.nd_dns.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
4310                encoder,
4311                offset + cur_offset,
4312                depth,
4313            )?;
4314
4315            _prev_end_offset = cur_offset + envelope_size;
4316            if 11 > max_ordinal {
4317                return Ok(());
4318            }
4319
4320            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4321            // are envelope_size bytes.
4322            let cur_offset: usize = (11 - 1) * envelope_size;
4323
4324            // Zero reserved fields.
4325            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4326
4327            // Safety:
4328            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4329            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4330            //   envelope_size bytes, there is always sufficient room.
4331            fidl::encoding::encode_in_envelope_optional::<bool, D>(
4332                self.dp.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
4333                encoder,
4334                offset + cur_offset,
4335                depth,
4336            )?;
4337
4338            _prev_end_offset = cur_offset + envelope_size;
4339            if 12 > max_ordinal {
4340                return Ok(());
4341            }
4342
4343            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4344            // are envelope_size bytes.
4345            let cur_offset: usize = (12 - 1) * envelope_size;
4346
4347            // Zero reserved fields.
4348            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4349
4350            // Safety:
4351            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4352            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4353            //   envelope_size bytes, there is always sufficient room.
4354            fidl::encoding::encode_in_envelope_optional::<u16, D>(
4355                self.rloc16.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
4356                encoder,
4357                offset + cur_offset,
4358                depth,
4359            )?;
4360
4361            _prev_end_offset = cur_offset + envelope_size;
4362
4363            Ok(())
4364        }
4365    }
4366
4367    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for BorderRouterConfig {
4368        #[inline(always)]
4369        fn new_empty() -> Self {
4370            Self::default()
4371        }
4372
4373        unsafe fn decode(
4374            &mut self,
4375            decoder: &mut fidl::encoding::Decoder<'_, D>,
4376            offset: usize,
4377            mut depth: fidl::encoding::Depth,
4378        ) -> fidl::Result<()> {
4379            decoder.debug_check_bounds::<Self>(offset);
4380            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
4381                None => return Err(fidl::Error::NotNullable),
4382                Some(len) => len,
4383            };
4384            // Calling decoder.out_of_line_offset(0) is not allowed.
4385            if len == 0 {
4386                return Ok(());
4387            };
4388            depth.increment()?;
4389            let envelope_size = 8;
4390            let bytes_len = len * envelope_size;
4391            let offset = decoder.out_of_line_offset(bytes_len)?;
4392            // Decode the envelope for each type.
4393            let mut _next_ordinal_to_read = 0;
4394            let mut next_offset = offset;
4395            let end_offset = offset + bytes_len;
4396            _next_ordinal_to_read += 1;
4397            if next_offset >= end_offset {
4398                return Ok(());
4399            }
4400
4401            // Decode unknown envelopes for gaps in ordinals.
4402            while _next_ordinal_to_read < 1 {
4403                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4404                _next_ordinal_to_read += 1;
4405                next_offset += envelope_size;
4406            }
4407
4408            let next_out_of_line = decoder.next_out_of_line();
4409            let handles_before = decoder.remaining_handles();
4410            if let Some((inlined, num_bytes, num_handles)) =
4411                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4412            {
4413                let member_inline_size =
4414                    <fidl::encoding::BoundedString<64> as fidl::encoding::TypeMarker>::inline_size(
4415                        decoder.context,
4416                    );
4417                if inlined != (member_inline_size <= 4) {
4418                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4419                }
4420                let inner_offset;
4421                let mut inner_depth = depth.clone();
4422                if inlined {
4423                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4424                    inner_offset = next_offset;
4425                } else {
4426                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4427                    inner_depth.increment()?;
4428                }
4429                let val_ref = self
4430                    .prefix
4431                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<64>, D));
4432                fidl::decode!(
4433                    fidl::encoding::BoundedString<64>,
4434                    D,
4435                    val_ref,
4436                    decoder,
4437                    inner_offset,
4438                    inner_depth
4439                )?;
4440                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4441                {
4442                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4443                }
4444                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4445                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4446                }
4447            }
4448
4449            next_offset += envelope_size;
4450            _next_ordinal_to_read += 1;
4451            if next_offset >= end_offset {
4452                return Ok(());
4453            }
4454
4455            // Decode unknown envelopes for gaps in ordinals.
4456            while _next_ordinal_to_read < 2 {
4457                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4458                _next_ordinal_to_read += 1;
4459                next_offset += envelope_size;
4460            }
4461
4462            let next_out_of_line = decoder.next_out_of_line();
4463            let handles_before = decoder.remaining_handles();
4464            if let Some((inlined, num_bytes, num_handles)) =
4465                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4466            {
4467                let member_inline_size =
4468                    <i8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4469                if inlined != (member_inline_size <= 4) {
4470                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4471                }
4472                let inner_offset;
4473                let mut inner_depth = depth.clone();
4474                if inlined {
4475                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4476                    inner_offset = next_offset;
4477                } else {
4478                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4479                    inner_depth.increment()?;
4480                }
4481                let val_ref = self.preference.get_or_insert_with(|| fidl::new_empty!(i8, D));
4482                fidl::decode!(i8, D, val_ref, decoder, inner_offset, inner_depth)?;
4483                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4484                {
4485                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4486                }
4487                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4488                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4489                }
4490            }
4491
4492            next_offset += envelope_size;
4493            _next_ordinal_to_read += 1;
4494            if next_offset >= end_offset {
4495                return Ok(());
4496            }
4497
4498            // Decode unknown envelopes for gaps in ordinals.
4499            while _next_ordinal_to_read < 3 {
4500                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4501                _next_ordinal_to_read += 1;
4502                next_offset += envelope_size;
4503            }
4504
4505            let next_out_of_line = decoder.next_out_of_line();
4506            let handles_before = decoder.remaining_handles();
4507            if let Some((inlined, num_bytes, num_handles)) =
4508                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4509            {
4510                let member_inline_size =
4511                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4512                if inlined != (member_inline_size <= 4) {
4513                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4514                }
4515                let inner_offset;
4516                let mut inner_depth = depth.clone();
4517                if inlined {
4518                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4519                    inner_offset = next_offset;
4520                } else {
4521                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4522                    inner_depth.increment()?;
4523                }
4524                let val_ref = self.preferred.get_or_insert_with(|| fidl::new_empty!(bool, D));
4525                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
4526                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4527                {
4528                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4529                }
4530                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4531                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4532                }
4533            }
4534
4535            next_offset += envelope_size;
4536            _next_ordinal_to_read += 1;
4537            if next_offset >= end_offset {
4538                return Ok(());
4539            }
4540
4541            // Decode unknown envelopes for gaps in ordinals.
4542            while _next_ordinal_to_read < 4 {
4543                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4544                _next_ordinal_to_read += 1;
4545                next_offset += envelope_size;
4546            }
4547
4548            let next_out_of_line = decoder.next_out_of_line();
4549            let handles_before = decoder.remaining_handles();
4550            if let Some((inlined, num_bytes, num_handles)) =
4551                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4552            {
4553                let member_inline_size =
4554                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4555                if inlined != (member_inline_size <= 4) {
4556                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4557                }
4558                let inner_offset;
4559                let mut inner_depth = depth.clone();
4560                if inlined {
4561                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4562                    inner_offset = next_offset;
4563                } else {
4564                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4565                    inner_depth.increment()?;
4566                }
4567                let val_ref = self.slaac.get_or_insert_with(|| fidl::new_empty!(bool, D));
4568                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
4569                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4570                {
4571                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4572                }
4573                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4574                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4575                }
4576            }
4577
4578            next_offset += envelope_size;
4579            _next_ordinal_to_read += 1;
4580            if next_offset >= end_offset {
4581                return Ok(());
4582            }
4583
4584            // Decode unknown envelopes for gaps in ordinals.
4585            while _next_ordinal_to_read < 5 {
4586                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4587                _next_ordinal_to_read += 1;
4588                next_offset += envelope_size;
4589            }
4590
4591            let next_out_of_line = decoder.next_out_of_line();
4592            let handles_before = decoder.remaining_handles();
4593            if let Some((inlined, num_bytes, num_handles)) =
4594                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4595            {
4596                let member_inline_size =
4597                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4598                if inlined != (member_inline_size <= 4) {
4599                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4600                }
4601                let inner_offset;
4602                let mut inner_depth = depth.clone();
4603                if inlined {
4604                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4605                    inner_offset = next_offset;
4606                } else {
4607                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4608                    inner_depth.increment()?;
4609                }
4610                let val_ref = self.dhcp.get_or_insert_with(|| fidl::new_empty!(bool, D));
4611                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
4612                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4613                {
4614                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4615                }
4616                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4617                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4618                }
4619            }
4620
4621            next_offset += envelope_size;
4622            _next_ordinal_to_read += 1;
4623            if next_offset >= end_offset {
4624                return Ok(());
4625            }
4626
4627            // Decode unknown envelopes for gaps in ordinals.
4628            while _next_ordinal_to_read < 6 {
4629                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4630                _next_ordinal_to_read += 1;
4631                next_offset += envelope_size;
4632            }
4633
4634            let next_out_of_line = decoder.next_out_of_line();
4635            let handles_before = decoder.remaining_handles();
4636            if let Some((inlined, num_bytes, num_handles)) =
4637                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4638            {
4639                let member_inline_size =
4640                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4641                if inlined != (member_inline_size <= 4) {
4642                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4643                }
4644                let inner_offset;
4645                let mut inner_depth = depth.clone();
4646                if inlined {
4647                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4648                    inner_offset = next_offset;
4649                } else {
4650                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4651                    inner_depth.increment()?;
4652                }
4653                let val_ref = self.configure.get_or_insert_with(|| fidl::new_empty!(bool, D));
4654                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
4655                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4656                {
4657                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4658                }
4659                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4660                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4661                }
4662            }
4663
4664            next_offset += envelope_size;
4665            _next_ordinal_to_read += 1;
4666            if next_offset >= end_offset {
4667                return Ok(());
4668            }
4669
4670            // Decode unknown envelopes for gaps in ordinals.
4671            while _next_ordinal_to_read < 7 {
4672                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4673                _next_ordinal_to_read += 1;
4674                next_offset += envelope_size;
4675            }
4676
4677            let next_out_of_line = decoder.next_out_of_line();
4678            let handles_before = decoder.remaining_handles();
4679            if let Some((inlined, num_bytes, num_handles)) =
4680                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4681            {
4682                let member_inline_size =
4683                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4684                if inlined != (member_inline_size <= 4) {
4685                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4686                }
4687                let inner_offset;
4688                let mut inner_depth = depth.clone();
4689                if inlined {
4690                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4691                    inner_offset = next_offset;
4692                } else {
4693                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4694                    inner_depth.increment()?;
4695                }
4696                let val_ref = self.default_route.get_or_insert_with(|| fidl::new_empty!(bool, D));
4697                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
4698                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4699                {
4700                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4701                }
4702                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4703                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4704                }
4705            }
4706
4707            next_offset += envelope_size;
4708            _next_ordinal_to_read += 1;
4709            if next_offset >= end_offset {
4710                return Ok(());
4711            }
4712
4713            // Decode unknown envelopes for gaps in ordinals.
4714            while _next_ordinal_to_read < 8 {
4715                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4716                _next_ordinal_to_read += 1;
4717                next_offset += envelope_size;
4718            }
4719
4720            let next_out_of_line = decoder.next_out_of_line();
4721            let handles_before = decoder.remaining_handles();
4722            if let Some((inlined, num_bytes, num_handles)) =
4723                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4724            {
4725                let member_inline_size =
4726                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4727                if inlined != (member_inline_size <= 4) {
4728                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4729                }
4730                let inner_offset;
4731                let mut inner_depth = depth.clone();
4732                if inlined {
4733                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4734                    inner_offset = next_offset;
4735                } else {
4736                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4737                    inner_depth.increment()?;
4738                }
4739                let val_ref = self.on_mesh.get_or_insert_with(|| fidl::new_empty!(bool, D));
4740                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
4741                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4742                {
4743                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4744                }
4745                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4746                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4747                }
4748            }
4749
4750            next_offset += envelope_size;
4751            _next_ordinal_to_read += 1;
4752            if next_offset >= end_offset {
4753                return Ok(());
4754            }
4755
4756            // Decode unknown envelopes for gaps in ordinals.
4757            while _next_ordinal_to_read < 9 {
4758                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4759                _next_ordinal_to_read += 1;
4760                next_offset += envelope_size;
4761            }
4762
4763            let next_out_of_line = decoder.next_out_of_line();
4764            let handles_before = decoder.remaining_handles();
4765            if let Some((inlined, num_bytes, num_handles)) =
4766                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4767            {
4768                let member_inline_size =
4769                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4770                if inlined != (member_inline_size <= 4) {
4771                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4772                }
4773                let inner_offset;
4774                let mut inner_depth = depth.clone();
4775                if inlined {
4776                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4777                    inner_offset = next_offset;
4778                } else {
4779                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4780                    inner_depth.increment()?;
4781                }
4782                let val_ref = self.stable.get_or_insert_with(|| fidl::new_empty!(bool, D));
4783                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
4784                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4785                {
4786                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4787                }
4788                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4789                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4790                }
4791            }
4792
4793            next_offset += envelope_size;
4794            _next_ordinal_to_read += 1;
4795            if next_offset >= end_offset {
4796                return Ok(());
4797            }
4798
4799            // Decode unknown envelopes for gaps in ordinals.
4800            while _next_ordinal_to_read < 10 {
4801                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4802                _next_ordinal_to_read += 1;
4803                next_offset += envelope_size;
4804            }
4805
4806            let next_out_of_line = decoder.next_out_of_line();
4807            let handles_before = decoder.remaining_handles();
4808            if let Some((inlined, num_bytes, num_handles)) =
4809                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4810            {
4811                let member_inline_size =
4812                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4813                if inlined != (member_inline_size <= 4) {
4814                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4815                }
4816                let inner_offset;
4817                let mut inner_depth = depth.clone();
4818                if inlined {
4819                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4820                    inner_offset = next_offset;
4821                } else {
4822                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4823                    inner_depth.increment()?;
4824                }
4825                let val_ref = self.nd_dns.get_or_insert_with(|| fidl::new_empty!(bool, D));
4826                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
4827                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4828                {
4829                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4830                }
4831                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4832                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4833                }
4834            }
4835
4836            next_offset += envelope_size;
4837            _next_ordinal_to_read += 1;
4838            if next_offset >= end_offset {
4839                return Ok(());
4840            }
4841
4842            // Decode unknown envelopes for gaps in ordinals.
4843            while _next_ordinal_to_read < 11 {
4844                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4845                _next_ordinal_to_read += 1;
4846                next_offset += envelope_size;
4847            }
4848
4849            let next_out_of_line = decoder.next_out_of_line();
4850            let handles_before = decoder.remaining_handles();
4851            if let Some((inlined, num_bytes, num_handles)) =
4852                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4853            {
4854                let member_inline_size =
4855                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4856                if inlined != (member_inline_size <= 4) {
4857                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4858                }
4859                let inner_offset;
4860                let mut inner_depth = depth.clone();
4861                if inlined {
4862                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4863                    inner_offset = next_offset;
4864                } else {
4865                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4866                    inner_depth.increment()?;
4867                }
4868                let val_ref = self.dp.get_or_insert_with(|| fidl::new_empty!(bool, D));
4869                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
4870                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4871                {
4872                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4873                }
4874                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4875                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4876                }
4877            }
4878
4879            next_offset += envelope_size;
4880            _next_ordinal_to_read += 1;
4881            if next_offset >= end_offset {
4882                return Ok(());
4883            }
4884
4885            // Decode unknown envelopes for gaps in ordinals.
4886            while _next_ordinal_to_read < 12 {
4887                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4888                _next_ordinal_to_read += 1;
4889                next_offset += envelope_size;
4890            }
4891
4892            let next_out_of_line = decoder.next_out_of_line();
4893            let handles_before = decoder.remaining_handles();
4894            if let Some((inlined, num_bytes, num_handles)) =
4895                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4896            {
4897                let member_inline_size =
4898                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4899                if inlined != (member_inline_size <= 4) {
4900                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4901                }
4902                let inner_offset;
4903                let mut inner_depth = depth.clone();
4904                if inlined {
4905                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4906                    inner_offset = next_offset;
4907                } else {
4908                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4909                    inner_depth.increment()?;
4910                }
4911                let val_ref = self.rloc16.get_or_insert_with(|| fidl::new_empty!(u16, D));
4912                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
4913                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4914                {
4915                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4916                }
4917                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4918                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4919                }
4920            }
4921
4922            next_offset += envelope_size;
4923
4924            // Decode the remaining unknown envelopes.
4925            while next_offset < end_offset {
4926                _next_ordinal_to_read += 1;
4927                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4928                next_offset += envelope_size;
4929            }
4930
4931            Ok(())
4932        }
4933    }
4934
4935    impl BorderRoutingCounters {
4936        #[inline(always)]
4937        fn max_ordinal_present(&self) -> u64 {
4938            if let Some(_) = self.outbound_internet_bytes {
4939                return 18;
4940            }
4941            if let Some(_) = self.outbound_internet_packets {
4942                return 17;
4943            }
4944            if let Some(_) = self.inbound_internet_bytes {
4945                return 16;
4946            }
4947            if let Some(_) = self.inbound_internet_packets {
4948                return 15;
4949            }
4950            if let Some(_) = self.rs_tx_failure {
4951                return 14;
4952            }
4953            if let Some(_) = self.rs_tx_success {
4954                return 13;
4955            }
4956            if let Some(_) = self.rs_rx {
4957                return 12;
4958            }
4959            if let Some(_) = self.ra_tx_failure {
4960                return 11;
4961            }
4962            if let Some(_) = self.ra_tx_success {
4963                return 10;
4964            }
4965            if let Some(_) = self.ra_rx {
4966                return 9;
4967            }
4968            if let Some(_) = self.outbound_multicast_bytes {
4969                return 8;
4970            }
4971            if let Some(_) = self.outbound_multicast_packets {
4972                return 7;
4973            }
4974            if let Some(_) = self.outbound_unicast_bytes {
4975                return 6;
4976            }
4977            if let Some(_) = self.outbound_unicast_packets {
4978                return 5;
4979            }
4980            if let Some(_) = self.inbound_multicast_bytes {
4981                return 4;
4982            }
4983            if let Some(_) = self.inbound_multicast_packets {
4984                return 3;
4985            }
4986            if let Some(_) = self.inbound_unicast_bytes {
4987                return 2;
4988            }
4989            if let Some(_) = self.inbound_unicast_packets {
4990                return 1;
4991            }
4992            0
4993        }
4994    }
4995
4996    impl fidl::encoding::ValueTypeMarker for BorderRoutingCounters {
4997        type Borrowed<'a> = &'a Self;
4998        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4999            value
5000        }
5001    }
5002
5003    unsafe impl fidl::encoding::TypeMarker for BorderRoutingCounters {
5004        type Owned = Self;
5005
5006        #[inline(always)]
5007        fn inline_align(_context: fidl::encoding::Context) -> usize {
5008            8
5009        }
5010
5011        #[inline(always)]
5012        fn inline_size(_context: fidl::encoding::Context) -> usize {
5013            16
5014        }
5015    }
5016
5017    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<BorderRoutingCounters, D>
5018        for &BorderRoutingCounters
5019    {
5020        unsafe fn encode(
5021            self,
5022            encoder: &mut fidl::encoding::Encoder<'_, D>,
5023            offset: usize,
5024            mut depth: fidl::encoding::Depth,
5025        ) -> fidl::Result<()> {
5026            encoder.debug_check_bounds::<BorderRoutingCounters>(offset);
5027            // Vector header
5028            let max_ordinal: u64 = self.max_ordinal_present();
5029            encoder.write_num(max_ordinal, offset);
5030            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
5031            // Calling encoder.out_of_line_offset(0) is not allowed.
5032            if max_ordinal == 0 {
5033                return Ok(());
5034            }
5035            depth.increment()?;
5036            let envelope_size = 8;
5037            let bytes_len = max_ordinal as usize * envelope_size;
5038            #[allow(unused_variables)]
5039            let offset = encoder.out_of_line_offset(bytes_len);
5040            let mut _prev_end_offset: usize = 0;
5041            if 1 > max_ordinal {
5042                return Ok(());
5043            }
5044
5045            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5046            // are envelope_size bytes.
5047            let cur_offset: usize = (1 - 1) * envelope_size;
5048
5049            // Zero reserved fields.
5050            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5051
5052            // Safety:
5053            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5054            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5055            //   envelope_size bytes, there is always sufficient room.
5056            fidl::encoding::encode_in_envelope_optional::<u64, D>(
5057                self.inbound_unicast_packets
5058                    .as_ref()
5059                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
5060                encoder,
5061                offset + cur_offset,
5062                depth,
5063            )?;
5064
5065            _prev_end_offset = cur_offset + envelope_size;
5066            if 2 > max_ordinal {
5067                return Ok(());
5068            }
5069
5070            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5071            // are envelope_size bytes.
5072            let cur_offset: usize = (2 - 1) * envelope_size;
5073
5074            // Zero reserved fields.
5075            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5076
5077            // Safety:
5078            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5079            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5080            //   envelope_size bytes, there is always sufficient room.
5081            fidl::encoding::encode_in_envelope_optional::<u64, D>(
5082                self.inbound_unicast_bytes
5083                    .as_ref()
5084                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
5085                encoder,
5086                offset + cur_offset,
5087                depth,
5088            )?;
5089
5090            _prev_end_offset = cur_offset + envelope_size;
5091            if 3 > max_ordinal {
5092                return Ok(());
5093            }
5094
5095            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5096            // are envelope_size bytes.
5097            let cur_offset: usize = (3 - 1) * envelope_size;
5098
5099            // Zero reserved fields.
5100            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5101
5102            // Safety:
5103            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5104            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5105            //   envelope_size bytes, there is always sufficient room.
5106            fidl::encoding::encode_in_envelope_optional::<u64, D>(
5107                self.inbound_multicast_packets
5108                    .as_ref()
5109                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
5110                encoder,
5111                offset + cur_offset,
5112                depth,
5113            )?;
5114
5115            _prev_end_offset = cur_offset + envelope_size;
5116            if 4 > max_ordinal {
5117                return Ok(());
5118            }
5119
5120            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5121            // are envelope_size bytes.
5122            let cur_offset: usize = (4 - 1) * envelope_size;
5123
5124            // Zero reserved fields.
5125            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5126
5127            // Safety:
5128            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5129            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5130            //   envelope_size bytes, there is always sufficient room.
5131            fidl::encoding::encode_in_envelope_optional::<u64, D>(
5132                self.inbound_multicast_bytes
5133                    .as_ref()
5134                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
5135                encoder,
5136                offset + cur_offset,
5137                depth,
5138            )?;
5139
5140            _prev_end_offset = cur_offset + envelope_size;
5141            if 5 > max_ordinal {
5142                return Ok(());
5143            }
5144
5145            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5146            // are envelope_size bytes.
5147            let cur_offset: usize = (5 - 1) * envelope_size;
5148
5149            // Zero reserved fields.
5150            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5151
5152            // Safety:
5153            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5154            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5155            //   envelope_size bytes, there is always sufficient room.
5156            fidl::encoding::encode_in_envelope_optional::<u64, D>(
5157                self.outbound_unicast_packets
5158                    .as_ref()
5159                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
5160                encoder,
5161                offset + cur_offset,
5162                depth,
5163            )?;
5164
5165            _prev_end_offset = cur_offset + envelope_size;
5166            if 6 > max_ordinal {
5167                return Ok(());
5168            }
5169
5170            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5171            // are envelope_size bytes.
5172            let cur_offset: usize = (6 - 1) * envelope_size;
5173
5174            // Zero reserved fields.
5175            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5176
5177            // Safety:
5178            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5179            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5180            //   envelope_size bytes, there is always sufficient room.
5181            fidl::encoding::encode_in_envelope_optional::<u64, D>(
5182                self.outbound_unicast_bytes
5183                    .as_ref()
5184                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
5185                encoder,
5186                offset + cur_offset,
5187                depth,
5188            )?;
5189
5190            _prev_end_offset = cur_offset + envelope_size;
5191            if 7 > max_ordinal {
5192                return Ok(());
5193            }
5194
5195            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5196            // are envelope_size bytes.
5197            let cur_offset: usize = (7 - 1) * envelope_size;
5198
5199            // Zero reserved fields.
5200            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5201
5202            // Safety:
5203            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5204            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5205            //   envelope_size bytes, there is always sufficient room.
5206            fidl::encoding::encode_in_envelope_optional::<u64, D>(
5207                self.outbound_multicast_packets
5208                    .as_ref()
5209                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
5210                encoder,
5211                offset + cur_offset,
5212                depth,
5213            )?;
5214
5215            _prev_end_offset = cur_offset + envelope_size;
5216            if 8 > max_ordinal {
5217                return Ok(());
5218            }
5219
5220            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5221            // are envelope_size bytes.
5222            let cur_offset: usize = (8 - 1) * envelope_size;
5223
5224            // Zero reserved fields.
5225            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5226
5227            // Safety:
5228            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5229            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5230            //   envelope_size bytes, there is always sufficient room.
5231            fidl::encoding::encode_in_envelope_optional::<u64, D>(
5232                self.outbound_multicast_bytes
5233                    .as_ref()
5234                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
5235                encoder,
5236                offset + cur_offset,
5237                depth,
5238            )?;
5239
5240            _prev_end_offset = cur_offset + envelope_size;
5241            if 9 > max_ordinal {
5242                return Ok(());
5243            }
5244
5245            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5246            // are envelope_size bytes.
5247            let cur_offset: usize = (9 - 1) * envelope_size;
5248
5249            // Zero reserved fields.
5250            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5251
5252            // Safety:
5253            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5254            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5255            //   envelope_size bytes, there is always sufficient room.
5256            fidl::encoding::encode_in_envelope_optional::<u32, D>(
5257                self.ra_rx.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
5258                encoder,
5259                offset + cur_offset,
5260                depth,
5261            )?;
5262
5263            _prev_end_offset = cur_offset + envelope_size;
5264            if 10 > max_ordinal {
5265                return Ok(());
5266            }
5267
5268            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5269            // are envelope_size bytes.
5270            let cur_offset: usize = (10 - 1) * envelope_size;
5271
5272            // Zero reserved fields.
5273            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5274
5275            // Safety:
5276            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5277            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5278            //   envelope_size bytes, there is always sufficient room.
5279            fidl::encoding::encode_in_envelope_optional::<u32, D>(
5280                self.ra_tx_success.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
5281                encoder,
5282                offset + cur_offset,
5283                depth,
5284            )?;
5285
5286            _prev_end_offset = cur_offset + envelope_size;
5287            if 11 > max_ordinal {
5288                return Ok(());
5289            }
5290
5291            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5292            // are envelope_size bytes.
5293            let cur_offset: usize = (11 - 1) * envelope_size;
5294
5295            // Zero reserved fields.
5296            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5297
5298            // Safety:
5299            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5300            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5301            //   envelope_size bytes, there is always sufficient room.
5302            fidl::encoding::encode_in_envelope_optional::<u32, D>(
5303                self.ra_tx_failure.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
5304                encoder,
5305                offset + cur_offset,
5306                depth,
5307            )?;
5308
5309            _prev_end_offset = cur_offset + envelope_size;
5310            if 12 > max_ordinal {
5311                return Ok(());
5312            }
5313
5314            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5315            // are envelope_size bytes.
5316            let cur_offset: usize = (12 - 1) * envelope_size;
5317
5318            // Zero reserved fields.
5319            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5320
5321            // Safety:
5322            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5323            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5324            //   envelope_size bytes, there is always sufficient room.
5325            fidl::encoding::encode_in_envelope_optional::<u32, D>(
5326                self.rs_rx.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
5327                encoder,
5328                offset + cur_offset,
5329                depth,
5330            )?;
5331
5332            _prev_end_offset = cur_offset + envelope_size;
5333            if 13 > max_ordinal {
5334                return Ok(());
5335            }
5336
5337            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5338            // are envelope_size bytes.
5339            let cur_offset: usize = (13 - 1) * envelope_size;
5340
5341            // Zero reserved fields.
5342            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5343
5344            // Safety:
5345            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5346            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5347            //   envelope_size bytes, there is always sufficient room.
5348            fidl::encoding::encode_in_envelope_optional::<u32, D>(
5349                self.rs_tx_success.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
5350                encoder,
5351                offset + cur_offset,
5352                depth,
5353            )?;
5354
5355            _prev_end_offset = cur_offset + envelope_size;
5356            if 14 > max_ordinal {
5357                return Ok(());
5358            }
5359
5360            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5361            // are envelope_size bytes.
5362            let cur_offset: usize = (14 - 1) * envelope_size;
5363
5364            // Zero reserved fields.
5365            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5366
5367            // Safety:
5368            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5369            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5370            //   envelope_size bytes, there is always sufficient room.
5371            fidl::encoding::encode_in_envelope_optional::<u32, D>(
5372                self.rs_tx_failure.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
5373                encoder,
5374                offset + cur_offset,
5375                depth,
5376            )?;
5377
5378            _prev_end_offset = cur_offset + envelope_size;
5379            if 15 > max_ordinal {
5380                return Ok(());
5381            }
5382
5383            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5384            // are envelope_size bytes.
5385            let cur_offset: usize = (15 - 1) * envelope_size;
5386
5387            // Zero reserved fields.
5388            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5389
5390            // Safety:
5391            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5392            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5393            //   envelope_size bytes, there is always sufficient room.
5394            fidl::encoding::encode_in_envelope_optional::<u64, D>(
5395                self.inbound_internet_packets
5396                    .as_ref()
5397                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
5398                encoder,
5399                offset + cur_offset,
5400                depth,
5401            )?;
5402
5403            _prev_end_offset = cur_offset + envelope_size;
5404            if 16 > max_ordinal {
5405                return Ok(());
5406            }
5407
5408            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5409            // are envelope_size bytes.
5410            let cur_offset: usize = (16 - 1) * envelope_size;
5411
5412            // Zero reserved fields.
5413            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5414
5415            // Safety:
5416            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5417            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5418            //   envelope_size bytes, there is always sufficient room.
5419            fidl::encoding::encode_in_envelope_optional::<u64, D>(
5420                self.inbound_internet_bytes
5421                    .as_ref()
5422                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
5423                encoder,
5424                offset + cur_offset,
5425                depth,
5426            )?;
5427
5428            _prev_end_offset = cur_offset + envelope_size;
5429            if 17 > max_ordinal {
5430                return Ok(());
5431            }
5432
5433            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5434            // are envelope_size bytes.
5435            let cur_offset: usize = (17 - 1) * envelope_size;
5436
5437            // Zero reserved fields.
5438            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5439
5440            // Safety:
5441            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5442            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5443            //   envelope_size bytes, there is always sufficient room.
5444            fidl::encoding::encode_in_envelope_optional::<u64, D>(
5445                self.outbound_internet_packets
5446                    .as_ref()
5447                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
5448                encoder,
5449                offset + cur_offset,
5450                depth,
5451            )?;
5452
5453            _prev_end_offset = cur_offset + envelope_size;
5454            if 18 > max_ordinal {
5455                return Ok(());
5456            }
5457
5458            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5459            // are envelope_size bytes.
5460            let cur_offset: usize = (18 - 1) * envelope_size;
5461
5462            // Zero reserved fields.
5463            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5464
5465            // Safety:
5466            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5467            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5468            //   envelope_size bytes, there is always sufficient room.
5469            fidl::encoding::encode_in_envelope_optional::<u64, D>(
5470                self.outbound_internet_bytes
5471                    .as_ref()
5472                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
5473                encoder,
5474                offset + cur_offset,
5475                depth,
5476            )?;
5477
5478            _prev_end_offset = cur_offset + envelope_size;
5479
5480            Ok(())
5481        }
5482    }
5483
5484    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for BorderRoutingCounters {
5485        #[inline(always)]
5486        fn new_empty() -> Self {
5487            Self::default()
5488        }
5489
5490        unsafe fn decode(
5491            &mut self,
5492            decoder: &mut fidl::encoding::Decoder<'_, D>,
5493            offset: usize,
5494            mut depth: fidl::encoding::Depth,
5495        ) -> fidl::Result<()> {
5496            decoder.debug_check_bounds::<Self>(offset);
5497            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
5498                None => return Err(fidl::Error::NotNullable),
5499                Some(len) => len,
5500            };
5501            // Calling decoder.out_of_line_offset(0) is not allowed.
5502            if len == 0 {
5503                return Ok(());
5504            };
5505            depth.increment()?;
5506            let envelope_size = 8;
5507            let bytes_len = len * envelope_size;
5508            let offset = decoder.out_of_line_offset(bytes_len)?;
5509            // Decode the envelope for each type.
5510            let mut _next_ordinal_to_read = 0;
5511            let mut next_offset = offset;
5512            let end_offset = offset + bytes_len;
5513            _next_ordinal_to_read += 1;
5514            if next_offset >= end_offset {
5515                return Ok(());
5516            }
5517
5518            // Decode unknown envelopes for gaps in ordinals.
5519            while _next_ordinal_to_read < 1 {
5520                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5521                _next_ordinal_to_read += 1;
5522                next_offset += envelope_size;
5523            }
5524
5525            let next_out_of_line = decoder.next_out_of_line();
5526            let handles_before = decoder.remaining_handles();
5527            if let Some((inlined, num_bytes, num_handles)) =
5528                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5529            {
5530                let member_inline_size =
5531                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5532                if inlined != (member_inline_size <= 4) {
5533                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5534                }
5535                let inner_offset;
5536                let mut inner_depth = depth.clone();
5537                if inlined {
5538                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5539                    inner_offset = next_offset;
5540                } else {
5541                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5542                    inner_depth.increment()?;
5543                }
5544                let val_ref =
5545                    self.inbound_unicast_packets.get_or_insert_with(|| fidl::new_empty!(u64, D));
5546                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
5547                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5548                {
5549                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5550                }
5551                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5552                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5553                }
5554            }
5555
5556            next_offset += envelope_size;
5557            _next_ordinal_to_read += 1;
5558            if next_offset >= end_offset {
5559                return Ok(());
5560            }
5561
5562            // Decode unknown envelopes for gaps in ordinals.
5563            while _next_ordinal_to_read < 2 {
5564                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5565                _next_ordinal_to_read += 1;
5566                next_offset += envelope_size;
5567            }
5568
5569            let next_out_of_line = decoder.next_out_of_line();
5570            let handles_before = decoder.remaining_handles();
5571            if let Some((inlined, num_bytes, num_handles)) =
5572                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5573            {
5574                let member_inline_size =
5575                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5576                if inlined != (member_inline_size <= 4) {
5577                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5578                }
5579                let inner_offset;
5580                let mut inner_depth = depth.clone();
5581                if inlined {
5582                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5583                    inner_offset = next_offset;
5584                } else {
5585                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5586                    inner_depth.increment()?;
5587                }
5588                let val_ref =
5589                    self.inbound_unicast_bytes.get_or_insert_with(|| fidl::new_empty!(u64, D));
5590                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
5591                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5592                {
5593                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5594                }
5595                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5596                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5597                }
5598            }
5599
5600            next_offset += envelope_size;
5601            _next_ordinal_to_read += 1;
5602            if next_offset >= end_offset {
5603                return Ok(());
5604            }
5605
5606            // Decode unknown envelopes for gaps in ordinals.
5607            while _next_ordinal_to_read < 3 {
5608                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5609                _next_ordinal_to_read += 1;
5610                next_offset += envelope_size;
5611            }
5612
5613            let next_out_of_line = decoder.next_out_of_line();
5614            let handles_before = decoder.remaining_handles();
5615            if let Some((inlined, num_bytes, num_handles)) =
5616                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5617            {
5618                let member_inline_size =
5619                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5620                if inlined != (member_inline_size <= 4) {
5621                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5622                }
5623                let inner_offset;
5624                let mut inner_depth = depth.clone();
5625                if inlined {
5626                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5627                    inner_offset = next_offset;
5628                } else {
5629                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5630                    inner_depth.increment()?;
5631                }
5632                let val_ref =
5633                    self.inbound_multicast_packets.get_or_insert_with(|| fidl::new_empty!(u64, D));
5634                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
5635                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5636                {
5637                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5638                }
5639                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5640                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5641                }
5642            }
5643
5644            next_offset += envelope_size;
5645            _next_ordinal_to_read += 1;
5646            if next_offset >= end_offset {
5647                return Ok(());
5648            }
5649
5650            // Decode unknown envelopes for gaps in ordinals.
5651            while _next_ordinal_to_read < 4 {
5652                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5653                _next_ordinal_to_read += 1;
5654                next_offset += envelope_size;
5655            }
5656
5657            let next_out_of_line = decoder.next_out_of_line();
5658            let handles_before = decoder.remaining_handles();
5659            if let Some((inlined, num_bytes, num_handles)) =
5660                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5661            {
5662                let member_inline_size =
5663                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5664                if inlined != (member_inline_size <= 4) {
5665                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5666                }
5667                let inner_offset;
5668                let mut inner_depth = depth.clone();
5669                if inlined {
5670                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5671                    inner_offset = next_offset;
5672                } else {
5673                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5674                    inner_depth.increment()?;
5675                }
5676                let val_ref =
5677                    self.inbound_multicast_bytes.get_or_insert_with(|| fidl::new_empty!(u64, D));
5678                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
5679                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5680                {
5681                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5682                }
5683                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5684                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5685                }
5686            }
5687
5688            next_offset += envelope_size;
5689            _next_ordinal_to_read += 1;
5690            if next_offset >= end_offset {
5691                return Ok(());
5692            }
5693
5694            // Decode unknown envelopes for gaps in ordinals.
5695            while _next_ordinal_to_read < 5 {
5696                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5697                _next_ordinal_to_read += 1;
5698                next_offset += envelope_size;
5699            }
5700
5701            let next_out_of_line = decoder.next_out_of_line();
5702            let handles_before = decoder.remaining_handles();
5703            if let Some((inlined, num_bytes, num_handles)) =
5704                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5705            {
5706                let member_inline_size =
5707                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5708                if inlined != (member_inline_size <= 4) {
5709                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5710                }
5711                let inner_offset;
5712                let mut inner_depth = depth.clone();
5713                if inlined {
5714                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5715                    inner_offset = next_offset;
5716                } else {
5717                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5718                    inner_depth.increment()?;
5719                }
5720                let val_ref =
5721                    self.outbound_unicast_packets.get_or_insert_with(|| fidl::new_empty!(u64, D));
5722                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
5723                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5724                {
5725                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5726                }
5727                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5728                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5729                }
5730            }
5731
5732            next_offset += envelope_size;
5733            _next_ordinal_to_read += 1;
5734            if next_offset >= end_offset {
5735                return Ok(());
5736            }
5737
5738            // Decode unknown envelopes for gaps in ordinals.
5739            while _next_ordinal_to_read < 6 {
5740                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5741                _next_ordinal_to_read += 1;
5742                next_offset += envelope_size;
5743            }
5744
5745            let next_out_of_line = decoder.next_out_of_line();
5746            let handles_before = decoder.remaining_handles();
5747            if let Some((inlined, num_bytes, num_handles)) =
5748                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5749            {
5750                let member_inline_size =
5751                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5752                if inlined != (member_inline_size <= 4) {
5753                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5754                }
5755                let inner_offset;
5756                let mut inner_depth = depth.clone();
5757                if inlined {
5758                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5759                    inner_offset = next_offset;
5760                } else {
5761                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5762                    inner_depth.increment()?;
5763                }
5764                let val_ref =
5765                    self.outbound_unicast_bytes.get_or_insert_with(|| fidl::new_empty!(u64, D));
5766                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
5767                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5768                {
5769                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5770                }
5771                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5772                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5773                }
5774            }
5775
5776            next_offset += envelope_size;
5777            _next_ordinal_to_read += 1;
5778            if next_offset >= end_offset {
5779                return Ok(());
5780            }
5781
5782            // Decode unknown envelopes for gaps in ordinals.
5783            while _next_ordinal_to_read < 7 {
5784                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5785                _next_ordinal_to_read += 1;
5786                next_offset += envelope_size;
5787            }
5788
5789            let next_out_of_line = decoder.next_out_of_line();
5790            let handles_before = decoder.remaining_handles();
5791            if let Some((inlined, num_bytes, num_handles)) =
5792                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5793            {
5794                let member_inline_size =
5795                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5796                if inlined != (member_inline_size <= 4) {
5797                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5798                }
5799                let inner_offset;
5800                let mut inner_depth = depth.clone();
5801                if inlined {
5802                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5803                    inner_offset = next_offset;
5804                } else {
5805                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5806                    inner_depth.increment()?;
5807                }
5808                let val_ref =
5809                    self.outbound_multicast_packets.get_or_insert_with(|| fidl::new_empty!(u64, D));
5810                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
5811                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5812                {
5813                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5814                }
5815                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5816                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5817                }
5818            }
5819
5820            next_offset += envelope_size;
5821            _next_ordinal_to_read += 1;
5822            if next_offset >= end_offset {
5823                return Ok(());
5824            }
5825
5826            // Decode unknown envelopes for gaps in ordinals.
5827            while _next_ordinal_to_read < 8 {
5828                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5829                _next_ordinal_to_read += 1;
5830                next_offset += envelope_size;
5831            }
5832
5833            let next_out_of_line = decoder.next_out_of_line();
5834            let handles_before = decoder.remaining_handles();
5835            if let Some((inlined, num_bytes, num_handles)) =
5836                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5837            {
5838                let member_inline_size =
5839                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5840                if inlined != (member_inline_size <= 4) {
5841                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5842                }
5843                let inner_offset;
5844                let mut inner_depth = depth.clone();
5845                if inlined {
5846                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5847                    inner_offset = next_offset;
5848                } else {
5849                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5850                    inner_depth.increment()?;
5851                }
5852                let val_ref =
5853                    self.outbound_multicast_bytes.get_or_insert_with(|| fidl::new_empty!(u64, D));
5854                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
5855                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5856                {
5857                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5858                }
5859                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5860                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5861                }
5862            }
5863
5864            next_offset += envelope_size;
5865            _next_ordinal_to_read += 1;
5866            if next_offset >= end_offset {
5867                return Ok(());
5868            }
5869
5870            // Decode unknown envelopes for gaps in ordinals.
5871            while _next_ordinal_to_read < 9 {
5872                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5873                _next_ordinal_to_read += 1;
5874                next_offset += envelope_size;
5875            }
5876
5877            let next_out_of_line = decoder.next_out_of_line();
5878            let handles_before = decoder.remaining_handles();
5879            if let Some((inlined, num_bytes, num_handles)) =
5880                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5881            {
5882                let member_inline_size =
5883                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5884                if inlined != (member_inline_size <= 4) {
5885                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5886                }
5887                let inner_offset;
5888                let mut inner_depth = depth.clone();
5889                if inlined {
5890                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5891                    inner_offset = next_offset;
5892                } else {
5893                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5894                    inner_depth.increment()?;
5895                }
5896                let val_ref = self.ra_rx.get_or_insert_with(|| fidl::new_empty!(u32, D));
5897                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
5898                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5899                {
5900                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5901                }
5902                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5903                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5904                }
5905            }
5906
5907            next_offset += envelope_size;
5908            _next_ordinal_to_read += 1;
5909            if next_offset >= end_offset {
5910                return Ok(());
5911            }
5912
5913            // Decode unknown envelopes for gaps in ordinals.
5914            while _next_ordinal_to_read < 10 {
5915                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5916                _next_ordinal_to_read += 1;
5917                next_offset += envelope_size;
5918            }
5919
5920            let next_out_of_line = decoder.next_out_of_line();
5921            let handles_before = decoder.remaining_handles();
5922            if let Some((inlined, num_bytes, num_handles)) =
5923                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5924            {
5925                let member_inline_size =
5926                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5927                if inlined != (member_inline_size <= 4) {
5928                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5929                }
5930                let inner_offset;
5931                let mut inner_depth = depth.clone();
5932                if inlined {
5933                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5934                    inner_offset = next_offset;
5935                } else {
5936                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5937                    inner_depth.increment()?;
5938                }
5939                let val_ref = self.ra_tx_success.get_or_insert_with(|| fidl::new_empty!(u32, D));
5940                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
5941                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5942                {
5943                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5944                }
5945                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5946                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5947                }
5948            }
5949
5950            next_offset += envelope_size;
5951            _next_ordinal_to_read += 1;
5952            if next_offset >= end_offset {
5953                return Ok(());
5954            }
5955
5956            // Decode unknown envelopes for gaps in ordinals.
5957            while _next_ordinal_to_read < 11 {
5958                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5959                _next_ordinal_to_read += 1;
5960                next_offset += envelope_size;
5961            }
5962
5963            let next_out_of_line = decoder.next_out_of_line();
5964            let handles_before = decoder.remaining_handles();
5965            if let Some((inlined, num_bytes, num_handles)) =
5966                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5967            {
5968                let member_inline_size =
5969                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5970                if inlined != (member_inline_size <= 4) {
5971                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5972                }
5973                let inner_offset;
5974                let mut inner_depth = depth.clone();
5975                if inlined {
5976                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5977                    inner_offset = next_offset;
5978                } else {
5979                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5980                    inner_depth.increment()?;
5981                }
5982                let val_ref = self.ra_tx_failure.get_or_insert_with(|| fidl::new_empty!(u32, D));
5983                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
5984                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5985                {
5986                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5987                }
5988                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5989                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5990                }
5991            }
5992
5993            next_offset += envelope_size;
5994            _next_ordinal_to_read += 1;
5995            if next_offset >= end_offset {
5996                return Ok(());
5997            }
5998
5999            // Decode unknown envelopes for gaps in ordinals.
6000            while _next_ordinal_to_read < 12 {
6001                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6002                _next_ordinal_to_read += 1;
6003                next_offset += envelope_size;
6004            }
6005
6006            let next_out_of_line = decoder.next_out_of_line();
6007            let handles_before = decoder.remaining_handles();
6008            if let Some((inlined, num_bytes, num_handles)) =
6009                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6010            {
6011                let member_inline_size =
6012                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6013                if inlined != (member_inline_size <= 4) {
6014                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6015                }
6016                let inner_offset;
6017                let mut inner_depth = depth.clone();
6018                if inlined {
6019                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6020                    inner_offset = next_offset;
6021                } else {
6022                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6023                    inner_depth.increment()?;
6024                }
6025                let val_ref = self.rs_rx.get_or_insert_with(|| fidl::new_empty!(u32, D));
6026                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
6027                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6028                {
6029                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6030                }
6031                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6032                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6033                }
6034            }
6035
6036            next_offset += envelope_size;
6037            _next_ordinal_to_read += 1;
6038            if next_offset >= end_offset {
6039                return Ok(());
6040            }
6041
6042            // Decode unknown envelopes for gaps in ordinals.
6043            while _next_ordinal_to_read < 13 {
6044                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6045                _next_ordinal_to_read += 1;
6046                next_offset += envelope_size;
6047            }
6048
6049            let next_out_of_line = decoder.next_out_of_line();
6050            let handles_before = decoder.remaining_handles();
6051            if let Some((inlined, num_bytes, num_handles)) =
6052                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6053            {
6054                let member_inline_size =
6055                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6056                if inlined != (member_inline_size <= 4) {
6057                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6058                }
6059                let inner_offset;
6060                let mut inner_depth = depth.clone();
6061                if inlined {
6062                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6063                    inner_offset = next_offset;
6064                } else {
6065                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6066                    inner_depth.increment()?;
6067                }
6068                let val_ref = self.rs_tx_success.get_or_insert_with(|| fidl::new_empty!(u32, D));
6069                fidl::decode!(u32, 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 < 14 {
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                    <u32 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.rs_tx_failure.get_or_insert_with(|| fidl::new_empty!(u32, D));
6112                fidl::decode!(u32, 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 < 15 {
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                    <u64 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 =
6155                    self.inbound_internet_packets.get_or_insert_with(|| fidl::new_empty!(u64, D));
6156                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
6157                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6158                {
6159                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6160                }
6161                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6162                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6163                }
6164            }
6165
6166            next_offset += envelope_size;
6167            _next_ordinal_to_read += 1;
6168            if next_offset >= end_offset {
6169                return Ok(());
6170            }
6171
6172            // Decode unknown envelopes for gaps in ordinals.
6173            while _next_ordinal_to_read < 16 {
6174                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6175                _next_ordinal_to_read += 1;
6176                next_offset += envelope_size;
6177            }
6178
6179            let next_out_of_line = decoder.next_out_of_line();
6180            let handles_before = decoder.remaining_handles();
6181            if let Some((inlined, num_bytes, num_handles)) =
6182                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6183            {
6184                let member_inline_size =
6185                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6186                if inlined != (member_inline_size <= 4) {
6187                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6188                }
6189                let inner_offset;
6190                let mut inner_depth = depth.clone();
6191                if inlined {
6192                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6193                    inner_offset = next_offset;
6194                } else {
6195                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6196                    inner_depth.increment()?;
6197                }
6198                let val_ref =
6199                    self.inbound_internet_bytes.get_or_insert_with(|| fidl::new_empty!(u64, D));
6200                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
6201                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6202                {
6203                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6204                }
6205                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6206                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6207                }
6208            }
6209
6210            next_offset += envelope_size;
6211            _next_ordinal_to_read += 1;
6212            if next_offset >= end_offset {
6213                return Ok(());
6214            }
6215
6216            // Decode unknown envelopes for gaps in ordinals.
6217            while _next_ordinal_to_read < 17 {
6218                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6219                _next_ordinal_to_read += 1;
6220                next_offset += envelope_size;
6221            }
6222
6223            let next_out_of_line = decoder.next_out_of_line();
6224            let handles_before = decoder.remaining_handles();
6225            if let Some((inlined, num_bytes, num_handles)) =
6226                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6227            {
6228                let member_inline_size =
6229                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6230                if inlined != (member_inline_size <= 4) {
6231                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6232                }
6233                let inner_offset;
6234                let mut inner_depth = depth.clone();
6235                if inlined {
6236                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6237                    inner_offset = next_offset;
6238                } else {
6239                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6240                    inner_depth.increment()?;
6241                }
6242                let val_ref =
6243                    self.outbound_internet_packets.get_or_insert_with(|| fidl::new_empty!(u64, D));
6244                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
6245                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6246                {
6247                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6248                }
6249                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6250                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6251                }
6252            }
6253
6254            next_offset += envelope_size;
6255            _next_ordinal_to_read += 1;
6256            if next_offset >= end_offset {
6257                return Ok(());
6258            }
6259
6260            // Decode unknown envelopes for gaps in ordinals.
6261            while _next_ordinal_to_read < 18 {
6262                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6263                _next_ordinal_to_read += 1;
6264                next_offset += envelope_size;
6265            }
6266
6267            let next_out_of_line = decoder.next_out_of_line();
6268            let handles_before = decoder.remaining_handles();
6269            if let Some((inlined, num_bytes, num_handles)) =
6270                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6271            {
6272                let member_inline_size =
6273                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6274                if inlined != (member_inline_size <= 4) {
6275                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6276                }
6277                let inner_offset;
6278                let mut inner_depth = depth.clone();
6279                if inlined {
6280                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6281                    inner_offset = next_offset;
6282                } else {
6283                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6284                    inner_depth.increment()?;
6285                }
6286                let val_ref =
6287                    self.outbound_internet_bytes.get_or_insert_with(|| fidl::new_empty!(u64, D));
6288                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
6289                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6290                {
6291                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6292                }
6293                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6294                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6295                }
6296            }
6297
6298            next_offset += envelope_size;
6299
6300            // Decode the remaining unknown envelopes.
6301            while next_offset < end_offset {
6302                _next_ordinal_to_read += 1;
6303                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6304                next_offset += envelope_size;
6305            }
6306
6307            Ok(())
6308        }
6309    }
6310
6311    impl BorderRoutingNat64State {
6312        #[inline(always)]
6313        fn max_ordinal_present(&self) -> u64 {
6314            if let Some(_) = self.translator_state {
6315                return 2;
6316            }
6317            if let Some(_) = self.prefix_manager_state {
6318                return 1;
6319            }
6320            0
6321        }
6322    }
6323
6324    impl fidl::encoding::ValueTypeMarker for BorderRoutingNat64State {
6325        type Borrowed<'a> = &'a Self;
6326        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
6327            value
6328        }
6329    }
6330
6331    unsafe impl fidl::encoding::TypeMarker for BorderRoutingNat64State {
6332        type Owned = Self;
6333
6334        #[inline(always)]
6335        fn inline_align(_context: fidl::encoding::Context) -> usize {
6336            8
6337        }
6338
6339        #[inline(always)]
6340        fn inline_size(_context: fidl::encoding::Context) -> usize {
6341            16
6342        }
6343    }
6344
6345    unsafe impl<D: fidl::encoding::ResourceDialect>
6346        fidl::encoding::Encode<BorderRoutingNat64State, D> for &BorderRoutingNat64State
6347    {
6348        unsafe fn encode(
6349            self,
6350            encoder: &mut fidl::encoding::Encoder<'_, D>,
6351            offset: usize,
6352            mut depth: fidl::encoding::Depth,
6353        ) -> fidl::Result<()> {
6354            encoder.debug_check_bounds::<BorderRoutingNat64State>(offset);
6355            // Vector header
6356            let max_ordinal: u64 = self.max_ordinal_present();
6357            encoder.write_num(max_ordinal, offset);
6358            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
6359            // Calling encoder.out_of_line_offset(0) is not allowed.
6360            if max_ordinal == 0 {
6361                return Ok(());
6362            }
6363            depth.increment()?;
6364            let envelope_size = 8;
6365            let bytes_len = max_ordinal as usize * envelope_size;
6366            #[allow(unused_variables)]
6367            let offset = encoder.out_of_line_offset(bytes_len);
6368            let mut _prev_end_offset: usize = 0;
6369            if 1 > max_ordinal {
6370                return Ok(());
6371            }
6372
6373            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6374            // are envelope_size bytes.
6375            let cur_offset: usize = (1 - 1) * envelope_size;
6376
6377            // Zero reserved fields.
6378            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6379
6380            // Safety:
6381            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6382            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6383            //   envelope_size bytes, there is always sufficient room.
6384            fidl::encoding::encode_in_envelope_optional::<Nat64State, D>(
6385                self.prefix_manager_state
6386                    .as_ref()
6387                    .map(<Nat64State as fidl::encoding::ValueTypeMarker>::borrow),
6388                encoder,
6389                offset + cur_offset,
6390                depth,
6391            )?;
6392
6393            _prev_end_offset = cur_offset + envelope_size;
6394            if 2 > max_ordinal {
6395                return Ok(());
6396            }
6397
6398            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6399            // are envelope_size bytes.
6400            let cur_offset: usize = (2 - 1) * envelope_size;
6401
6402            // Zero reserved fields.
6403            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6404
6405            // Safety:
6406            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6407            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6408            //   envelope_size bytes, there is always sufficient room.
6409            fidl::encoding::encode_in_envelope_optional::<Nat64State, D>(
6410                self.translator_state
6411                    .as_ref()
6412                    .map(<Nat64State as fidl::encoding::ValueTypeMarker>::borrow),
6413                encoder,
6414                offset + cur_offset,
6415                depth,
6416            )?;
6417
6418            _prev_end_offset = cur_offset + envelope_size;
6419
6420            Ok(())
6421        }
6422    }
6423
6424    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
6425        for BorderRoutingNat64State
6426    {
6427        #[inline(always)]
6428        fn new_empty() -> Self {
6429            Self::default()
6430        }
6431
6432        unsafe fn decode(
6433            &mut self,
6434            decoder: &mut fidl::encoding::Decoder<'_, D>,
6435            offset: usize,
6436            mut depth: fidl::encoding::Depth,
6437        ) -> fidl::Result<()> {
6438            decoder.debug_check_bounds::<Self>(offset);
6439            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
6440                None => return Err(fidl::Error::NotNullable),
6441                Some(len) => len,
6442            };
6443            // Calling decoder.out_of_line_offset(0) is not allowed.
6444            if len == 0 {
6445                return Ok(());
6446            };
6447            depth.increment()?;
6448            let envelope_size = 8;
6449            let bytes_len = len * envelope_size;
6450            let offset = decoder.out_of_line_offset(bytes_len)?;
6451            // Decode the envelope for each type.
6452            let mut _next_ordinal_to_read = 0;
6453            let mut next_offset = offset;
6454            let end_offset = offset + bytes_len;
6455            _next_ordinal_to_read += 1;
6456            if next_offset >= end_offset {
6457                return Ok(());
6458            }
6459
6460            // Decode unknown envelopes for gaps in ordinals.
6461            while _next_ordinal_to_read < 1 {
6462                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6463                _next_ordinal_to_read += 1;
6464                next_offset += envelope_size;
6465            }
6466
6467            let next_out_of_line = decoder.next_out_of_line();
6468            let handles_before = decoder.remaining_handles();
6469            if let Some((inlined, num_bytes, num_handles)) =
6470                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6471            {
6472                let member_inline_size =
6473                    <Nat64State as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6474                if inlined != (member_inline_size <= 4) {
6475                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6476                }
6477                let inner_offset;
6478                let mut inner_depth = depth.clone();
6479                if inlined {
6480                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6481                    inner_offset = next_offset;
6482                } else {
6483                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6484                    inner_depth.increment()?;
6485                }
6486                let val_ref = self
6487                    .prefix_manager_state
6488                    .get_or_insert_with(|| fidl::new_empty!(Nat64State, D));
6489                fidl::decode!(Nat64State, D, val_ref, decoder, inner_offset, inner_depth)?;
6490                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6491                {
6492                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6493                }
6494                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6495                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6496                }
6497            }
6498
6499            next_offset += envelope_size;
6500            _next_ordinal_to_read += 1;
6501            if next_offset >= end_offset {
6502                return Ok(());
6503            }
6504
6505            // Decode unknown envelopes for gaps in ordinals.
6506            while _next_ordinal_to_read < 2 {
6507                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6508                _next_ordinal_to_read += 1;
6509                next_offset += envelope_size;
6510            }
6511
6512            let next_out_of_line = decoder.next_out_of_line();
6513            let handles_before = decoder.remaining_handles();
6514            if let Some((inlined, num_bytes, num_handles)) =
6515                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6516            {
6517                let member_inline_size =
6518                    <Nat64State as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6519                if inlined != (member_inline_size <= 4) {
6520                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6521                }
6522                let inner_offset;
6523                let mut inner_depth = depth.clone();
6524                if inlined {
6525                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6526                    inner_offset = next_offset;
6527                } else {
6528                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6529                    inner_depth.increment()?;
6530                }
6531                let val_ref =
6532                    self.translator_state.get_or_insert_with(|| fidl::new_empty!(Nat64State, D));
6533                fidl::decode!(Nat64State, D, val_ref, decoder, inner_offset, inner_depth)?;
6534                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6535                {
6536                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6537                }
6538                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6539                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6540                }
6541            }
6542
6543            next_offset += envelope_size;
6544
6545            // Decode the remaining unknown envelopes.
6546            while next_offset < end_offset {
6547                _next_ordinal_to_read += 1;
6548                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6549                next_offset += envelope_size;
6550            }
6551
6552            Ok(())
6553        }
6554    }
6555
6556    impl BorderRoutingPeer {
6557        #[inline(always)]
6558        fn max_ordinal_present(&self) -> u64 {
6559            if let Some(_) = self.age {
6560                return 2;
6561            }
6562            if let Some(_) = self.thread_rloc {
6563                return 1;
6564            }
6565            0
6566        }
6567    }
6568
6569    impl fidl::encoding::ValueTypeMarker for BorderRoutingPeer {
6570        type Borrowed<'a> = &'a Self;
6571        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
6572            value
6573        }
6574    }
6575
6576    unsafe impl fidl::encoding::TypeMarker for BorderRoutingPeer {
6577        type Owned = Self;
6578
6579        #[inline(always)]
6580        fn inline_align(_context: fidl::encoding::Context) -> usize {
6581            8
6582        }
6583
6584        #[inline(always)]
6585        fn inline_size(_context: fidl::encoding::Context) -> usize {
6586            16
6587        }
6588    }
6589
6590    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<BorderRoutingPeer, D>
6591        for &BorderRoutingPeer
6592    {
6593        unsafe fn encode(
6594            self,
6595            encoder: &mut fidl::encoding::Encoder<'_, D>,
6596            offset: usize,
6597            mut depth: fidl::encoding::Depth,
6598        ) -> fidl::Result<()> {
6599            encoder.debug_check_bounds::<BorderRoutingPeer>(offset);
6600            // Vector header
6601            let max_ordinal: u64 = self.max_ordinal_present();
6602            encoder.write_num(max_ordinal, offset);
6603            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
6604            // Calling encoder.out_of_line_offset(0) is not allowed.
6605            if max_ordinal == 0 {
6606                return Ok(());
6607            }
6608            depth.increment()?;
6609            let envelope_size = 8;
6610            let bytes_len = max_ordinal as usize * envelope_size;
6611            #[allow(unused_variables)]
6612            let offset = encoder.out_of_line_offset(bytes_len);
6613            let mut _prev_end_offset: usize = 0;
6614            if 1 > max_ordinal {
6615                return Ok(());
6616            }
6617
6618            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6619            // are envelope_size bytes.
6620            let cur_offset: usize = (1 - 1) * envelope_size;
6621
6622            // Zero reserved fields.
6623            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6624
6625            // Safety:
6626            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6627            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6628            //   envelope_size bytes, there is always sufficient room.
6629            fidl::encoding::encode_in_envelope_optional::<u16, D>(
6630                self.thread_rloc.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
6631                encoder,
6632                offset + cur_offset,
6633                depth,
6634            )?;
6635
6636            _prev_end_offset = cur_offset + envelope_size;
6637            if 2 > max_ordinal {
6638                return Ok(());
6639            }
6640
6641            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6642            // are envelope_size bytes.
6643            let cur_offset: usize = (2 - 1) * envelope_size;
6644
6645            // Zero reserved fields.
6646            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6647
6648            // Safety:
6649            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6650            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6651            //   envelope_size bytes, there is always sufficient room.
6652            fidl::encoding::encode_in_envelope_optional::<i64, D>(
6653                self.age.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
6654                encoder,
6655                offset + cur_offset,
6656                depth,
6657            )?;
6658
6659            _prev_end_offset = cur_offset + envelope_size;
6660
6661            Ok(())
6662        }
6663    }
6664
6665    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for BorderRoutingPeer {
6666        #[inline(always)]
6667        fn new_empty() -> Self {
6668            Self::default()
6669        }
6670
6671        unsafe fn decode(
6672            &mut self,
6673            decoder: &mut fidl::encoding::Decoder<'_, D>,
6674            offset: usize,
6675            mut depth: fidl::encoding::Depth,
6676        ) -> fidl::Result<()> {
6677            decoder.debug_check_bounds::<Self>(offset);
6678            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
6679                None => return Err(fidl::Error::NotNullable),
6680                Some(len) => len,
6681            };
6682            // Calling decoder.out_of_line_offset(0) is not allowed.
6683            if len == 0 {
6684                return Ok(());
6685            };
6686            depth.increment()?;
6687            let envelope_size = 8;
6688            let bytes_len = len * envelope_size;
6689            let offset = decoder.out_of_line_offset(bytes_len)?;
6690            // Decode the envelope for each type.
6691            let mut _next_ordinal_to_read = 0;
6692            let mut next_offset = offset;
6693            let end_offset = offset + bytes_len;
6694            _next_ordinal_to_read += 1;
6695            if next_offset >= end_offset {
6696                return Ok(());
6697            }
6698
6699            // Decode unknown envelopes for gaps in ordinals.
6700            while _next_ordinal_to_read < 1 {
6701                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6702                _next_ordinal_to_read += 1;
6703                next_offset += envelope_size;
6704            }
6705
6706            let next_out_of_line = decoder.next_out_of_line();
6707            let handles_before = decoder.remaining_handles();
6708            if let Some((inlined, num_bytes, num_handles)) =
6709                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6710            {
6711                let member_inline_size =
6712                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6713                if inlined != (member_inline_size <= 4) {
6714                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6715                }
6716                let inner_offset;
6717                let mut inner_depth = depth.clone();
6718                if inlined {
6719                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6720                    inner_offset = next_offset;
6721                } else {
6722                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6723                    inner_depth.increment()?;
6724                }
6725                let val_ref = self.thread_rloc.get_or_insert_with(|| fidl::new_empty!(u16, D));
6726                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
6727                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6728                {
6729                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6730                }
6731                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6732                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6733                }
6734            }
6735
6736            next_offset += envelope_size;
6737            _next_ordinal_to_read += 1;
6738            if next_offset >= end_offset {
6739                return Ok(());
6740            }
6741
6742            // Decode unknown envelopes for gaps in ordinals.
6743            while _next_ordinal_to_read < 2 {
6744                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6745                _next_ordinal_to_read += 1;
6746                next_offset += envelope_size;
6747            }
6748
6749            let next_out_of_line = decoder.next_out_of_line();
6750            let handles_before = decoder.remaining_handles();
6751            if let Some((inlined, num_bytes, num_handles)) =
6752                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6753            {
6754                let member_inline_size =
6755                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6756                if inlined != (member_inline_size <= 4) {
6757                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6758                }
6759                let inner_offset;
6760                let mut inner_depth = depth.clone();
6761                if inlined {
6762                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6763                    inner_offset = next_offset;
6764                } else {
6765                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6766                    inner_depth.increment()?;
6767                }
6768                let val_ref = self.age.get_or_insert_with(|| fidl::new_empty!(i64, D));
6769                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
6770                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6771                {
6772                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6773                }
6774                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6775                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6776                }
6777            }
6778
6779            next_offset += envelope_size;
6780
6781            // Decode the remaining unknown envelopes.
6782            while next_offset < end_offset {
6783                _next_ordinal_to_read += 1;
6784                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6785                next_offset += envelope_size;
6786            }
6787
6788            Ok(())
6789        }
6790    }
6791
6792    impl BorderRoutingRouter {
6793        #[inline(always)]
6794        fn max_ordinal_present(&self) -> u64 {
6795            if let Some(_) = self.is_peer_br {
6796                return 9;
6797            }
6798            if let Some(_) = self.is_reachable {
6799                return 8;
6800            }
6801            if let Some(_) = self.is_local_device {
6802                return 7;
6803            }
6804            if let Some(_) = self.snac_router_flag {
6805                return 6;
6806            }
6807            if let Some(_) = self.other_config_flag {
6808                return 5;
6809            }
6810            if let Some(_) = self.managed_address_config_flag {
6811                return 4;
6812            }
6813            if let Some(_) = self.age {
6814                return 3;
6815            }
6816            if let Some(_) = self.duration_since_last_update {
6817                return 2;
6818            }
6819            if let Some(_) = self.address {
6820                return 1;
6821            }
6822            0
6823        }
6824    }
6825
6826    impl fidl::encoding::ValueTypeMarker for BorderRoutingRouter {
6827        type Borrowed<'a> = &'a Self;
6828        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
6829            value
6830        }
6831    }
6832
6833    unsafe impl fidl::encoding::TypeMarker for BorderRoutingRouter {
6834        type Owned = Self;
6835
6836        #[inline(always)]
6837        fn inline_align(_context: fidl::encoding::Context) -> usize {
6838            8
6839        }
6840
6841        #[inline(always)]
6842        fn inline_size(_context: fidl::encoding::Context) -> usize {
6843            16
6844        }
6845    }
6846
6847    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<BorderRoutingRouter, D>
6848        for &BorderRoutingRouter
6849    {
6850        unsafe fn encode(
6851            self,
6852            encoder: &mut fidl::encoding::Encoder<'_, D>,
6853            offset: usize,
6854            mut depth: fidl::encoding::Depth,
6855        ) -> fidl::Result<()> {
6856            encoder.debug_check_bounds::<BorderRoutingRouter>(offset);
6857            // Vector header
6858            let max_ordinal: u64 = self.max_ordinal_present();
6859            encoder.write_num(max_ordinal, offset);
6860            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
6861            // Calling encoder.out_of_line_offset(0) is not allowed.
6862            if max_ordinal == 0 {
6863                return Ok(());
6864            }
6865            depth.increment()?;
6866            let envelope_size = 8;
6867            let bytes_len = max_ordinal as usize * envelope_size;
6868            #[allow(unused_variables)]
6869            let offset = encoder.out_of_line_offset(bytes_len);
6870            let mut _prev_end_offset: usize = 0;
6871            if 1 > 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 = (1 - 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::BoundedString<64>, D>(
6887                self.address.as_ref().map(
6888                    <fidl::encoding::BoundedString<64> 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            if 2 > max_ordinal {
6897                return Ok(());
6898            }
6899
6900            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6901            // are envelope_size bytes.
6902            let cur_offset: usize = (2 - 1) * envelope_size;
6903
6904            // Zero reserved fields.
6905            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6906
6907            // Safety:
6908            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6909            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6910            //   envelope_size bytes, there is always sufficient room.
6911            fidl::encoding::encode_in_envelope_optional::<i64, D>(
6912                self.duration_since_last_update
6913                    .as_ref()
6914                    .map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
6915                encoder,
6916                offset + cur_offset,
6917                depth,
6918            )?;
6919
6920            _prev_end_offset = cur_offset + envelope_size;
6921            if 3 > max_ordinal {
6922                return Ok(());
6923            }
6924
6925            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6926            // are envelope_size bytes.
6927            let cur_offset: usize = (3 - 1) * envelope_size;
6928
6929            // Zero reserved fields.
6930            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6931
6932            // Safety:
6933            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6934            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6935            //   envelope_size bytes, there is always sufficient room.
6936            fidl::encoding::encode_in_envelope_optional::<i64, D>(
6937                self.age.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
6938                encoder,
6939                offset + cur_offset,
6940                depth,
6941            )?;
6942
6943            _prev_end_offset = cur_offset + envelope_size;
6944            if 4 > max_ordinal {
6945                return Ok(());
6946            }
6947
6948            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6949            // are envelope_size bytes.
6950            let cur_offset: usize = (4 - 1) * envelope_size;
6951
6952            // Zero reserved fields.
6953            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6954
6955            // Safety:
6956            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6957            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6958            //   envelope_size bytes, there is always sufficient room.
6959            fidl::encoding::encode_in_envelope_optional::<bool, D>(
6960                self.managed_address_config_flag
6961                    .as_ref()
6962                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
6963                encoder,
6964                offset + cur_offset,
6965                depth,
6966            )?;
6967
6968            _prev_end_offset = cur_offset + envelope_size;
6969            if 5 > max_ordinal {
6970                return Ok(());
6971            }
6972
6973            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6974            // are envelope_size bytes.
6975            let cur_offset: usize = (5 - 1) * envelope_size;
6976
6977            // Zero reserved fields.
6978            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6979
6980            // Safety:
6981            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6982            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6983            //   envelope_size bytes, there is always sufficient room.
6984            fidl::encoding::encode_in_envelope_optional::<bool, D>(
6985                self.other_config_flag
6986                    .as_ref()
6987                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
6988                encoder,
6989                offset + cur_offset,
6990                depth,
6991            )?;
6992
6993            _prev_end_offset = cur_offset + envelope_size;
6994            if 6 > max_ordinal {
6995                return Ok(());
6996            }
6997
6998            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6999            // are envelope_size bytes.
7000            let cur_offset: usize = (6 - 1) * envelope_size;
7001
7002            // Zero reserved fields.
7003            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7004
7005            // Safety:
7006            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7007            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7008            //   envelope_size bytes, there is always sufficient room.
7009            fidl::encoding::encode_in_envelope_optional::<bool, D>(
7010                self.snac_router_flag
7011                    .as_ref()
7012                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
7013                encoder,
7014                offset + cur_offset,
7015                depth,
7016            )?;
7017
7018            _prev_end_offset = cur_offset + envelope_size;
7019            if 7 > max_ordinal {
7020                return Ok(());
7021            }
7022
7023            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7024            // are envelope_size bytes.
7025            let cur_offset: usize = (7 - 1) * envelope_size;
7026
7027            // Zero reserved fields.
7028            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7029
7030            // Safety:
7031            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7032            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7033            //   envelope_size bytes, there is always sufficient room.
7034            fidl::encoding::encode_in_envelope_optional::<bool, D>(
7035                self.is_local_device
7036                    .as_ref()
7037                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
7038                encoder,
7039                offset + cur_offset,
7040                depth,
7041            )?;
7042
7043            _prev_end_offset = cur_offset + envelope_size;
7044            if 8 > max_ordinal {
7045                return Ok(());
7046            }
7047
7048            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7049            // are envelope_size bytes.
7050            let cur_offset: usize = (8 - 1) * envelope_size;
7051
7052            // Zero reserved fields.
7053            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7054
7055            // Safety:
7056            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7057            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7058            //   envelope_size bytes, there is always sufficient room.
7059            fidl::encoding::encode_in_envelope_optional::<bool, D>(
7060                self.is_reachable.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
7061                encoder,
7062                offset + cur_offset,
7063                depth,
7064            )?;
7065
7066            _prev_end_offset = cur_offset + envelope_size;
7067            if 9 > max_ordinal {
7068                return Ok(());
7069            }
7070
7071            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7072            // are envelope_size bytes.
7073            let cur_offset: usize = (9 - 1) * envelope_size;
7074
7075            // Zero reserved fields.
7076            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7077
7078            // Safety:
7079            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7080            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7081            //   envelope_size bytes, there is always sufficient room.
7082            fidl::encoding::encode_in_envelope_optional::<bool, D>(
7083                self.is_peer_br.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
7084                encoder,
7085                offset + cur_offset,
7086                depth,
7087            )?;
7088
7089            _prev_end_offset = cur_offset + envelope_size;
7090
7091            Ok(())
7092        }
7093    }
7094
7095    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for BorderRoutingRouter {
7096        #[inline(always)]
7097        fn new_empty() -> Self {
7098            Self::default()
7099        }
7100
7101        unsafe fn decode(
7102            &mut self,
7103            decoder: &mut fidl::encoding::Decoder<'_, D>,
7104            offset: usize,
7105            mut depth: fidl::encoding::Depth,
7106        ) -> fidl::Result<()> {
7107            decoder.debug_check_bounds::<Self>(offset);
7108            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
7109                None => return Err(fidl::Error::NotNullable),
7110                Some(len) => len,
7111            };
7112            // Calling decoder.out_of_line_offset(0) is not allowed.
7113            if len == 0 {
7114                return Ok(());
7115            };
7116            depth.increment()?;
7117            let envelope_size = 8;
7118            let bytes_len = len * envelope_size;
7119            let offset = decoder.out_of_line_offset(bytes_len)?;
7120            // Decode the envelope for each type.
7121            let mut _next_ordinal_to_read = 0;
7122            let mut next_offset = offset;
7123            let end_offset = offset + bytes_len;
7124            _next_ordinal_to_read += 1;
7125            if next_offset >= end_offset {
7126                return Ok(());
7127            }
7128
7129            // Decode unknown envelopes for gaps in ordinals.
7130            while _next_ordinal_to_read < 1 {
7131                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7132                _next_ordinal_to_read += 1;
7133                next_offset += envelope_size;
7134            }
7135
7136            let next_out_of_line = decoder.next_out_of_line();
7137            let handles_before = decoder.remaining_handles();
7138            if let Some((inlined, num_bytes, num_handles)) =
7139                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7140            {
7141                let member_inline_size =
7142                    <fidl::encoding::BoundedString<64> as fidl::encoding::TypeMarker>::inline_size(
7143                        decoder.context,
7144                    );
7145                if inlined != (member_inline_size <= 4) {
7146                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7147                }
7148                let inner_offset;
7149                let mut inner_depth = depth.clone();
7150                if inlined {
7151                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7152                    inner_offset = next_offset;
7153                } else {
7154                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7155                    inner_depth.increment()?;
7156                }
7157                let val_ref = self
7158                    .address
7159                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<64>, D));
7160                fidl::decode!(
7161                    fidl::encoding::BoundedString<64>,
7162                    D,
7163                    val_ref,
7164                    decoder,
7165                    inner_offset,
7166                    inner_depth
7167                )?;
7168                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7169                {
7170                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7171                }
7172                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7173                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7174                }
7175            }
7176
7177            next_offset += envelope_size;
7178            _next_ordinal_to_read += 1;
7179            if next_offset >= end_offset {
7180                return Ok(());
7181            }
7182
7183            // Decode unknown envelopes for gaps in ordinals.
7184            while _next_ordinal_to_read < 2 {
7185                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7186                _next_ordinal_to_read += 1;
7187                next_offset += envelope_size;
7188            }
7189
7190            let next_out_of_line = decoder.next_out_of_line();
7191            let handles_before = decoder.remaining_handles();
7192            if let Some((inlined, num_bytes, num_handles)) =
7193                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7194            {
7195                let member_inline_size =
7196                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7197                if inlined != (member_inline_size <= 4) {
7198                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7199                }
7200                let inner_offset;
7201                let mut inner_depth = depth.clone();
7202                if inlined {
7203                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7204                    inner_offset = next_offset;
7205                } else {
7206                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7207                    inner_depth.increment()?;
7208                }
7209                let val_ref =
7210                    self.duration_since_last_update.get_or_insert_with(|| fidl::new_empty!(i64, D));
7211                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
7212                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7213                {
7214                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7215                }
7216                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7217                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7218                }
7219            }
7220
7221            next_offset += envelope_size;
7222            _next_ordinal_to_read += 1;
7223            if next_offset >= end_offset {
7224                return Ok(());
7225            }
7226
7227            // Decode unknown envelopes for gaps in ordinals.
7228            while _next_ordinal_to_read < 3 {
7229                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7230                _next_ordinal_to_read += 1;
7231                next_offset += envelope_size;
7232            }
7233
7234            let next_out_of_line = decoder.next_out_of_line();
7235            let handles_before = decoder.remaining_handles();
7236            if let Some((inlined, num_bytes, num_handles)) =
7237                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7238            {
7239                let member_inline_size =
7240                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
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.age.get_or_insert_with(|| fidl::new_empty!(i64, D));
7254                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
7255                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7256                {
7257                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7258                }
7259                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7260                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7261                }
7262            }
7263
7264            next_offset += envelope_size;
7265            _next_ordinal_to_read += 1;
7266            if next_offset >= end_offset {
7267                return Ok(());
7268            }
7269
7270            // Decode unknown envelopes for gaps in ordinals.
7271            while _next_ordinal_to_read < 4 {
7272                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7273                _next_ordinal_to_read += 1;
7274                next_offset += envelope_size;
7275            }
7276
7277            let next_out_of_line = decoder.next_out_of_line();
7278            let handles_before = decoder.remaining_handles();
7279            if let Some((inlined, num_bytes, num_handles)) =
7280                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7281            {
7282                let member_inline_size =
7283                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7284                if inlined != (member_inline_size <= 4) {
7285                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7286                }
7287                let inner_offset;
7288                let mut inner_depth = depth.clone();
7289                if inlined {
7290                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7291                    inner_offset = next_offset;
7292                } else {
7293                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7294                    inner_depth.increment()?;
7295                }
7296                let val_ref = self
7297                    .managed_address_config_flag
7298                    .get_or_insert_with(|| fidl::new_empty!(bool, D));
7299                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
7300                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7301                {
7302                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7303                }
7304                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7305                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7306                }
7307            }
7308
7309            next_offset += envelope_size;
7310            _next_ordinal_to_read += 1;
7311            if next_offset >= end_offset {
7312                return Ok(());
7313            }
7314
7315            // Decode unknown envelopes for gaps in ordinals.
7316            while _next_ordinal_to_read < 5 {
7317                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7318                _next_ordinal_to_read += 1;
7319                next_offset += envelope_size;
7320            }
7321
7322            let next_out_of_line = decoder.next_out_of_line();
7323            let handles_before = decoder.remaining_handles();
7324            if let Some((inlined, num_bytes, num_handles)) =
7325                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7326            {
7327                let member_inline_size =
7328                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7329                if inlined != (member_inline_size <= 4) {
7330                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7331                }
7332                let inner_offset;
7333                let mut inner_depth = depth.clone();
7334                if inlined {
7335                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7336                    inner_offset = next_offset;
7337                } else {
7338                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7339                    inner_depth.increment()?;
7340                }
7341                let val_ref =
7342                    self.other_config_flag.get_or_insert_with(|| fidl::new_empty!(bool, D));
7343                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
7344                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7345                {
7346                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7347                }
7348                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7349                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7350                }
7351            }
7352
7353            next_offset += envelope_size;
7354            _next_ordinal_to_read += 1;
7355            if next_offset >= end_offset {
7356                return Ok(());
7357            }
7358
7359            // Decode unknown envelopes for gaps in ordinals.
7360            while _next_ordinal_to_read < 6 {
7361                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7362                _next_ordinal_to_read += 1;
7363                next_offset += envelope_size;
7364            }
7365
7366            let next_out_of_line = decoder.next_out_of_line();
7367            let handles_before = decoder.remaining_handles();
7368            if let Some((inlined, num_bytes, num_handles)) =
7369                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7370            {
7371                let member_inline_size =
7372                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7373                if inlined != (member_inline_size <= 4) {
7374                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7375                }
7376                let inner_offset;
7377                let mut inner_depth = depth.clone();
7378                if inlined {
7379                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7380                    inner_offset = next_offset;
7381                } else {
7382                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7383                    inner_depth.increment()?;
7384                }
7385                let val_ref =
7386                    self.snac_router_flag.get_or_insert_with(|| fidl::new_empty!(bool, D));
7387                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
7388                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7389                {
7390                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7391                }
7392                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7393                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7394                }
7395            }
7396
7397            next_offset += envelope_size;
7398            _next_ordinal_to_read += 1;
7399            if next_offset >= end_offset {
7400                return Ok(());
7401            }
7402
7403            // Decode unknown envelopes for gaps in ordinals.
7404            while _next_ordinal_to_read < 7 {
7405                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7406                _next_ordinal_to_read += 1;
7407                next_offset += envelope_size;
7408            }
7409
7410            let next_out_of_line = decoder.next_out_of_line();
7411            let handles_before = decoder.remaining_handles();
7412            if let Some((inlined, num_bytes, num_handles)) =
7413                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7414            {
7415                let member_inline_size =
7416                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7417                if inlined != (member_inline_size <= 4) {
7418                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7419                }
7420                let inner_offset;
7421                let mut inner_depth = depth.clone();
7422                if inlined {
7423                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7424                    inner_offset = next_offset;
7425                } else {
7426                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7427                    inner_depth.increment()?;
7428                }
7429                let val_ref = self.is_local_device.get_or_insert_with(|| fidl::new_empty!(bool, D));
7430                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
7431                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7432                {
7433                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7434                }
7435                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7436                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7437                }
7438            }
7439
7440            next_offset += envelope_size;
7441            _next_ordinal_to_read += 1;
7442            if next_offset >= end_offset {
7443                return Ok(());
7444            }
7445
7446            // Decode unknown envelopes for gaps in ordinals.
7447            while _next_ordinal_to_read < 8 {
7448                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7449                _next_ordinal_to_read += 1;
7450                next_offset += envelope_size;
7451            }
7452
7453            let next_out_of_line = decoder.next_out_of_line();
7454            let handles_before = decoder.remaining_handles();
7455            if let Some((inlined, num_bytes, num_handles)) =
7456                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7457            {
7458                let member_inline_size =
7459                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7460                if inlined != (member_inline_size <= 4) {
7461                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7462                }
7463                let inner_offset;
7464                let mut inner_depth = depth.clone();
7465                if inlined {
7466                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7467                    inner_offset = next_offset;
7468                } else {
7469                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7470                    inner_depth.increment()?;
7471                }
7472                let val_ref = self.is_reachable.get_or_insert_with(|| fidl::new_empty!(bool, D));
7473                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
7474                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7475                {
7476                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7477                }
7478                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7479                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7480                }
7481            }
7482
7483            next_offset += envelope_size;
7484            _next_ordinal_to_read += 1;
7485            if next_offset >= end_offset {
7486                return Ok(());
7487            }
7488
7489            // Decode unknown envelopes for gaps in ordinals.
7490            while _next_ordinal_to_read < 9 {
7491                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7492                _next_ordinal_to_read += 1;
7493                next_offset += envelope_size;
7494            }
7495
7496            let next_out_of_line = decoder.next_out_of_line();
7497            let handles_before = decoder.remaining_handles();
7498            if let Some((inlined, num_bytes, num_handles)) =
7499                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7500            {
7501                let member_inline_size =
7502                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7503                if inlined != (member_inline_size <= 4) {
7504                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7505                }
7506                let inner_offset;
7507                let mut inner_depth = depth.clone();
7508                if inlined {
7509                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7510                    inner_offset = next_offset;
7511                } else {
7512                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7513                    inner_depth.increment()?;
7514                }
7515                let val_ref = self.is_peer_br.get_or_insert_with(|| fidl::new_empty!(bool, D));
7516                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
7517                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7518                {
7519                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7520                }
7521                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7522                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7523                }
7524            }
7525
7526            next_offset += envelope_size;
7527
7528            // Decode the remaining unknown envelopes.
7529            while next_offset < end_offset {
7530                _next_ordinal_to_read += 1;
7531                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7532                next_offset += envelope_size;
7533            }
7534
7535            Ok(())
7536        }
7537    }
7538
7539    impl ChannelInfo {
7540        #[inline(always)]
7541        fn max_ordinal_present(&self) -> u64 {
7542            if let Some(_) = self.masked_by_regulatory_domain {
7543                return 6;
7544            }
7545            if let Some(_) = self.spectrum_bandwidth_hz {
7546                return 5;
7547            }
7548            if let Some(_) = self.spectrum_center_frequency_hz {
7549                return 4;
7550            }
7551            if let Some(_) = self.max_transmit_power_dbm {
7552                return 3;
7553            }
7554            if let Some(_) = self.id {
7555                return 2;
7556            }
7557            if let Some(_) = self.index {
7558                return 1;
7559            }
7560            0
7561        }
7562    }
7563
7564    impl fidl::encoding::ValueTypeMarker for ChannelInfo {
7565        type Borrowed<'a> = &'a Self;
7566        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
7567            value
7568        }
7569    }
7570
7571    unsafe impl fidl::encoding::TypeMarker for ChannelInfo {
7572        type Owned = Self;
7573
7574        #[inline(always)]
7575        fn inline_align(_context: fidl::encoding::Context) -> usize {
7576            8
7577        }
7578
7579        #[inline(always)]
7580        fn inline_size(_context: fidl::encoding::Context) -> usize {
7581            16
7582        }
7583    }
7584
7585    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<ChannelInfo, D>
7586        for &ChannelInfo
7587    {
7588        unsafe fn encode(
7589            self,
7590            encoder: &mut fidl::encoding::Encoder<'_, D>,
7591            offset: usize,
7592            mut depth: fidl::encoding::Depth,
7593        ) -> fidl::Result<()> {
7594            encoder.debug_check_bounds::<ChannelInfo>(offset);
7595            // Vector header
7596            let max_ordinal: u64 = self.max_ordinal_present();
7597            encoder.write_num(max_ordinal, offset);
7598            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
7599            // Calling encoder.out_of_line_offset(0) is not allowed.
7600            if max_ordinal == 0 {
7601                return Ok(());
7602            }
7603            depth.increment()?;
7604            let envelope_size = 8;
7605            let bytes_len = max_ordinal as usize * envelope_size;
7606            #[allow(unused_variables)]
7607            let offset = encoder.out_of_line_offset(bytes_len);
7608            let mut _prev_end_offset: usize = 0;
7609            if 1 > max_ordinal {
7610                return Ok(());
7611            }
7612
7613            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7614            // are envelope_size bytes.
7615            let cur_offset: usize = (1 - 1) * envelope_size;
7616
7617            // Zero reserved fields.
7618            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7619
7620            // Safety:
7621            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7622            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7623            //   envelope_size bytes, there is always sufficient room.
7624            fidl::encoding::encode_in_envelope_optional::<u16, D>(
7625                self.index.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
7626                encoder,
7627                offset + cur_offset,
7628                depth,
7629            )?;
7630
7631            _prev_end_offset = cur_offset + envelope_size;
7632            if 2 > max_ordinal {
7633                return Ok(());
7634            }
7635
7636            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7637            // are envelope_size bytes.
7638            let cur_offset: usize = (2 - 1) * envelope_size;
7639
7640            // Zero reserved fields.
7641            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7642
7643            // Safety:
7644            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7645            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7646            //   envelope_size bytes, there is always sufficient room.
7647            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<16>, D>(
7648                self.id.as_ref().map(
7649                    <fidl::encoding::BoundedString<16> as fidl::encoding::ValueTypeMarker>::borrow,
7650                ),
7651                encoder,
7652                offset + cur_offset,
7653                depth,
7654            )?;
7655
7656            _prev_end_offset = cur_offset + envelope_size;
7657            if 3 > max_ordinal {
7658                return Ok(());
7659            }
7660
7661            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7662            // are envelope_size bytes.
7663            let cur_offset: usize = (3 - 1) * envelope_size;
7664
7665            // Zero reserved fields.
7666            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7667
7668            // Safety:
7669            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7670            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7671            //   envelope_size bytes, there is always sufficient room.
7672            fidl::encoding::encode_in_envelope_optional::<i8, D>(
7673                self.max_transmit_power_dbm
7674                    .as_ref()
7675                    .map(<i8 as fidl::encoding::ValueTypeMarker>::borrow),
7676                encoder,
7677                offset + cur_offset,
7678                depth,
7679            )?;
7680
7681            _prev_end_offset = cur_offset + envelope_size;
7682            if 4 > max_ordinal {
7683                return Ok(());
7684            }
7685
7686            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7687            // are envelope_size bytes.
7688            let cur_offset: usize = (4 - 1) * envelope_size;
7689
7690            // Zero reserved fields.
7691            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7692
7693            // Safety:
7694            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7695            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7696            //   envelope_size bytes, there is always sufficient room.
7697            fidl::encoding::encode_in_envelope_optional::<u64, D>(
7698                self.spectrum_center_frequency_hz
7699                    .as_ref()
7700                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
7701                encoder,
7702                offset + cur_offset,
7703                depth,
7704            )?;
7705
7706            _prev_end_offset = cur_offset + envelope_size;
7707            if 5 > max_ordinal {
7708                return Ok(());
7709            }
7710
7711            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7712            // are envelope_size bytes.
7713            let cur_offset: usize = (5 - 1) * envelope_size;
7714
7715            // Zero reserved fields.
7716            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7717
7718            // Safety:
7719            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7720            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7721            //   envelope_size bytes, there is always sufficient room.
7722            fidl::encoding::encode_in_envelope_optional::<u64, D>(
7723                self.spectrum_bandwidth_hz
7724                    .as_ref()
7725                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
7726                encoder,
7727                offset + cur_offset,
7728                depth,
7729            )?;
7730
7731            _prev_end_offset = cur_offset + envelope_size;
7732            if 6 > max_ordinal {
7733                return Ok(());
7734            }
7735
7736            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7737            // are envelope_size bytes.
7738            let cur_offset: usize = (6 - 1) * envelope_size;
7739
7740            // Zero reserved fields.
7741            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7742
7743            // Safety:
7744            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7745            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7746            //   envelope_size bytes, there is always sufficient room.
7747            fidl::encoding::encode_in_envelope_optional::<bool, D>(
7748                self.masked_by_regulatory_domain
7749                    .as_ref()
7750                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
7751                encoder,
7752                offset + cur_offset,
7753                depth,
7754            )?;
7755
7756            _prev_end_offset = cur_offset + envelope_size;
7757
7758            Ok(())
7759        }
7760    }
7761
7762    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ChannelInfo {
7763        #[inline(always)]
7764        fn new_empty() -> Self {
7765            Self::default()
7766        }
7767
7768        unsafe fn decode(
7769            &mut self,
7770            decoder: &mut fidl::encoding::Decoder<'_, D>,
7771            offset: usize,
7772            mut depth: fidl::encoding::Depth,
7773        ) -> fidl::Result<()> {
7774            decoder.debug_check_bounds::<Self>(offset);
7775            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
7776                None => return Err(fidl::Error::NotNullable),
7777                Some(len) => len,
7778            };
7779            // Calling decoder.out_of_line_offset(0) is not allowed.
7780            if len == 0 {
7781                return Ok(());
7782            };
7783            depth.increment()?;
7784            let envelope_size = 8;
7785            let bytes_len = len * envelope_size;
7786            let offset = decoder.out_of_line_offset(bytes_len)?;
7787            // Decode the envelope for each type.
7788            let mut _next_ordinal_to_read = 0;
7789            let mut next_offset = offset;
7790            let end_offset = offset + bytes_len;
7791            _next_ordinal_to_read += 1;
7792            if next_offset >= end_offset {
7793                return Ok(());
7794            }
7795
7796            // Decode unknown envelopes for gaps in ordinals.
7797            while _next_ordinal_to_read < 1 {
7798                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7799                _next_ordinal_to_read += 1;
7800                next_offset += envelope_size;
7801            }
7802
7803            let next_out_of_line = decoder.next_out_of_line();
7804            let handles_before = decoder.remaining_handles();
7805            if let Some((inlined, num_bytes, num_handles)) =
7806                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7807            {
7808                let member_inline_size =
7809                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7810                if inlined != (member_inline_size <= 4) {
7811                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7812                }
7813                let inner_offset;
7814                let mut inner_depth = depth.clone();
7815                if inlined {
7816                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7817                    inner_offset = next_offset;
7818                } else {
7819                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7820                    inner_depth.increment()?;
7821                }
7822                let val_ref = self.index.get_or_insert_with(|| fidl::new_empty!(u16, D));
7823                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
7824                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7825                {
7826                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7827                }
7828                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7829                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7830                }
7831            }
7832
7833            next_offset += envelope_size;
7834            _next_ordinal_to_read += 1;
7835            if next_offset >= end_offset {
7836                return Ok(());
7837            }
7838
7839            // Decode unknown envelopes for gaps in ordinals.
7840            while _next_ordinal_to_read < 2 {
7841                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7842                _next_ordinal_to_read += 1;
7843                next_offset += envelope_size;
7844            }
7845
7846            let next_out_of_line = decoder.next_out_of_line();
7847            let handles_before = decoder.remaining_handles();
7848            if let Some((inlined, num_bytes, num_handles)) =
7849                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7850            {
7851                let member_inline_size =
7852                    <fidl::encoding::BoundedString<16> as fidl::encoding::TypeMarker>::inline_size(
7853                        decoder.context,
7854                    );
7855                if inlined != (member_inline_size <= 4) {
7856                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7857                }
7858                let inner_offset;
7859                let mut inner_depth = depth.clone();
7860                if inlined {
7861                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7862                    inner_offset = next_offset;
7863                } else {
7864                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7865                    inner_depth.increment()?;
7866                }
7867                let val_ref = self
7868                    .id
7869                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<16>, D));
7870                fidl::decode!(
7871                    fidl::encoding::BoundedString<16>,
7872                    D,
7873                    val_ref,
7874                    decoder,
7875                    inner_offset,
7876                    inner_depth
7877                )?;
7878                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7879                {
7880                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7881                }
7882                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7883                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7884                }
7885            }
7886
7887            next_offset += envelope_size;
7888            _next_ordinal_to_read += 1;
7889            if next_offset >= end_offset {
7890                return Ok(());
7891            }
7892
7893            // Decode unknown envelopes for gaps in ordinals.
7894            while _next_ordinal_to_read < 3 {
7895                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7896                _next_ordinal_to_read += 1;
7897                next_offset += envelope_size;
7898            }
7899
7900            let next_out_of_line = decoder.next_out_of_line();
7901            let handles_before = decoder.remaining_handles();
7902            if let Some((inlined, num_bytes, num_handles)) =
7903                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7904            {
7905                let member_inline_size =
7906                    <i8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7907                if inlined != (member_inline_size <= 4) {
7908                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7909                }
7910                let inner_offset;
7911                let mut inner_depth = depth.clone();
7912                if inlined {
7913                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7914                    inner_offset = next_offset;
7915                } else {
7916                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7917                    inner_depth.increment()?;
7918                }
7919                let val_ref =
7920                    self.max_transmit_power_dbm.get_or_insert_with(|| fidl::new_empty!(i8, D));
7921                fidl::decode!(i8, D, val_ref, decoder, inner_offset, inner_depth)?;
7922                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7923                {
7924                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7925                }
7926                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7927                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7928                }
7929            }
7930
7931            next_offset += envelope_size;
7932            _next_ordinal_to_read += 1;
7933            if next_offset >= end_offset {
7934                return Ok(());
7935            }
7936
7937            // Decode unknown envelopes for gaps in ordinals.
7938            while _next_ordinal_to_read < 4 {
7939                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7940                _next_ordinal_to_read += 1;
7941                next_offset += envelope_size;
7942            }
7943
7944            let next_out_of_line = decoder.next_out_of_line();
7945            let handles_before = decoder.remaining_handles();
7946            if let Some((inlined, num_bytes, num_handles)) =
7947                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7948            {
7949                let member_inline_size =
7950                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7951                if inlined != (member_inline_size <= 4) {
7952                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7953                }
7954                let inner_offset;
7955                let mut inner_depth = depth.clone();
7956                if inlined {
7957                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7958                    inner_offset = next_offset;
7959                } else {
7960                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7961                    inner_depth.increment()?;
7962                }
7963                let val_ref = self
7964                    .spectrum_center_frequency_hz
7965                    .get_or_insert_with(|| fidl::new_empty!(u64, D));
7966                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
7967                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7968                {
7969                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7970                }
7971                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7972                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7973                }
7974            }
7975
7976            next_offset += envelope_size;
7977            _next_ordinal_to_read += 1;
7978            if next_offset >= end_offset {
7979                return Ok(());
7980            }
7981
7982            // Decode unknown envelopes for gaps in ordinals.
7983            while _next_ordinal_to_read < 5 {
7984                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7985                _next_ordinal_to_read += 1;
7986                next_offset += envelope_size;
7987            }
7988
7989            let next_out_of_line = decoder.next_out_of_line();
7990            let handles_before = decoder.remaining_handles();
7991            if let Some((inlined, num_bytes, num_handles)) =
7992                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7993            {
7994                let member_inline_size =
7995                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7996                if inlined != (member_inline_size <= 4) {
7997                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7998                }
7999                let inner_offset;
8000                let mut inner_depth = depth.clone();
8001                if inlined {
8002                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8003                    inner_offset = next_offset;
8004                } else {
8005                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8006                    inner_depth.increment()?;
8007                }
8008                let val_ref =
8009                    self.spectrum_bandwidth_hz.get_or_insert_with(|| fidl::new_empty!(u64, D));
8010                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
8011                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8012                {
8013                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8014                }
8015                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8016                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8017                }
8018            }
8019
8020            next_offset += envelope_size;
8021            _next_ordinal_to_read += 1;
8022            if next_offset >= end_offset {
8023                return Ok(());
8024            }
8025
8026            // Decode unknown envelopes for gaps in ordinals.
8027            while _next_ordinal_to_read < 6 {
8028                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8029                _next_ordinal_to_read += 1;
8030                next_offset += envelope_size;
8031            }
8032
8033            let next_out_of_line = decoder.next_out_of_line();
8034            let handles_before = decoder.remaining_handles();
8035            if let Some((inlined, num_bytes, num_handles)) =
8036                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8037            {
8038                let member_inline_size =
8039                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
8040                if inlined != (member_inline_size <= 4) {
8041                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8042                }
8043                let inner_offset;
8044                let mut inner_depth = depth.clone();
8045                if inlined {
8046                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8047                    inner_offset = next_offset;
8048                } else {
8049                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8050                    inner_depth.increment()?;
8051                }
8052                let val_ref = self
8053                    .masked_by_regulatory_domain
8054                    .get_or_insert_with(|| fidl::new_empty!(bool, D));
8055                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
8056                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8057                {
8058                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8059                }
8060                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8061                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8062                }
8063            }
8064
8065            next_offset += envelope_size;
8066
8067            // Decode the remaining unknown envelopes.
8068            while next_offset < end_offset {
8069                _next_ordinal_to_read += 1;
8070                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8071                next_offset += envelope_size;
8072            }
8073
8074            Ok(())
8075        }
8076    }
8077
8078    impl CommissioningDataset {
8079        #[inline(always)]
8080        fn max_ordinal_present(&self) -> u64 {
8081            if let Some(_) = self.has_extra_tlv {
8082                return 9;
8083            }
8084            if let Some(_) = self.is_joiner_udp_port_set {
8085                return 8;
8086            }
8087            if let Some(_) = self.is_steering_data_set {
8088                return 7;
8089            }
8090            if let Some(_) = self.is_session_id_set {
8091                return 6;
8092            }
8093            if let Some(_) = self.is_locator_set {
8094                return 5;
8095            }
8096            if let Some(_) = self.joiner_udp_port {
8097                return 4;
8098            }
8099            if let Some(_) = self.steering_data {
8100                return 3;
8101            }
8102            if let Some(_) = self.session_id {
8103                return 2;
8104            }
8105            if let Some(_) = self.locator {
8106                return 1;
8107            }
8108            0
8109        }
8110    }
8111
8112    impl fidl::encoding::ValueTypeMarker for CommissioningDataset {
8113        type Borrowed<'a> = &'a Self;
8114        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
8115            value
8116        }
8117    }
8118
8119    unsafe impl fidl::encoding::TypeMarker for CommissioningDataset {
8120        type Owned = Self;
8121
8122        #[inline(always)]
8123        fn inline_align(_context: fidl::encoding::Context) -> usize {
8124            8
8125        }
8126
8127        #[inline(always)]
8128        fn inline_size(_context: fidl::encoding::Context) -> usize {
8129            16
8130        }
8131    }
8132
8133    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<CommissioningDataset, D>
8134        for &CommissioningDataset
8135    {
8136        unsafe fn encode(
8137            self,
8138            encoder: &mut fidl::encoding::Encoder<'_, D>,
8139            offset: usize,
8140            mut depth: fidl::encoding::Depth,
8141        ) -> fidl::Result<()> {
8142            encoder.debug_check_bounds::<CommissioningDataset>(offset);
8143            // Vector header
8144            let max_ordinal: u64 = self.max_ordinal_present();
8145            encoder.write_num(max_ordinal, offset);
8146            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
8147            // Calling encoder.out_of_line_offset(0) is not allowed.
8148            if max_ordinal == 0 {
8149                return Ok(());
8150            }
8151            depth.increment()?;
8152            let envelope_size = 8;
8153            let bytes_len = max_ordinal as usize * envelope_size;
8154            #[allow(unused_variables)]
8155            let offset = encoder.out_of_line_offset(bytes_len);
8156            let mut _prev_end_offset: usize = 0;
8157            if 1 > max_ordinal {
8158                return Ok(());
8159            }
8160
8161            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8162            // are envelope_size bytes.
8163            let cur_offset: usize = (1 - 1) * envelope_size;
8164
8165            // Zero reserved fields.
8166            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8167
8168            // Safety:
8169            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8170            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8171            //   envelope_size bytes, there is always sufficient room.
8172            fidl::encoding::encode_in_envelope_optional::<u16, D>(
8173                self.locator.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
8174                encoder,
8175                offset + cur_offset,
8176                depth,
8177            )?;
8178
8179            _prev_end_offset = cur_offset + envelope_size;
8180            if 2 > max_ordinal {
8181                return Ok(());
8182            }
8183
8184            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8185            // are envelope_size bytes.
8186            let cur_offset: usize = (2 - 1) * envelope_size;
8187
8188            // Zero reserved fields.
8189            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8190
8191            // Safety:
8192            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8193            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8194            //   envelope_size bytes, there is always sufficient room.
8195            fidl::encoding::encode_in_envelope_optional::<u16, D>(
8196                self.session_id.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
8197                encoder,
8198                offset + cur_offset,
8199                depth,
8200            )?;
8201
8202            _prev_end_offset = cur_offset + envelope_size;
8203            if 3 > max_ordinal {
8204                return Ok(());
8205            }
8206
8207            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8208            // are envelope_size bytes.
8209            let cur_offset: usize = (3 - 1) * envelope_size;
8210
8211            // Zero reserved fields.
8212            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8213
8214            // Safety:
8215            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8216            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8217            //   envelope_size bytes, there is always sufficient room.
8218            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u8, 16>, D>(
8219                self.steering_data.as_ref().map(
8220                    <fidl::encoding::Vector<u8, 16> as fidl::encoding::ValueTypeMarker>::borrow,
8221                ),
8222                encoder,
8223                offset + cur_offset,
8224                depth,
8225            )?;
8226
8227            _prev_end_offset = cur_offset + envelope_size;
8228            if 4 > max_ordinal {
8229                return Ok(());
8230            }
8231
8232            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8233            // are envelope_size bytes.
8234            let cur_offset: usize = (4 - 1) * envelope_size;
8235
8236            // Zero reserved fields.
8237            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8238
8239            // Safety:
8240            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8241            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8242            //   envelope_size bytes, there is always sufficient room.
8243            fidl::encoding::encode_in_envelope_optional::<u16, D>(
8244                self.joiner_udp_port.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
8245                encoder,
8246                offset + cur_offset,
8247                depth,
8248            )?;
8249
8250            _prev_end_offset = cur_offset + envelope_size;
8251            if 5 > max_ordinal {
8252                return Ok(());
8253            }
8254
8255            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8256            // are envelope_size bytes.
8257            let cur_offset: usize = (5 - 1) * envelope_size;
8258
8259            // Zero reserved fields.
8260            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8261
8262            // Safety:
8263            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8264            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8265            //   envelope_size bytes, there is always sufficient room.
8266            fidl::encoding::encode_in_envelope_optional::<bool, D>(
8267                self.is_locator_set.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
8268                encoder,
8269                offset + cur_offset,
8270                depth,
8271            )?;
8272
8273            _prev_end_offset = cur_offset + envelope_size;
8274            if 6 > max_ordinal {
8275                return Ok(());
8276            }
8277
8278            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8279            // are envelope_size bytes.
8280            let cur_offset: usize = (6 - 1) * envelope_size;
8281
8282            // Zero reserved fields.
8283            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8284
8285            // Safety:
8286            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8287            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8288            //   envelope_size bytes, there is always sufficient room.
8289            fidl::encoding::encode_in_envelope_optional::<bool, D>(
8290                self.is_session_id_set
8291                    .as_ref()
8292                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
8293                encoder,
8294                offset + cur_offset,
8295                depth,
8296            )?;
8297
8298            _prev_end_offset = cur_offset + envelope_size;
8299            if 7 > max_ordinal {
8300                return Ok(());
8301            }
8302
8303            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8304            // are envelope_size bytes.
8305            let cur_offset: usize = (7 - 1) * envelope_size;
8306
8307            // Zero reserved fields.
8308            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8309
8310            // Safety:
8311            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8312            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8313            //   envelope_size bytes, there is always sufficient room.
8314            fidl::encoding::encode_in_envelope_optional::<bool, D>(
8315                self.is_steering_data_set
8316                    .as_ref()
8317                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
8318                encoder,
8319                offset + cur_offset,
8320                depth,
8321            )?;
8322
8323            _prev_end_offset = cur_offset + envelope_size;
8324            if 8 > max_ordinal {
8325                return Ok(());
8326            }
8327
8328            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8329            // are envelope_size bytes.
8330            let cur_offset: usize = (8 - 1) * envelope_size;
8331
8332            // Zero reserved fields.
8333            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8334
8335            // Safety:
8336            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8337            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8338            //   envelope_size bytes, there is always sufficient room.
8339            fidl::encoding::encode_in_envelope_optional::<bool, D>(
8340                self.is_joiner_udp_port_set
8341                    .as_ref()
8342                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
8343                encoder,
8344                offset + cur_offset,
8345                depth,
8346            )?;
8347
8348            _prev_end_offset = cur_offset + envelope_size;
8349            if 9 > max_ordinal {
8350                return Ok(());
8351            }
8352
8353            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8354            // are envelope_size bytes.
8355            let cur_offset: usize = (9 - 1) * envelope_size;
8356
8357            // Zero reserved fields.
8358            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8359
8360            // Safety:
8361            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8362            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8363            //   envelope_size bytes, there is always sufficient room.
8364            fidl::encoding::encode_in_envelope_optional::<bool, D>(
8365                self.has_extra_tlv.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
8366                encoder,
8367                offset + cur_offset,
8368                depth,
8369            )?;
8370
8371            _prev_end_offset = cur_offset + envelope_size;
8372
8373            Ok(())
8374        }
8375    }
8376
8377    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for CommissioningDataset {
8378        #[inline(always)]
8379        fn new_empty() -> Self {
8380            Self::default()
8381        }
8382
8383        unsafe fn decode(
8384            &mut self,
8385            decoder: &mut fidl::encoding::Decoder<'_, D>,
8386            offset: usize,
8387            mut depth: fidl::encoding::Depth,
8388        ) -> fidl::Result<()> {
8389            decoder.debug_check_bounds::<Self>(offset);
8390            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
8391                None => return Err(fidl::Error::NotNullable),
8392                Some(len) => len,
8393            };
8394            // Calling decoder.out_of_line_offset(0) is not allowed.
8395            if len == 0 {
8396                return Ok(());
8397            };
8398            depth.increment()?;
8399            let envelope_size = 8;
8400            let bytes_len = len * envelope_size;
8401            let offset = decoder.out_of_line_offset(bytes_len)?;
8402            // Decode the envelope for each type.
8403            let mut _next_ordinal_to_read = 0;
8404            let mut next_offset = offset;
8405            let end_offset = offset + bytes_len;
8406            _next_ordinal_to_read += 1;
8407            if next_offset >= end_offset {
8408                return Ok(());
8409            }
8410
8411            // Decode unknown envelopes for gaps in ordinals.
8412            while _next_ordinal_to_read < 1 {
8413                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8414                _next_ordinal_to_read += 1;
8415                next_offset += envelope_size;
8416            }
8417
8418            let next_out_of_line = decoder.next_out_of_line();
8419            let handles_before = decoder.remaining_handles();
8420            if let Some((inlined, num_bytes, num_handles)) =
8421                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8422            {
8423                let member_inline_size =
8424                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
8425                if inlined != (member_inline_size <= 4) {
8426                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8427                }
8428                let inner_offset;
8429                let mut inner_depth = depth.clone();
8430                if inlined {
8431                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8432                    inner_offset = next_offset;
8433                } else {
8434                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8435                    inner_depth.increment()?;
8436                }
8437                let val_ref = self.locator.get_or_insert_with(|| fidl::new_empty!(u16, D));
8438                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
8439                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8440                {
8441                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8442                }
8443                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8444                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8445                }
8446            }
8447
8448            next_offset += envelope_size;
8449            _next_ordinal_to_read += 1;
8450            if next_offset >= end_offset {
8451                return Ok(());
8452            }
8453
8454            // Decode unknown envelopes for gaps in ordinals.
8455            while _next_ordinal_to_read < 2 {
8456                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8457                _next_ordinal_to_read += 1;
8458                next_offset += envelope_size;
8459            }
8460
8461            let next_out_of_line = decoder.next_out_of_line();
8462            let handles_before = decoder.remaining_handles();
8463            if let Some((inlined, num_bytes, num_handles)) =
8464                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8465            {
8466                let member_inline_size =
8467                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
8468                if inlined != (member_inline_size <= 4) {
8469                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8470                }
8471                let inner_offset;
8472                let mut inner_depth = depth.clone();
8473                if inlined {
8474                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8475                    inner_offset = next_offset;
8476                } else {
8477                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8478                    inner_depth.increment()?;
8479                }
8480                let val_ref = self.session_id.get_or_insert_with(|| fidl::new_empty!(u16, D));
8481                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
8482                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8483                {
8484                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8485                }
8486                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8487                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8488                }
8489            }
8490
8491            next_offset += envelope_size;
8492            _next_ordinal_to_read += 1;
8493            if next_offset >= end_offset {
8494                return Ok(());
8495            }
8496
8497            // Decode unknown envelopes for gaps in ordinals.
8498            while _next_ordinal_to_read < 3 {
8499                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8500                _next_ordinal_to_read += 1;
8501                next_offset += envelope_size;
8502            }
8503
8504            let next_out_of_line = decoder.next_out_of_line();
8505            let handles_before = decoder.remaining_handles();
8506            if let Some((inlined, num_bytes, num_handles)) =
8507                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8508            {
8509                let member_inline_size =
8510                    <fidl::encoding::Vector<u8, 16> as fidl::encoding::TypeMarker>::inline_size(
8511                        decoder.context,
8512                    );
8513                if inlined != (member_inline_size <= 4) {
8514                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8515                }
8516                let inner_offset;
8517                let mut inner_depth = depth.clone();
8518                if inlined {
8519                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8520                    inner_offset = next_offset;
8521                } else {
8522                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8523                    inner_depth.increment()?;
8524                }
8525                let val_ref = self
8526                    .steering_data
8527                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u8, 16>, D));
8528                fidl::decode!(fidl::encoding::Vector<u8, 16>, D, val_ref, decoder, inner_offset, inner_depth)?;
8529                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8530                {
8531                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8532                }
8533                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8534                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8535                }
8536            }
8537
8538            next_offset += envelope_size;
8539            _next_ordinal_to_read += 1;
8540            if next_offset >= end_offset {
8541                return Ok(());
8542            }
8543
8544            // Decode unknown envelopes for gaps in ordinals.
8545            while _next_ordinal_to_read < 4 {
8546                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8547                _next_ordinal_to_read += 1;
8548                next_offset += envelope_size;
8549            }
8550
8551            let next_out_of_line = decoder.next_out_of_line();
8552            let handles_before = decoder.remaining_handles();
8553            if let Some((inlined, num_bytes, num_handles)) =
8554                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8555            {
8556                let member_inline_size =
8557                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
8558                if inlined != (member_inline_size <= 4) {
8559                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8560                }
8561                let inner_offset;
8562                let mut inner_depth = depth.clone();
8563                if inlined {
8564                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8565                    inner_offset = next_offset;
8566                } else {
8567                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8568                    inner_depth.increment()?;
8569                }
8570                let val_ref = self.joiner_udp_port.get_or_insert_with(|| fidl::new_empty!(u16, D));
8571                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
8572                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8573                {
8574                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8575                }
8576                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8577                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8578                }
8579            }
8580
8581            next_offset += envelope_size;
8582            _next_ordinal_to_read += 1;
8583            if next_offset >= end_offset {
8584                return Ok(());
8585            }
8586
8587            // Decode unknown envelopes for gaps in ordinals.
8588            while _next_ordinal_to_read < 5 {
8589                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8590                _next_ordinal_to_read += 1;
8591                next_offset += envelope_size;
8592            }
8593
8594            let next_out_of_line = decoder.next_out_of_line();
8595            let handles_before = decoder.remaining_handles();
8596            if let Some((inlined, num_bytes, num_handles)) =
8597                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8598            {
8599                let member_inline_size =
8600                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
8601                if inlined != (member_inline_size <= 4) {
8602                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8603                }
8604                let inner_offset;
8605                let mut inner_depth = depth.clone();
8606                if inlined {
8607                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8608                    inner_offset = next_offset;
8609                } else {
8610                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8611                    inner_depth.increment()?;
8612                }
8613                let val_ref = self.is_locator_set.get_or_insert_with(|| fidl::new_empty!(bool, D));
8614                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
8615                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8616                {
8617                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8618                }
8619                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8620                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8621                }
8622            }
8623
8624            next_offset += envelope_size;
8625            _next_ordinal_to_read += 1;
8626            if next_offset >= end_offset {
8627                return Ok(());
8628            }
8629
8630            // Decode unknown envelopes for gaps in ordinals.
8631            while _next_ordinal_to_read < 6 {
8632                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8633                _next_ordinal_to_read += 1;
8634                next_offset += envelope_size;
8635            }
8636
8637            let next_out_of_line = decoder.next_out_of_line();
8638            let handles_before = decoder.remaining_handles();
8639            if let Some((inlined, num_bytes, num_handles)) =
8640                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8641            {
8642                let member_inline_size =
8643                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
8644                if inlined != (member_inline_size <= 4) {
8645                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8646                }
8647                let inner_offset;
8648                let mut inner_depth = depth.clone();
8649                if inlined {
8650                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8651                    inner_offset = next_offset;
8652                } else {
8653                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8654                    inner_depth.increment()?;
8655                }
8656                let val_ref =
8657                    self.is_session_id_set.get_or_insert_with(|| fidl::new_empty!(bool, D));
8658                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
8659                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8660                {
8661                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8662                }
8663                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8664                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8665                }
8666            }
8667
8668            next_offset += envelope_size;
8669            _next_ordinal_to_read += 1;
8670            if next_offset >= end_offset {
8671                return Ok(());
8672            }
8673
8674            // Decode unknown envelopes for gaps in ordinals.
8675            while _next_ordinal_to_read < 7 {
8676                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8677                _next_ordinal_to_read += 1;
8678                next_offset += envelope_size;
8679            }
8680
8681            let next_out_of_line = decoder.next_out_of_line();
8682            let handles_before = decoder.remaining_handles();
8683            if let Some((inlined, num_bytes, num_handles)) =
8684                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8685            {
8686                let member_inline_size =
8687                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
8688                if inlined != (member_inline_size <= 4) {
8689                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8690                }
8691                let inner_offset;
8692                let mut inner_depth = depth.clone();
8693                if inlined {
8694                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8695                    inner_offset = next_offset;
8696                } else {
8697                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8698                    inner_depth.increment()?;
8699                }
8700                let val_ref =
8701                    self.is_steering_data_set.get_or_insert_with(|| fidl::new_empty!(bool, D));
8702                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
8703                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8704                {
8705                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8706                }
8707                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8708                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8709                }
8710            }
8711
8712            next_offset += envelope_size;
8713            _next_ordinal_to_read += 1;
8714            if next_offset >= end_offset {
8715                return Ok(());
8716            }
8717
8718            // Decode unknown envelopes for gaps in ordinals.
8719            while _next_ordinal_to_read < 8 {
8720                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8721                _next_ordinal_to_read += 1;
8722                next_offset += envelope_size;
8723            }
8724
8725            let next_out_of_line = decoder.next_out_of_line();
8726            let handles_before = decoder.remaining_handles();
8727            if let Some((inlined, num_bytes, num_handles)) =
8728                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8729            {
8730                let member_inline_size =
8731                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
8732                if inlined != (member_inline_size <= 4) {
8733                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8734                }
8735                let inner_offset;
8736                let mut inner_depth = depth.clone();
8737                if inlined {
8738                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8739                    inner_offset = next_offset;
8740                } else {
8741                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8742                    inner_depth.increment()?;
8743                }
8744                let val_ref =
8745                    self.is_joiner_udp_port_set.get_or_insert_with(|| fidl::new_empty!(bool, D));
8746                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
8747                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8748                {
8749                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8750                }
8751                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8752                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8753                }
8754            }
8755
8756            next_offset += envelope_size;
8757            _next_ordinal_to_read += 1;
8758            if next_offset >= end_offset {
8759                return Ok(());
8760            }
8761
8762            // Decode unknown envelopes for gaps in ordinals.
8763            while _next_ordinal_to_read < 9 {
8764                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8765                _next_ordinal_to_read += 1;
8766                next_offset += envelope_size;
8767            }
8768
8769            let next_out_of_line = decoder.next_out_of_line();
8770            let handles_before = decoder.remaining_handles();
8771            if let Some((inlined, num_bytes, num_handles)) =
8772                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8773            {
8774                let member_inline_size =
8775                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
8776                if inlined != (member_inline_size <= 4) {
8777                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8778                }
8779                let inner_offset;
8780                let mut inner_depth = depth.clone();
8781                if inlined {
8782                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8783                    inner_offset = next_offset;
8784                } else {
8785                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8786                    inner_depth.increment()?;
8787                }
8788                let val_ref = self.has_extra_tlv.get_or_insert_with(|| fidl::new_empty!(bool, D));
8789                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
8790                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8791                {
8792                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8793                }
8794                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8795                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8796                }
8797            }
8798
8799            next_offset += envelope_size;
8800
8801            // Decode the remaining unknown envelopes.
8802            while next_offset < end_offset {
8803                _next_ordinal_to_read += 1;
8804                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8805                next_offset += envelope_size;
8806            }
8807
8808            Ok(())
8809        }
8810    }
8811
8812    impl Dhcp6PdInfo {
8813        #[inline(always)]
8814        fn max_ordinal_present(&self) -> u64 {
8815            if let Some(_) = self.hashed_pd_prefix {
8816                return 3;
8817            }
8818            if let Some(_) = self.pd_processed_ra_info {
8819                return 2;
8820            }
8821            if let Some(_) = self.dhcp6pd_state {
8822                return 1;
8823            }
8824            0
8825        }
8826    }
8827
8828    impl fidl::encoding::ValueTypeMarker for Dhcp6PdInfo {
8829        type Borrowed<'a> = &'a Self;
8830        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
8831            value
8832        }
8833    }
8834
8835    unsafe impl fidl::encoding::TypeMarker for Dhcp6PdInfo {
8836        type Owned = Self;
8837
8838        #[inline(always)]
8839        fn inline_align(_context: fidl::encoding::Context) -> usize {
8840            8
8841        }
8842
8843        #[inline(always)]
8844        fn inline_size(_context: fidl::encoding::Context) -> usize {
8845            16
8846        }
8847    }
8848
8849    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Dhcp6PdInfo, D>
8850        for &Dhcp6PdInfo
8851    {
8852        unsafe fn encode(
8853            self,
8854            encoder: &mut fidl::encoding::Encoder<'_, D>,
8855            offset: usize,
8856            mut depth: fidl::encoding::Depth,
8857        ) -> fidl::Result<()> {
8858            encoder.debug_check_bounds::<Dhcp6PdInfo>(offset);
8859            // Vector header
8860            let max_ordinal: u64 = self.max_ordinal_present();
8861            encoder.write_num(max_ordinal, offset);
8862            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
8863            // Calling encoder.out_of_line_offset(0) is not allowed.
8864            if max_ordinal == 0 {
8865                return Ok(());
8866            }
8867            depth.increment()?;
8868            let envelope_size = 8;
8869            let bytes_len = max_ordinal as usize * envelope_size;
8870            #[allow(unused_variables)]
8871            let offset = encoder.out_of_line_offset(bytes_len);
8872            let mut _prev_end_offset: usize = 0;
8873            if 1 > max_ordinal {
8874                return Ok(());
8875            }
8876
8877            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8878            // are envelope_size bytes.
8879            let cur_offset: usize = (1 - 1) * envelope_size;
8880
8881            // Zero reserved fields.
8882            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8883
8884            // Safety:
8885            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8886            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8887            //   envelope_size bytes, there is always sufficient room.
8888            fidl::encoding::encode_in_envelope_optional::<Dhcp6PdState, D>(
8889                self.dhcp6pd_state
8890                    .as_ref()
8891                    .map(<Dhcp6PdState as fidl::encoding::ValueTypeMarker>::borrow),
8892                encoder,
8893                offset + cur_offset,
8894                depth,
8895            )?;
8896
8897            _prev_end_offset = cur_offset + envelope_size;
8898            if 2 > max_ordinal {
8899                return Ok(());
8900            }
8901
8902            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8903            // are envelope_size bytes.
8904            let cur_offset: usize = (2 - 1) * envelope_size;
8905
8906            // Zero reserved fields.
8907            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8908
8909            // Safety:
8910            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8911            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8912            //   envelope_size bytes, there is always sufficient room.
8913            fidl::encoding::encode_in_envelope_optional::<PdProcessedRaInfo, D>(
8914                self.pd_processed_ra_info
8915                    .as_ref()
8916                    .map(<PdProcessedRaInfo as fidl::encoding::ValueTypeMarker>::borrow),
8917                encoder,
8918                offset + cur_offset,
8919                depth,
8920            )?;
8921
8922            _prev_end_offset = cur_offset + envelope_size;
8923            if 3 > max_ordinal {
8924                return Ok(());
8925            }
8926
8927            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8928            // are envelope_size bytes.
8929            let cur_offset: usize = (3 - 1) * envelope_size;
8930
8931            // Zero reserved fields.
8932            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8933
8934            // Safety:
8935            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8936            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8937            //   envelope_size bytes, there is always sufficient room.
8938            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u8, 32>, D>(
8939                self.hashed_pd_prefix.as_ref().map(
8940                    <fidl::encoding::Vector<u8, 32> as fidl::encoding::ValueTypeMarker>::borrow,
8941                ),
8942                encoder,
8943                offset + cur_offset,
8944                depth,
8945            )?;
8946
8947            _prev_end_offset = cur_offset + envelope_size;
8948
8949            Ok(())
8950        }
8951    }
8952
8953    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Dhcp6PdInfo {
8954        #[inline(always)]
8955        fn new_empty() -> Self {
8956            Self::default()
8957        }
8958
8959        unsafe fn decode(
8960            &mut self,
8961            decoder: &mut fidl::encoding::Decoder<'_, D>,
8962            offset: usize,
8963            mut depth: fidl::encoding::Depth,
8964        ) -> fidl::Result<()> {
8965            decoder.debug_check_bounds::<Self>(offset);
8966            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
8967                None => return Err(fidl::Error::NotNullable),
8968                Some(len) => len,
8969            };
8970            // Calling decoder.out_of_line_offset(0) is not allowed.
8971            if len == 0 {
8972                return Ok(());
8973            };
8974            depth.increment()?;
8975            let envelope_size = 8;
8976            let bytes_len = len * envelope_size;
8977            let offset = decoder.out_of_line_offset(bytes_len)?;
8978            // Decode the envelope for each type.
8979            let mut _next_ordinal_to_read = 0;
8980            let mut next_offset = offset;
8981            let end_offset = offset + bytes_len;
8982            _next_ordinal_to_read += 1;
8983            if next_offset >= end_offset {
8984                return Ok(());
8985            }
8986
8987            // Decode unknown envelopes for gaps in ordinals.
8988            while _next_ordinal_to_read < 1 {
8989                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8990                _next_ordinal_to_read += 1;
8991                next_offset += envelope_size;
8992            }
8993
8994            let next_out_of_line = decoder.next_out_of_line();
8995            let handles_before = decoder.remaining_handles();
8996            if let Some((inlined, num_bytes, num_handles)) =
8997                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8998            {
8999                let member_inline_size =
9000                    <Dhcp6PdState as fidl::encoding::TypeMarker>::inline_size(decoder.context);
9001                if inlined != (member_inline_size <= 4) {
9002                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9003                }
9004                let inner_offset;
9005                let mut inner_depth = depth.clone();
9006                if inlined {
9007                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9008                    inner_offset = next_offset;
9009                } else {
9010                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9011                    inner_depth.increment()?;
9012                }
9013                let val_ref =
9014                    self.dhcp6pd_state.get_or_insert_with(|| fidl::new_empty!(Dhcp6PdState, D));
9015                fidl::decode!(Dhcp6PdState, D, val_ref, decoder, inner_offset, inner_depth)?;
9016                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9017                {
9018                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9019                }
9020                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9021                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9022                }
9023            }
9024
9025            next_offset += envelope_size;
9026            _next_ordinal_to_read += 1;
9027            if next_offset >= end_offset {
9028                return Ok(());
9029            }
9030
9031            // Decode unknown envelopes for gaps in ordinals.
9032            while _next_ordinal_to_read < 2 {
9033                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9034                _next_ordinal_to_read += 1;
9035                next_offset += envelope_size;
9036            }
9037
9038            let next_out_of_line = decoder.next_out_of_line();
9039            let handles_before = decoder.remaining_handles();
9040            if let Some((inlined, num_bytes, num_handles)) =
9041                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9042            {
9043                let member_inline_size =
9044                    <PdProcessedRaInfo as fidl::encoding::TypeMarker>::inline_size(decoder.context);
9045                if inlined != (member_inline_size <= 4) {
9046                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9047                }
9048                let inner_offset;
9049                let mut inner_depth = depth.clone();
9050                if inlined {
9051                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9052                    inner_offset = next_offset;
9053                } else {
9054                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9055                    inner_depth.increment()?;
9056                }
9057                let val_ref = self
9058                    .pd_processed_ra_info
9059                    .get_or_insert_with(|| fidl::new_empty!(PdProcessedRaInfo, D));
9060                fidl::decode!(PdProcessedRaInfo, D, val_ref, decoder, inner_offset, inner_depth)?;
9061                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9062                {
9063                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9064                }
9065                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9066                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9067                }
9068            }
9069
9070            next_offset += envelope_size;
9071            _next_ordinal_to_read += 1;
9072            if next_offset >= end_offset {
9073                return Ok(());
9074            }
9075
9076            // Decode unknown envelopes for gaps in ordinals.
9077            while _next_ordinal_to_read < 3 {
9078                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9079                _next_ordinal_to_read += 1;
9080                next_offset += envelope_size;
9081            }
9082
9083            let next_out_of_line = decoder.next_out_of_line();
9084            let handles_before = decoder.remaining_handles();
9085            if let Some((inlined, num_bytes, num_handles)) =
9086                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9087            {
9088                let member_inline_size =
9089                    <fidl::encoding::Vector<u8, 32> as fidl::encoding::TypeMarker>::inline_size(
9090                        decoder.context,
9091                    );
9092                if inlined != (member_inline_size <= 4) {
9093                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9094                }
9095                let inner_offset;
9096                let mut inner_depth = depth.clone();
9097                if inlined {
9098                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9099                    inner_offset = next_offset;
9100                } else {
9101                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9102                    inner_depth.increment()?;
9103                }
9104                let val_ref = self
9105                    .hashed_pd_prefix
9106                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u8, 32>, D));
9107                fidl::decode!(fidl::encoding::Vector<u8, 32>, D, val_ref, decoder, inner_offset, inner_depth)?;
9108                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9109                {
9110                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9111                }
9112                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9113                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9114                }
9115            }
9116
9117            next_offset += envelope_size;
9118
9119            // Decode the remaining unknown envelopes.
9120            while next_offset < end_offset {
9121                _next_ordinal_to_read += 1;
9122                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9123                next_offset += envelope_size;
9124            }
9125
9126            Ok(())
9127        }
9128    }
9129
9130    impl DnsTxtEntry {
9131        #[inline(always)]
9132        fn max_ordinal_present(&self) -> u64 {
9133            if let Some(_) = self.value {
9134                return 2;
9135            }
9136            if let Some(_) = self.key {
9137                return 1;
9138            }
9139            0
9140        }
9141    }
9142
9143    impl fidl::encoding::ValueTypeMarker for DnsTxtEntry {
9144        type Borrowed<'a> = &'a Self;
9145        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
9146            value
9147        }
9148    }
9149
9150    unsafe impl fidl::encoding::TypeMarker for DnsTxtEntry {
9151        type Owned = Self;
9152
9153        #[inline(always)]
9154        fn inline_align(_context: fidl::encoding::Context) -> usize {
9155            8
9156        }
9157
9158        #[inline(always)]
9159        fn inline_size(_context: fidl::encoding::Context) -> usize {
9160            16
9161        }
9162    }
9163
9164    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<DnsTxtEntry, D>
9165        for &DnsTxtEntry
9166    {
9167        unsafe fn encode(
9168            self,
9169            encoder: &mut fidl::encoding::Encoder<'_, D>,
9170            offset: usize,
9171            mut depth: fidl::encoding::Depth,
9172        ) -> fidl::Result<()> {
9173            encoder.debug_check_bounds::<DnsTxtEntry>(offset);
9174            // Vector header
9175            let max_ordinal: u64 = self.max_ordinal_present();
9176            encoder.write_num(max_ordinal, offset);
9177            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
9178            // Calling encoder.out_of_line_offset(0) is not allowed.
9179            if max_ordinal == 0 {
9180                return Ok(());
9181            }
9182            depth.increment()?;
9183            let envelope_size = 8;
9184            let bytes_len = max_ordinal as usize * envelope_size;
9185            #[allow(unused_variables)]
9186            let offset = encoder.out_of_line_offset(bytes_len);
9187            let mut _prev_end_offset: usize = 0;
9188            if 1 > max_ordinal {
9189                return Ok(());
9190            }
9191
9192            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9193            // are envelope_size bytes.
9194            let cur_offset: usize = (1 - 1) * envelope_size;
9195
9196            // Zero reserved fields.
9197            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9198
9199            // Safety:
9200            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9201            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9202            //   envelope_size bytes, there is always sufficient room.
9203            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<64>, D>(
9204                self.key.as_ref().map(
9205                    <fidl::encoding::BoundedString<64> as fidl::encoding::ValueTypeMarker>::borrow,
9206                ),
9207                encoder,
9208                offset + cur_offset,
9209                depth,
9210            )?;
9211
9212            _prev_end_offset = cur_offset + envelope_size;
9213            if 2 > max_ordinal {
9214                return Ok(());
9215            }
9216
9217            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9218            // are envelope_size bytes.
9219            let cur_offset: usize = (2 - 1) * envelope_size;
9220
9221            // Zero reserved fields.
9222            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9223
9224            // Safety:
9225            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9226            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9227            //   envelope_size bytes, there is always sufficient room.
9228            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u8, 253>, D>(
9229                self.value.as_ref().map(
9230                    <fidl::encoding::Vector<u8, 253> as fidl::encoding::ValueTypeMarker>::borrow,
9231                ),
9232                encoder,
9233                offset + cur_offset,
9234                depth,
9235            )?;
9236
9237            _prev_end_offset = cur_offset + envelope_size;
9238
9239            Ok(())
9240        }
9241    }
9242
9243    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DnsTxtEntry {
9244        #[inline(always)]
9245        fn new_empty() -> Self {
9246            Self::default()
9247        }
9248
9249        unsafe fn decode(
9250            &mut self,
9251            decoder: &mut fidl::encoding::Decoder<'_, D>,
9252            offset: usize,
9253            mut depth: fidl::encoding::Depth,
9254        ) -> fidl::Result<()> {
9255            decoder.debug_check_bounds::<Self>(offset);
9256            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
9257                None => return Err(fidl::Error::NotNullable),
9258                Some(len) => len,
9259            };
9260            // Calling decoder.out_of_line_offset(0) is not allowed.
9261            if len == 0 {
9262                return Ok(());
9263            };
9264            depth.increment()?;
9265            let envelope_size = 8;
9266            let bytes_len = len * envelope_size;
9267            let offset = decoder.out_of_line_offset(bytes_len)?;
9268            // Decode the envelope for each type.
9269            let mut _next_ordinal_to_read = 0;
9270            let mut next_offset = offset;
9271            let end_offset = offset + bytes_len;
9272            _next_ordinal_to_read += 1;
9273            if next_offset >= end_offset {
9274                return Ok(());
9275            }
9276
9277            // Decode unknown envelopes for gaps in ordinals.
9278            while _next_ordinal_to_read < 1 {
9279                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9280                _next_ordinal_to_read += 1;
9281                next_offset += envelope_size;
9282            }
9283
9284            let next_out_of_line = decoder.next_out_of_line();
9285            let handles_before = decoder.remaining_handles();
9286            if let Some((inlined, num_bytes, num_handles)) =
9287                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9288            {
9289                let member_inline_size =
9290                    <fidl::encoding::BoundedString<64> as fidl::encoding::TypeMarker>::inline_size(
9291                        decoder.context,
9292                    );
9293                if inlined != (member_inline_size <= 4) {
9294                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9295                }
9296                let inner_offset;
9297                let mut inner_depth = depth.clone();
9298                if inlined {
9299                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9300                    inner_offset = next_offset;
9301                } else {
9302                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9303                    inner_depth.increment()?;
9304                }
9305                let val_ref = self
9306                    .key
9307                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<64>, D));
9308                fidl::decode!(
9309                    fidl::encoding::BoundedString<64>,
9310                    D,
9311                    val_ref,
9312                    decoder,
9313                    inner_offset,
9314                    inner_depth
9315                )?;
9316                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9317                {
9318                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9319                }
9320                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9321                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9322                }
9323            }
9324
9325            next_offset += envelope_size;
9326            _next_ordinal_to_read += 1;
9327            if next_offset >= end_offset {
9328                return Ok(());
9329            }
9330
9331            // Decode unknown envelopes for gaps in ordinals.
9332            while _next_ordinal_to_read < 2 {
9333                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9334                _next_ordinal_to_read += 1;
9335                next_offset += envelope_size;
9336            }
9337
9338            let next_out_of_line = decoder.next_out_of_line();
9339            let handles_before = decoder.remaining_handles();
9340            if let Some((inlined, num_bytes, num_handles)) =
9341                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9342            {
9343                let member_inline_size =
9344                    <fidl::encoding::Vector<u8, 253> as fidl::encoding::TypeMarker>::inline_size(
9345                        decoder.context,
9346                    );
9347                if inlined != (member_inline_size <= 4) {
9348                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9349                }
9350                let inner_offset;
9351                let mut inner_depth = depth.clone();
9352                if inlined {
9353                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9354                    inner_offset = next_offset;
9355                } else {
9356                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9357                    inner_depth.increment()?;
9358                }
9359                let val_ref = self
9360                    .value
9361                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u8, 253>, D));
9362                fidl::decode!(fidl::encoding::Vector<u8, 253>, D, val_ref, decoder, inner_offset, inner_depth)?;
9363                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9364                {
9365                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9366                }
9367                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9368                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9369                }
9370            }
9371
9372            next_offset += envelope_size;
9373
9374            // Decode the remaining unknown envelopes.
9375            while next_offset < end_offset {
9376                _next_ordinal_to_read += 1;
9377                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9378                next_offset += envelope_size;
9379            }
9380
9381            Ok(())
9382        }
9383    }
9384
9385    impl DnssdCounters {
9386        #[inline(always)]
9387        fn max_ordinal_present(&self) -> u64 {
9388            if let Some(_) = self.upstream_dns_counters {
9389                return 8;
9390            }
9391            if let Some(_) = self.resolved_by_srp {
9392                return 7;
9393            }
9394            if let Some(_) = self.other_response {
9395                return 6;
9396            }
9397            if let Some(_) = self.not_implemented_response {
9398                return 5;
9399            }
9400            if let Some(_) = self.name_error_response {
9401                return 4;
9402            }
9403            if let Some(_) = self.format_error_response {
9404                return 3;
9405            }
9406            if let Some(_) = self.server_failure_response {
9407                return 2;
9408            }
9409            if let Some(_) = self.success_response {
9410                return 1;
9411            }
9412            0
9413        }
9414    }
9415
9416    impl fidl::encoding::ValueTypeMarker for DnssdCounters {
9417        type Borrowed<'a> = &'a Self;
9418        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
9419            value
9420        }
9421    }
9422
9423    unsafe impl fidl::encoding::TypeMarker for DnssdCounters {
9424        type Owned = Self;
9425
9426        #[inline(always)]
9427        fn inline_align(_context: fidl::encoding::Context) -> usize {
9428            8
9429        }
9430
9431        #[inline(always)]
9432        fn inline_size(_context: fidl::encoding::Context) -> usize {
9433            16
9434        }
9435    }
9436
9437    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<DnssdCounters, D>
9438        for &DnssdCounters
9439    {
9440        unsafe fn encode(
9441            self,
9442            encoder: &mut fidl::encoding::Encoder<'_, D>,
9443            offset: usize,
9444            mut depth: fidl::encoding::Depth,
9445        ) -> fidl::Result<()> {
9446            encoder.debug_check_bounds::<DnssdCounters>(offset);
9447            // Vector header
9448            let max_ordinal: u64 = self.max_ordinal_present();
9449            encoder.write_num(max_ordinal, offset);
9450            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
9451            // Calling encoder.out_of_line_offset(0) is not allowed.
9452            if max_ordinal == 0 {
9453                return Ok(());
9454            }
9455            depth.increment()?;
9456            let envelope_size = 8;
9457            let bytes_len = max_ordinal as usize * envelope_size;
9458            #[allow(unused_variables)]
9459            let offset = encoder.out_of_line_offset(bytes_len);
9460            let mut _prev_end_offset: usize = 0;
9461            if 1 > max_ordinal {
9462                return Ok(());
9463            }
9464
9465            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9466            // are envelope_size bytes.
9467            let cur_offset: usize = (1 - 1) * envelope_size;
9468
9469            // Zero reserved fields.
9470            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9471
9472            // Safety:
9473            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9474            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9475            //   envelope_size bytes, there is always sufficient room.
9476            fidl::encoding::encode_in_envelope_optional::<u32, D>(
9477                self.success_response
9478                    .as_ref()
9479                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
9480                encoder,
9481                offset + cur_offset,
9482                depth,
9483            )?;
9484
9485            _prev_end_offset = cur_offset + envelope_size;
9486            if 2 > max_ordinal {
9487                return Ok(());
9488            }
9489
9490            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9491            // are envelope_size bytes.
9492            let cur_offset: usize = (2 - 1) * envelope_size;
9493
9494            // Zero reserved fields.
9495            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9496
9497            // Safety:
9498            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9499            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9500            //   envelope_size bytes, there is always sufficient room.
9501            fidl::encoding::encode_in_envelope_optional::<u32, D>(
9502                self.server_failure_response
9503                    .as_ref()
9504                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
9505                encoder,
9506                offset + cur_offset,
9507                depth,
9508            )?;
9509
9510            _prev_end_offset = cur_offset + envelope_size;
9511            if 3 > max_ordinal {
9512                return Ok(());
9513            }
9514
9515            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9516            // are envelope_size bytes.
9517            let cur_offset: usize = (3 - 1) * envelope_size;
9518
9519            // Zero reserved fields.
9520            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9521
9522            // Safety:
9523            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9524            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9525            //   envelope_size bytes, there is always sufficient room.
9526            fidl::encoding::encode_in_envelope_optional::<u32, D>(
9527                self.format_error_response
9528                    .as_ref()
9529                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
9530                encoder,
9531                offset + cur_offset,
9532                depth,
9533            )?;
9534
9535            _prev_end_offset = cur_offset + envelope_size;
9536            if 4 > max_ordinal {
9537                return Ok(());
9538            }
9539
9540            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9541            // are envelope_size bytes.
9542            let cur_offset: usize = (4 - 1) * envelope_size;
9543
9544            // Zero reserved fields.
9545            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9546
9547            // Safety:
9548            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9549            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9550            //   envelope_size bytes, there is always sufficient room.
9551            fidl::encoding::encode_in_envelope_optional::<u32, D>(
9552                self.name_error_response
9553                    .as_ref()
9554                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
9555                encoder,
9556                offset + cur_offset,
9557                depth,
9558            )?;
9559
9560            _prev_end_offset = cur_offset + envelope_size;
9561            if 5 > max_ordinal {
9562                return Ok(());
9563            }
9564
9565            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9566            // are envelope_size bytes.
9567            let cur_offset: usize = (5 - 1) * envelope_size;
9568
9569            // Zero reserved fields.
9570            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9571
9572            // Safety:
9573            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9574            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9575            //   envelope_size bytes, there is always sufficient room.
9576            fidl::encoding::encode_in_envelope_optional::<u32, D>(
9577                self.not_implemented_response
9578                    .as_ref()
9579                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
9580                encoder,
9581                offset + cur_offset,
9582                depth,
9583            )?;
9584
9585            _prev_end_offset = cur_offset + envelope_size;
9586            if 6 > max_ordinal {
9587                return Ok(());
9588            }
9589
9590            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9591            // are envelope_size bytes.
9592            let cur_offset: usize = (6 - 1) * envelope_size;
9593
9594            // Zero reserved fields.
9595            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9596
9597            // Safety:
9598            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9599            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9600            //   envelope_size bytes, there is always sufficient room.
9601            fidl::encoding::encode_in_envelope_optional::<u32, D>(
9602                self.other_response.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
9603                encoder,
9604                offset + cur_offset,
9605                depth,
9606            )?;
9607
9608            _prev_end_offset = cur_offset + envelope_size;
9609            if 7 > max_ordinal {
9610                return Ok(());
9611            }
9612
9613            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9614            // are envelope_size bytes.
9615            let cur_offset: usize = (7 - 1) * envelope_size;
9616
9617            // Zero reserved fields.
9618            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9619
9620            // Safety:
9621            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9622            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9623            //   envelope_size bytes, there is always sufficient room.
9624            fidl::encoding::encode_in_envelope_optional::<u32, D>(
9625                self.resolved_by_srp.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
9626                encoder,
9627                offset + cur_offset,
9628                depth,
9629            )?;
9630
9631            _prev_end_offset = cur_offset + envelope_size;
9632            if 8 > max_ordinal {
9633                return Ok(());
9634            }
9635
9636            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9637            // are envelope_size bytes.
9638            let cur_offset: usize = (8 - 1) * envelope_size;
9639
9640            // Zero reserved fields.
9641            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9642
9643            // Safety:
9644            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9645            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9646            //   envelope_size bytes, there is always sufficient room.
9647            fidl::encoding::encode_in_envelope_optional::<UpstreamDnsCounters, D>(
9648                self.upstream_dns_counters
9649                    .as_ref()
9650                    .map(<UpstreamDnsCounters as fidl::encoding::ValueTypeMarker>::borrow),
9651                encoder,
9652                offset + cur_offset,
9653                depth,
9654            )?;
9655
9656            _prev_end_offset = cur_offset + envelope_size;
9657
9658            Ok(())
9659        }
9660    }
9661
9662    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DnssdCounters {
9663        #[inline(always)]
9664        fn new_empty() -> Self {
9665            Self::default()
9666        }
9667
9668        unsafe fn decode(
9669            &mut self,
9670            decoder: &mut fidl::encoding::Decoder<'_, D>,
9671            offset: usize,
9672            mut depth: fidl::encoding::Depth,
9673        ) -> fidl::Result<()> {
9674            decoder.debug_check_bounds::<Self>(offset);
9675            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
9676                None => return Err(fidl::Error::NotNullable),
9677                Some(len) => len,
9678            };
9679            // Calling decoder.out_of_line_offset(0) is not allowed.
9680            if len == 0 {
9681                return Ok(());
9682            };
9683            depth.increment()?;
9684            let envelope_size = 8;
9685            let bytes_len = len * envelope_size;
9686            let offset = decoder.out_of_line_offset(bytes_len)?;
9687            // Decode the envelope for each type.
9688            let mut _next_ordinal_to_read = 0;
9689            let mut next_offset = offset;
9690            let end_offset = offset + bytes_len;
9691            _next_ordinal_to_read += 1;
9692            if next_offset >= end_offset {
9693                return Ok(());
9694            }
9695
9696            // Decode unknown envelopes for gaps in ordinals.
9697            while _next_ordinal_to_read < 1 {
9698                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9699                _next_ordinal_to_read += 1;
9700                next_offset += envelope_size;
9701            }
9702
9703            let next_out_of_line = decoder.next_out_of_line();
9704            let handles_before = decoder.remaining_handles();
9705            if let Some((inlined, num_bytes, num_handles)) =
9706                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9707            {
9708                let member_inline_size =
9709                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
9710                if inlined != (member_inline_size <= 4) {
9711                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9712                }
9713                let inner_offset;
9714                let mut inner_depth = depth.clone();
9715                if inlined {
9716                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9717                    inner_offset = next_offset;
9718                } else {
9719                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9720                    inner_depth.increment()?;
9721                }
9722                let val_ref = self.success_response.get_or_insert_with(|| fidl::new_empty!(u32, D));
9723                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
9724                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9725                {
9726                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9727                }
9728                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9729                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9730                }
9731            }
9732
9733            next_offset += envelope_size;
9734            _next_ordinal_to_read += 1;
9735            if next_offset >= end_offset {
9736                return Ok(());
9737            }
9738
9739            // Decode unknown envelopes for gaps in ordinals.
9740            while _next_ordinal_to_read < 2 {
9741                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9742                _next_ordinal_to_read += 1;
9743                next_offset += envelope_size;
9744            }
9745
9746            let next_out_of_line = decoder.next_out_of_line();
9747            let handles_before = decoder.remaining_handles();
9748            if let Some((inlined, num_bytes, num_handles)) =
9749                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9750            {
9751                let member_inline_size =
9752                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
9753                if inlined != (member_inline_size <= 4) {
9754                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9755                }
9756                let inner_offset;
9757                let mut inner_depth = depth.clone();
9758                if inlined {
9759                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9760                    inner_offset = next_offset;
9761                } else {
9762                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9763                    inner_depth.increment()?;
9764                }
9765                let val_ref =
9766                    self.server_failure_response.get_or_insert_with(|| fidl::new_empty!(u32, D));
9767                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
9768                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9769                {
9770                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9771                }
9772                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9773                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9774                }
9775            }
9776
9777            next_offset += envelope_size;
9778            _next_ordinal_to_read += 1;
9779            if next_offset >= end_offset {
9780                return Ok(());
9781            }
9782
9783            // Decode unknown envelopes for gaps in ordinals.
9784            while _next_ordinal_to_read < 3 {
9785                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9786                _next_ordinal_to_read += 1;
9787                next_offset += envelope_size;
9788            }
9789
9790            let next_out_of_line = decoder.next_out_of_line();
9791            let handles_before = decoder.remaining_handles();
9792            if let Some((inlined, num_bytes, num_handles)) =
9793                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9794            {
9795                let member_inline_size =
9796                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
9797                if inlined != (member_inline_size <= 4) {
9798                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9799                }
9800                let inner_offset;
9801                let mut inner_depth = depth.clone();
9802                if inlined {
9803                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9804                    inner_offset = next_offset;
9805                } else {
9806                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9807                    inner_depth.increment()?;
9808                }
9809                let val_ref =
9810                    self.format_error_response.get_or_insert_with(|| fidl::new_empty!(u32, D));
9811                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
9812                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9813                {
9814                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9815                }
9816                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9817                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9818                }
9819            }
9820
9821            next_offset += envelope_size;
9822            _next_ordinal_to_read += 1;
9823            if next_offset >= end_offset {
9824                return Ok(());
9825            }
9826
9827            // Decode unknown envelopes for gaps in ordinals.
9828            while _next_ordinal_to_read < 4 {
9829                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9830                _next_ordinal_to_read += 1;
9831                next_offset += envelope_size;
9832            }
9833
9834            let next_out_of_line = decoder.next_out_of_line();
9835            let handles_before = decoder.remaining_handles();
9836            if let Some((inlined, num_bytes, num_handles)) =
9837                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9838            {
9839                let member_inline_size =
9840                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
9841                if inlined != (member_inline_size <= 4) {
9842                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9843                }
9844                let inner_offset;
9845                let mut inner_depth = depth.clone();
9846                if inlined {
9847                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9848                    inner_offset = next_offset;
9849                } else {
9850                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9851                    inner_depth.increment()?;
9852                }
9853                let val_ref =
9854                    self.name_error_response.get_or_insert_with(|| fidl::new_empty!(u32, D));
9855                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
9856                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9857                {
9858                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9859                }
9860                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9861                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9862                }
9863            }
9864
9865            next_offset += envelope_size;
9866            _next_ordinal_to_read += 1;
9867            if next_offset >= end_offset {
9868                return Ok(());
9869            }
9870
9871            // Decode unknown envelopes for gaps in ordinals.
9872            while _next_ordinal_to_read < 5 {
9873                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9874                _next_ordinal_to_read += 1;
9875                next_offset += envelope_size;
9876            }
9877
9878            let next_out_of_line = decoder.next_out_of_line();
9879            let handles_before = decoder.remaining_handles();
9880            if let Some((inlined, num_bytes, num_handles)) =
9881                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9882            {
9883                let member_inline_size =
9884                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
9885                if inlined != (member_inline_size <= 4) {
9886                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9887                }
9888                let inner_offset;
9889                let mut inner_depth = depth.clone();
9890                if inlined {
9891                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9892                    inner_offset = next_offset;
9893                } else {
9894                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9895                    inner_depth.increment()?;
9896                }
9897                let val_ref =
9898                    self.not_implemented_response.get_or_insert_with(|| fidl::new_empty!(u32, D));
9899                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
9900                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9901                {
9902                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9903                }
9904                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9905                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9906                }
9907            }
9908
9909            next_offset += envelope_size;
9910            _next_ordinal_to_read += 1;
9911            if next_offset >= end_offset {
9912                return Ok(());
9913            }
9914
9915            // Decode unknown envelopes for gaps in ordinals.
9916            while _next_ordinal_to_read < 6 {
9917                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9918                _next_ordinal_to_read += 1;
9919                next_offset += envelope_size;
9920            }
9921
9922            let next_out_of_line = decoder.next_out_of_line();
9923            let handles_before = decoder.remaining_handles();
9924            if let Some((inlined, num_bytes, num_handles)) =
9925                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9926            {
9927                let member_inline_size =
9928                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
9929                if inlined != (member_inline_size <= 4) {
9930                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9931                }
9932                let inner_offset;
9933                let mut inner_depth = depth.clone();
9934                if inlined {
9935                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9936                    inner_offset = next_offset;
9937                } else {
9938                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9939                    inner_depth.increment()?;
9940                }
9941                let val_ref = self.other_response.get_or_insert_with(|| fidl::new_empty!(u32, D));
9942                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
9943                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9944                {
9945                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9946                }
9947                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9948                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9949                }
9950            }
9951
9952            next_offset += envelope_size;
9953            _next_ordinal_to_read += 1;
9954            if next_offset >= end_offset {
9955                return Ok(());
9956            }
9957
9958            // Decode unknown envelopes for gaps in ordinals.
9959            while _next_ordinal_to_read < 7 {
9960                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9961                _next_ordinal_to_read += 1;
9962                next_offset += envelope_size;
9963            }
9964
9965            let next_out_of_line = decoder.next_out_of_line();
9966            let handles_before = decoder.remaining_handles();
9967            if let Some((inlined, num_bytes, num_handles)) =
9968                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9969            {
9970                let member_inline_size =
9971                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
9972                if inlined != (member_inline_size <= 4) {
9973                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9974                }
9975                let inner_offset;
9976                let mut inner_depth = depth.clone();
9977                if inlined {
9978                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9979                    inner_offset = next_offset;
9980                } else {
9981                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9982                    inner_depth.increment()?;
9983                }
9984                let val_ref = self.resolved_by_srp.get_or_insert_with(|| fidl::new_empty!(u32, D));
9985                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
9986                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9987                {
9988                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9989                }
9990                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9991                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9992                }
9993            }
9994
9995            next_offset += envelope_size;
9996            _next_ordinal_to_read += 1;
9997            if next_offset >= end_offset {
9998                return Ok(());
9999            }
10000
10001            // Decode unknown envelopes for gaps in ordinals.
10002            while _next_ordinal_to_read < 8 {
10003                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10004                _next_ordinal_to_read += 1;
10005                next_offset += envelope_size;
10006            }
10007
10008            let next_out_of_line = decoder.next_out_of_line();
10009            let handles_before = decoder.remaining_handles();
10010            if let Some((inlined, num_bytes, num_handles)) =
10011                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10012            {
10013                let member_inline_size =
10014                    <UpstreamDnsCounters as fidl::encoding::TypeMarker>::inline_size(
10015                        decoder.context,
10016                    );
10017                if inlined != (member_inline_size <= 4) {
10018                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10019                }
10020                let inner_offset;
10021                let mut inner_depth = depth.clone();
10022                if inlined {
10023                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10024                    inner_offset = next_offset;
10025                } else {
10026                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10027                    inner_depth.increment()?;
10028                }
10029                let val_ref = self
10030                    .upstream_dns_counters
10031                    .get_or_insert_with(|| fidl::new_empty!(UpstreamDnsCounters, D));
10032                fidl::decode!(UpstreamDnsCounters, D, val_ref, decoder, inner_offset, inner_depth)?;
10033                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10034                {
10035                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10036                }
10037                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10038                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10039                }
10040            }
10041
10042            next_offset += envelope_size;
10043
10044            // Decode the remaining unknown envelopes.
10045            while next_offset < end_offset {
10046                _next_ordinal_to_read += 1;
10047                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10048                next_offset += envelope_size;
10049            }
10050
10051            Ok(())
10052        }
10053    }
10054
10055    impl ExternalRoute {
10056        #[inline(always)]
10057        fn max_ordinal_present(&self) -> u64 {
10058            if let Some(_) = self.stable {
10059                return 3;
10060            }
10061            if let Some(_) = self.route_preference {
10062                return 2;
10063            }
10064            if let Some(_) = self.subnet {
10065                return 1;
10066            }
10067            0
10068        }
10069    }
10070
10071    impl fidl::encoding::ValueTypeMarker for ExternalRoute {
10072        type Borrowed<'a> = &'a Self;
10073        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
10074            value
10075        }
10076    }
10077
10078    unsafe impl fidl::encoding::TypeMarker for ExternalRoute {
10079        type Owned = Self;
10080
10081        #[inline(always)]
10082        fn inline_align(_context: fidl::encoding::Context) -> usize {
10083            8
10084        }
10085
10086        #[inline(always)]
10087        fn inline_size(_context: fidl::encoding::Context) -> usize {
10088            16
10089        }
10090    }
10091
10092    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<ExternalRoute, D>
10093        for &ExternalRoute
10094    {
10095        unsafe fn encode(
10096            self,
10097            encoder: &mut fidl::encoding::Encoder<'_, D>,
10098            offset: usize,
10099            mut depth: fidl::encoding::Depth,
10100        ) -> fidl::Result<()> {
10101            encoder.debug_check_bounds::<ExternalRoute>(offset);
10102            // Vector header
10103            let max_ordinal: u64 = self.max_ordinal_present();
10104            encoder.write_num(max_ordinal, offset);
10105            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
10106            // Calling encoder.out_of_line_offset(0) is not allowed.
10107            if max_ordinal == 0 {
10108                return Ok(());
10109            }
10110            depth.increment()?;
10111            let envelope_size = 8;
10112            let bytes_len = max_ordinal as usize * envelope_size;
10113            #[allow(unused_variables)]
10114            let offset = encoder.out_of_line_offset(bytes_len);
10115            let mut _prev_end_offset: usize = 0;
10116            if 1 > max_ordinal {
10117                return Ok(());
10118            }
10119
10120            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10121            // are envelope_size bytes.
10122            let cur_offset: usize = (1 - 1) * envelope_size;
10123
10124            // Zero reserved fields.
10125            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10126
10127            // Safety:
10128            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10129            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10130            //   envelope_size bytes, there is always sufficient room.
10131            fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_net__common::Ipv6AddressWithPrefix, D>(
10132            self.subnet.as_ref().map(<fidl_fuchsia_net__common::Ipv6AddressWithPrefix as fidl::encoding::ValueTypeMarker>::borrow),
10133            encoder, offset + cur_offset, depth
10134        )?;
10135
10136            _prev_end_offset = cur_offset + envelope_size;
10137            if 2 > max_ordinal {
10138                return Ok(());
10139            }
10140
10141            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10142            // are envelope_size bytes.
10143            let cur_offset: usize = (2 - 1) * envelope_size;
10144
10145            // Zero reserved fields.
10146            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10147
10148            // Safety:
10149            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10150            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10151            //   envelope_size bytes, there is always sufficient room.
10152            fidl::encoding::encode_in_envelope_optional::<RoutePreference, D>(
10153                self.route_preference
10154                    .as_ref()
10155                    .map(<RoutePreference as fidl::encoding::ValueTypeMarker>::borrow),
10156                encoder,
10157                offset + cur_offset,
10158                depth,
10159            )?;
10160
10161            _prev_end_offset = cur_offset + envelope_size;
10162            if 3 > max_ordinal {
10163                return Ok(());
10164            }
10165
10166            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10167            // are envelope_size bytes.
10168            let cur_offset: usize = (3 - 1) * envelope_size;
10169
10170            // Zero reserved fields.
10171            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10172
10173            // Safety:
10174            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10175            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10176            //   envelope_size bytes, there is always sufficient room.
10177            fidl::encoding::encode_in_envelope_optional::<bool, D>(
10178                self.stable.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
10179                encoder,
10180                offset + cur_offset,
10181                depth,
10182            )?;
10183
10184            _prev_end_offset = cur_offset + envelope_size;
10185
10186            Ok(())
10187        }
10188    }
10189
10190    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ExternalRoute {
10191        #[inline(always)]
10192        fn new_empty() -> Self {
10193            Self::default()
10194        }
10195
10196        unsafe fn decode(
10197            &mut self,
10198            decoder: &mut fidl::encoding::Decoder<'_, D>,
10199            offset: usize,
10200            mut depth: fidl::encoding::Depth,
10201        ) -> fidl::Result<()> {
10202            decoder.debug_check_bounds::<Self>(offset);
10203            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
10204                None => return Err(fidl::Error::NotNullable),
10205                Some(len) => len,
10206            };
10207            // Calling decoder.out_of_line_offset(0) is not allowed.
10208            if len == 0 {
10209                return Ok(());
10210            };
10211            depth.increment()?;
10212            let envelope_size = 8;
10213            let bytes_len = len * envelope_size;
10214            let offset = decoder.out_of_line_offset(bytes_len)?;
10215            // Decode the envelope for each type.
10216            let mut _next_ordinal_to_read = 0;
10217            let mut next_offset = offset;
10218            let end_offset = offset + bytes_len;
10219            _next_ordinal_to_read += 1;
10220            if next_offset >= end_offset {
10221                return Ok(());
10222            }
10223
10224            // Decode unknown envelopes for gaps in ordinals.
10225            while _next_ordinal_to_read < 1 {
10226                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10227                _next_ordinal_to_read += 1;
10228                next_offset += envelope_size;
10229            }
10230
10231            let next_out_of_line = decoder.next_out_of_line();
10232            let handles_before = decoder.remaining_handles();
10233            if let Some((inlined, num_bytes, num_handles)) =
10234                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10235            {
10236                let member_inline_size = <fidl_fuchsia_net__common::Ipv6AddressWithPrefix as fidl::encoding::TypeMarker>::inline_size(decoder.context);
10237                if inlined != (member_inline_size <= 4) {
10238                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10239                }
10240                let inner_offset;
10241                let mut inner_depth = depth.clone();
10242                if inlined {
10243                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10244                    inner_offset = next_offset;
10245                } else {
10246                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10247                    inner_depth.increment()?;
10248                }
10249                let val_ref = self.subnet.get_or_insert_with(|| {
10250                    fidl::new_empty!(fidl_fuchsia_net__common::Ipv6AddressWithPrefix, D)
10251                });
10252                fidl::decode!(
10253                    fidl_fuchsia_net__common::Ipv6AddressWithPrefix,
10254                    D,
10255                    val_ref,
10256                    decoder,
10257                    inner_offset,
10258                    inner_depth
10259                )?;
10260                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10261                {
10262                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10263                }
10264                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10265                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10266                }
10267            }
10268
10269            next_offset += envelope_size;
10270            _next_ordinal_to_read += 1;
10271            if next_offset >= end_offset {
10272                return Ok(());
10273            }
10274
10275            // Decode unknown envelopes for gaps in ordinals.
10276            while _next_ordinal_to_read < 2 {
10277                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10278                _next_ordinal_to_read += 1;
10279                next_offset += envelope_size;
10280            }
10281
10282            let next_out_of_line = decoder.next_out_of_line();
10283            let handles_before = decoder.remaining_handles();
10284            if let Some((inlined, num_bytes, num_handles)) =
10285                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10286            {
10287                let member_inline_size =
10288                    <RoutePreference as fidl::encoding::TypeMarker>::inline_size(decoder.context);
10289                if inlined != (member_inline_size <= 4) {
10290                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10291                }
10292                let inner_offset;
10293                let mut inner_depth = depth.clone();
10294                if inlined {
10295                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10296                    inner_offset = next_offset;
10297                } else {
10298                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10299                    inner_depth.increment()?;
10300                }
10301                let val_ref = self
10302                    .route_preference
10303                    .get_or_insert_with(|| fidl::new_empty!(RoutePreference, D));
10304                fidl::decode!(RoutePreference, D, val_ref, decoder, inner_offset, inner_depth)?;
10305                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10306                {
10307                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10308                }
10309                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10310                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10311                }
10312            }
10313
10314            next_offset += envelope_size;
10315            _next_ordinal_to_read += 1;
10316            if next_offset >= end_offset {
10317                return Ok(());
10318            }
10319
10320            // Decode unknown envelopes for gaps in ordinals.
10321            while _next_ordinal_to_read < 3 {
10322                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10323                _next_ordinal_to_read += 1;
10324                next_offset += envelope_size;
10325            }
10326
10327            let next_out_of_line = decoder.next_out_of_line();
10328            let handles_before = decoder.remaining_handles();
10329            if let Some((inlined, num_bytes, num_handles)) =
10330                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10331            {
10332                let member_inline_size =
10333                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
10334                if inlined != (member_inline_size <= 4) {
10335                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10336                }
10337                let inner_offset;
10338                let mut inner_depth = depth.clone();
10339                if inlined {
10340                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10341                    inner_offset = next_offset;
10342                } else {
10343                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10344                    inner_depth.increment()?;
10345                }
10346                let val_ref = self.stable.get_or_insert_with(|| fidl::new_empty!(bool, D));
10347                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
10348                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10349                {
10350                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10351                }
10352                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10353                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10354                }
10355            }
10356
10357            next_offset += envelope_size;
10358
10359            // Decode the remaining unknown envelopes.
10360            while next_offset < end_offset {
10361                _next_ordinal_to_read += 1;
10362                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10363                next_offset += envelope_size;
10364            }
10365
10366            Ok(())
10367        }
10368    }
10369
10370    impl ExternalRouteConfig {
10371        #[inline(always)]
10372        fn max_ordinal_present(&self) -> u64 {
10373            if let Some(_) = self.adv_pio {
10374                return 7;
10375            }
10376            if let Some(_) = self.next_hop_is_this_device {
10377                return 6;
10378            }
10379            if let Some(_) = self.stable {
10380                return 5;
10381            }
10382            if let Some(_) = self.nat64 {
10383                return 4;
10384            }
10385            if let Some(_) = self.preference {
10386                return 3;
10387            }
10388            if let Some(_) = self.rloc16 {
10389                return 2;
10390            }
10391            if let Some(_) = self.prefix {
10392                return 1;
10393            }
10394            0
10395        }
10396    }
10397
10398    impl fidl::encoding::ValueTypeMarker for ExternalRouteConfig {
10399        type Borrowed<'a> = &'a Self;
10400        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
10401            value
10402        }
10403    }
10404
10405    unsafe impl fidl::encoding::TypeMarker for ExternalRouteConfig {
10406        type Owned = Self;
10407
10408        #[inline(always)]
10409        fn inline_align(_context: fidl::encoding::Context) -> usize {
10410            8
10411        }
10412
10413        #[inline(always)]
10414        fn inline_size(_context: fidl::encoding::Context) -> usize {
10415            16
10416        }
10417    }
10418
10419    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<ExternalRouteConfig, D>
10420        for &ExternalRouteConfig
10421    {
10422        unsafe fn encode(
10423            self,
10424            encoder: &mut fidl::encoding::Encoder<'_, D>,
10425            offset: usize,
10426            mut depth: fidl::encoding::Depth,
10427        ) -> fidl::Result<()> {
10428            encoder.debug_check_bounds::<ExternalRouteConfig>(offset);
10429            // Vector header
10430            let max_ordinal: u64 = self.max_ordinal_present();
10431            encoder.write_num(max_ordinal, offset);
10432            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
10433            // Calling encoder.out_of_line_offset(0) is not allowed.
10434            if max_ordinal == 0 {
10435                return Ok(());
10436            }
10437            depth.increment()?;
10438            let envelope_size = 8;
10439            let bytes_len = max_ordinal as usize * envelope_size;
10440            #[allow(unused_variables)]
10441            let offset = encoder.out_of_line_offset(bytes_len);
10442            let mut _prev_end_offset: usize = 0;
10443            if 1 > max_ordinal {
10444                return Ok(());
10445            }
10446
10447            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10448            // are envelope_size bytes.
10449            let cur_offset: usize = (1 - 1) * envelope_size;
10450
10451            // Zero reserved fields.
10452            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10453
10454            // Safety:
10455            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10456            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10457            //   envelope_size bytes, there is always sufficient room.
10458            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<64>, D>(
10459                self.prefix.as_ref().map(
10460                    <fidl::encoding::BoundedString<64> as fidl::encoding::ValueTypeMarker>::borrow,
10461                ),
10462                encoder,
10463                offset + cur_offset,
10464                depth,
10465            )?;
10466
10467            _prev_end_offset = cur_offset + envelope_size;
10468            if 2 > max_ordinal {
10469                return Ok(());
10470            }
10471
10472            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10473            // are envelope_size bytes.
10474            let cur_offset: usize = (2 - 1) * envelope_size;
10475
10476            // Zero reserved fields.
10477            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10478
10479            // Safety:
10480            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10481            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10482            //   envelope_size bytes, there is always sufficient room.
10483            fidl::encoding::encode_in_envelope_optional::<u16, D>(
10484                self.rloc16.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
10485                encoder,
10486                offset + cur_offset,
10487                depth,
10488            )?;
10489
10490            _prev_end_offset = cur_offset + envelope_size;
10491            if 3 > max_ordinal {
10492                return Ok(());
10493            }
10494
10495            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10496            // are envelope_size bytes.
10497            let cur_offset: usize = (3 - 1) * envelope_size;
10498
10499            // Zero reserved fields.
10500            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10501
10502            // Safety:
10503            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10504            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10505            //   envelope_size bytes, there is always sufficient room.
10506            fidl::encoding::encode_in_envelope_optional::<i8, D>(
10507                self.preference.as_ref().map(<i8 as fidl::encoding::ValueTypeMarker>::borrow),
10508                encoder,
10509                offset + cur_offset,
10510                depth,
10511            )?;
10512
10513            _prev_end_offset = cur_offset + envelope_size;
10514            if 4 > 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 = (4 - 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::<bool, D>(
10530                self.nat64.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
10531                encoder,
10532                offset + cur_offset,
10533                depth,
10534            )?;
10535
10536            _prev_end_offset = cur_offset + envelope_size;
10537            if 5 > max_ordinal {
10538                return Ok(());
10539            }
10540
10541            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10542            // are envelope_size bytes.
10543            let cur_offset: usize = (5 - 1) * envelope_size;
10544
10545            // Zero reserved fields.
10546            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10547
10548            // Safety:
10549            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10550            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10551            //   envelope_size bytes, there is always sufficient room.
10552            fidl::encoding::encode_in_envelope_optional::<bool, D>(
10553                self.stable.as_ref().map(<bool 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 6 > 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 = (6 - 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::<bool, D>(
10576                self.next_hop_is_this_device
10577                    .as_ref()
10578                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
10579                encoder,
10580                offset + cur_offset,
10581                depth,
10582            )?;
10583
10584            _prev_end_offset = cur_offset + envelope_size;
10585            if 7 > max_ordinal {
10586                return Ok(());
10587            }
10588
10589            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10590            // are envelope_size bytes.
10591            let cur_offset: usize = (7 - 1) * envelope_size;
10592
10593            // Zero reserved fields.
10594            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10595
10596            // Safety:
10597            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10598            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10599            //   envelope_size bytes, there is always sufficient room.
10600            fidl::encoding::encode_in_envelope_optional::<bool, D>(
10601                self.adv_pio.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
10602                encoder,
10603                offset + cur_offset,
10604                depth,
10605            )?;
10606
10607            _prev_end_offset = cur_offset + envelope_size;
10608
10609            Ok(())
10610        }
10611    }
10612
10613    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ExternalRouteConfig {
10614        #[inline(always)]
10615        fn new_empty() -> Self {
10616            Self::default()
10617        }
10618
10619        unsafe fn decode(
10620            &mut self,
10621            decoder: &mut fidl::encoding::Decoder<'_, D>,
10622            offset: usize,
10623            mut depth: fidl::encoding::Depth,
10624        ) -> fidl::Result<()> {
10625            decoder.debug_check_bounds::<Self>(offset);
10626            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
10627                None => return Err(fidl::Error::NotNullable),
10628                Some(len) => len,
10629            };
10630            // Calling decoder.out_of_line_offset(0) is not allowed.
10631            if len == 0 {
10632                return Ok(());
10633            };
10634            depth.increment()?;
10635            let envelope_size = 8;
10636            let bytes_len = len * envelope_size;
10637            let offset = decoder.out_of_line_offset(bytes_len)?;
10638            // Decode the envelope for each type.
10639            let mut _next_ordinal_to_read = 0;
10640            let mut next_offset = offset;
10641            let end_offset = offset + bytes_len;
10642            _next_ordinal_to_read += 1;
10643            if next_offset >= end_offset {
10644                return Ok(());
10645            }
10646
10647            // Decode unknown envelopes for gaps in ordinals.
10648            while _next_ordinal_to_read < 1 {
10649                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10650                _next_ordinal_to_read += 1;
10651                next_offset += envelope_size;
10652            }
10653
10654            let next_out_of_line = decoder.next_out_of_line();
10655            let handles_before = decoder.remaining_handles();
10656            if let Some((inlined, num_bytes, num_handles)) =
10657                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10658            {
10659                let member_inline_size =
10660                    <fidl::encoding::BoundedString<64> as fidl::encoding::TypeMarker>::inline_size(
10661                        decoder.context,
10662                    );
10663                if inlined != (member_inline_size <= 4) {
10664                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10665                }
10666                let inner_offset;
10667                let mut inner_depth = depth.clone();
10668                if inlined {
10669                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10670                    inner_offset = next_offset;
10671                } else {
10672                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10673                    inner_depth.increment()?;
10674                }
10675                let val_ref = self
10676                    .prefix
10677                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<64>, D));
10678                fidl::decode!(
10679                    fidl::encoding::BoundedString<64>,
10680                    D,
10681                    val_ref,
10682                    decoder,
10683                    inner_offset,
10684                    inner_depth
10685                )?;
10686                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10687                {
10688                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10689                }
10690                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10691                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10692                }
10693            }
10694
10695            next_offset += envelope_size;
10696            _next_ordinal_to_read += 1;
10697            if next_offset >= end_offset {
10698                return Ok(());
10699            }
10700
10701            // Decode unknown envelopes for gaps in ordinals.
10702            while _next_ordinal_to_read < 2 {
10703                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10704                _next_ordinal_to_read += 1;
10705                next_offset += envelope_size;
10706            }
10707
10708            let next_out_of_line = decoder.next_out_of_line();
10709            let handles_before = decoder.remaining_handles();
10710            if let Some((inlined, num_bytes, num_handles)) =
10711                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10712            {
10713                let member_inline_size =
10714                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
10715                if inlined != (member_inline_size <= 4) {
10716                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10717                }
10718                let inner_offset;
10719                let mut inner_depth = depth.clone();
10720                if inlined {
10721                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10722                    inner_offset = next_offset;
10723                } else {
10724                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10725                    inner_depth.increment()?;
10726                }
10727                let val_ref = self.rloc16.get_or_insert_with(|| fidl::new_empty!(u16, D));
10728                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
10729                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10730                {
10731                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10732                }
10733                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10734                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10735                }
10736            }
10737
10738            next_offset += envelope_size;
10739            _next_ordinal_to_read += 1;
10740            if next_offset >= end_offset {
10741                return Ok(());
10742            }
10743
10744            // Decode unknown envelopes for gaps in ordinals.
10745            while _next_ordinal_to_read < 3 {
10746                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10747                _next_ordinal_to_read += 1;
10748                next_offset += envelope_size;
10749            }
10750
10751            let next_out_of_line = decoder.next_out_of_line();
10752            let handles_before = decoder.remaining_handles();
10753            if let Some((inlined, num_bytes, num_handles)) =
10754                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10755            {
10756                let member_inline_size =
10757                    <i8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
10758                if inlined != (member_inline_size <= 4) {
10759                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10760                }
10761                let inner_offset;
10762                let mut inner_depth = depth.clone();
10763                if inlined {
10764                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10765                    inner_offset = next_offset;
10766                } else {
10767                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10768                    inner_depth.increment()?;
10769                }
10770                let val_ref = self.preference.get_or_insert_with(|| fidl::new_empty!(i8, D));
10771                fidl::decode!(i8, D, val_ref, decoder, inner_offset, inner_depth)?;
10772                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10773                {
10774                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10775                }
10776                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10777                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10778                }
10779            }
10780
10781            next_offset += envelope_size;
10782            _next_ordinal_to_read += 1;
10783            if next_offset >= end_offset {
10784                return Ok(());
10785            }
10786
10787            // Decode unknown envelopes for gaps in ordinals.
10788            while _next_ordinal_to_read < 4 {
10789                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10790                _next_ordinal_to_read += 1;
10791                next_offset += envelope_size;
10792            }
10793
10794            let next_out_of_line = decoder.next_out_of_line();
10795            let handles_before = decoder.remaining_handles();
10796            if let Some((inlined, num_bytes, num_handles)) =
10797                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10798            {
10799                let member_inline_size =
10800                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
10801                if inlined != (member_inline_size <= 4) {
10802                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10803                }
10804                let inner_offset;
10805                let mut inner_depth = depth.clone();
10806                if inlined {
10807                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10808                    inner_offset = next_offset;
10809                } else {
10810                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10811                    inner_depth.increment()?;
10812                }
10813                let val_ref = self.nat64.get_or_insert_with(|| fidl::new_empty!(bool, D));
10814                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
10815                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10816                {
10817                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10818                }
10819                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10820                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10821                }
10822            }
10823
10824            next_offset += envelope_size;
10825            _next_ordinal_to_read += 1;
10826            if next_offset >= end_offset {
10827                return Ok(());
10828            }
10829
10830            // Decode unknown envelopes for gaps in ordinals.
10831            while _next_ordinal_to_read < 5 {
10832                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10833                _next_ordinal_to_read += 1;
10834                next_offset += envelope_size;
10835            }
10836
10837            let next_out_of_line = decoder.next_out_of_line();
10838            let handles_before = decoder.remaining_handles();
10839            if let Some((inlined, num_bytes, num_handles)) =
10840                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10841            {
10842                let member_inline_size =
10843                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
10844                if inlined != (member_inline_size <= 4) {
10845                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10846                }
10847                let inner_offset;
10848                let mut inner_depth = depth.clone();
10849                if inlined {
10850                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10851                    inner_offset = next_offset;
10852                } else {
10853                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10854                    inner_depth.increment()?;
10855                }
10856                let val_ref = self.stable.get_or_insert_with(|| fidl::new_empty!(bool, D));
10857                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
10858                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10859                {
10860                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10861                }
10862                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10863                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10864                }
10865            }
10866
10867            next_offset += envelope_size;
10868            _next_ordinal_to_read += 1;
10869            if next_offset >= end_offset {
10870                return Ok(());
10871            }
10872
10873            // Decode unknown envelopes for gaps in ordinals.
10874            while _next_ordinal_to_read < 6 {
10875                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10876                _next_ordinal_to_read += 1;
10877                next_offset += envelope_size;
10878            }
10879
10880            let next_out_of_line = decoder.next_out_of_line();
10881            let handles_before = decoder.remaining_handles();
10882            if let Some((inlined, num_bytes, num_handles)) =
10883                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10884            {
10885                let member_inline_size =
10886                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
10887                if inlined != (member_inline_size <= 4) {
10888                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10889                }
10890                let inner_offset;
10891                let mut inner_depth = depth.clone();
10892                if inlined {
10893                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10894                    inner_offset = next_offset;
10895                } else {
10896                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10897                    inner_depth.increment()?;
10898                }
10899                let val_ref =
10900                    self.next_hop_is_this_device.get_or_insert_with(|| fidl::new_empty!(bool, D));
10901                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
10902                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10903                {
10904                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10905                }
10906                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10907                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10908                }
10909            }
10910
10911            next_offset += envelope_size;
10912            _next_ordinal_to_read += 1;
10913            if next_offset >= end_offset {
10914                return Ok(());
10915            }
10916
10917            // Decode unknown envelopes for gaps in ordinals.
10918            while _next_ordinal_to_read < 7 {
10919                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10920                _next_ordinal_to_read += 1;
10921                next_offset += envelope_size;
10922            }
10923
10924            let next_out_of_line = decoder.next_out_of_line();
10925            let handles_before = decoder.remaining_handles();
10926            if let Some((inlined, num_bytes, num_handles)) =
10927                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10928            {
10929                let member_inline_size =
10930                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
10931                if inlined != (member_inline_size <= 4) {
10932                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10933                }
10934                let inner_offset;
10935                let mut inner_depth = depth.clone();
10936                if inlined {
10937                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10938                    inner_offset = next_offset;
10939                } else {
10940                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10941                    inner_depth.increment()?;
10942                }
10943                let val_ref = self.adv_pio.get_or_insert_with(|| fidl::new_empty!(bool, D));
10944                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
10945                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10946                {
10947                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10948                }
10949                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10950                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10951                }
10952            }
10953
10954            next_offset += envelope_size;
10955
10956            // Decode the remaining unknown envelopes.
10957            while next_offset < end_offset {
10958                _next_ordinal_to_read += 1;
10959                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10960                next_offset += envelope_size;
10961            }
10962
10963            Ok(())
10964        }
10965    }
10966
10967    impl JoinerCommissioningParams {
10968        #[inline(always)]
10969        fn max_ordinal_present(&self) -> u64 {
10970            if let Some(_) = self.vendor_data_string {
10971                return 6;
10972            }
10973            if let Some(_) = self.vendor_sw_version {
10974                return 5;
10975            }
10976            if let Some(_) = self.vendor_model {
10977                return 4;
10978            }
10979            if let Some(_) = self.vendor_name {
10980                return 3;
10981            }
10982            if let Some(_) = self.provisioning_url {
10983                return 2;
10984            }
10985            if let Some(_) = self.pskd {
10986                return 1;
10987            }
10988            0
10989        }
10990    }
10991
10992    impl fidl::encoding::ValueTypeMarker for JoinerCommissioningParams {
10993        type Borrowed<'a> = &'a Self;
10994        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
10995            value
10996        }
10997    }
10998
10999    unsafe impl fidl::encoding::TypeMarker for JoinerCommissioningParams {
11000        type Owned = Self;
11001
11002        #[inline(always)]
11003        fn inline_align(_context: fidl::encoding::Context) -> usize {
11004            8
11005        }
11006
11007        #[inline(always)]
11008        fn inline_size(_context: fidl::encoding::Context) -> usize {
11009            16
11010        }
11011    }
11012
11013    unsafe impl<D: fidl::encoding::ResourceDialect>
11014        fidl::encoding::Encode<JoinerCommissioningParams, D> for &JoinerCommissioningParams
11015    {
11016        unsafe fn encode(
11017            self,
11018            encoder: &mut fidl::encoding::Encoder<'_, D>,
11019            offset: usize,
11020            mut depth: fidl::encoding::Depth,
11021        ) -> fidl::Result<()> {
11022            encoder.debug_check_bounds::<JoinerCommissioningParams>(offset);
11023            // Vector header
11024            let max_ordinal: u64 = self.max_ordinal_present();
11025            encoder.write_num(max_ordinal, offset);
11026            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
11027            // Calling encoder.out_of_line_offset(0) is not allowed.
11028            if max_ordinal == 0 {
11029                return Ok(());
11030            }
11031            depth.increment()?;
11032            let envelope_size = 8;
11033            let bytes_len = max_ordinal as usize * envelope_size;
11034            #[allow(unused_variables)]
11035            let offset = encoder.out_of_line_offset(bytes_len);
11036            let mut _prev_end_offset: usize = 0;
11037            if 1 > max_ordinal {
11038                return Ok(());
11039            }
11040
11041            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11042            // are envelope_size bytes.
11043            let cur_offset: usize = (1 - 1) * envelope_size;
11044
11045            // Zero reserved fields.
11046            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11047
11048            // Safety:
11049            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11050            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11051            //   envelope_size bytes, there is always sufficient room.
11052            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<32>, D>(
11053                self.pskd.as_ref().map(
11054                    <fidl::encoding::BoundedString<32> as fidl::encoding::ValueTypeMarker>::borrow,
11055                ),
11056                encoder,
11057                offset + cur_offset,
11058                depth,
11059            )?;
11060
11061            _prev_end_offset = cur_offset + envelope_size;
11062            if 2 > max_ordinal {
11063                return Ok(());
11064            }
11065
11066            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11067            // are envelope_size bytes.
11068            let cur_offset: usize = (2 - 1) * envelope_size;
11069
11070            // Zero reserved fields.
11071            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11072
11073            // Safety:
11074            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11075            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11076            //   envelope_size bytes, there is always sufficient room.
11077            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<64>, D>(
11078                self.provisioning_url.as_ref().map(
11079                    <fidl::encoding::BoundedString<64> as fidl::encoding::ValueTypeMarker>::borrow,
11080                ),
11081                encoder,
11082                offset + cur_offset,
11083                depth,
11084            )?;
11085
11086            _prev_end_offset = cur_offset + envelope_size;
11087            if 3 > max_ordinal {
11088                return Ok(());
11089            }
11090
11091            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11092            // are envelope_size bytes.
11093            let cur_offset: usize = (3 - 1) * envelope_size;
11094
11095            // Zero reserved fields.
11096            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11097
11098            // Safety:
11099            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11100            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11101            //   envelope_size bytes, there is always sufficient room.
11102            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<32>, D>(
11103                self.vendor_name.as_ref().map(
11104                    <fidl::encoding::BoundedString<32> as fidl::encoding::ValueTypeMarker>::borrow,
11105                ),
11106                encoder,
11107                offset + cur_offset,
11108                depth,
11109            )?;
11110
11111            _prev_end_offset = cur_offset + envelope_size;
11112            if 4 > max_ordinal {
11113                return Ok(());
11114            }
11115
11116            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11117            // are envelope_size bytes.
11118            let cur_offset: usize = (4 - 1) * envelope_size;
11119
11120            // Zero reserved fields.
11121            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11122
11123            // Safety:
11124            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11125            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11126            //   envelope_size bytes, there is always sufficient room.
11127            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<32>, D>(
11128                self.vendor_model.as_ref().map(
11129                    <fidl::encoding::BoundedString<32> as fidl::encoding::ValueTypeMarker>::borrow,
11130                ),
11131                encoder,
11132                offset + cur_offset,
11133                depth,
11134            )?;
11135
11136            _prev_end_offset = cur_offset + envelope_size;
11137            if 5 > max_ordinal {
11138                return Ok(());
11139            }
11140
11141            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11142            // are envelope_size bytes.
11143            let cur_offset: usize = (5 - 1) * envelope_size;
11144
11145            // Zero reserved fields.
11146            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11147
11148            // Safety:
11149            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11150            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11151            //   envelope_size bytes, there is always sufficient room.
11152            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<16>, D>(
11153                self.vendor_sw_version.as_ref().map(
11154                    <fidl::encoding::BoundedString<16> as fidl::encoding::ValueTypeMarker>::borrow,
11155                ),
11156                encoder,
11157                offset + cur_offset,
11158                depth,
11159            )?;
11160
11161            _prev_end_offset = cur_offset + envelope_size;
11162            if 6 > max_ordinal {
11163                return Ok(());
11164            }
11165
11166            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11167            // are envelope_size bytes.
11168            let cur_offset: usize = (6 - 1) * envelope_size;
11169
11170            // Zero reserved fields.
11171            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11172
11173            // Safety:
11174            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11175            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11176            //   envelope_size bytes, there is always sufficient room.
11177            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<64>, D>(
11178                self.vendor_data_string.as_ref().map(
11179                    <fidl::encoding::BoundedString<64> as fidl::encoding::ValueTypeMarker>::borrow,
11180                ),
11181                encoder,
11182                offset + cur_offset,
11183                depth,
11184            )?;
11185
11186            _prev_end_offset = cur_offset + envelope_size;
11187
11188            Ok(())
11189        }
11190    }
11191
11192    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
11193        for JoinerCommissioningParams
11194    {
11195        #[inline(always)]
11196        fn new_empty() -> Self {
11197            Self::default()
11198        }
11199
11200        unsafe fn decode(
11201            &mut self,
11202            decoder: &mut fidl::encoding::Decoder<'_, D>,
11203            offset: usize,
11204            mut depth: fidl::encoding::Depth,
11205        ) -> fidl::Result<()> {
11206            decoder.debug_check_bounds::<Self>(offset);
11207            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
11208                None => return Err(fidl::Error::NotNullable),
11209                Some(len) => len,
11210            };
11211            // Calling decoder.out_of_line_offset(0) is not allowed.
11212            if len == 0 {
11213                return Ok(());
11214            };
11215            depth.increment()?;
11216            let envelope_size = 8;
11217            let bytes_len = len * envelope_size;
11218            let offset = decoder.out_of_line_offset(bytes_len)?;
11219            // Decode the envelope for each type.
11220            let mut _next_ordinal_to_read = 0;
11221            let mut next_offset = offset;
11222            let end_offset = offset + bytes_len;
11223            _next_ordinal_to_read += 1;
11224            if next_offset >= end_offset {
11225                return Ok(());
11226            }
11227
11228            // Decode unknown envelopes for gaps in ordinals.
11229            while _next_ordinal_to_read < 1 {
11230                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11231                _next_ordinal_to_read += 1;
11232                next_offset += envelope_size;
11233            }
11234
11235            let next_out_of_line = decoder.next_out_of_line();
11236            let handles_before = decoder.remaining_handles();
11237            if let Some((inlined, num_bytes, num_handles)) =
11238                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11239            {
11240                let member_inline_size =
11241                    <fidl::encoding::BoundedString<32> as fidl::encoding::TypeMarker>::inline_size(
11242                        decoder.context,
11243                    );
11244                if inlined != (member_inline_size <= 4) {
11245                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11246                }
11247                let inner_offset;
11248                let mut inner_depth = depth.clone();
11249                if inlined {
11250                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11251                    inner_offset = next_offset;
11252                } else {
11253                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11254                    inner_depth.increment()?;
11255                }
11256                let val_ref = self
11257                    .pskd
11258                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<32>, D));
11259                fidl::decode!(
11260                    fidl::encoding::BoundedString<32>,
11261                    D,
11262                    val_ref,
11263                    decoder,
11264                    inner_offset,
11265                    inner_depth
11266                )?;
11267                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11268                {
11269                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11270                }
11271                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11272                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11273                }
11274            }
11275
11276            next_offset += envelope_size;
11277            _next_ordinal_to_read += 1;
11278            if next_offset >= end_offset {
11279                return Ok(());
11280            }
11281
11282            // Decode unknown envelopes for gaps in ordinals.
11283            while _next_ordinal_to_read < 2 {
11284                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11285                _next_ordinal_to_read += 1;
11286                next_offset += envelope_size;
11287            }
11288
11289            let next_out_of_line = decoder.next_out_of_line();
11290            let handles_before = decoder.remaining_handles();
11291            if let Some((inlined, num_bytes, num_handles)) =
11292                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11293            {
11294                let member_inline_size =
11295                    <fidl::encoding::BoundedString<64> as fidl::encoding::TypeMarker>::inline_size(
11296                        decoder.context,
11297                    );
11298                if inlined != (member_inline_size <= 4) {
11299                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11300                }
11301                let inner_offset;
11302                let mut inner_depth = depth.clone();
11303                if inlined {
11304                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11305                    inner_offset = next_offset;
11306                } else {
11307                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11308                    inner_depth.increment()?;
11309                }
11310                let val_ref = self
11311                    .provisioning_url
11312                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<64>, D));
11313                fidl::decode!(
11314                    fidl::encoding::BoundedString<64>,
11315                    D,
11316                    val_ref,
11317                    decoder,
11318                    inner_offset,
11319                    inner_depth
11320                )?;
11321                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11322                {
11323                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11324                }
11325                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11326                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11327                }
11328            }
11329
11330            next_offset += envelope_size;
11331            _next_ordinal_to_read += 1;
11332            if next_offset >= end_offset {
11333                return Ok(());
11334            }
11335
11336            // Decode unknown envelopes for gaps in ordinals.
11337            while _next_ordinal_to_read < 3 {
11338                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11339                _next_ordinal_to_read += 1;
11340                next_offset += envelope_size;
11341            }
11342
11343            let next_out_of_line = decoder.next_out_of_line();
11344            let handles_before = decoder.remaining_handles();
11345            if let Some((inlined, num_bytes, num_handles)) =
11346                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11347            {
11348                let member_inline_size =
11349                    <fidl::encoding::BoundedString<32> as fidl::encoding::TypeMarker>::inline_size(
11350                        decoder.context,
11351                    );
11352                if inlined != (member_inline_size <= 4) {
11353                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11354                }
11355                let inner_offset;
11356                let mut inner_depth = depth.clone();
11357                if inlined {
11358                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11359                    inner_offset = next_offset;
11360                } else {
11361                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11362                    inner_depth.increment()?;
11363                }
11364                let val_ref = self
11365                    .vendor_name
11366                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<32>, D));
11367                fidl::decode!(
11368                    fidl::encoding::BoundedString<32>,
11369                    D,
11370                    val_ref,
11371                    decoder,
11372                    inner_offset,
11373                    inner_depth
11374                )?;
11375                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11376                {
11377                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11378                }
11379                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11380                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11381                }
11382            }
11383
11384            next_offset += envelope_size;
11385            _next_ordinal_to_read += 1;
11386            if next_offset >= end_offset {
11387                return Ok(());
11388            }
11389
11390            // Decode unknown envelopes for gaps in ordinals.
11391            while _next_ordinal_to_read < 4 {
11392                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11393                _next_ordinal_to_read += 1;
11394                next_offset += envelope_size;
11395            }
11396
11397            let next_out_of_line = decoder.next_out_of_line();
11398            let handles_before = decoder.remaining_handles();
11399            if let Some((inlined, num_bytes, num_handles)) =
11400                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11401            {
11402                let member_inline_size =
11403                    <fidl::encoding::BoundedString<32> as fidl::encoding::TypeMarker>::inline_size(
11404                        decoder.context,
11405                    );
11406                if inlined != (member_inline_size <= 4) {
11407                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11408                }
11409                let inner_offset;
11410                let mut inner_depth = depth.clone();
11411                if inlined {
11412                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11413                    inner_offset = next_offset;
11414                } else {
11415                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11416                    inner_depth.increment()?;
11417                }
11418                let val_ref = self
11419                    .vendor_model
11420                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<32>, D));
11421                fidl::decode!(
11422                    fidl::encoding::BoundedString<32>,
11423                    D,
11424                    val_ref,
11425                    decoder,
11426                    inner_offset,
11427                    inner_depth
11428                )?;
11429                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11430                {
11431                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11432                }
11433                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11434                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11435                }
11436            }
11437
11438            next_offset += envelope_size;
11439            _next_ordinal_to_read += 1;
11440            if next_offset >= end_offset {
11441                return Ok(());
11442            }
11443
11444            // Decode unknown envelopes for gaps in ordinals.
11445            while _next_ordinal_to_read < 5 {
11446                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11447                _next_ordinal_to_read += 1;
11448                next_offset += envelope_size;
11449            }
11450
11451            let next_out_of_line = decoder.next_out_of_line();
11452            let handles_before = decoder.remaining_handles();
11453            if let Some((inlined, num_bytes, num_handles)) =
11454                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11455            {
11456                let member_inline_size =
11457                    <fidl::encoding::BoundedString<16> as fidl::encoding::TypeMarker>::inline_size(
11458                        decoder.context,
11459                    );
11460                if inlined != (member_inline_size <= 4) {
11461                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11462                }
11463                let inner_offset;
11464                let mut inner_depth = depth.clone();
11465                if inlined {
11466                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11467                    inner_offset = next_offset;
11468                } else {
11469                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11470                    inner_depth.increment()?;
11471                }
11472                let val_ref = self
11473                    .vendor_sw_version
11474                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<16>, D));
11475                fidl::decode!(
11476                    fidl::encoding::BoundedString<16>,
11477                    D,
11478                    val_ref,
11479                    decoder,
11480                    inner_offset,
11481                    inner_depth
11482                )?;
11483                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11484                {
11485                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11486                }
11487                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11488                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11489                }
11490            }
11491
11492            next_offset += envelope_size;
11493            _next_ordinal_to_read += 1;
11494            if next_offset >= end_offset {
11495                return Ok(());
11496            }
11497
11498            // Decode unknown envelopes for gaps in ordinals.
11499            while _next_ordinal_to_read < 6 {
11500                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11501                _next_ordinal_to_read += 1;
11502                next_offset += envelope_size;
11503            }
11504
11505            let next_out_of_line = decoder.next_out_of_line();
11506            let handles_before = decoder.remaining_handles();
11507            if let Some((inlined, num_bytes, num_handles)) =
11508                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11509            {
11510                let member_inline_size =
11511                    <fidl::encoding::BoundedString<64> as fidl::encoding::TypeMarker>::inline_size(
11512                        decoder.context,
11513                    );
11514                if inlined != (member_inline_size <= 4) {
11515                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11516                }
11517                let inner_offset;
11518                let mut inner_depth = depth.clone();
11519                if inlined {
11520                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11521                    inner_offset = next_offset;
11522                } else {
11523                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11524                    inner_depth.increment()?;
11525                }
11526                let val_ref = self
11527                    .vendor_data_string
11528                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<64>, D));
11529                fidl::decode!(
11530                    fidl::encoding::BoundedString<64>,
11531                    D,
11532                    val_ref,
11533                    decoder,
11534                    inner_offset,
11535                    inner_depth
11536                )?;
11537                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11538                {
11539                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11540                }
11541                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11542                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11543                }
11544            }
11545
11546            next_offset += envelope_size;
11547
11548            // Decode the remaining unknown envelopes.
11549            while next_offset < end_offset {
11550                _next_ordinal_to_read += 1;
11551                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11552                next_offset += envelope_size;
11553            }
11554
11555            Ok(())
11556        }
11557    }
11558
11559    impl LeaderData {
11560        #[inline(always)]
11561        fn max_ordinal_present(&self) -> u64 {
11562            if let Some(_) = self.router_id {
11563                return 5;
11564            }
11565            if let Some(_) = self.stable_network_data_version {
11566                return 4;
11567            }
11568            if let Some(_) = self.network_data_version {
11569                return 3;
11570            }
11571            if let Some(_) = self.weight {
11572                return 2;
11573            }
11574            if let Some(_) = self.partition_id {
11575                return 1;
11576            }
11577            0
11578        }
11579    }
11580
11581    impl fidl::encoding::ValueTypeMarker for LeaderData {
11582        type Borrowed<'a> = &'a Self;
11583        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
11584            value
11585        }
11586    }
11587
11588    unsafe impl fidl::encoding::TypeMarker for LeaderData {
11589        type Owned = Self;
11590
11591        #[inline(always)]
11592        fn inline_align(_context: fidl::encoding::Context) -> usize {
11593            8
11594        }
11595
11596        #[inline(always)]
11597        fn inline_size(_context: fidl::encoding::Context) -> usize {
11598            16
11599        }
11600    }
11601
11602    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<LeaderData, D>
11603        for &LeaderData
11604    {
11605        unsafe fn encode(
11606            self,
11607            encoder: &mut fidl::encoding::Encoder<'_, D>,
11608            offset: usize,
11609            mut depth: fidl::encoding::Depth,
11610        ) -> fidl::Result<()> {
11611            encoder.debug_check_bounds::<LeaderData>(offset);
11612            // Vector header
11613            let max_ordinal: u64 = self.max_ordinal_present();
11614            encoder.write_num(max_ordinal, offset);
11615            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
11616            // Calling encoder.out_of_line_offset(0) is not allowed.
11617            if max_ordinal == 0 {
11618                return Ok(());
11619            }
11620            depth.increment()?;
11621            let envelope_size = 8;
11622            let bytes_len = max_ordinal as usize * envelope_size;
11623            #[allow(unused_variables)]
11624            let offset = encoder.out_of_line_offset(bytes_len);
11625            let mut _prev_end_offset: usize = 0;
11626            if 1 > 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 = (1 - 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::<u32, D>(
11642                self.partition_id.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
11643                encoder,
11644                offset + cur_offset,
11645                depth,
11646            )?;
11647
11648            _prev_end_offset = cur_offset + envelope_size;
11649            if 2 > max_ordinal {
11650                return Ok(());
11651            }
11652
11653            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11654            // are envelope_size bytes.
11655            let cur_offset: usize = (2 - 1) * envelope_size;
11656
11657            // Zero reserved fields.
11658            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11659
11660            // Safety:
11661            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11662            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11663            //   envelope_size bytes, there is always sufficient room.
11664            fidl::encoding::encode_in_envelope_optional::<u8, D>(
11665                self.weight.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
11666                encoder,
11667                offset + cur_offset,
11668                depth,
11669            )?;
11670
11671            _prev_end_offset = cur_offset + envelope_size;
11672            if 3 > max_ordinal {
11673                return Ok(());
11674            }
11675
11676            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11677            // are envelope_size bytes.
11678            let cur_offset: usize = (3 - 1) * envelope_size;
11679
11680            // Zero reserved fields.
11681            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11682
11683            // Safety:
11684            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11685            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11686            //   envelope_size bytes, there is always sufficient room.
11687            fidl::encoding::encode_in_envelope_optional::<u8, D>(
11688                self.network_data_version
11689                    .as_ref()
11690                    .map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
11691                encoder,
11692                offset + cur_offset,
11693                depth,
11694            )?;
11695
11696            _prev_end_offset = cur_offset + envelope_size;
11697            if 4 > max_ordinal {
11698                return Ok(());
11699            }
11700
11701            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11702            // are envelope_size bytes.
11703            let cur_offset: usize = (4 - 1) * envelope_size;
11704
11705            // Zero reserved fields.
11706            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11707
11708            // Safety:
11709            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11710            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11711            //   envelope_size bytes, there is always sufficient room.
11712            fidl::encoding::encode_in_envelope_optional::<u8, D>(
11713                self.stable_network_data_version
11714                    .as_ref()
11715                    .map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
11716                encoder,
11717                offset + cur_offset,
11718                depth,
11719            )?;
11720
11721            _prev_end_offset = cur_offset + envelope_size;
11722            if 5 > max_ordinal {
11723                return Ok(());
11724            }
11725
11726            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11727            // are envelope_size bytes.
11728            let cur_offset: usize = (5 - 1) * envelope_size;
11729
11730            // Zero reserved fields.
11731            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11732
11733            // Safety:
11734            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11735            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11736            //   envelope_size bytes, there is always sufficient room.
11737            fidl::encoding::encode_in_envelope_optional::<u8, D>(
11738                self.router_id.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
11739                encoder,
11740                offset + cur_offset,
11741                depth,
11742            )?;
11743
11744            _prev_end_offset = cur_offset + envelope_size;
11745
11746            Ok(())
11747        }
11748    }
11749
11750    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for LeaderData {
11751        #[inline(always)]
11752        fn new_empty() -> Self {
11753            Self::default()
11754        }
11755
11756        unsafe fn decode(
11757            &mut self,
11758            decoder: &mut fidl::encoding::Decoder<'_, D>,
11759            offset: usize,
11760            mut depth: fidl::encoding::Depth,
11761        ) -> fidl::Result<()> {
11762            decoder.debug_check_bounds::<Self>(offset);
11763            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
11764                None => return Err(fidl::Error::NotNullable),
11765                Some(len) => len,
11766            };
11767            // Calling decoder.out_of_line_offset(0) is not allowed.
11768            if len == 0 {
11769                return Ok(());
11770            };
11771            depth.increment()?;
11772            let envelope_size = 8;
11773            let bytes_len = len * envelope_size;
11774            let offset = decoder.out_of_line_offset(bytes_len)?;
11775            // Decode the envelope for each type.
11776            let mut _next_ordinal_to_read = 0;
11777            let mut next_offset = offset;
11778            let end_offset = offset + bytes_len;
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 < 1 {
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                    <u32 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 = self.partition_id.get_or_insert_with(|| fidl::new_empty!(u32, D));
11811                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
11812                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11813                {
11814                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11815                }
11816                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11817                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11818                }
11819            }
11820
11821            next_offset += envelope_size;
11822            _next_ordinal_to_read += 1;
11823            if next_offset >= end_offset {
11824                return Ok(());
11825            }
11826
11827            // Decode unknown envelopes for gaps in ordinals.
11828            while _next_ordinal_to_read < 2 {
11829                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11830                _next_ordinal_to_read += 1;
11831                next_offset += envelope_size;
11832            }
11833
11834            let next_out_of_line = decoder.next_out_of_line();
11835            let handles_before = decoder.remaining_handles();
11836            if let Some((inlined, num_bytes, num_handles)) =
11837                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11838            {
11839                let member_inline_size =
11840                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
11841                if inlined != (member_inline_size <= 4) {
11842                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11843                }
11844                let inner_offset;
11845                let mut inner_depth = depth.clone();
11846                if inlined {
11847                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11848                    inner_offset = next_offset;
11849                } else {
11850                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11851                    inner_depth.increment()?;
11852                }
11853                let val_ref = self.weight.get_or_insert_with(|| fidl::new_empty!(u8, D));
11854                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
11855                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11856                {
11857                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11858                }
11859                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11860                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11861                }
11862            }
11863
11864            next_offset += envelope_size;
11865            _next_ordinal_to_read += 1;
11866            if next_offset >= end_offset {
11867                return Ok(());
11868            }
11869
11870            // Decode unknown envelopes for gaps in ordinals.
11871            while _next_ordinal_to_read < 3 {
11872                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11873                _next_ordinal_to_read += 1;
11874                next_offset += envelope_size;
11875            }
11876
11877            let next_out_of_line = decoder.next_out_of_line();
11878            let handles_before = decoder.remaining_handles();
11879            if let Some((inlined, num_bytes, num_handles)) =
11880                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11881            {
11882                let member_inline_size =
11883                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
11884                if inlined != (member_inline_size <= 4) {
11885                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11886                }
11887                let inner_offset;
11888                let mut inner_depth = depth.clone();
11889                if inlined {
11890                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11891                    inner_offset = next_offset;
11892                } else {
11893                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11894                    inner_depth.increment()?;
11895                }
11896                let val_ref =
11897                    self.network_data_version.get_or_insert_with(|| fidl::new_empty!(u8, D));
11898                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
11899                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11900                {
11901                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11902                }
11903                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11904                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11905                }
11906            }
11907
11908            next_offset += envelope_size;
11909            _next_ordinal_to_read += 1;
11910            if next_offset >= end_offset {
11911                return Ok(());
11912            }
11913
11914            // Decode unknown envelopes for gaps in ordinals.
11915            while _next_ordinal_to_read < 4 {
11916                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11917                _next_ordinal_to_read += 1;
11918                next_offset += envelope_size;
11919            }
11920
11921            let next_out_of_line = decoder.next_out_of_line();
11922            let handles_before = decoder.remaining_handles();
11923            if let Some((inlined, num_bytes, num_handles)) =
11924                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11925            {
11926                let member_inline_size =
11927                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
11928                if inlined != (member_inline_size <= 4) {
11929                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11930                }
11931                let inner_offset;
11932                let mut inner_depth = depth.clone();
11933                if inlined {
11934                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11935                    inner_offset = next_offset;
11936                } else {
11937                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11938                    inner_depth.increment()?;
11939                }
11940                let val_ref =
11941                    self.stable_network_data_version.get_or_insert_with(|| fidl::new_empty!(u8, D));
11942                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
11943                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11944                {
11945                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11946                }
11947                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11948                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11949                }
11950            }
11951
11952            next_offset += envelope_size;
11953            _next_ordinal_to_read += 1;
11954            if next_offset >= end_offset {
11955                return Ok(());
11956            }
11957
11958            // Decode unknown envelopes for gaps in ordinals.
11959            while _next_ordinal_to_read < 5 {
11960                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11961                _next_ordinal_to_read += 1;
11962                next_offset += envelope_size;
11963            }
11964
11965            let next_out_of_line = decoder.next_out_of_line();
11966            let handles_before = decoder.remaining_handles();
11967            if let Some((inlined, num_bytes, num_handles)) =
11968                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11969            {
11970                let member_inline_size =
11971                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
11972                if inlined != (member_inline_size <= 4) {
11973                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11974                }
11975                let inner_offset;
11976                let mut inner_depth = depth.clone();
11977                if inlined {
11978                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11979                    inner_offset = next_offset;
11980                } else {
11981                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11982                    inner_depth.increment()?;
11983                }
11984                let val_ref = self.router_id.get_or_insert_with(|| fidl::new_empty!(u8, D));
11985                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
11986                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11987                {
11988                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11989                }
11990                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11991                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11992                }
11993            }
11994
11995            next_offset += envelope_size;
11996
11997            // Decode the remaining unknown envelopes.
11998            while next_offset < end_offset {
11999                _next_ordinal_to_read += 1;
12000                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12001                next_offset += envelope_size;
12002            }
12003
12004            Ok(())
12005        }
12006    }
12007
12008    impl LinkMetricsEntry {
12009        #[inline(always)]
12010        fn max_ordinal_present(&self) -> u64 {
12011            if let Some(_) = self.rssi {
12012                return 2;
12013            }
12014            if let Some(_) = self.link_margin {
12015                return 1;
12016            }
12017            0
12018        }
12019    }
12020
12021    impl fidl::encoding::ValueTypeMarker for LinkMetricsEntry {
12022        type Borrowed<'a> = &'a Self;
12023        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
12024            value
12025        }
12026    }
12027
12028    unsafe impl fidl::encoding::TypeMarker for LinkMetricsEntry {
12029        type Owned = Self;
12030
12031        #[inline(always)]
12032        fn inline_align(_context: fidl::encoding::Context) -> usize {
12033            8
12034        }
12035
12036        #[inline(always)]
12037        fn inline_size(_context: fidl::encoding::Context) -> usize {
12038            16
12039        }
12040    }
12041
12042    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<LinkMetricsEntry, D>
12043        for &LinkMetricsEntry
12044    {
12045        unsafe fn encode(
12046            self,
12047            encoder: &mut fidl::encoding::Encoder<'_, D>,
12048            offset: usize,
12049            mut depth: fidl::encoding::Depth,
12050        ) -> fidl::Result<()> {
12051            encoder.debug_check_bounds::<LinkMetricsEntry>(offset);
12052            // Vector header
12053            let max_ordinal: u64 = self.max_ordinal_present();
12054            encoder.write_num(max_ordinal, offset);
12055            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
12056            // Calling encoder.out_of_line_offset(0) is not allowed.
12057            if max_ordinal == 0 {
12058                return Ok(());
12059            }
12060            depth.increment()?;
12061            let envelope_size = 8;
12062            let bytes_len = max_ordinal as usize * envelope_size;
12063            #[allow(unused_variables)]
12064            let offset = encoder.out_of_line_offset(bytes_len);
12065            let mut _prev_end_offset: usize = 0;
12066            if 1 > max_ordinal {
12067                return Ok(());
12068            }
12069
12070            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
12071            // are envelope_size bytes.
12072            let cur_offset: usize = (1 - 1) * envelope_size;
12073
12074            // Zero reserved fields.
12075            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
12076
12077            // Safety:
12078            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
12079            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
12080            //   envelope_size bytes, there is always sufficient room.
12081            fidl::encoding::encode_in_envelope_optional::<u8, D>(
12082                self.link_margin.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
12083                encoder,
12084                offset + cur_offset,
12085                depth,
12086            )?;
12087
12088            _prev_end_offset = cur_offset + envelope_size;
12089            if 2 > max_ordinal {
12090                return Ok(());
12091            }
12092
12093            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
12094            // are envelope_size bytes.
12095            let cur_offset: usize = (2 - 1) * envelope_size;
12096
12097            // Zero reserved fields.
12098            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
12099
12100            // Safety:
12101            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
12102            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
12103            //   envelope_size bytes, there is always sufficient room.
12104            fidl::encoding::encode_in_envelope_optional::<i8, D>(
12105                self.rssi.as_ref().map(<i8 as fidl::encoding::ValueTypeMarker>::borrow),
12106                encoder,
12107                offset + cur_offset,
12108                depth,
12109            )?;
12110
12111            _prev_end_offset = cur_offset + envelope_size;
12112
12113            Ok(())
12114        }
12115    }
12116
12117    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for LinkMetricsEntry {
12118        #[inline(always)]
12119        fn new_empty() -> Self {
12120            Self::default()
12121        }
12122
12123        unsafe fn decode(
12124            &mut self,
12125            decoder: &mut fidl::encoding::Decoder<'_, D>,
12126            offset: usize,
12127            mut depth: fidl::encoding::Depth,
12128        ) -> fidl::Result<()> {
12129            decoder.debug_check_bounds::<Self>(offset);
12130            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
12131                None => return Err(fidl::Error::NotNullable),
12132                Some(len) => len,
12133            };
12134            // Calling decoder.out_of_line_offset(0) is not allowed.
12135            if len == 0 {
12136                return Ok(());
12137            };
12138            depth.increment()?;
12139            let envelope_size = 8;
12140            let bytes_len = len * envelope_size;
12141            let offset = decoder.out_of_line_offset(bytes_len)?;
12142            // Decode the envelope for each type.
12143            let mut _next_ordinal_to_read = 0;
12144            let mut next_offset = offset;
12145            let end_offset = offset + bytes_len;
12146            _next_ordinal_to_read += 1;
12147            if next_offset >= end_offset {
12148                return Ok(());
12149            }
12150
12151            // Decode unknown envelopes for gaps in ordinals.
12152            while _next_ordinal_to_read < 1 {
12153                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12154                _next_ordinal_to_read += 1;
12155                next_offset += envelope_size;
12156            }
12157
12158            let next_out_of_line = decoder.next_out_of_line();
12159            let handles_before = decoder.remaining_handles();
12160            if let Some((inlined, num_bytes, num_handles)) =
12161                fidl::encoding::decode_envelope_header(decoder, next_offset)?
12162            {
12163                let member_inline_size =
12164                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
12165                if inlined != (member_inline_size <= 4) {
12166                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
12167                }
12168                let inner_offset;
12169                let mut inner_depth = depth.clone();
12170                if inlined {
12171                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
12172                    inner_offset = next_offset;
12173                } else {
12174                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
12175                    inner_depth.increment()?;
12176                }
12177                let val_ref = self.link_margin.get_or_insert_with(|| fidl::new_empty!(u8, D));
12178                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
12179                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
12180                {
12181                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
12182                }
12183                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
12184                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
12185                }
12186            }
12187
12188            next_offset += envelope_size;
12189            _next_ordinal_to_read += 1;
12190            if next_offset >= end_offset {
12191                return Ok(());
12192            }
12193
12194            // Decode unknown envelopes for gaps in ordinals.
12195            while _next_ordinal_to_read < 2 {
12196                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12197                _next_ordinal_to_read += 1;
12198                next_offset += envelope_size;
12199            }
12200
12201            let next_out_of_line = decoder.next_out_of_line();
12202            let handles_before = decoder.remaining_handles();
12203            if let Some((inlined, num_bytes, num_handles)) =
12204                fidl::encoding::decode_envelope_header(decoder, next_offset)?
12205            {
12206                let member_inline_size =
12207                    <i8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
12208                if inlined != (member_inline_size <= 4) {
12209                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
12210                }
12211                let inner_offset;
12212                let mut inner_depth = depth.clone();
12213                if inlined {
12214                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
12215                    inner_offset = next_offset;
12216                } else {
12217                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
12218                    inner_depth.increment()?;
12219                }
12220                let val_ref = self.rssi.get_or_insert_with(|| fidl::new_empty!(i8, D));
12221                fidl::decode!(i8, D, val_ref, decoder, inner_offset, inner_depth)?;
12222                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
12223                {
12224                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
12225                }
12226                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
12227                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
12228                }
12229            }
12230
12231            next_offset += envelope_size;
12232
12233            // Decode the remaining unknown envelopes.
12234            while next_offset < end_offset {
12235                _next_ordinal_to_read += 1;
12236                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12237                next_offset += envelope_size;
12238            }
12239
12240            Ok(())
12241        }
12242    }
12243
12244    impl LowpanContextInfo {
12245        #[inline(always)]
12246        fn max_ordinal_present(&self) -> u64 {
12247            if let Some(_) = self.prefix {
12248                return 4;
12249            }
12250            if let Some(_) = self.stable {
12251                return 3;
12252            }
12253            if let Some(_) = self.compress_flag {
12254                return 2;
12255            }
12256            if let Some(_) = self.context_id {
12257                return 1;
12258            }
12259            0
12260        }
12261    }
12262
12263    impl fidl::encoding::ValueTypeMarker for LowpanContextInfo {
12264        type Borrowed<'a> = &'a Self;
12265        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
12266            value
12267        }
12268    }
12269
12270    unsafe impl fidl::encoding::TypeMarker for LowpanContextInfo {
12271        type Owned = Self;
12272
12273        #[inline(always)]
12274        fn inline_align(_context: fidl::encoding::Context) -> usize {
12275            8
12276        }
12277
12278        #[inline(always)]
12279        fn inline_size(_context: fidl::encoding::Context) -> usize {
12280            16
12281        }
12282    }
12283
12284    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<LowpanContextInfo, D>
12285        for &LowpanContextInfo
12286    {
12287        unsafe fn encode(
12288            self,
12289            encoder: &mut fidl::encoding::Encoder<'_, D>,
12290            offset: usize,
12291            mut depth: fidl::encoding::Depth,
12292        ) -> fidl::Result<()> {
12293            encoder.debug_check_bounds::<LowpanContextInfo>(offset);
12294            // Vector header
12295            let max_ordinal: u64 = self.max_ordinal_present();
12296            encoder.write_num(max_ordinal, offset);
12297            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
12298            // Calling encoder.out_of_line_offset(0) is not allowed.
12299            if max_ordinal == 0 {
12300                return Ok(());
12301            }
12302            depth.increment()?;
12303            let envelope_size = 8;
12304            let bytes_len = max_ordinal as usize * envelope_size;
12305            #[allow(unused_variables)]
12306            let offset = encoder.out_of_line_offset(bytes_len);
12307            let mut _prev_end_offset: usize = 0;
12308            if 1 > max_ordinal {
12309                return Ok(());
12310            }
12311
12312            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
12313            // are envelope_size bytes.
12314            let cur_offset: usize = (1 - 1) * envelope_size;
12315
12316            // Zero reserved fields.
12317            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
12318
12319            // Safety:
12320            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
12321            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
12322            //   envelope_size bytes, there is always sufficient room.
12323            fidl::encoding::encode_in_envelope_optional::<u8, D>(
12324                self.context_id.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
12325                encoder,
12326                offset + cur_offset,
12327                depth,
12328            )?;
12329
12330            _prev_end_offset = cur_offset + envelope_size;
12331            if 2 > max_ordinal {
12332                return Ok(());
12333            }
12334
12335            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
12336            // are envelope_size bytes.
12337            let cur_offset: usize = (2 - 1) * envelope_size;
12338
12339            // Zero reserved fields.
12340            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
12341
12342            // Safety:
12343            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
12344            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
12345            //   envelope_size bytes, there is always sufficient room.
12346            fidl::encoding::encode_in_envelope_optional::<bool, D>(
12347                self.compress_flag.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
12348                encoder,
12349                offset + cur_offset,
12350                depth,
12351            )?;
12352
12353            _prev_end_offset = cur_offset + envelope_size;
12354            if 3 > max_ordinal {
12355                return Ok(());
12356            }
12357
12358            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
12359            // are envelope_size bytes.
12360            let cur_offset: usize = (3 - 1) * envelope_size;
12361
12362            // Zero reserved fields.
12363            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
12364
12365            // Safety:
12366            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
12367            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
12368            //   envelope_size bytes, there is always sufficient room.
12369            fidl::encoding::encode_in_envelope_optional::<bool, D>(
12370                self.stable.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
12371                encoder,
12372                offset + cur_offset,
12373                depth,
12374            )?;
12375
12376            _prev_end_offset = cur_offset + envelope_size;
12377            if 4 > max_ordinal {
12378                return Ok(());
12379            }
12380
12381            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
12382            // are envelope_size bytes.
12383            let cur_offset: usize = (4 - 1) * envelope_size;
12384
12385            // Zero reserved fields.
12386            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
12387
12388            // Safety:
12389            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
12390            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
12391            //   envelope_size bytes, there is always sufficient room.
12392            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<64>, D>(
12393                self.prefix.as_ref().map(
12394                    <fidl::encoding::BoundedString<64> as fidl::encoding::ValueTypeMarker>::borrow,
12395                ),
12396                encoder,
12397                offset + cur_offset,
12398                depth,
12399            )?;
12400
12401            _prev_end_offset = cur_offset + envelope_size;
12402
12403            Ok(())
12404        }
12405    }
12406
12407    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for LowpanContextInfo {
12408        #[inline(always)]
12409        fn new_empty() -> Self {
12410            Self::default()
12411        }
12412
12413        unsafe fn decode(
12414            &mut self,
12415            decoder: &mut fidl::encoding::Decoder<'_, D>,
12416            offset: usize,
12417            mut depth: fidl::encoding::Depth,
12418        ) -> fidl::Result<()> {
12419            decoder.debug_check_bounds::<Self>(offset);
12420            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
12421                None => return Err(fidl::Error::NotNullable),
12422                Some(len) => len,
12423            };
12424            // Calling decoder.out_of_line_offset(0) is not allowed.
12425            if len == 0 {
12426                return Ok(());
12427            };
12428            depth.increment()?;
12429            let envelope_size = 8;
12430            let bytes_len = len * envelope_size;
12431            let offset = decoder.out_of_line_offset(bytes_len)?;
12432            // Decode the envelope for each type.
12433            let mut _next_ordinal_to_read = 0;
12434            let mut next_offset = offset;
12435            let end_offset = offset + bytes_len;
12436            _next_ordinal_to_read += 1;
12437            if next_offset >= end_offset {
12438                return Ok(());
12439            }
12440
12441            // Decode unknown envelopes for gaps in ordinals.
12442            while _next_ordinal_to_read < 1 {
12443                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12444                _next_ordinal_to_read += 1;
12445                next_offset += envelope_size;
12446            }
12447
12448            let next_out_of_line = decoder.next_out_of_line();
12449            let handles_before = decoder.remaining_handles();
12450            if let Some((inlined, num_bytes, num_handles)) =
12451                fidl::encoding::decode_envelope_header(decoder, next_offset)?
12452            {
12453                let member_inline_size =
12454                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
12455                if inlined != (member_inline_size <= 4) {
12456                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
12457                }
12458                let inner_offset;
12459                let mut inner_depth = depth.clone();
12460                if inlined {
12461                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
12462                    inner_offset = next_offset;
12463                } else {
12464                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
12465                    inner_depth.increment()?;
12466                }
12467                let val_ref = self.context_id.get_or_insert_with(|| fidl::new_empty!(u8, D));
12468                fidl::decode!(u8, 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 < 2 {
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.compress_flag.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 < 3 {
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.stable.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 < 4 {
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                    <fidl::encoding::BoundedString<64> as fidl::encoding::TypeMarker>::inline_size(
12584                        decoder.context,
12585                    );
12586                if inlined != (member_inline_size <= 4) {
12587                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
12588                }
12589                let inner_offset;
12590                let mut inner_depth = depth.clone();
12591                if inlined {
12592                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
12593                    inner_offset = next_offset;
12594                } else {
12595                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
12596                    inner_depth.increment()?;
12597                }
12598                let val_ref = self
12599                    .prefix
12600                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<64>, D));
12601                fidl::decode!(
12602                    fidl::encoding::BoundedString<64>,
12603                    D,
12604                    val_ref,
12605                    decoder,
12606                    inner_offset,
12607                    inner_depth
12608                )?;
12609                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
12610                {
12611                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
12612                }
12613                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
12614                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
12615                }
12616            }
12617
12618            next_offset += envelope_size;
12619
12620            // Decode the remaining unknown envelopes.
12621            while next_offset < end_offset {
12622                _next_ordinal_to_read += 1;
12623                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12624                next_offset += envelope_size;
12625            }
12626
12627            Ok(())
12628        }
12629    }
12630
12631    impl MultiRadioNeighborInfo {
12632        #[inline(always)]
12633        fn max_ordinal_present(&self) -> u64 {
12634            if let Some(_) = self.radio_link_info {
12635                return 3;
12636            }
12637            if let Some(_) = self.thread_rloc {
12638                return 2;
12639            }
12640            if let Some(_) = self.extended_address {
12641                return 1;
12642            }
12643            0
12644        }
12645    }
12646
12647    impl fidl::encoding::ValueTypeMarker for MultiRadioNeighborInfo {
12648        type Borrowed<'a> = &'a Self;
12649        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
12650            value
12651        }
12652    }
12653
12654    unsafe impl fidl::encoding::TypeMarker for MultiRadioNeighborInfo {
12655        type Owned = Self;
12656
12657        #[inline(always)]
12658        fn inline_align(_context: fidl::encoding::Context) -> usize {
12659            8
12660        }
12661
12662        #[inline(always)]
12663        fn inline_size(_context: fidl::encoding::Context) -> usize {
12664            16
12665        }
12666    }
12667
12668    unsafe impl<D: fidl::encoding::ResourceDialect>
12669        fidl::encoding::Encode<MultiRadioNeighborInfo, D> for &MultiRadioNeighborInfo
12670    {
12671        unsafe fn encode(
12672            self,
12673            encoder: &mut fidl::encoding::Encoder<'_, D>,
12674            offset: usize,
12675            mut depth: fidl::encoding::Depth,
12676        ) -> fidl::Result<()> {
12677            encoder.debug_check_bounds::<MultiRadioNeighborInfo>(offset);
12678            // Vector header
12679            let max_ordinal: u64 = self.max_ordinal_present();
12680            encoder.write_num(max_ordinal, offset);
12681            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
12682            // Calling encoder.out_of_line_offset(0) is not allowed.
12683            if max_ordinal == 0 {
12684                return Ok(());
12685            }
12686            depth.increment()?;
12687            let envelope_size = 8;
12688            let bytes_len = max_ordinal as usize * envelope_size;
12689            #[allow(unused_variables)]
12690            let offset = encoder.out_of_line_offset(bytes_len);
12691            let mut _prev_end_offset: usize = 0;
12692            if 1 > max_ordinal {
12693                return Ok(());
12694            }
12695
12696            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
12697            // are envelope_size bytes.
12698            let cur_offset: usize = (1 - 1) * envelope_size;
12699
12700            // Zero reserved fields.
12701            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
12702
12703            // Safety:
12704            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
12705            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
12706            //   envelope_size bytes, there is always sufficient room.
12707            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u8, 8>, D>(
12708                self.extended_address.as_ref().map(
12709                    <fidl::encoding::Vector<u8, 8> as fidl::encoding::ValueTypeMarker>::borrow,
12710                ),
12711                encoder,
12712                offset + cur_offset,
12713                depth,
12714            )?;
12715
12716            _prev_end_offset = cur_offset + envelope_size;
12717            if 2 > max_ordinal {
12718                return Ok(());
12719            }
12720
12721            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
12722            // are envelope_size bytes.
12723            let cur_offset: usize = (2 - 1) * envelope_size;
12724
12725            // Zero reserved fields.
12726            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
12727
12728            // Safety:
12729            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
12730            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
12731            //   envelope_size bytes, there is always sufficient room.
12732            fidl::encoding::encode_in_envelope_optional::<u16, D>(
12733                self.thread_rloc.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
12734                encoder,
12735                offset + cur_offset,
12736                depth,
12737            )?;
12738
12739            _prev_end_offset = cur_offset + envelope_size;
12740            if 3 > max_ordinal {
12741                return Ok(());
12742            }
12743
12744            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
12745            // are envelope_size bytes.
12746            let cur_offset: usize = (3 - 1) * envelope_size;
12747
12748            // Zero reserved fields.
12749            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
12750
12751            // Safety:
12752            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
12753            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
12754            //   envelope_size bytes, there is always sufficient room.
12755            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<RadioLinkInfo, 5>, D>(
12756            self.radio_link_info.as_ref().map(<fidl::encoding::Vector<RadioLinkInfo, 5> as fidl::encoding::ValueTypeMarker>::borrow),
12757            encoder, offset + cur_offset, depth
12758        )?;
12759
12760            _prev_end_offset = cur_offset + envelope_size;
12761
12762            Ok(())
12763        }
12764    }
12765
12766    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
12767        for MultiRadioNeighborInfo
12768    {
12769        #[inline(always)]
12770        fn new_empty() -> Self {
12771            Self::default()
12772        }
12773
12774        unsafe fn decode(
12775            &mut self,
12776            decoder: &mut fidl::encoding::Decoder<'_, D>,
12777            offset: usize,
12778            mut depth: fidl::encoding::Depth,
12779        ) -> fidl::Result<()> {
12780            decoder.debug_check_bounds::<Self>(offset);
12781            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
12782                None => return Err(fidl::Error::NotNullable),
12783                Some(len) => len,
12784            };
12785            // Calling decoder.out_of_line_offset(0) is not allowed.
12786            if len == 0 {
12787                return Ok(());
12788            };
12789            depth.increment()?;
12790            let envelope_size = 8;
12791            let bytes_len = len * envelope_size;
12792            let offset = decoder.out_of_line_offset(bytes_len)?;
12793            // Decode the envelope for each type.
12794            let mut _next_ordinal_to_read = 0;
12795            let mut next_offset = offset;
12796            let end_offset = offset + bytes_len;
12797            _next_ordinal_to_read += 1;
12798            if next_offset >= end_offset {
12799                return Ok(());
12800            }
12801
12802            // Decode unknown envelopes for gaps in ordinals.
12803            while _next_ordinal_to_read < 1 {
12804                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12805                _next_ordinal_to_read += 1;
12806                next_offset += envelope_size;
12807            }
12808
12809            let next_out_of_line = decoder.next_out_of_line();
12810            let handles_before = decoder.remaining_handles();
12811            if let Some((inlined, num_bytes, num_handles)) =
12812                fidl::encoding::decode_envelope_header(decoder, next_offset)?
12813            {
12814                let member_inline_size =
12815                    <fidl::encoding::Vector<u8, 8> as fidl::encoding::TypeMarker>::inline_size(
12816                        decoder.context,
12817                    );
12818                if inlined != (member_inline_size <= 4) {
12819                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
12820                }
12821                let inner_offset;
12822                let mut inner_depth = depth.clone();
12823                if inlined {
12824                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
12825                    inner_offset = next_offset;
12826                } else {
12827                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
12828                    inner_depth.increment()?;
12829                }
12830                let val_ref = self
12831                    .extended_address
12832                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u8, 8>, D));
12833                fidl::decode!(fidl::encoding::Vector<u8, 8>, D, val_ref, decoder, inner_offset, inner_depth)?;
12834                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
12835                {
12836                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
12837                }
12838                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
12839                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
12840                }
12841            }
12842
12843            next_offset += envelope_size;
12844            _next_ordinal_to_read += 1;
12845            if next_offset >= end_offset {
12846                return Ok(());
12847            }
12848
12849            // Decode unknown envelopes for gaps in ordinals.
12850            while _next_ordinal_to_read < 2 {
12851                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12852                _next_ordinal_to_read += 1;
12853                next_offset += envelope_size;
12854            }
12855
12856            let next_out_of_line = decoder.next_out_of_line();
12857            let handles_before = decoder.remaining_handles();
12858            if let Some((inlined, num_bytes, num_handles)) =
12859                fidl::encoding::decode_envelope_header(decoder, next_offset)?
12860            {
12861                let member_inline_size =
12862                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
12863                if inlined != (member_inline_size <= 4) {
12864                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
12865                }
12866                let inner_offset;
12867                let mut inner_depth = depth.clone();
12868                if inlined {
12869                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
12870                    inner_offset = next_offset;
12871                } else {
12872                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
12873                    inner_depth.increment()?;
12874                }
12875                let val_ref = self.thread_rloc.get_or_insert_with(|| fidl::new_empty!(u16, D));
12876                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
12877                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
12878                {
12879                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
12880                }
12881                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
12882                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
12883                }
12884            }
12885
12886            next_offset += envelope_size;
12887            _next_ordinal_to_read += 1;
12888            if next_offset >= end_offset {
12889                return Ok(());
12890            }
12891
12892            // Decode unknown envelopes for gaps in ordinals.
12893            while _next_ordinal_to_read < 3 {
12894                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12895                _next_ordinal_to_read += 1;
12896                next_offset += envelope_size;
12897            }
12898
12899            let next_out_of_line = decoder.next_out_of_line();
12900            let handles_before = decoder.remaining_handles();
12901            if let Some((inlined, num_bytes, num_handles)) =
12902                fidl::encoding::decode_envelope_header(decoder, next_offset)?
12903            {
12904                let member_inline_size = <fidl::encoding::Vector<RadioLinkInfo, 5> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
12905                if inlined != (member_inline_size <= 4) {
12906                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
12907                }
12908                let inner_offset;
12909                let mut inner_depth = depth.clone();
12910                if inlined {
12911                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
12912                    inner_offset = next_offset;
12913                } else {
12914                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
12915                    inner_depth.increment()?;
12916                }
12917                let val_ref = self.radio_link_info.get_or_insert_with(
12918                    || fidl::new_empty!(fidl::encoding::Vector<RadioLinkInfo, 5>, D),
12919                );
12920                fidl::decode!(fidl::encoding::Vector<RadioLinkInfo, 5>, D, val_ref, decoder, inner_offset, inner_depth)?;
12921                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
12922                {
12923                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
12924                }
12925                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
12926                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
12927                }
12928            }
12929
12930            next_offset += envelope_size;
12931
12932            // Decode the remaining unknown envelopes.
12933            while next_offset < end_offset {
12934                _next_ordinal_to_read += 1;
12935                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12936                next_offset += envelope_size;
12937            }
12938
12939            Ok(())
12940        }
12941    }
12942
12943    impl Nat64ErrorCounters {
12944        #[inline(always)]
12945        fn max_ordinal_present(&self) -> u64 {
12946            if let Some(_) = self.no_mapping {
12947                return 4;
12948            }
12949            if let Some(_) = self.unsupported_protocol {
12950                return 3;
12951            }
12952            if let Some(_) = self.illegal_packet {
12953                return 2;
12954            }
12955            if let Some(_) = self.unknown {
12956                return 1;
12957            }
12958            0
12959        }
12960    }
12961
12962    impl fidl::encoding::ValueTypeMarker for Nat64ErrorCounters {
12963        type Borrowed<'a> = &'a Self;
12964        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
12965            value
12966        }
12967    }
12968
12969    unsafe impl fidl::encoding::TypeMarker for Nat64ErrorCounters {
12970        type Owned = Self;
12971
12972        #[inline(always)]
12973        fn inline_align(_context: fidl::encoding::Context) -> usize {
12974            8
12975        }
12976
12977        #[inline(always)]
12978        fn inline_size(_context: fidl::encoding::Context) -> usize {
12979            16
12980        }
12981    }
12982
12983    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Nat64ErrorCounters, D>
12984        for &Nat64ErrorCounters
12985    {
12986        unsafe fn encode(
12987            self,
12988            encoder: &mut fidl::encoding::Encoder<'_, D>,
12989            offset: usize,
12990            mut depth: fidl::encoding::Depth,
12991        ) -> fidl::Result<()> {
12992            encoder.debug_check_bounds::<Nat64ErrorCounters>(offset);
12993            // Vector header
12994            let max_ordinal: u64 = self.max_ordinal_present();
12995            encoder.write_num(max_ordinal, offset);
12996            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
12997            // Calling encoder.out_of_line_offset(0) is not allowed.
12998            if max_ordinal == 0 {
12999                return Ok(());
13000            }
13001            depth.increment()?;
13002            let envelope_size = 8;
13003            let bytes_len = max_ordinal as usize * envelope_size;
13004            #[allow(unused_variables)]
13005            let offset = encoder.out_of_line_offset(bytes_len);
13006            let mut _prev_end_offset: usize = 0;
13007            if 1 > max_ordinal {
13008                return Ok(());
13009            }
13010
13011            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13012            // are envelope_size bytes.
13013            let cur_offset: usize = (1 - 1) * envelope_size;
13014
13015            // Zero reserved fields.
13016            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13017
13018            // Safety:
13019            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13020            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13021            //   envelope_size bytes, there is always sufficient room.
13022            fidl::encoding::encode_in_envelope_optional::<Nat64PacketCounters, D>(
13023                self.unknown
13024                    .as_ref()
13025                    .map(<Nat64PacketCounters as fidl::encoding::ValueTypeMarker>::borrow),
13026                encoder,
13027                offset + cur_offset,
13028                depth,
13029            )?;
13030
13031            _prev_end_offset = cur_offset + envelope_size;
13032            if 2 > max_ordinal {
13033                return Ok(());
13034            }
13035
13036            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13037            // are envelope_size bytes.
13038            let cur_offset: usize = (2 - 1) * envelope_size;
13039
13040            // Zero reserved fields.
13041            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13042
13043            // Safety:
13044            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13045            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13046            //   envelope_size bytes, there is always sufficient room.
13047            fidl::encoding::encode_in_envelope_optional::<Nat64PacketCounters, D>(
13048                self.illegal_packet
13049                    .as_ref()
13050                    .map(<Nat64PacketCounters as fidl::encoding::ValueTypeMarker>::borrow),
13051                encoder,
13052                offset + cur_offset,
13053                depth,
13054            )?;
13055
13056            _prev_end_offset = cur_offset + envelope_size;
13057            if 3 > max_ordinal {
13058                return Ok(());
13059            }
13060
13061            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13062            // are envelope_size bytes.
13063            let cur_offset: usize = (3 - 1) * envelope_size;
13064
13065            // Zero reserved fields.
13066            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13067
13068            // Safety:
13069            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13070            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13071            //   envelope_size bytes, there is always sufficient room.
13072            fidl::encoding::encode_in_envelope_optional::<Nat64PacketCounters, D>(
13073                self.unsupported_protocol
13074                    .as_ref()
13075                    .map(<Nat64PacketCounters as fidl::encoding::ValueTypeMarker>::borrow),
13076                encoder,
13077                offset + cur_offset,
13078                depth,
13079            )?;
13080
13081            _prev_end_offset = cur_offset + envelope_size;
13082            if 4 > max_ordinal {
13083                return Ok(());
13084            }
13085
13086            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13087            // are envelope_size bytes.
13088            let cur_offset: usize = (4 - 1) * envelope_size;
13089
13090            // Zero reserved fields.
13091            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13092
13093            // Safety:
13094            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13095            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13096            //   envelope_size bytes, there is always sufficient room.
13097            fidl::encoding::encode_in_envelope_optional::<Nat64PacketCounters, D>(
13098                self.no_mapping
13099                    .as_ref()
13100                    .map(<Nat64PacketCounters as fidl::encoding::ValueTypeMarker>::borrow),
13101                encoder,
13102                offset + cur_offset,
13103                depth,
13104            )?;
13105
13106            _prev_end_offset = cur_offset + envelope_size;
13107
13108            Ok(())
13109        }
13110    }
13111
13112    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Nat64ErrorCounters {
13113        #[inline(always)]
13114        fn new_empty() -> Self {
13115            Self::default()
13116        }
13117
13118        unsafe fn decode(
13119            &mut self,
13120            decoder: &mut fidl::encoding::Decoder<'_, D>,
13121            offset: usize,
13122            mut depth: fidl::encoding::Depth,
13123        ) -> fidl::Result<()> {
13124            decoder.debug_check_bounds::<Self>(offset);
13125            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
13126                None => return Err(fidl::Error::NotNullable),
13127                Some(len) => len,
13128            };
13129            // Calling decoder.out_of_line_offset(0) is not allowed.
13130            if len == 0 {
13131                return Ok(());
13132            };
13133            depth.increment()?;
13134            let envelope_size = 8;
13135            let bytes_len = len * envelope_size;
13136            let offset = decoder.out_of_line_offset(bytes_len)?;
13137            // Decode the envelope for each type.
13138            let mut _next_ordinal_to_read = 0;
13139            let mut next_offset = offset;
13140            let end_offset = offset + bytes_len;
13141            _next_ordinal_to_read += 1;
13142            if next_offset >= end_offset {
13143                return Ok(());
13144            }
13145
13146            // Decode unknown envelopes for gaps in ordinals.
13147            while _next_ordinal_to_read < 1 {
13148                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
13149                _next_ordinal_to_read += 1;
13150                next_offset += envelope_size;
13151            }
13152
13153            let next_out_of_line = decoder.next_out_of_line();
13154            let handles_before = decoder.remaining_handles();
13155            if let Some((inlined, num_bytes, num_handles)) =
13156                fidl::encoding::decode_envelope_header(decoder, next_offset)?
13157            {
13158                let member_inline_size =
13159                    <Nat64PacketCounters as fidl::encoding::TypeMarker>::inline_size(
13160                        decoder.context,
13161                    );
13162                if inlined != (member_inline_size <= 4) {
13163                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
13164                }
13165                let inner_offset;
13166                let mut inner_depth = depth.clone();
13167                if inlined {
13168                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
13169                    inner_offset = next_offset;
13170                } else {
13171                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
13172                    inner_depth.increment()?;
13173                }
13174                let val_ref =
13175                    self.unknown.get_or_insert_with(|| fidl::new_empty!(Nat64PacketCounters, D));
13176                fidl::decode!(Nat64PacketCounters, D, val_ref, decoder, inner_offset, inner_depth)?;
13177                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
13178                {
13179                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
13180                }
13181                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
13182                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
13183                }
13184            }
13185
13186            next_offset += envelope_size;
13187            _next_ordinal_to_read += 1;
13188            if next_offset >= end_offset {
13189                return Ok(());
13190            }
13191
13192            // Decode unknown envelopes for gaps in ordinals.
13193            while _next_ordinal_to_read < 2 {
13194                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
13195                _next_ordinal_to_read += 1;
13196                next_offset += envelope_size;
13197            }
13198
13199            let next_out_of_line = decoder.next_out_of_line();
13200            let handles_before = decoder.remaining_handles();
13201            if let Some((inlined, num_bytes, num_handles)) =
13202                fidl::encoding::decode_envelope_header(decoder, next_offset)?
13203            {
13204                let member_inline_size =
13205                    <Nat64PacketCounters as fidl::encoding::TypeMarker>::inline_size(
13206                        decoder.context,
13207                    );
13208                if inlined != (member_inline_size <= 4) {
13209                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
13210                }
13211                let inner_offset;
13212                let mut inner_depth = depth.clone();
13213                if inlined {
13214                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
13215                    inner_offset = next_offset;
13216                } else {
13217                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
13218                    inner_depth.increment()?;
13219                }
13220                let val_ref = self
13221                    .illegal_packet
13222                    .get_or_insert_with(|| fidl::new_empty!(Nat64PacketCounters, D));
13223                fidl::decode!(Nat64PacketCounters, D, val_ref, decoder, inner_offset, inner_depth)?;
13224                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
13225                {
13226                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
13227                }
13228                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
13229                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
13230                }
13231            }
13232
13233            next_offset += envelope_size;
13234            _next_ordinal_to_read += 1;
13235            if next_offset >= end_offset {
13236                return Ok(());
13237            }
13238
13239            // Decode unknown envelopes for gaps in ordinals.
13240            while _next_ordinal_to_read < 3 {
13241                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
13242                _next_ordinal_to_read += 1;
13243                next_offset += envelope_size;
13244            }
13245
13246            let next_out_of_line = decoder.next_out_of_line();
13247            let handles_before = decoder.remaining_handles();
13248            if let Some((inlined, num_bytes, num_handles)) =
13249                fidl::encoding::decode_envelope_header(decoder, next_offset)?
13250            {
13251                let member_inline_size =
13252                    <Nat64PacketCounters as fidl::encoding::TypeMarker>::inline_size(
13253                        decoder.context,
13254                    );
13255                if inlined != (member_inline_size <= 4) {
13256                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
13257                }
13258                let inner_offset;
13259                let mut inner_depth = depth.clone();
13260                if inlined {
13261                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
13262                    inner_offset = next_offset;
13263                } else {
13264                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
13265                    inner_depth.increment()?;
13266                }
13267                let val_ref = self
13268                    .unsupported_protocol
13269                    .get_or_insert_with(|| fidl::new_empty!(Nat64PacketCounters, D));
13270                fidl::decode!(Nat64PacketCounters, D, val_ref, decoder, inner_offset, inner_depth)?;
13271                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
13272                {
13273                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
13274                }
13275                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
13276                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
13277                }
13278            }
13279
13280            next_offset += envelope_size;
13281            _next_ordinal_to_read += 1;
13282            if next_offset >= end_offset {
13283                return Ok(());
13284            }
13285
13286            // Decode unknown envelopes for gaps in ordinals.
13287            while _next_ordinal_to_read < 4 {
13288                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
13289                _next_ordinal_to_read += 1;
13290                next_offset += envelope_size;
13291            }
13292
13293            let next_out_of_line = decoder.next_out_of_line();
13294            let handles_before = decoder.remaining_handles();
13295            if let Some((inlined, num_bytes, num_handles)) =
13296                fidl::encoding::decode_envelope_header(decoder, next_offset)?
13297            {
13298                let member_inline_size =
13299                    <Nat64PacketCounters as fidl::encoding::TypeMarker>::inline_size(
13300                        decoder.context,
13301                    );
13302                if inlined != (member_inline_size <= 4) {
13303                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
13304                }
13305                let inner_offset;
13306                let mut inner_depth = depth.clone();
13307                if inlined {
13308                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
13309                    inner_offset = next_offset;
13310                } else {
13311                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
13312                    inner_depth.increment()?;
13313                }
13314                let val_ref =
13315                    self.no_mapping.get_or_insert_with(|| fidl::new_empty!(Nat64PacketCounters, D));
13316                fidl::decode!(Nat64PacketCounters, D, val_ref, decoder, inner_offset, inner_depth)?;
13317                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
13318                {
13319                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
13320                }
13321                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
13322                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
13323                }
13324            }
13325
13326            next_offset += envelope_size;
13327
13328            // Decode the remaining unknown envelopes.
13329            while next_offset < end_offset {
13330                _next_ordinal_to_read += 1;
13331                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
13332                next_offset += envelope_size;
13333            }
13334
13335            Ok(())
13336        }
13337    }
13338
13339    impl Nat64Info {
13340        #[inline(always)]
13341        fn max_ordinal_present(&self) -> u64 {
13342            if let Some(_) = self.nat64_protocol_counters {
13343                return 4;
13344            }
13345            if let Some(_) = self.nat64_error_counters {
13346                return 3;
13347            }
13348            if let Some(_) = self.nat64_mappings {
13349                return 2;
13350            }
13351            if let Some(_) = self.nat64_state {
13352                return 1;
13353            }
13354            0
13355        }
13356    }
13357
13358    impl fidl::encoding::ValueTypeMarker for Nat64Info {
13359        type Borrowed<'a> = &'a Self;
13360        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
13361            value
13362        }
13363    }
13364
13365    unsafe impl fidl::encoding::TypeMarker for Nat64Info {
13366        type Owned = Self;
13367
13368        #[inline(always)]
13369        fn inline_align(_context: fidl::encoding::Context) -> usize {
13370            8
13371        }
13372
13373        #[inline(always)]
13374        fn inline_size(_context: fidl::encoding::Context) -> usize {
13375            16
13376        }
13377    }
13378
13379    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Nat64Info, D>
13380        for &Nat64Info
13381    {
13382        unsafe fn encode(
13383            self,
13384            encoder: &mut fidl::encoding::Encoder<'_, D>,
13385            offset: usize,
13386            mut depth: fidl::encoding::Depth,
13387        ) -> fidl::Result<()> {
13388            encoder.debug_check_bounds::<Nat64Info>(offset);
13389            // Vector header
13390            let max_ordinal: u64 = self.max_ordinal_present();
13391            encoder.write_num(max_ordinal, offset);
13392            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
13393            // Calling encoder.out_of_line_offset(0) is not allowed.
13394            if max_ordinal == 0 {
13395                return Ok(());
13396            }
13397            depth.increment()?;
13398            let envelope_size = 8;
13399            let bytes_len = max_ordinal as usize * envelope_size;
13400            #[allow(unused_variables)]
13401            let offset = encoder.out_of_line_offset(bytes_len);
13402            let mut _prev_end_offset: usize = 0;
13403            if 1 > max_ordinal {
13404                return Ok(());
13405            }
13406
13407            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13408            // are envelope_size bytes.
13409            let cur_offset: usize = (1 - 1) * envelope_size;
13410
13411            // Zero reserved fields.
13412            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13413
13414            // Safety:
13415            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13416            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13417            //   envelope_size bytes, there is always sufficient room.
13418            fidl::encoding::encode_in_envelope_optional::<BorderRoutingNat64State, D>(
13419                self.nat64_state
13420                    .as_ref()
13421                    .map(<BorderRoutingNat64State as fidl::encoding::ValueTypeMarker>::borrow),
13422                encoder,
13423                offset + cur_offset,
13424                depth,
13425            )?;
13426
13427            _prev_end_offset = cur_offset + envelope_size;
13428            if 2 > max_ordinal {
13429                return Ok(());
13430            }
13431
13432            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13433            // are envelope_size bytes.
13434            let cur_offset: usize = (2 - 1) * envelope_size;
13435
13436            // Zero reserved fields.
13437            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13438
13439            // Safety:
13440            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13441            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13442            //   envelope_size bytes, there is always sufficient room.
13443            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<Nat64Mapping>, D>(
13444            self.nat64_mappings.as_ref().map(<fidl::encoding::UnboundedVector<Nat64Mapping> as fidl::encoding::ValueTypeMarker>::borrow),
13445            encoder, offset + cur_offset, depth
13446        )?;
13447
13448            _prev_end_offset = cur_offset + envelope_size;
13449            if 3 > max_ordinal {
13450                return Ok(());
13451            }
13452
13453            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13454            // are envelope_size bytes.
13455            let cur_offset: usize = (3 - 1) * envelope_size;
13456
13457            // Zero reserved fields.
13458            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13459
13460            // Safety:
13461            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13462            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13463            //   envelope_size bytes, there is always sufficient room.
13464            fidl::encoding::encode_in_envelope_optional::<Nat64ErrorCounters, D>(
13465                self.nat64_error_counters
13466                    .as_ref()
13467                    .map(<Nat64ErrorCounters as fidl::encoding::ValueTypeMarker>::borrow),
13468                encoder,
13469                offset + cur_offset,
13470                depth,
13471            )?;
13472
13473            _prev_end_offset = cur_offset + envelope_size;
13474            if 4 > max_ordinal {
13475                return Ok(());
13476            }
13477
13478            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13479            // are envelope_size bytes.
13480            let cur_offset: usize = (4 - 1) * envelope_size;
13481
13482            // Zero reserved fields.
13483            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13484
13485            // Safety:
13486            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13487            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13488            //   envelope_size bytes, there is always sufficient room.
13489            fidl::encoding::encode_in_envelope_optional::<Nat64ProtocolCounters, D>(
13490                self.nat64_protocol_counters
13491                    .as_ref()
13492                    .map(<Nat64ProtocolCounters as fidl::encoding::ValueTypeMarker>::borrow),
13493                encoder,
13494                offset + cur_offset,
13495                depth,
13496            )?;
13497
13498            _prev_end_offset = cur_offset + envelope_size;
13499
13500            Ok(())
13501        }
13502    }
13503
13504    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Nat64Info {
13505        #[inline(always)]
13506        fn new_empty() -> Self {
13507            Self::default()
13508        }
13509
13510        unsafe fn decode(
13511            &mut self,
13512            decoder: &mut fidl::encoding::Decoder<'_, D>,
13513            offset: usize,
13514            mut depth: fidl::encoding::Depth,
13515        ) -> fidl::Result<()> {
13516            decoder.debug_check_bounds::<Self>(offset);
13517            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
13518                None => return Err(fidl::Error::NotNullable),
13519                Some(len) => len,
13520            };
13521            // Calling decoder.out_of_line_offset(0) is not allowed.
13522            if len == 0 {
13523                return Ok(());
13524            };
13525            depth.increment()?;
13526            let envelope_size = 8;
13527            let bytes_len = len * envelope_size;
13528            let offset = decoder.out_of_line_offset(bytes_len)?;
13529            // Decode the envelope for each type.
13530            let mut _next_ordinal_to_read = 0;
13531            let mut next_offset = offset;
13532            let end_offset = offset + bytes_len;
13533            _next_ordinal_to_read += 1;
13534            if next_offset >= end_offset {
13535                return Ok(());
13536            }
13537
13538            // Decode unknown envelopes for gaps in ordinals.
13539            while _next_ordinal_to_read < 1 {
13540                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
13541                _next_ordinal_to_read += 1;
13542                next_offset += envelope_size;
13543            }
13544
13545            let next_out_of_line = decoder.next_out_of_line();
13546            let handles_before = decoder.remaining_handles();
13547            if let Some((inlined, num_bytes, num_handles)) =
13548                fidl::encoding::decode_envelope_header(decoder, next_offset)?
13549            {
13550                let member_inline_size =
13551                    <BorderRoutingNat64State as fidl::encoding::TypeMarker>::inline_size(
13552                        decoder.context,
13553                    );
13554                if inlined != (member_inline_size <= 4) {
13555                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
13556                }
13557                let inner_offset;
13558                let mut inner_depth = depth.clone();
13559                if inlined {
13560                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
13561                    inner_offset = next_offset;
13562                } else {
13563                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
13564                    inner_depth.increment()?;
13565                }
13566                let val_ref = self
13567                    .nat64_state
13568                    .get_or_insert_with(|| fidl::new_empty!(BorderRoutingNat64State, D));
13569                fidl::decode!(
13570                    BorderRoutingNat64State,
13571                    D,
13572                    val_ref,
13573                    decoder,
13574                    inner_offset,
13575                    inner_depth
13576                )?;
13577                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
13578                {
13579                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
13580                }
13581                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
13582                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
13583                }
13584            }
13585
13586            next_offset += envelope_size;
13587            _next_ordinal_to_read += 1;
13588            if next_offset >= end_offset {
13589                return Ok(());
13590            }
13591
13592            // Decode unknown envelopes for gaps in ordinals.
13593            while _next_ordinal_to_read < 2 {
13594                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
13595                _next_ordinal_to_read += 1;
13596                next_offset += envelope_size;
13597            }
13598
13599            let next_out_of_line = decoder.next_out_of_line();
13600            let handles_before = decoder.remaining_handles();
13601            if let Some((inlined, num_bytes, num_handles)) =
13602                fidl::encoding::decode_envelope_header(decoder, next_offset)?
13603            {
13604                let member_inline_size = <fidl::encoding::UnboundedVector<Nat64Mapping> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
13605                if inlined != (member_inline_size <= 4) {
13606                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
13607                }
13608                let inner_offset;
13609                let mut inner_depth = depth.clone();
13610                if inlined {
13611                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
13612                    inner_offset = next_offset;
13613                } else {
13614                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
13615                    inner_depth.increment()?;
13616                }
13617                let val_ref = self.nat64_mappings.get_or_insert_with(|| {
13618                    fidl::new_empty!(fidl::encoding::UnboundedVector<Nat64Mapping>, D)
13619                });
13620                fidl::decode!(
13621                    fidl::encoding::UnboundedVector<Nat64Mapping>,
13622                    D,
13623                    val_ref,
13624                    decoder,
13625                    inner_offset,
13626                    inner_depth
13627                )?;
13628                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
13629                {
13630                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
13631                }
13632                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
13633                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
13634                }
13635            }
13636
13637            next_offset += envelope_size;
13638            _next_ordinal_to_read += 1;
13639            if next_offset >= end_offset {
13640                return Ok(());
13641            }
13642
13643            // Decode unknown envelopes for gaps in ordinals.
13644            while _next_ordinal_to_read < 3 {
13645                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
13646                _next_ordinal_to_read += 1;
13647                next_offset += envelope_size;
13648            }
13649
13650            let next_out_of_line = decoder.next_out_of_line();
13651            let handles_before = decoder.remaining_handles();
13652            if let Some((inlined, num_bytes, num_handles)) =
13653                fidl::encoding::decode_envelope_header(decoder, next_offset)?
13654            {
13655                let member_inline_size =
13656                    <Nat64ErrorCounters as fidl::encoding::TypeMarker>::inline_size(
13657                        decoder.context,
13658                    );
13659                if inlined != (member_inline_size <= 4) {
13660                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
13661                }
13662                let inner_offset;
13663                let mut inner_depth = depth.clone();
13664                if inlined {
13665                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
13666                    inner_offset = next_offset;
13667                } else {
13668                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
13669                    inner_depth.increment()?;
13670                }
13671                let val_ref = self
13672                    .nat64_error_counters
13673                    .get_or_insert_with(|| fidl::new_empty!(Nat64ErrorCounters, D));
13674                fidl::decode!(Nat64ErrorCounters, D, val_ref, decoder, inner_offset, inner_depth)?;
13675                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
13676                {
13677                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
13678                }
13679                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
13680                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
13681                }
13682            }
13683
13684            next_offset += envelope_size;
13685            _next_ordinal_to_read += 1;
13686            if next_offset >= end_offset {
13687                return Ok(());
13688            }
13689
13690            // Decode unknown envelopes for gaps in ordinals.
13691            while _next_ordinal_to_read < 4 {
13692                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
13693                _next_ordinal_to_read += 1;
13694                next_offset += envelope_size;
13695            }
13696
13697            let next_out_of_line = decoder.next_out_of_line();
13698            let handles_before = decoder.remaining_handles();
13699            if let Some((inlined, num_bytes, num_handles)) =
13700                fidl::encoding::decode_envelope_header(decoder, next_offset)?
13701            {
13702                let member_inline_size =
13703                    <Nat64ProtocolCounters as fidl::encoding::TypeMarker>::inline_size(
13704                        decoder.context,
13705                    );
13706                if inlined != (member_inline_size <= 4) {
13707                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
13708                }
13709                let inner_offset;
13710                let mut inner_depth = depth.clone();
13711                if inlined {
13712                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
13713                    inner_offset = next_offset;
13714                } else {
13715                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
13716                    inner_depth.increment()?;
13717                }
13718                let val_ref = self
13719                    .nat64_protocol_counters
13720                    .get_or_insert_with(|| fidl::new_empty!(Nat64ProtocolCounters, D));
13721                fidl::decode!(
13722                    Nat64ProtocolCounters,
13723                    D,
13724                    val_ref,
13725                    decoder,
13726                    inner_offset,
13727                    inner_depth
13728                )?;
13729                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
13730                {
13731                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
13732                }
13733                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
13734                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
13735                }
13736            }
13737
13738            next_offset += envelope_size;
13739
13740            // Decode the remaining unknown envelopes.
13741            while next_offset < end_offset {
13742                _next_ordinal_to_read += 1;
13743                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
13744                next_offset += envelope_size;
13745            }
13746
13747            Ok(())
13748        }
13749    }
13750
13751    impl Nat64Mapping {
13752        #[inline(always)]
13753        fn max_ordinal_present(&self) -> u64 {
13754            if let Some(_) = self.counters {
13755                return 5;
13756            }
13757            if let Some(_) = self.remaining_time_ms {
13758                return 4;
13759            }
13760            if let Some(_) = self.ip6_addr {
13761                return 3;
13762            }
13763            if let Some(_) = self.ip4_addr {
13764                return 2;
13765            }
13766            if let Some(_) = self.mapping_id {
13767                return 1;
13768            }
13769            0
13770        }
13771    }
13772
13773    impl fidl::encoding::ValueTypeMarker for Nat64Mapping {
13774        type Borrowed<'a> = &'a Self;
13775        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
13776            value
13777        }
13778    }
13779
13780    unsafe impl fidl::encoding::TypeMarker for Nat64Mapping {
13781        type Owned = Self;
13782
13783        #[inline(always)]
13784        fn inline_align(_context: fidl::encoding::Context) -> usize {
13785            8
13786        }
13787
13788        #[inline(always)]
13789        fn inline_size(_context: fidl::encoding::Context) -> usize {
13790            16
13791        }
13792    }
13793
13794    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Nat64Mapping, D>
13795        for &Nat64Mapping
13796    {
13797        unsafe fn encode(
13798            self,
13799            encoder: &mut fidl::encoding::Encoder<'_, D>,
13800            offset: usize,
13801            mut depth: fidl::encoding::Depth,
13802        ) -> fidl::Result<()> {
13803            encoder.debug_check_bounds::<Nat64Mapping>(offset);
13804            // Vector header
13805            let max_ordinal: u64 = self.max_ordinal_present();
13806            encoder.write_num(max_ordinal, offset);
13807            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
13808            // Calling encoder.out_of_line_offset(0) is not allowed.
13809            if max_ordinal == 0 {
13810                return Ok(());
13811            }
13812            depth.increment()?;
13813            let envelope_size = 8;
13814            let bytes_len = max_ordinal as usize * envelope_size;
13815            #[allow(unused_variables)]
13816            let offset = encoder.out_of_line_offset(bytes_len);
13817            let mut _prev_end_offset: usize = 0;
13818            if 1 > max_ordinal {
13819                return Ok(());
13820            }
13821
13822            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13823            // are envelope_size bytes.
13824            let cur_offset: usize = (1 - 1) * envelope_size;
13825
13826            // Zero reserved fields.
13827            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13828
13829            // Safety:
13830            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13831            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13832            //   envelope_size bytes, there is always sufficient room.
13833            fidl::encoding::encode_in_envelope_optional::<u64, D>(
13834                self.mapping_id.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
13835                encoder,
13836                offset + cur_offset,
13837                depth,
13838            )?;
13839
13840            _prev_end_offset = cur_offset + envelope_size;
13841            if 2 > max_ordinal {
13842                return Ok(());
13843            }
13844
13845            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13846            // are envelope_size bytes.
13847            let cur_offset: usize = (2 - 1) * envelope_size;
13848
13849            // Zero reserved fields.
13850            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13851
13852            // Safety:
13853            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13854            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13855            //   envelope_size bytes, there is always sufficient room.
13856            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<u8>, D>(
13857            self.ip4_addr.as_ref().map(<fidl::encoding::UnboundedVector<u8> as fidl::encoding::ValueTypeMarker>::borrow),
13858            encoder, offset + cur_offset, depth
13859        )?;
13860
13861            _prev_end_offset = cur_offset + envelope_size;
13862            if 3 > max_ordinal {
13863                return Ok(());
13864            }
13865
13866            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13867            // are envelope_size bytes.
13868            let cur_offset: usize = (3 - 1) * envelope_size;
13869
13870            // Zero reserved fields.
13871            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13872
13873            // Safety:
13874            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13875            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13876            //   envelope_size bytes, there is always sufficient room.
13877            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<u8>, D>(
13878            self.ip6_addr.as_ref().map(<fidl::encoding::UnboundedVector<u8> as fidl::encoding::ValueTypeMarker>::borrow),
13879            encoder, offset + cur_offset, depth
13880        )?;
13881
13882            _prev_end_offset = cur_offset + envelope_size;
13883            if 4 > max_ordinal {
13884                return Ok(());
13885            }
13886
13887            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13888            // are envelope_size bytes.
13889            let cur_offset: usize = (4 - 1) * envelope_size;
13890
13891            // Zero reserved fields.
13892            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13893
13894            // Safety:
13895            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13896            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13897            //   envelope_size bytes, there is always sufficient room.
13898            fidl::encoding::encode_in_envelope_optional::<u32, D>(
13899                self.remaining_time_ms
13900                    .as_ref()
13901                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
13902                encoder,
13903                offset + cur_offset,
13904                depth,
13905            )?;
13906
13907            _prev_end_offset = cur_offset + envelope_size;
13908            if 5 > max_ordinal {
13909                return Ok(());
13910            }
13911
13912            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13913            // are envelope_size bytes.
13914            let cur_offset: usize = (5 - 1) * envelope_size;
13915
13916            // Zero reserved fields.
13917            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13918
13919            // Safety:
13920            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13921            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13922            //   envelope_size bytes, there is always sufficient room.
13923            fidl::encoding::encode_in_envelope_optional::<Nat64ProtocolCounters, D>(
13924                self.counters
13925                    .as_ref()
13926                    .map(<Nat64ProtocolCounters as fidl::encoding::ValueTypeMarker>::borrow),
13927                encoder,
13928                offset + cur_offset,
13929                depth,
13930            )?;
13931
13932            _prev_end_offset = cur_offset + envelope_size;
13933
13934            Ok(())
13935        }
13936    }
13937
13938    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Nat64Mapping {
13939        #[inline(always)]
13940        fn new_empty() -> Self {
13941            Self::default()
13942        }
13943
13944        unsafe fn decode(
13945            &mut self,
13946            decoder: &mut fidl::encoding::Decoder<'_, D>,
13947            offset: usize,
13948            mut depth: fidl::encoding::Depth,
13949        ) -> fidl::Result<()> {
13950            decoder.debug_check_bounds::<Self>(offset);
13951            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
13952                None => return Err(fidl::Error::NotNullable),
13953                Some(len) => len,
13954            };
13955            // Calling decoder.out_of_line_offset(0) is not allowed.
13956            if len == 0 {
13957                return Ok(());
13958            };
13959            depth.increment()?;
13960            let envelope_size = 8;
13961            let bytes_len = len * envelope_size;
13962            let offset = decoder.out_of_line_offset(bytes_len)?;
13963            // Decode the envelope for each type.
13964            let mut _next_ordinal_to_read = 0;
13965            let mut next_offset = offset;
13966            let end_offset = offset + bytes_len;
13967            _next_ordinal_to_read += 1;
13968            if next_offset >= end_offset {
13969                return Ok(());
13970            }
13971
13972            // Decode unknown envelopes for gaps in ordinals.
13973            while _next_ordinal_to_read < 1 {
13974                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
13975                _next_ordinal_to_read += 1;
13976                next_offset += envelope_size;
13977            }
13978
13979            let next_out_of_line = decoder.next_out_of_line();
13980            let handles_before = decoder.remaining_handles();
13981            if let Some((inlined, num_bytes, num_handles)) =
13982                fidl::encoding::decode_envelope_header(decoder, next_offset)?
13983            {
13984                let member_inline_size =
13985                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
13986                if inlined != (member_inline_size <= 4) {
13987                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
13988                }
13989                let inner_offset;
13990                let mut inner_depth = depth.clone();
13991                if inlined {
13992                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
13993                    inner_offset = next_offset;
13994                } else {
13995                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
13996                    inner_depth.increment()?;
13997                }
13998                let val_ref = self.mapping_id.get_or_insert_with(|| fidl::new_empty!(u64, D));
13999                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
14000                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14001                {
14002                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
14003                }
14004                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14005                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14006                }
14007            }
14008
14009            next_offset += envelope_size;
14010            _next_ordinal_to_read += 1;
14011            if next_offset >= end_offset {
14012                return Ok(());
14013            }
14014
14015            // Decode unknown envelopes for gaps in ordinals.
14016            while _next_ordinal_to_read < 2 {
14017                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14018                _next_ordinal_to_read += 1;
14019                next_offset += envelope_size;
14020            }
14021
14022            let next_out_of_line = decoder.next_out_of_line();
14023            let handles_before = decoder.remaining_handles();
14024            if let Some((inlined, num_bytes, num_handles)) =
14025                fidl::encoding::decode_envelope_header(decoder, next_offset)?
14026            {
14027                let member_inline_size = <fidl::encoding::UnboundedVector<u8> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
14028                if inlined != (member_inline_size <= 4) {
14029                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
14030                }
14031                let inner_offset;
14032                let mut inner_depth = depth.clone();
14033                if inlined {
14034                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
14035                    inner_offset = next_offset;
14036                } else {
14037                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
14038                    inner_depth.increment()?;
14039                }
14040                let val_ref = self.ip4_addr.get_or_insert_with(|| {
14041                    fidl::new_empty!(fidl::encoding::UnboundedVector<u8>, D)
14042                });
14043                fidl::decode!(
14044                    fidl::encoding::UnboundedVector<u8>,
14045                    D,
14046                    val_ref,
14047                    decoder,
14048                    inner_offset,
14049                    inner_depth
14050                )?;
14051                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14052                {
14053                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
14054                }
14055                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14056                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14057                }
14058            }
14059
14060            next_offset += envelope_size;
14061            _next_ordinal_to_read += 1;
14062            if next_offset >= end_offset {
14063                return Ok(());
14064            }
14065
14066            // Decode unknown envelopes for gaps in ordinals.
14067            while _next_ordinal_to_read < 3 {
14068                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14069                _next_ordinal_to_read += 1;
14070                next_offset += envelope_size;
14071            }
14072
14073            let next_out_of_line = decoder.next_out_of_line();
14074            let handles_before = decoder.remaining_handles();
14075            if let Some((inlined, num_bytes, num_handles)) =
14076                fidl::encoding::decode_envelope_header(decoder, next_offset)?
14077            {
14078                let member_inline_size = <fidl::encoding::UnboundedVector<u8> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
14079                if inlined != (member_inline_size <= 4) {
14080                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
14081                }
14082                let inner_offset;
14083                let mut inner_depth = depth.clone();
14084                if inlined {
14085                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
14086                    inner_offset = next_offset;
14087                } else {
14088                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
14089                    inner_depth.increment()?;
14090                }
14091                let val_ref = self.ip6_addr.get_or_insert_with(|| {
14092                    fidl::new_empty!(fidl::encoding::UnboundedVector<u8>, D)
14093                });
14094                fidl::decode!(
14095                    fidl::encoding::UnboundedVector<u8>,
14096                    D,
14097                    val_ref,
14098                    decoder,
14099                    inner_offset,
14100                    inner_depth
14101                )?;
14102                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14103                {
14104                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
14105                }
14106                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14107                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14108                }
14109            }
14110
14111            next_offset += envelope_size;
14112            _next_ordinal_to_read += 1;
14113            if next_offset >= end_offset {
14114                return Ok(());
14115            }
14116
14117            // Decode unknown envelopes for gaps in ordinals.
14118            while _next_ordinal_to_read < 4 {
14119                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14120                _next_ordinal_to_read += 1;
14121                next_offset += envelope_size;
14122            }
14123
14124            let next_out_of_line = decoder.next_out_of_line();
14125            let handles_before = decoder.remaining_handles();
14126            if let Some((inlined, num_bytes, num_handles)) =
14127                fidl::encoding::decode_envelope_header(decoder, next_offset)?
14128            {
14129                let member_inline_size =
14130                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
14131                if inlined != (member_inline_size <= 4) {
14132                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
14133                }
14134                let inner_offset;
14135                let mut inner_depth = depth.clone();
14136                if inlined {
14137                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
14138                    inner_offset = next_offset;
14139                } else {
14140                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
14141                    inner_depth.increment()?;
14142                }
14143                let val_ref =
14144                    self.remaining_time_ms.get_or_insert_with(|| fidl::new_empty!(u32, D));
14145                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
14146                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14147                {
14148                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
14149                }
14150                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14151                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14152                }
14153            }
14154
14155            next_offset += envelope_size;
14156            _next_ordinal_to_read += 1;
14157            if next_offset >= end_offset {
14158                return Ok(());
14159            }
14160
14161            // Decode unknown envelopes for gaps in ordinals.
14162            while _next_ordinal_to_read < 5 {
14163                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14164                _next_ordinal_to_read += 1;
14165                next_offset += envelope_size;
14166            }
14167
14168            let next_out_of_line = decoder.next_out_of_line();
14169            let handles_before = decoder.remaining_handles();
14170            if let Some((inlined, num_bytes, num_handles)) =
14171                fidl::encoding::decode_envelope_header(decoder, next_offset)?
14172            {
14173                let member_inline_size =
14174                    <Nat64ProtocolCounters as fidl::encoding::TypeMarker>::inline_size(
14175                        decoder.context,
14176                    );
14177                if inlined != (member_inline_size <= 4) {
14178                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
14179                }
14180                let inner_offset;
14181                let mut inner_depth = depth.clone();
14182                if inlined {
14183                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
14184                    inner_offset = next_offset;
14185                } else {
14186                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
14187                    inner_depth.increment()?;
14188                }
14189                let val_ref =
14190                    self.counters.get_or_insert_with(|| fidl::new_empty!(Nat64ProtocolCounters, D));
14191                fidl::decode!(
14192                    Nat64ProtocolCounters,
14193                    D,
14194                    val_ref,
14195                    decoder,
14196                    inner_offset,
14197                    inner_depth
14198                )?;
14199                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14200                {
14201                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
14202                }
14203                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14204                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14205                }
14206            }
14207
14208            next_offset += envelope_size;
14209
14210            // Decode the remaining unknown envelopes.
14211            while next_offset < end_offset {
14212                _next_ordinal_to_read += 1;
14213                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14214                next_offset += envelope_size;
14215            }
14216
14217            Ok(())
14218        }
14219    }
14220
14221    impl Nat64PacketCounters {
14222        #[inline(always)]
14223        fn max_ordinal_present(&self) -> u64 {
14224            if let Some(_) = self.ipv6_to_ipv4_packets {
14225                return 2;
14226            }
14227            if let Some(_) = self.ipv4_to_ipv6_packets {
14228                return 1;
14229            }
14230            0
14231        }
14232    }
14233
14234    impl fidl::encoding::ValueTypeMarker for Nat64PacketCounters {
14235        type Borrowed<'a> = &'a Self;
14236        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
14237            value
14238        }
14239    }
14240
14241    unsafe impl fidl::encoding::TypeMarker for Nat64PacketCounters {
14242        type Owned = Self;
14243
14244        #[inline(always)]
14245        fn inline_align(_context: fidl::encoding::Context) -> usize {
14246            8
14247        }
14248
14249        #[inline(always)]
14250        fn inline_size(_context: fidl::encoding::Context) -> usize {
14251            16
14252        }
14253    }
14254
14255    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Nat64PacketCounters, D>
14256        for &Nat64PacketCounters
14257    {
14258        unsafe fn encode(
14259            self,
14260            encoder: &mut fidl::encoding::Encoder<'_, D>,
14261            offset: usize,
14262            mut depth: fidl::encoding::Depth,
14263        ) -> fidl::Result<()> {
14264            encoder.debug_check_bounds::<Nat64PacketCounters>(offset);
14265            // Vector header
14266            let max_ordinal: u64 = self.max_ordinal_present();
14267            encoder.write_num(max_ordinal, offset);
14268            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
14269            // Calling encoder.out_of_line_offset(0) is not allowed.
14270            if max_ordinal == 0 {
14271                return Ok(());
14272            }
14273            depth.increment()?;
14274            let envelope_size = 8;
14275            let bytes_len = max_ordinal as usize * envelope_size;
14276            #[allow(unused_variables)]
14277            let offset = encoder.out_of_line_offset(bytes_len);
14278            let mut _prev_end_offset: usize = 0;
14279            if 1 > max_ordinal {
14280                return Ok(());
14281            }
14282
14283            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
14284            // are envelope_size bytes.
14285            let cur_offset: usize = (1 - 1) * envelope_size;
14286
14287            // Zero reserved fields.
14288            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
14289
14290            // Safety:
14291            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
14292            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
14293            //   envelope_size bytes, there is always sufficient room.
14294            fidl::encoding::encode_in_envelope_optional::<u64, D>(
14295                self.ipv4_to_ipv6_packets
14296                    .as_ref()
14297                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
14298                encoder,
14299                offset + cur_offset,
14300                depth,
14301            )?;
14302
14303            _prev_end_offset = cur_offset + envelope_size;
14304            if 2 > max_ordinal {
14305                return Ok(());
14306            }
14307
14308            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
14309            // are envelope_size bytes.
14310            let cur_offset: usize = (2 - 1) * envelope_size;
14311
14312            // Zero reserved fields.
14313            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
14314
14315            // Safety:
14316            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
14317            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
14318            //   envelope_size bytes, there is always sufficient room.
14319            fidl::encoding::encode_in_envelope_optional::<u64, D>(
14320                self.ipv6_to_ipv4_packets
14321                    .as_ref()
14322                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
14323                encoder,
14324                offset + cur_offset,
14325                depth,
14326            )?;
14327
14328            _prev_end_offset = cur_offset + envelope_size;
14329
14330            Ok(())
14331        }
14332    }
14333
14334    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Nat64PacketCounters {
14335        #[inline(always)]
14336        fn new_empty() -> Self {
14337            Self::default()
14338        }
14339
14340        unsafe fn decode(
14341            &mut self,
14342            decoder: &mut fidl::encoding::Decoder<'_, D>,
14343            offset: usize,
14344            mut depth: fidl::encoding::Depth,
14345        ) -> fidl::Result<()> {
14346            decoder.debug_check_bounds::<Self>(offset);
14347            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
14348                None => return Err(fidl::Error::NotNullable),
14349                Some(len) => len,
14350            };
14351            // Calling decoder.out_of_line_offset(0) is not allowed.
14352            if len == 0 {
14353                return Ok(());
14354            };
14355            depth.increment()?;
14356            let envelope_size = 8;
14357            let bytes_len = len * envelope_size;
14358            let offset = decoder.out_of_line_offset(bytes_len)?;
14359            // Decode the envelope for each type.
14360            let mut _next_ordinal_to_read = 0;
14361            let mut next_offset = offset;
14362            let end_offset = offset + bytes_len;
14363            _next_ordinal_to_read += 1;
14364            if next_offset >= end_offset {
14365                return Ok(());
14366            }
14367
14368            // Decode unknown envelopes for gaps in ordinals.
14369            while _next_ordinal_to_read < 1 {
14370                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14371                _next_ordinal_to_read += 1;
14372                next_offset += envelope_size;
14373            }
14374
14375            let next_out_of_line = decoder.next_out_of_line();
14376            let handles_before = decoder.remaining_handles();
14377            if let Some((inlined, num_bytes, num_handles)) =
14378                fidl::encoding::decode_envelope_header(decoder, next_offset)?
14379            {
14380                let member_inline_size =
14381                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
14382                if inlined != (member_inline_size <= 4) {
14383                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
14384                }
14385                let inner_offset;
14386                let mut inner_depth = depth.clone();
14387                if inlined {
14388                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
14389                    inner_offset = next_offset;
14390                } else {
14391                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
14392                    inner_depth.increment()?;
14393                }
14394                let val_ref =
14395                    self.ipv4_to_ipv6_packets.get_or_insert_with(|| fidl::new_empty!(u64, D));
14396                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
14397                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14398                {
14399                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
14400                }
14401                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14402                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14403                }
14404            }
14405
14406            next_offset += envelope_size;
14407            _next_ordinal_to_read += 1;
14408            if next_offset >= end_offset {
14409                return Ok(());
14410            }
14411
14412            // Decode unknown envelopes for gaps in ordinals.
14413            while _next_ordinal_to_read < 2 {
14414                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14415                _next_ordinal_to_read += 1;
14416                next_offset += envelope_size;
14417            }
14418
14419            let next_out_of_line = decoder.next_out_of_line();
14420            let handles_before = decoder.remaining_handles();
14421            if let Some((inlined, num_bytes, num_handles)) =
14422                fidl::encoding::decode_envelope_header(decoder, next_offset)?
14423            {
14424                let member_inline_size =
14425                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
14426                if inlined != (member_inline_size <= 4) {
14427                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
14428                }
14429                let inner_offset;
14430                let mut inner_depth = depth.clone();
14431                if inlined {
14432                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
14433                    inner_offset = next_offset;
14434                } else {
14435                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
14436                    inner_depth.increment()?;
14437                }
14438                let val_ref =
14439                    self.ipv6_to_ipv4_packets.get_or_insert_with(|| fidl::new_empty!(u64, D));
14440                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
14441                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14442                {
14443                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
14444                }
14445                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14446                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14447                }
14448            }
14449
14450            next_offset += envelope_size;
14451
14452            // Decode the remaining unknown envelopes.
14453            while next_offset < end_offset {
14454                _next_ordinal_to_read += 1;
14455                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14456                next_offset += envelope_size;
14457            }
14458
14459            Ok(())
14460        }
14461    }
14462
14463    impl Nat64ProtocolCounters {
14464        #[inline(always)]
14465        fn max_ordinal_present(&self) -> u64 {
14466            if let Some(_) = self.total {
14467                return 4;
14468            }
14469            if let Some(_) = self.icmp {
14470                return 3;
14471            }
14472            if let Some(_) = self.udp {
14473                return 2;
14474            }
14475            if let Some(_) = self.tcp {
14476                return 1;
14477            }
14478            0
14479        }
14480    }
14481
14482    impl fidl::encoding::ValueTypeMarker for Nat64ProtocolCounters {
14483        type Borrowed<'a> = &'a Self;
14484        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
14485            value
14486        }
14487    }
14488
14489    unsafe impl fidl::encoding::TypeMarker for Nat64ProtocolCounters {
14490        type Owned = Self;
14491
14492        #[inline(always)]
14493        fn inline_align(_context: fidl::encoding::Context) -> usize {
14494            8
14495        }
14496
14497        #[inline(always)]
14498        fn inline_size(_context: fidl::encoding::Context) -> usize {
14499            16
14500        }
14501    }
14502
14503    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Nat64ProtocolCounters, D>
14504        for &Nat64ProtocolCounters
14505    {
14506        unsafe fn encode(
14507            self,
14508            encoder: &mut fidl::encoding::Encoder<'_, D>,
14509            offset: usize,
14510            mut depth: fidl::encoding::Depth,
14511        ) -> fidl::Result<()> {
14512            encoder.debug_check_bounds::<Nat64ProtocolCounters>(offset);
14513            // Vector header
14514            let max_ordinal: u64 = self.max_ordinal_present();
14515            encoder.write_num(max_ordinal, offset);
14516            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
14517            // Calling encoder.out_of_line_offset(0) is not allowed.
14518            if max_ordinal == 0 {
14519                return Ok(());
14520            }
14521            depth.increment()?;
14522            let envelope_size = 8;
14523            let bytes_len = max_ordinal as usize * envelope_size;
14524            #[allow(unused_variables)]
14525            let offset = encoder.out_of_line_offset(bytes_len);
14526            let mut _prev_end_offset: usize = 0;
14527            if 1 > max_ordinal {
14528                return Ok(());
14529            }
14530
14531            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
14532            // are envelope_size bytes.
14533            let cur_offset: usize = (1 - 1) * envelope_size;
14534
14535            // Zero reserved fields.
14536            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
14537
14538            // Safety:
14539            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
14540            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
14541            //   envelope_size bytes, there is always sufficient room.
14542            fidl::encoding::encode_in_envelope_optional::<Nat64TrafficCounters, D>(
14543                self.tcp
14544                    .as_ref()
14545                    .map(<Nat64TrafficCounters as fidl::encoding::ValueTypeMarker>::borrow),
14546                encoder,
14547                offset + cur_offset,
14548                depth,
14549            )?;
14550
14551            _prev_end_offset = cur_offset + envelope_size;
14552            if 2 > max_ordinal {
14553                return Ok(());
14554            }
14555
14556            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
14557            // are envelope_size bytes.
14558            let cur_offset: usize = (2 - 1) * envelope_size;
14559
14560            // Zero reserved fields.
14561            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
14562
14563            // Safety:
14564            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
14565            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
14566            //   envelope_size bytes, there is always sufficient room.
14567            fidl::encoding::encode_in_envelope_optional::<Nat64TrafficCounters, D>(
14568                self.udp
14569                    .as_ref()
14570                    .map(<Nat64TrafficCounters as fidl::encoding::ValueTypeMarker>::borrow),
14571                encoder,
14572                offset + cur_offset,
14573                depth,
14574            )?;
14575
14576            _prev_end_offset = cur_offset + envelope_size;
14577            if 3 > max_ordinal {
14578                return Ok(());
14579            }
14580
14581            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
14582            // are envelope_size bytes.
14583            let cur_offset: usize = (3 - 1) * envelope_size;
14584
14585            // Zero reserved fields.
14586            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
14587
14588            // Safety:
14589            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
14590            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
14591            //   envelope_size bytes, there is always sufficient room.
14592            fidl::encoding::encode_in_envelope_optional::<Nat64TrafficCounters, D>(
14593                self.icmp
14594                    .as_ref()
14595                    .map(<Nat64TrafficCounters as fidl::encoding::ValueTypeMarker>::borrow),
14596                encoder,
14597                offset + cur_offset,
14598                depth,
14599            )?;
14600
14601            _prev_end_offset = cur_offset + envelope_size;
14602            if 4 > max_ordinal {
14603                return Ok(());
14604            }
14605
14606            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
14607            // are envelope_size bytes.
14608            let cur_offset: usize = (4 - 1) * envelope_size;
14609
14610            // Zero reserved fields.
14611            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
14612
14613            // Safety:
14614            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
14615            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
14616            //   envelope_size bytes, there is always sufficient room.
14617            fidl::encoding::encode_in_envelope_optional::<Nat64TrafficCounters, D>(
14618                self.total
14619                    .as_ref()
14620                    .map(<Nat64TrafficCounters as fidl::encoding::ValueTypeMarker>::borrow),
14621                encoder,
14622                offset + cur_offset,
14623                depth,
14624            )?;
14625
14626            _prev_end_offset = cur_offset + envelope_size;
14627
14628            Ok(())
14629        }
14630    }
14631
14632    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Nat64ProtocolCounters {
14633        #[inline(always)]
14634        fn new_empty() -> Self {
14635            Self::default()
14636        }
14637
14638        unsafe fn decode(
14639            &mut self,
14640            decoder: &mut fidl::encoding::Decoder<'_, D>,
14641            offset: usize,
14642            mut depth: fidl::encoding::Depth,
14643        ) -> fidl::Result<()> {
14644            decoder.debug_check_bounds::<Self>(offset);
14645            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
14646                None => return Err(fidl::Error::NotNullable),
14647                Some(len) => len,
14648            };
14649            // Calling decoder.out_of_line_offset(0) is not allowed.
14650            if len == 0 {
14651                return Ok(());
14652            };
14653            depth.increment()?;
14654            let envelope_size = 8;
14655            let bytes_len = len * envelope_size;
14656            let offset = decoder.out_of_line_offset(bytes_len)?;
14657            // Decode the envelope for each type.
14658            let mut _next_ordinal_to_read = 0;
14659            let mut next_offset = offset;
14660            let end_offset = offset + bytes_len;
14661            _next_ordinal_to_read += 1;
14662            if next_offset >= end_offset {
14663                return Ok(());
14664            }
14665
14666            // Decode unknown envelopes for gaps in ordinals.
14667            while _next_ordinal_to_read < 1 {
14668                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14669                _next_ordinal_to_read += 1;
14670                next_offset += envelope_size;
14671            }
14672
14673            let next_out_of_line = decoder.next_out_of_line();
14674            let handles_before = decoder.remaining_handles();
14675            if let Some((inlined, num_bytes, num_handles)) =
14676                fidl::encoding::decode_envelope_header(decoder, next_offset)?
14677            {
14678                let member_inline_size =
14679                    <Nat64TrafficCounters as fidl::encoding::TypeMarker>::inline_size(
14680                        decoder.context,
14681                    );
14682                if inlined != (member_inline_size <= 4) {
14683                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
14684                }
14685                let inner_offset;
14686                let mut inner_depth = depth.clone();
14687                if inlined {
14688                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
14689                    inner_offset = next_offset;
14690                } else {
14691                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
14692                    inner_depth.increment()?;
14693                }
14694                let val_ref =
14695                    self.tcp.get_or_insert_with(|| fidl::new_empty!(Nat64TrafficCounters, D));
14696                fidl::decode!(
14697                    Nat64TrafficCounters,
14698                    D,
14699                    val_ref,
14700                    decoder,
14701                    inner_offset,
14702                    inner_depth
14703                )?;
14704                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14705                {
14706                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
14707                }
14708                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14709                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14710                }
14711            }
14712
14713            next_offset += envelope_size;
14714            _next_ordinal_to_read += 1;
14715            if next_offset >= end_offset {
14716                return Ok(());
14717            }
14718
14719            // Decode unknown envelopes for gaps in ordinals.
14720            while _next_ordinal_to_read < 2 {
14721                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14722                _next_ordinal_to_read += 1;
14723                next_offset += envelope_size;
14724            }
14725
14726            let next_out_of_line = decoder.next_out_of_line();
14727            let handles_before = decoder.remaining_handles();
14728            if let Some((inlined, num_bytes, num_handles)) =
14729                fidl::encoding::decode_envelope_header(decoder, next_offset)?
14730            {
14731                let member_inline_size =
14732                    <Nat64TrafficCounters as fidl::encoding::TypeMarker>::inline_size(
14733                        decoder.context,
14734                    );
14735                if inlined != (member_inline_size <= 4) {
14736                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
14737                }
14738                let inner_offset;
14739                let mut inner_depth = depth.clone();
14740                if inlined {
14741                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
14742                    inner_offset = next_offset;
14743                } else {
14744                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
14745                    inner_depth.increment()?;
14746                }
14747                let val_ref =
14748                    self.udp.get_or_insert_with(|| fidl::new_empty!(Nat64TrafficCounters, D));
14749                fidl::decode!(
14750                    Nat64TrafficCounters,
14751                    D,
14752                    val_ref,
14753                    decoder,
14754                    inner_offset,
14755                    inner_depth
14756                )?;
14757                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14758                {
14759                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
14760                }
14761                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14762                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14763                }
14764            }
14765
14766            next_offset += envelope_size;
14767            _next_ordinal_to_read += 1;
14768            if next_offset >= end_offset {
14769                return Ok(());
14770            }
14771
14772            // Decode unknown envelopes for gaps in ordinals.
14773            while _next_ordinal_to_read < 3 {
14774                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14775                _next_ordinal_to_read += 1;
14776                next_offset += envelope_size;
14777            }
14778
14779            let next_out_of_line = decoder.next_out_of_line();
14780            let handles_before = decoder.remaining_handles();
14781            if let Some((inlined, num_bytes, num_handles)) =
14782                fidl::encoding::decode_envelope_header(decoder, next_offset)?
14783            {
14784                let member_inline_size =
14785                    <Nat64TrafficCounters as fidl::encoding::TypeMarker>::inline_size(
14786                        decoder.context,
14787                    );
14788                if inlined != (member_inline_size <= 4) {
14789                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
14790                }
14791                let inner_offset;
14792                let mut inner_depth = depth.clone();
14793                if inlined {
14794                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
14795                    inner_offset = next_offset;
14796                } else {
14797                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
14798                    inner_depth.increment()?;
14799                }
14800                let val_ref =
14801                    self.icmp.get_or_insert_with(|| fidl::new_empty!(Nat64TrafficCounters, D));
14802                fidl::decode!(
14803                    Nat64TrafficCounters,
14804                    D,
14805                    val_ref,
14806                    decoder,
14807                    inner_offset,
14808                    inner_depth
14809                )?;
14810                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14811                {
14812                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
14813                }
14814                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14815                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14816                }
14817            }
14818
14819            next_offset += envelope_size;
14820            _next_ordinal_to_read += 1;
14821            if next_offset >= end_offset {
14822                return Ok(());
14823            }
14824
14825            // Decode unknown envelopes for gaps in ordinals.
14826            while _next_ordinal_to_read < 4 {
14827                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14828                _next_ordinal_to_read += 1;
14829                next_offset += envelope_size;
14830            }
14831
14832            let next_out_of_line = decoder.next_out_of_line();
14833            let handles_before = decoder.remaining_handles();
14834            if let Some((inlined, num_bytes, num_handles)) =
14835                fidl::encoding::decode_envelope_header(decoder, next_offset)?
14836            {
14837                let member_inline_size =
14838                    <Nat64TrafficCounters as fidl::encoding::TypeMarker>::inline_size(
14839                        decoder.context,
14840                    );
14841                if inlined != (member_inline_size <= 4) {
14842                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
14843                }
14844                let inner_offset;
14845                let mut inner_depth = depth.clone();
14846                if inlined {
14847                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
14848                    inner_offset = next_offset;
14849                } else {
14850                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
14851                    inner_depth.increment()?;
14852                }
14853                let val_ref =
14854                    self.total.get_or_insert_with(|| fidl::new_empty!(Nat64TrafficCounters, D));
14855                fidl::decode!(
14856                    Nat64TrafficCounters,
14857                    D,
14858                    val_ref,
14859                    decoder,
14860                    inner_offset,
14861                    inner_depth
14862                )?;
14863                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14864                {
14865                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
14866                }
14867                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14868                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14869                }
14870            }
14871
14872            next_offset += envelope_size;
14873
14874            // Decode the remaining unknown envelopes.
14875            while next_offset < end_offset {
14876                _next_ordinal_to_read += 1;
14877                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14878                next_offset += envelope_size;
14879            }
14880
14881            Ok(())
14882        }
14883    }
14884
14885    impl Nat64TrafficCounters {
14886        #[inline(always)]
14887        fn max_ordinal_present(&self) -> u64 {
14888            if let Some(_) = self.ipv6_to_ipv4_bytes {
14889                return 4;
14890            }
14891            if let Some(_) = self.ipv6_to_ipv4_packets {
14892                return 3;
14893            }
14894            if let Some(_) = self.ipv4_to_ipv6_bytes {
14895                return 2;
14896            }
14897            if let Some(_) = self.ipv4_to_ipv6_packets {
14898                return 1;
14899            }
14900            0
14901        }
14902    }
14903
14904    impl fidl::encoding::ValueTypeMarker for Nat64TrafficCounters {
14905        type Borrowed<'a> = &'a Self;
14906        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
14907            value
14908        }
14909    }
14910
14911    unsafe impl fidl::encoding::TypeMarker for Nat64TrafficCounters {
14912        type Owned = Self;
14913
14914        #[inline(always)]
14915        fn inline_align(_context: fidl::encoding::Context) -> usize {
14916            8
14917        }
14918
14919        #[inline(always)]
14920        fn inline_size(_context: fidl::encoding::Context) -> usize {
14921            16
14922        }
14923    }
14924
14925    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Nat64TrafficCounters, D>
14926        for &Nat64TrafficCounters
14927    {
14928        unsafe fn encode(
14929            self,
14930            encoder: &mut fidl::encoding::Encoder<'_, D>,
14931            offset: usize,
14932            mut depth: fidl::encoding::Depth,
14933        ) -> fidl::Result<()> {
14934            encoder.debug_check_bounds::<Nat64TrafficCounters>(offset);
14935            // Vector header
14936            let max_ordinal: u64 = self.max_ordinal_present();
14937            encoder.write_num(max_ordinal, offset);
14938            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
14939            // Calling encoder.out_of_line_offset(0) is not allowed.
14940            if max_ordinal == 0 {
14941                return Ok(());
14942            }
14943            depth.increment()?;
14944            let envelope_size = 8;
14945            let bytes_len = max_ordinal as usize * envelope_size;
14946            #[allow(unused_variables)]
14947            let offset = encoder.out_of_line_offset(bytes_len);
14948            let mut _prev_end_offset: usize = 0;
14949            if 1 > max_ordinal {
14950                return Ok(());
14951            }
14952
14953            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
14954            // are envelope_size bytes.
14955            let cur_offset: usize = (1 - 1) * envelope_size;
14956
14957            // Zero reserved fields.
14958            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
14959
14960            // Safety:
14961            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
14962            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
14963            //   envelope_size bytes, there is always sufficient room.
14964            fidl::encoding::encode_in_envelope_optional::<u64, D>(
14965                self.ipv4_to_ipv6_packets
14966                    .as_ref()
14967                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
14968                encoder,
14969                offset + cur_offset,
14970                depth,
14971            )?;
14972
14973            _prev_end_offset = cur_offset + envelope_size;
14974            if 2 > max_ordinal {
14975                return Ok(());
14976            }
14977
14978            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
14979            // are envelope_size bytes.
14980            let cur_offset: usize = (2 - 1) * envelope_size;
14981
14982            // Zero reserved fields.
14983            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
14984
14985            // Safety:
14986            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
14987            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
14988            //   envelope_size bytes, there is always sufficient room.
14989            fidl::encoding::encode_in_envelope_optional::<u64, D>(
14990                self.ipv4_to_ipv6_bytes
14991                    .as_ref()
14992                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
14993                encoder,
14994                offset + cur_offset,
14995                depth,
14996            )?;
14997
14998            _prev_end_offset = cur_offset + envelope_size;
14999            if 3 > max_ordinal {
15000                return Ok(());
15001            }
15002
15003            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
15004            // are envelope_size bytes.
15005            let cur_offset: usize = (3 - 1) * envelope_size;
15006
15007            // Zero reserved fields.
15008            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
15009
15010            // Safety:
15011            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
15012            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
15013            //   envelope_size bytes, there is always sufficient room.
15014            fidl::encoding::encode_in_envelope_optional::<u64, D>(
15015                self.ipv6_to_ipv4_packets
15016                    .as_ref()
15017                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
15018                encoder,
15019                offset + cur_offset,
15020                depth,
15021            )?;
15022
15023            _prev_end_offset = cur_offset + envelope_size;
15024            if 4 > max_ordinal {
15025                return Ok(());
15026            }
15027
15028            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
15029            // are envelope_size bytes.
15030            let cur_offset: usize = (4 - 1) * envelope_size;
15031
15032            // Zero reserved fields.
15033            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
15034
15035            // Safety:
15036            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
15037            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
15038            //   envelope_size bytes, there is always sufficient room.
15039            fidl::encoding::encode_in_envelope_optional::<u64, D>(
15040                self.ipv6_to_ipv4_bytes
15041                    .as_ref()
15042                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
15043                encoder,
15044                offset + cur_offset,
15045                depth,
15046            )?;
15047
15048            _prev_end_offset = cur_offset + envelope_size;
15049
15050            Ok(())
15051        }
15052    }
15053
15054    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Nat64TrafficCounters {
15055        #[inline(always)]
15056        fn new_empty() -> Self {
15057            Self::default()
15058        }
15059
15060        unsafe fn decode(
15061            &mut self,
15062            decoder: &mut fidl::encoding::Decoder<'_, D>,
15063            offset: usize,
15064            mut depth: fidl::encoding::Depth,
15065        ) -> fidl::Result<()> {
15066            decoder.debug_check_bounds::<Self>(offset);
15067            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
15068                None => return Err(fidl::Error::NotNullable),
15069                Some(len) => len,
15070            };
15071            // Calling decoder.out_of_line_offset(0) is not allowed.
15072            if len == 0 {
15073                return Ok(());
15074            };
15075            depth.increment()?;
15076            let envelope_size = 8;
15077            let bytes_len = len * envelope_size;
15078            let offset = decoder.out_of_line_offset(bytes_len)?;
15079            // Decode the envelope for each type.
15080            let mut _next_ordinal_to_read = 0;
15081            let mut next_offset = offset;
15082            let end_offset = offset + bytes_len;
15083            _next_ordinal_to_read += 1;
15084            if next_offset >= end_offset {
15085                return Ok(());
15086            }
15087
15088            // Decode unknown envelopes for gaps in ordinals.
15089            while _next_ordinal_to_read < 1 {
15090                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15091                _next_ordinal_to_read += 1;
15092                next_offset += envelope_size;
15093            }
15094
15095            let next_out_of_line = decoder.next_out_of_line();
15096            let handles_before = decoder.remaining_handles();
15097            if let Some((inlined, num_bytes, num_handles)) =
15098                fidl::encoding::decode_envelope_header(decoder, next_offset)?
15099            {
15100                let member_inline_size =
15101                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
15102                if inlined != (member_inline_size <= 4) {
15103                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
15104                }
15105                let inner_offset;
15106                let mut inner_depth = depth.clone();
15107                if inlined {
15108                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
15109                    inner_offset = next_offset;
15110                } else {
15111                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
15112                    inner_depth.increment()?;
15113                }
15114                let val_ref =
15115                    self.ipv4_to_ipv6_packets.get_or_insert_with(|| fidl::new_empty!(u64, D));
15116                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
15117                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
15118                {
15119                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
15120                }
15121                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
15122                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
15123                }
15124            }
15125
15126            next_offset += envelope_size;
15127            _next_ordinal_to_read += 1;
15128            if next_offset >= end_offset {
15129                return Ok(());
15130            }
15131
15132            // Decode unknown envelopes for gaps in ordinals.
15133            while _next_ordinal_to_read < 2 {
15134                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15135                _next_ordinal_to_read += 1;
15136                next_offset += envelope_size;
15137            }
15138
15139            let next_out_of_line = decoder.next_out_of_line();
15140            let handles_before = decoder.remaining_handles();
15141            if let Some((inlined, num_bytes, num_handles)) =
15142                fidl::encoding::decode_envelope_header(decoder, next_offset)?
15143            {
15144                let member_inline_size =
15145                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
15146                if inlined != (member_inline_size <= 4) {
15147                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
15148                }
15149                let inner_offset;
15150                let mut inner_depth = depth.clone();
15151                if inlined {
15152                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
15153                    inner_offset = next_offset;
15154                } else {
15155                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
15156                    inner_depth.increment()?;
15157                }
15158                let val_ref =
15159                    self.ipv4_to_ipv6_bytes.get_or_insert_with(|| fidl::new_empty!(u64, D));
15160                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
15161                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
15162                {
15163                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
15164                }
15165                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
15166                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
15167                }
15168            }
15169
15170            next_offset += envelope_size;
15171            _next_ordinal_to_read += 1;
15172            if next_offset >= end_offset {
15173                return Ok(());
15174            }
15175
15176            // Decode unknown envelopes for gaps in ordinals.
15177            while _next_ordinal_to_read < 3 {
15178                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15179                _next_ordinal_to_read += 1;
15180                next_offset += envelope_size;
15181            }
15182
15183            let next_out_of_line = decoder.next_out_of_line();
15184            let handles_before = decoder.remaining_handles();
15185            if let Some((inlined, num_bytes, num_handles)) =
15186                fidl::encoding::decode_envelope_header(decoder, next_offset)?
15187            {
15188                let member_inline_size =
15189                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
15190                if inlined != (member_inline_size <= 4) {
15191                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
15192                }
15193                let inner_offset;
15194                let mut inner_depth = depth.clone();
15195                if inlined {
15196                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
15197                    inner_offset = next_offset;
15198                } else {
15199                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
15200                    inner_depth.increment()?;
15201                }
15202                let val_ref =
15203                    self.ipv6_to_ipv4_packets.get_or_insert_with(|| fidl::new_empty!(u64, D));
15204                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
15205                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
15206                {
15207                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
15208                }
15209                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
15210                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
15211                }
15212            }
15213
15214            next_offset += envelope_size;
15215            _next_ordinal_to_read += 1;
15216            if next_offset >= end_offset {
15217                return Ok(());
15218            }
15219
15220            // Decode unknown envelopes for gaps in ordinals.
15221            while _next_ordinal_to_read < 4 {
15222                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15223                _next_ordinal_to_read += 1;
15224                next_offset += envelope_size;
15225            }
15226
15227            let next_out_of_line = decoder.next_out_of_line();
15228            let handles_before = decoder.remaining_handles();
15229            if let Some((inlined, num_bytes, num_handles)) =
15230                fidl::encoding::decode_envelope_header(decoder, next_offset)?
15231            {
15232                let member_inline_size =
15233                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
15234                if inlined != (member_inline_size <= 4) {
15235                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
15236                }
15237                let inner_offset;
15238                let mut inner_depth = depth.clone();
15239                if inlined {
15240                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
15241                    inner_offset = next_offset;
15242                } else {
15243                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
15244                    inner_depth.increment()?;
15245                }
15246                let val_ref =
15247                    self.ipv6_to_ipv4_bytes.get_or_insert_with(|| fidl::new_empty!(u64, D));
15248                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
15249                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
15250                {
15251                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
15252                }
15253                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
15254                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
15255                }
15256            }
15257
15258            next_offset += envelope_size;
15259
15260            // Decode the remaining unknown envelopes.
15261            while next_offset < end_offset {
15262                _next_ordinal_to_read += 1;
15263                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15264                next_offset += envelope_size;
15265            }
15266
15267            Ok(())
15268        }
15269    }
15270
15271    impl NetworkData {
15272        #[inline(always)]
15273        fn max_ordinal_present(&self) -> u64 {
15274            if let Some(_) = self.commissioning_dataset {
15275                return 5;
15276            }
15277            if let Some(_) = self.contexts {
15278                return 4;
15279            }
15280            if let Some(_) = self.services {
15281                return 3;
15282            }
15283            if let Some(_) = self.external_routes {
15284                return 2;
15285            }
15286            if let Some(_) = self.on_mesh_prefixes {
15287                return 1;
15288            }
15289            0
15290        }
15291    }
15292
15293    impl fidl::encoding::ValueTypeMarker for NetworkData {
15294        type Borrowed<'a> = &'a Self;
15295        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
15296            value
15297        }
15298    }
15299
15300    unsafe impl fidl::encoding::TypeMarker for NetworkData {
15301        type Owned = Self;
15302
15303        #[inline(always)]
15304        fn inline_align(_context: fidl::encoding::Context) -> usize {
15305            8
15306        }
15307
15308        #[inline(always)]
15309        fn inline_size(_context: fidl::encoding::Context) -> usize {
15310            16
15311        }
15312    }
15313
15314    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<NetworkData, D>
15315        for &NetworkData
15316    {
15317        unsafe fn encode(
15318            self,
15319            encoder: &mut fidl::encoding::Encoder<'_, D>,
15320            offset: usize,
15321            mut depth: fidl::encoding::Depth,
15322        ) -> fidl::Result<()> {
15323            encoder.debug_check_bounds::<NetworkData>(offset);
15324            // Vector header
15325            let max_ordinal: u64 = self.max_ordinal_present();
15326            encoder.write_num(max_ordinal, offset);
15327            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
15328            // Calling encoder.out_of_line_offset(0) is not allowed.
15329            if max_ordinal == 0 {
15330                return Ok(());
15331            }
15332            depth.increment()?;
15333            let envelope_size = 8;
15334            let bytes_len = max_ordinal as usize * envelope_size;
15335            #[allow(unused_variables)]
15336            let offset = encoder.out_of_line_offset(bytes_len);
15337            let mut _prev_end_offset: usize = 0;
15338            if 1 > max_ordinal {
15339                return Ok(());
15340            }
15341
15342            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
15343            // are envelope_size bytes.
15344            let cur_offset: usize = (1 - 1) * envelope_size;
15345
15346            // Zero reserved fields.
15347            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
15348
15349            // Safety:
15350            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
15351            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
15352            //   envelope_size bytes, there is always sufficient room.
15353            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<BorderRouterConfig, 32>, D>(
15354            self.on_mesh_prefixes.as_ref().map(<fidl::encoding::Vector<BorderRouterConfig, 32> as fidl::encoding::ValueTypeMarker>::borrow),
15355            encoder, offset + cur_offset, depth
15356        )?;
15357
15358            _prev_end_offset = cur_offset + envelope_size;
15359            if 2 > max_ordinal {
15360                return Ok(());
15361            }
15362
15363            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
15364            // are envelope_size bytes.
15365            let cur_offset: usize = (2 - 1) * envelope_size;
15366
15367            // Zero reserved fields.
15368            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
15369
15370            // Safety:
15371            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
15372            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
15373            //   envelope_size bytes, there is always sufficient room.
15374            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<ExternalRouteConfig, 32>, D>(
15375            self.external_routes.as_ref().map(<fidl::encoding::Vector<ExternalRouteConfig, 32> as fidl::encoding::ValueTypeMarker>::borrow),
15376            encoder, offset + cur_offset, depth
15377        )?;
15378
15379            _prev_end_offset = cur_offset + envelope_size;
15380            if 3 > max_ordinal {
15381                return Ok(());
15382            }
15383
15384            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
15385            // are envelope_size bytes.
15386            let cur_offset: usize = (3 - 1) * envelope_size;
15387
15388            // Zero reserved fields.
15389            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
15390
15391            // Safety:
15392            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
15393            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
15394            //   envelope_size bytes, there is always sufficient room.
15395            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<ServiceConfig, 32>, D>(
15396            self.services.as_ref().map(<fidl::encoding::Vector<ServiceConfig, 32> as fidl::encoding::ValueTypeMarker>::borrow),
15397            encoder, offset + cur_offset, depth
15398        )?;
15399
15400            _prev_end_offset = cur_offset + envelope_size;
15401            if 4 > max_ordinal {
15402                return Ok(());
15403            }
15404
15405            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
15406            // are envelope_size bytes.
15407            let cur_offset: usize = (4 - 1) * envelope_size;
15408
15409            // Zero reserved fields.
15410            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
15411
15412            // Safety:
15413            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
15414            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
15415            //   envelope_size bytes, there is always sufficient room.
15416            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<LowpanContextInfo, 32>, D>(
15417            self.contexts.as_ref().map(<fidl::encoding::Vector<LowpanContextInfo, 32> as fidl::encoding::ValueTypeMarker>::borrow),
15418            encoder, offset + cur_offset, depth
15419        )?;
15420
15421            _prev_end_offset = cur_offset + envelope_size;
15422            if 5 > max_ordinal {
15423                return Ok(());
15424            }
15425
15426            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
15427            // are envelope_size bytes.
15428            let cur_offset: usize = (5 - 1) * envelope_size;
15429
15430            // Zero reserved fields.
15431            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
15432
15433            // Safety:
15434            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
15435            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
15436            //   envelope_size bytes, there is always sufficient room.
15437            fidl::encoding::encode_in_envelope_optional::<CommissioningDataset, D>(
15438                self.commissioning_dataset
15439                    .as_ref()
15440                    .map(<CommissioningDataset as fidl::encoding::ValueTypeMarker>::borrow),
15441                encoder,
15442                offset + cur_offset,
15443                depth,
15444            )?;
15445
15446            _prev_end_offset = cur_offset + envelope_size;
15447
15448            Ok(())
15449        }
15450    }
15451
15452    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for NetworkData {
15453        #[inline(always)]
15454        fn new_empty() -> Self {
15455            Self::default()
15456        }
15457
15458        unsafe fn decode(
15459            &mut self,
15460            decoder: &mut fidl::encoding::Decoder<'_, D>,
15461            offset: usize,
15462            mut depth: fidl::encoding::Depth,
15463        ) -> fidl::Result<()> {
15464            decoder.debug_check_bounds::<Self>(offset);
15465            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
15466                None => return Err(fidl::Error::NotNullable),
15467                Some(len) => len,
15468            };
15469            // Calling decoder.out_of_line_offset(0) is not allowed.
15470            if len == 0 {
15471                return Ok(());
15472            };
15473            depth.increment()?;
15474            let envelope_size = 8;
15475            let bytes_len = len * envelope_size;
15476            let offset = decoder.out_of_line_offset(bytes_len)?;
15477            // Decode the envelope for each type.
15478            let mut _next_ordinal_to_read = 0;
15479            let mut next_offset = offset;
15480            let end_offset = offset + bytes_len;
15481            _next_ordinal_to_read += 1;
15482            if next_offset >= end_offset {
15483                return Ok(());
15484            }
15485
15486            // Decode unknown envelopes for gaps in ordinals.
15487            while _next_ordinal_to_read < 1 {
15488                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15489                _next_ordinal_to_read += 1;
15490                next_offset += envelope_size;
15491            }
15492
15493            let next_out_of_line = decoder.next_out_of_line();
15494            let handles_before = decoder.remaining_handles();
15495            if let Some((inlined, num_bytes, num_handles)) =
15496                fidl::encoding::decode_envelope_header(decoder, next_offset)?
15497            {
15498                let member_inline_size = <fidl::encoding::Vector<BorderRouterConfig, 32> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
15499                if inlined != (member_inline_size <= 4) {
15500                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
15501                }
15502                let inner_offset;
15503                let mut inner_depth = depth.clone();
15504                if inlined {
15505                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
15506                    inner_offset = next_offset;
15507                } else {
15508                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
15509                    inner_depth.increment()?;
15510                }
15511                let val_ref = self.on_mesh_prefixes.get_or_insert_with(
15512                    || fidl::new_empty!(fidl::encoding::Vector<BorderRouterConfig, 32>, D),
15513                );
15514                fidl::decode!(fidl::encoding::Vector<BorderRouterConfig, 32>, D, val_ref, decoder, inner_offset, inner_depth)?;
15515                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
15516                {
15517                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
15518                }
15519                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
15520                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
15521                }
15522            }
15523
15524            next_offset += envelope_size;
15525            _next_ordinal_to_read += 1;
15526            if next_offset >= end_offset {
15527                return Ok(());
15528            }
15529
15530            // Decode unknown envelopes for gaps in ordinals.
15531            while _next_ordinal_to_read < 2 {
15532                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15533                _next_ordinal_to_read += 1;
15534                next_offset += envelope_size;
15535            }
15536
15537            let next_out_of_line = decoder.next_out_of_line();
15538            let handles_before = decoder.remaining_handles();
15539            if let Some((inlined, num_bytes, num_handles)) =
15540                fidl::encoding::decode_envelope_header(decoder, next_offset)?
15541            {
15542                let member_inline_size = <fidl::encoding::Vector<ExternalRouteConfig, 32> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
15543                if inlined != (member_inline_size <= 4) {
15544                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
15545                }
15546                let inner_offset;
15547                let mut inner_depth = depth.clone();
15548                if inlined {
15549                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
15550                    inner_offset = next_offset;
15551                } else {
15552                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
15553                    inner_depth.increment()?;
15554                }
15555                let val_ref = self.external_routes.get_or_insert_with(
15556                    || fidl::new_empty!(fidl::encoding::Vector<ExternalRouteConfig, 32>, D),
15557                );
15558                fidl::decode!(fidl::encoding::Vector<ExternalRouteConfig, 32>, D, val_ref, decoder, inner_offset, inner_depth)?;
15559                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
15560                {
15561                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
15562                }
15563                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
15564                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
15565                }
15566            }
15567
15568            next_offset += envelope_size;
15569            _next_ordinal_to_read += 1;
15570            if next_offset >= end_offset {
15571                return Ok(());
15572            }
15573
15574            // Decode unknown envelopes for gaps in ordinals.
15575            while _next_ordinal_to_read < 3 {
15576                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15577                _next_ordinal_to_read += 1;
15578                next_offset += envelope_size;
15579            }
15580
15581            let next_out_of_line = decoder.next_out_of_line();
15582            let handles_before = decoder.remaining_handles();
15583            if let Some((inlined, num_bytes, num_handles)) =
15584                fidl::encoding::decode_envelope_header(decoder, next_offset)?
15585            {
15586                let member_inline_size = <fidl::encoding::Vector<ServiceConfig, 32> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
15587                if inlined != (member_inline_size <= 4) {
15588                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
15589                }
15590                let inner_offset;
15591                let mut inner_depth = depth.clone();
15592                if inlined {
15593                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
15594                    inner_offset = next_offset;
15595                } else {
15596                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
15597                    inner_depth.increment()?;
15598                }
15599                let val_ref = self.services.get_or_insert_with(
15600                    || fidl::new_empty!(fidl::encoding::Vector<ServiceConfig, 32>, D),
15601                );
15602                fidl::decode!(fidl::encoding::Vector<ServiceConfig, 32>, D, val_ref, decoder, inner_offset, inner_depth)?;
15603                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
15604                {
15605                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
15606                }
15607                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
15608                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
15609                }
15610            }
15611
15612            next_offset += envelope_size;
15613            _next_ordinal_to_read += 1;
15614            if next_offset >= end_offset {
15615                return Ok(());
15616            }
15617
15618            // Decode unknown envelopes for gaps in ordinals.
15619            while _next_ordinal_to_read < 4 {
15620                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15621                _next_ordinal_to_read += 1;
15622                next_offset += envelope_size;
15623            }
15624
15625            let next_out_of_line = decoder.next_out_of_line();
15626            let handles_before = decoder.remaining_handles();
15627            if let Some((inlined, num_bytes, num_handles)) =
15628                fidl::encoding::decode_envelope_header(decoder, next_offset)?
15629            {
15630                let member_inline_size = <fidl::encoding::Vector<LowpanContextInfo, 32> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
15631                if inlined != (member_inline_size <= 4) {
15632                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
15633                }
15634                let inner_offset;
15635                let mut inner_depth = depth.clone();
15636                if inlined {
15637                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
15638                    inner_offset = next_offset;
15639                } else {
15640                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
15641                    inner_depth.increment()?;
15642                }
15643                let val_ref = self.contexts.get_or_insert_with(
15644                    || fidl::new_empty!(fidl::encoding::Vector<LowpanContextInfo, 32>, D),
15645                );
15646                fidl::decode!(fidl::encoding::Vector<LowpanContextInfo, 32>, D, val_ref, decoder, inner_offset, inner_depth)?;
15647                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
15648                {
15649                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
15650                }
15651                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
15652                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
15653                }
15654            }
15655
15656            next_offset += envelope_size;
15657            _next_ordinal_to_read += 1;
15658            if next_offset >= end_offset {
15659                return Ok(());
15660            }
15661
15662            // Decode unknown envelopes for gaps in ordinals.
15663            while _next_ordinal_to_read < 5 {
15664                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15665                _next_ordinal_to_read += 1;
15666                next_offset += envelope_size;
15667            }
15668
15669            let next_out_of_line = decoder.next_out_of_line();
15670            let handles_before = decoder.remaining_handles();
15671            if let Some((inlined, num_bytes, num_handles)) =
15672                fidl::encoding::decode_envelope_header(decoder, next_offset)?
15673            {
15674                let member_inline_size =
15675                    <CommissioningDataset as fidl::encoding::TypeMarker>::inline_size(
15676                        decoder.context,
15677                    );
15678                if inlined != (member_inline_size <= 4) {
15679                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
15680                }
15681                let inner_offset;
15682                let mut inner_depth = depth.clone();
15683                if inlined {
15684                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
15685                    inner_offset = next_offset;
15686                } else {
15687                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
15688                    inner_depth.increment()?;
15689                }
15690                let val_ref = self
15691                    .commissioning_dataset
15692                    .get_or_insert_with(|| fidl::new_empty!(CommissioningDataset, D));
15693                fidl::decode!(
15694                    CommissioningDataset,
15695                    D,
15696                    val_ref,
15697                    decoder,
15698                    inner_offset,
15699                    inner_depth
15700                )?;
15701                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
15702                {
15703                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
15704                }
15705                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
15706                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
15707                }
15708            }
15709
15710            next_offset += envelope_size;
15711
15712            // Decode the remaining unknown envelopes.
15713            while next_offset < end_offset {
15714                _next_ordinal_to_read += 1;
15715                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15716                next_offset += envelope_size;
15717            }
15718
15719            Ok(())
15720        }
15721    }
15722
15723    impl NetworkScanParameters {
15724        #[inline(always)]
15725        fn max_ordinal_present(&self) -> u64 {
15726            if let Some(_) = self.tx_power_dbm {
15727                return 2;
15728            }
15729            if let Some(_) = self.channels {
15730                return 1;
15731            }
15732            0
15733        }
15734    }
15735
15736    impl fidl::encoding::ValueTypeMarker for NetworkScanParameters {
15737        type Borrowed<'a> = &'a Self;
15738        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
15739            value
15740        }
15741    }
15742
15743    unsafe impl fidl::encoding::TypeMarker for NetworkScanParameters {
15744        type Owned = Self;
15745
15746        #[inline(always)]
15747        fn inline_align(_context: fidl::encoding::Context) -> usize {
15748            8
15749        }
15750
15751        #[inline(always)]
15752        fn inline_size(_context: fidl::encoding::Context) -> usize {
15753            16
15754        }
15755    }
15756
15757    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<NetworkScanParameters, D>
15758        for &NetworkScanParameters
15759    {
15760        unsafe fn encode(
15761            self,
15762            encoder: &mut fidl::encoding::Encoder<'_, D>,
15763            offset: usize,
15764            mut depth: fidl::encoding::Depth,
15765        ) -> fidl::Result<()> {
15766            encoder.debug_check_bounds::<NetworkScanParameters>(offset);
15767            // Vector header
15768            let max_ordinal: u64 = self.max_ordinal_present();
15769            encoder.write_num(max_ordinal, offset);
15770            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
15771            // Calling encoder.out_of_line_offset(0) is not allowed.
15772            if max_ordinal == 0 {
15773                return Ok(());
15774            }
15775            depth.increment()?;
15776            let envelope_size = 8;
15777            let bytes_len = max_ordinal as usize * envelope_size;
15778            #[allow(unused_variables)]
15779            let offset = encoder.out_of_line_offset(bytes_len);
15780            let mut _prev_end_offset: usize = 0;
15781            if 1 > max_ordinal {
15782                return Ok(());
15783            }
15784
15785            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
15786            // are envelope_size bytes.
15787            let cur_offset: usize = (1 - 1) * envelope_size;
15788
15789            // Zero reserved fields.
15790            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
15791
15792            // Safety:
15793            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
15794            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
15795            //   envelope_size bytes, there is always sufficient room.
15796            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u16, 200>, D>(
15797                self.channels.as_ref().map(
15798                    <fidl::encoding::Vector<u16, 200> as fidl::encoding::ValueTypeMarker>::borrow,
15799                ),
15800                encoder,
15801                offset + cur_offset,
15802                depth,
15803            )?;
15804
15805            _prev_end_offset = cur_offset + envelope_size;
15806            if 2 > max_ordinal {
15807                return Ok(());
15808            }
15809
15810            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
15811            // are envelope_size bytes.
15812            let cur_offset: usize = (2 - 1) * envelope_size;
15813
15814            // Zero reserved fields.
15815            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
15816
15817            // Safety:
15818            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
15819            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
15820            //   envelope_size bytes, there is always sufficient room.
15821            fidl::encoding::encode_in_envelope_optional::<i8, D>(
15822                self.tx_power_dbm.as_ref().map(<i8 as fidl::encoding::ValueTypeMarker>::borrow),
15823                encoder,
15824                offset + cur_offset,
15825                depth,
15826            )?;
15827
15828            _prev_end_offset = cur_offset + envelope_size;
15829
15830            Ok(())
15831        }
15832    }
15833
15834    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for NetworkScanParameters {
15835        #[inline(always)]
15836        fn new_empty() -> Self {
15837            Self::default()
15838        }
15839
15840        unsafe fn decode(
15841            &mut self,
15842            decoder: &mut fidl::encoding::Decoder<'_, D>,
15843            offset: usize,
15844            mut depth: fidl::encoding::Depth,
15845        ) -> fidl::Result<()> {
15846            decoder.debug_check_bounds::<Self>(offset);
15847            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
15848                None => return Err(fidl::Error::NotNullable),
15849                Some(len) => len,
15850            };
15851            // Calling decoder.out_of_line_offset(0) is not allowed.
15852            if len == 0 {
15853                return Ok(());
15854            };
15855            depth.increment()?;
15856            let envelope_size = 8;
15857            let bytes_len = len * envelope_size;
15858            let offset = decoder.out_of_line_offset(bytes_len)?;
15859            // Decode the envelope for each type.
15860            let mut _next_ordinal_to_read = 0;
15861            let mut next_offset = offset;
15862            let end_offset = offset + bytes_len;
15863            _next_ordinal_to_read += 1;
15864            if next_offset >= end_offset {
15865                return Ok(());
15866            }
15867
15868            // Decode unknown envelopes for gaps in ordinals.
15869            while _next_ordinal_to_read < 1 {
15870                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15871                _next_ordinal_to_read += 1;
15872                next_offset += envelope_size;
15873            }
15874
15875            let next_out_of_line = decoder.next_out_of_line();
15876            let handles_before = decoder.remaining_handles();
15877            if let Some((inlined, num_bytes, num_handles)) =
15878                fidl::encoding::decode_envelope_header(decoder, next_offset)?
15879            {
15880                let member_inline_size =
15881                    <fidl::encoding::Vector<u16, 200> as fidl::encoding::TypeMarker>::inline_size(
15882                        decoder.context,
15883                    );
15884                if inlined != (member_inline_size <= 4) {
15885                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
15886                }
15887                let inner_offset;
15888                let mut inner_depth = depth.clone();
15889                if inlined {
15890                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
15891                    inner_offset = next_offset;
15892                } else {
15893                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
15894                    inner_depth.increment()?;
15895                }
15896                let val_ref = self
15897                    .channels
15898                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u16, 200>, D));
15899                fidl::decode!(fidl::encoding::Vector<u16, 200>, D, val_ref, decoder, inner_offset, inner_depth)?;
15900                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
15901                {
15902                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
15903                }
15904                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
15905                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
15906                }
15907            }
15908
15909            next_offset += envelope_size;
15910            _next_ordinal_to_read += 1;
15911            if next_offset >= end_offset {
15912                return Ok(());
15913            }
15914
15915            // Decode unknown envelopes for gaps in ordinals.
15916            while _next_ordinal_to_read < 2 {
15917                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15918                _next_ordinal_to_read += 1;
15919                next_offset += envelope_size;
15920            }
15921
15922            let next_out_of_line = decoder.next_out_of_line();
15923            let handles_before = decoder.remaining_handles();
15924            if let Some((inlined, num_bytes, num_handles)) =
15925                fidl::encoding::decode_envelope_header(decoder, next_offset)?
15926            {
15927                let member_inline_size =
15928                    <i8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
15929                if inlined != (member_inline_size <= 4) {
15930                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
15931                }
15932                let inner_offset;
15933                let mut inner_depth = depth.clone();
15934                if inlined {
15935                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
15936                    inner_offset = next_offset;
15937                } else {
15938                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
15939                    inner_depth.increment()?;
15940                }
15941                let val_ref = self.tx_power_dbm.get_or_insert_with(|| fidl::new_empty!(i8, D));
15942                fidl::decode!(i8, D, val_ref, decoder, inner_offset, inner_depth)?;
15943                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
15944                {
15945                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
15946                }
15947                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
15948                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
15949                }
15950            }
15951
15952            next_offset += envelope_size;
15953
15954            // Decode the remaining unknown envelopes.
15955            while next_offset < end_offset {
15956                _next_ordinal_to_read += 1;
15957                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15958                next_offset += envelope_size;
15959            }
15960
15961            Ok(())
15962        }
15963    }
15964
15965    impl OnMeshPrefix {
15966        #[inline(always)]
15967        fn max_ordinal_present(&self) -> u64 {
15968            if let Some(_) = self.slaac_valid {
15969                return 5;
15970            }
15971            if let Some(_) = self.slaac_preferred {
15972                return 4;
15973            }
15974            if let Some(_) = self.stable {
15975                return 3;
15976            }
15977            if let Some(_) = self.default_route_preference {
15978                return 2;
15979            }
15980            if let Some(_) = self.subnet {
15981                return 1;
15982            }
15983            0
15984        }
15985    }
15986
15987    impl fidl::encoding::ValueTypeMarker for OnMeshPrefix {
15988        type Borrowed<'a> = &'a Self;
15989        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
15990            value
15991        }
15992    }
15993
15994    unsafe impl fidl::encoding::TypeMarker for OnMeshPrefix {
15995        type Owned = Self;
15996
15997        #[inline(always)]
15998        fn inline_align(_context: fidl::encoding::Context) -> usize {
15999            8
16000        }
16001
16002        #[inline(always)]
16003        fn inline_size(_context: fidl::encoding::Context) -> usize {
16004            16
16005        }
16006    }
16007
16008    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<OnMeshPrefix, D>
16009        for &OnMeshPrefix
16010    {
16011        unsafe fn encode(
16012            self,
16013            encoder: &mut fidl::encoding::Encoder<'_, D>,
16014            offset: usize,
16015            mut depth: fidl::encoding::Depth,
16016        ) -> fidl::Result<()> {
16017            encoder.debug_check_bounds::<OnMeshPrefix>(offset);
16018            // Vector header
16019            let max_ordinal: u64 = self.max_ordinal_present();
16020            encoder.write_num(max_ordinal, offset);
16021            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
16022            // Calling encoder.out_of_line_offset(0) is not allowed.
16023            if max_ordinal == 0 {
16024                return Ok(());
16025            }
16026            depth.increment()?;
16027            let envelope_size = 8;
16028            let bytes_len = max_ordinal as usize * envelope_size;
16029            #[allow(unused_variables)]
16030            let offset = encoder.out_of_line_offset(bytes_len);
16031            let mut _prev_end_offset: usize = 0;
16032            if 1 > max_ordinal {
16033                return Ok(());
16034            }
16035
16036            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
16037            // are envelope_size bytes.
16038            let cur_offset: usize = (1 - 1) * envelope_size;
16039
16040            // Zero reserved fields.
16041            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
16042
16043            // Safety:
16044            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
16045            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
16046            //   envelope_size bytes, there is always sufficient room.
16047            fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_net__common::Ipv6AddressWithPrefix, D>(
16048            self.subnet.as_ref().map(<fidl_fuchsia_net__common::Ipv6AddressWithPrefix as fidl::encoding::ValueTypeMarker>::borrow),
16049            encoder, offset + cur_offset, depth
16050        )?;
16051
16052            _prev_end_offset = cur_offset + envelope_size;
16053            if 2 > max_ordinal {
16054                return Ok(());
16055            }
16056
16057            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
16058            // are envelope_size bytes.
16059            let cur_offset: usize = (2 - 1) * envelope_size;
16060
16061            // Zero reserved fields.
16062            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
16063
16064            // Safety:
16065            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
16066            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
16067            //   envelope_size bytes, there is always sufficient room.
16068            fidl::encoding::encode_in_envelope_optional::<RoutePreference, D>(
16069                self.default_route_preference
16070                    .as_ref()
16071                    .map(<RoutePreference as fidl::encoding::ValueTypeMarker>::borrow),
16072                encoder,
16073                offset + cur_offset,
16074                depth,
16075            )?;
16076
16077            _prev_end_offset = cur_offset + envelope_size;
16078            if 3 > max_ordinal {
16079                return Ok(());
16080            }
16081
16082            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
16083            // are envelope_size bytes.
16084            let cur_offset: usize = (3 - 1) * envelope_size;
16085
16086            // Zero reserved fields.
16087            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
16088
16089            // Safety:
16090            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
16091            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
16092            //   envelope_size bytes, there is always sufficient room.
16093            fidl::encoding::encode_in_envelope_optional::<bool, D>(
16094                self.stable.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
16095                encoder,
16096                offset + cur_offset,
16097                depth,
16098            )?;
16099
16100            _prev_end_offset = cur_offset + envelope_size;
16101            if 4 > max_ordinal {
16102                return Ok(());
16103            }
16104
16105            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
16106            // are envelope_size bytes.
16107            let cur_offset: usize = (4 - 1) * envelope_size;
16108
16109            // Zero reserved fields.
16110            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
16111
16112            // Safety:
16113            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
16114            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
16115            //   envelope_size bytes, there is always sufficient room.
16116            fidl::encoding::encode_in_envelope_optional::<bool, D>(
16117                self.slaac_preferred
16118                    .as_ref()
16119                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
16120                encoder,
16121                offset + cur_offset,
16122                depth,
16123            )?;
16124
16125            _prev_end_offset = cur_offset + envelope_size;
16126            if 5 > max_ordinal {
16127                return Ok(());
16128            }
16129
16130            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
16131            // are envelope_size bytes.
16132            let cur_offset: usize = (5 - 1) * envelope_size;
16133
16134            // Zero reserved fields.
16135            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
16136
16137            // Safety:
16138            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
16139            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
16140            //   envelope_size bytes, there is always sufficient room.
16141            fidl::encoding::encode_in_envelope_optional::<bool, D>(
16142                self.slaac_valid.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
16143                encoder,
16144                offset + cur_offset,
16145                depth,
16146            )?;
16147
16148            _prev_end_offset = cur_offset + envelope_size;
16149
16150            Ok(())
16151        }
16152    }
16153
16154    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for OnMeshPrefix {
16155        #[inline(always)]
16156        fn new_empty() -> Self {
16157            Self::default()
16158        }
16159
16160        unsafe fn decode(
16161            &mut self,
16162            decoder: &mut fidl::encoding::Decoder<'_, D>,
16163            offset: usize,
16164            mut depth: fidl::encoding::Depth,
16165        ) -> fidl::Result<()> {
16166            decoder.debug_check_bounds::<Self>(offset);
16167            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
16168                None => return Err(fidl::Error::NotNullable),
16169                Some(len) => len,
16170            };
16171            // Calling decoder.out_of_line_offset(0) is not allowed.
16172            if len == 0 {
16173                return Ok(());
16174            };
16175            depth.increment()?;
16176            let envelope_size = 8;
16177            let bytes_len = len * envelope_size;
16178            let offset = decoder.out_of_line_offset(bytes_len)?;
16179            // Decode the envelope for each type.
16180            let mut _next_ordinal_to_read = 0;
16181            let mut next_offset = offset;
16182            let end_offset = offset + bytes_len;
16183            _next_ordinal_to_read += 1;
16184            if next_offset >= end_offset {
16185                return Ok(());
16186            }
16187
16188            // Decode unknown envelopes for gaps in ordinals.
16189            while _next_ordinal_to_read < 1 {
16190                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
16191                _next_ordinal_to_read += 1;
16192                next_offset += envelope_size;
16193            }
16194
16195            let next_out_of_line = decoder.next_out_of_line();
16196            let handles_before = decoder.remaining_handles();
16197            if let Some((inlined, num_bytes, num_handles)) =
16198                fidl::encoding::decode_envelope_header(decoder, next_offset)?
16199            {
16200                let member_inline_size = <fidl_fuchsia_net__common::Ipv6AddressWithPrefix as fidl::encoding::TypeMarker>::inline_size(decoder.context);
16201                if inlined != (member_inline_size <= 4) {
16202                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
16203                }
16204                let inner_offset;
16205                let mut inner_depth = depth.clone();
16206                if inlined {
16207                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
16208                    inner_offset = next_offset;
16209                } else {
16210                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
16211                    inner_depth.increment()?;
16212                }
16213                let val_ref = self.subnet.get_or_insert_with(|| {
16214                    fidl::new_empty!(fidl_fuchsia_net__common::Ipv6AddressWithPrefix, D)
16215                });
16216                fidl::decode!(
16217                    fidl_fuchsia_net__common::Ipv6AddressWithPrefix,
16218                    D,
16219                    val_ref,
16220                    decoder,
16221                    inner_offset,
16222                    inner_depth
16223                )?;
16224                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
16225                {
16226                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
16227                }
16228                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
16229                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
16230                }
16231            }
16232
16233            next_offset += envelope_size;
16234            _next_ordinal_to_read += 1;
16235            if next_offset >= end_offset {
16236                return Ok(());
16237            }
16238
16239            // Decode unknown envelopes for gaps in ordinals.
16240            while _next_ordinal_to_read < 2 {
16241                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
16242                _next_ordinal_to_read += 1;
16243                next_offset += envelope_size;
16244            }
16245
16246            let next_out_of_line = decoder.next_out_of_line();
16247            let handles_before = decoder.remaining_handles();
16248            if let Some((inlined, num_bytes, num_handles)) =
16249                fidl::encoding::decode_envelope_header(decoder, next_offset)?
16250            {
16251                let member_inline_size =
16252                    <RoutePreference as fidl::encoding::TypeMarker>::inline_size(decoder.context);
16253                if inlined != (member_inline_size <= 4) {
16254                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
16255                }
16256                let inner_offset;
16257                let mut inner_depth = depth.clone();
16258                if inlined {
16259                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
16260                    inner_offset = next_offset;
16261                } else {
16262                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
16263                    inner_depth.increment()?;
16264                }
16265                let val_ref = self
16266                    .default_route_preference
16267                    .get_or_insert_with(|| fidl::new_empty!(RoutePreference, D));
16268                fidl::decode!(RoutePreference, D, val_ref, decoder, inner_offset, inner_depth)?;
16269                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
16270                {
16271                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
16272                }
16273                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
16274                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
16275                }
16276            }
16277
16278            next_offset += envelope_size;
16279            _next_ordinal_to_read += 1;
16280            if next_offset >= end_offset {
16281                return Ok(());
16282            }
16283
16284            // Decode unknown envelopes for gaps in ordinals.
16285            while _next_ordinal_to_read < 3 {
16286                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
16287                _next_ordinal_to_read += 1;
16288                next_offset += envelope_size;
16289            }
16290
16291            let next_out_of_line = decoder.next_out_of_line();
16292            let handles_before = decoder.remaining_handles();
16293            if let Some((inlined, num_bytes, num_handles)) =
16294                fidl::encoding::decode_envelope_header(decoder, next_offset)?
16295            {
16296                let member_inline_size =
16297                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
16298                if inlined != (member_inline_size <= 4) {
16299                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
16300                }
16301                let inner_offset;
16302                let mut inner_depth = depth.clone();
16303                if inlined {
16304                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
16305                    inner_offset = next_offset;
16306                } else {
16307                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
16308                    inner_depth.increment()?;
16309                }
16310                let val_ref = self.stable.get_or_insert_with(|| fidl::new_empty!(bool, D));
16311                fidl::decode!(bool, 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            _next_ordinal_to_read += 1;
16323            if next_offset >= end_offset {
16324                return Ok(());
16325            }
16326
16327            // Decode unknown envelopes for gaps in ordinals.
16328            while _next_ordinal_to_read < 4 {
16329                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
16330                _next_ordinal_to_read += 1;
16331                next_offset += envelope_size;
16332            }
16333
16334            let next_out_of_line = decoder.next_out_of_line();
16335            let handles_before = decoder.remaining_handles();
16336            if let Some((inlined, num_bytes, num_handles)) =
16337                fidl::encoding::decode_envelope_header(decoder, next_offset)?
16338            {
16339                let member_inline_size =
16340                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
16341                if inlined != (member_inline_size <= 4) {
16342                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
16343                }
16344                let inner_offset;
16345                let mut inner_depth = depth.clone();
16346                if inlined {
16347                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
16348                    inner_offset = next_offset;
16349                } else {
16350                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
16351                    inner_depth.increment()?;
16352                }
16353                let val_ref = self.slaac_preferred.get_or_insert_with(|| fidl::new_empty!(bool, D));
16354                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
16355                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
16356                {
16357                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
16358                }
16359                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
16360                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
16361                }
16362            }
16363
16364            next_offset += envelope_size;
16365            _next_ordinal_to_read += 1;
16366            if next_offset >= end_offset {
16367                return Ok(());
16368            }
16369
16370            // Decode unknown envelopes for gaps in ordinals.
16371            while _next_ordinal_to_read < 5 {
16372                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
16373                _next_ordinal_to_read += 1;
16374                next_offset += envelope_size;
16375            }
16376
16377            let next_out_of_line = decoder.next_out_of_line();
16378            let handles_before = decoder.remaining_handles();
16379            if let Some((inlined, num_bytes, num_handles)) =
16380                fidl::encoding::decode_envelope_header(decoder, next_offset)?
16381            {
16382                let member_inline_size =
16383                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
16384                if inlined != (member_inline_size <= 4) {
16385                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
16386                }
16387                let inner_offset;
16388                let mut inner_depth = depth.clone();
16389                if inlined {
16390                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
16391                    inner_offset = next_offset;
16392                } else {
16393                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
16394                    inner_depth.increment()?;
16395                }
16396                let val_ref = self.slaac_valid.get_or_insert_with(|| fidl::new_empty!(bool, D));
16397                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
16398                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
16399                {
16400                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
16401                }
16402                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
16403                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
16404                }
16405            }
16406
16407            next_offset += envelope_size;
16408
16409            // Decode the remaining unknown envelopes.
16410            while next_offset < end_offset {
16411                _next_ordinal_to_read += 1;
16412                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
16413                next_offset += envelope_size;
16414            }
16415
16416            Ok(())
16417        }
16418    }
16419
16420    impl OperationalDataset {
16421        #[inline(always)]
16422        fn max_ordinal_present(&self) -> u64 {
16423            if let Some(_) = self.channel_mask {
16424                return 13;
16425            }
16426            if let Some(_) = self.security_policy {
16427                return 12;
16428            }
16429            if let Some(_) = self.pskc {
16430                return 11;
16431            }
16432            if let Some(_) = self.wakeup_channel {
16433                return 10;
16434            }
16435            if let Some(_) = self.channel {
16436                return 9;
16437            }
16438            if let Some(_) = self.pan_id {
16439                return 8;
16440            }
16441            if let Some(_) = self.delay {
16442                return 7;
16443            }
16444            if let Some(_) = self.mesh_local_prefix {
16445                return 6;
16446            }
16447            if let Some(_) = self.extended_pan_id {
16448                return 5;
16449            }
16450            if let Some(_) = self.network_name {
16451                return 4;
16452            }
16453            if let Some(_) = self.network_key {
16454                return 3;
16455            }
16456            if let Some(_) = self.pending_timestamp {
16457                return 2;
16458            }
16459            if let Some(_) = self.active_timestamp {
16460                return 1;
16461            }
16462            0
16463        }
16464    }
16465
16466    impl fidl::encoding::ValueTypeMarker for OperationalDataset {
16467        type Borrowed<'a> = &'a Self;
16468        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
16469            value
16470        }
16471    }
16472
16473    unsafe impl fidl::encoding::TypeMarker for OperationalDataset {
16474        type Owned = Self;
16475
16476        #[inline(always)]
16477        fn inline_align(_context: fidl::encoding::Context) -> usize {
16478            8
16479        }
16480
16481        #[inline(always)]
16482        fn inline_size(_context: fidl::encoding::Context) -> usize {
16483            16
16484        }
16485    }
16486
16487    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<OperationalDataset, D>
16488        for &OperationalDataset
16489    {
16490        unsafe fn encode(
16491            self,
16492            encoder: &mut fidl::encoding::Encoder<'_, D>,
16493            offset: usize,
16494            mut depth: fidl::encoding::Depth,
16495        ) -> fidl::Result<()> {
16496            encoder.debug_check_bounds::<OperationalDataset>(offset);
16497            // Vector header
16498            let max_ordinal: u64 = self.max_ordinal_present();
16499            encoder.write_num(max_ordinal, offset);
16500            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
16501            // Calling encoder.out_of_line_offset(0) is not allowed.
16502            if max_ordinal == 0 {
16503                return Ok(());
16504            }
16505            depth.increment()?;
16506            let envelope_size = 8;
16507            let bytes_len = max_ordinal as usize * envelope_size;
16508            #[allow(unused_variables)]
16509            let offset = encoder.out_of_line_offset(bytes_len);
16510            let mut _prev_end_offset: usize = 0;
16511            if 1 > max_ordinal {
16512                return Ok(());
16513            }
16514
16515            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
16516            // are envelope_size bytes.
16517            let cur_offset: usize = (1 - 1) * envelope_size;
16518
16519            // Zero reserved fields.
16520            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
16521
16522            // Safety:
16523            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
16524            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
16525            //   envelope_size bytes, there is always sufficient room.
16526            fidl::encoding::encode_in_envelope_optional::<i64, D>(
16527                self.active_timestamp
16528                    .as_ref()
16529                    .map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
16530                encoder,
16531                offset + cur_offset,
16532                depth,
16533            )?;
16534
16535            _prev_end_offset = cur_offset + envelope_size;
16536            if 2 > max_ordinal {
16537                return Ok(());
16538            }
16539
16540            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
16541            // are envelope_size bytes.
16542            let cur_offset: usize = (2 - 1) * envelope_size;
16543
16544            // Zero reserved fields.
16545            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
16546
16547            // Safety:
16548            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
16549            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
16550            //   envelope_size bytes, there is always sufficient room.
16551            fidl::encoding::encode_in_envelope_optional::<i64, D>(
16552                self.pending_timestamp
16553                    .as_ref()
16554                    .map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
16555                encoder,
16556                offset + cur_offset,
16557                depth,
16558            )?;
16559
16560            _prev_end_offset = cur_offset + envelope_size;
16561            if 3 > max_ordinal {
16562                return Ok(());
16563            }
16564
16565            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
16566            // are envelope_size bytes.
16567            let cur_offset: usize = (3 - 1) * envelope_size;
16568
16569            // Zero reserved fields.
16570            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
16571
16572            // Safety:
16573            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
16574            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
16575            //   envelope_size bytes, there is always sufficient room.
16576            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u8, 16>, D>(
16577                self.network_key.as_ref().map(
16578                    <fidl::encoding::Vector<u8, 16> as fidl::encoding::ValueTypeMarker>::borrow,
16579                ),
16580                encoder,
16581                offset + cur_offset,
16582                depth,
16583            )?;
16584
16585            _prev_end_offset = cur_offset + envelope_size;
16586            if 4 > max_ordinal {
16587                return Ok(());
16588            }
16589
16590            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
16591            // are envelope_size bytes.
16592            let cur_offset: usize = (4 - 1) * envelope_size;
16593
16594            // Zero reserved fields.
16595            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
16596
16597            // Safety:
16598            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
16599            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
16600            //   envelope_size bytes, there is always sufficient room.
16601            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u8, 17>, D>(
16602                self.network_name.as_ref().map(
16603                    <fidl::encoding::Vector<u8, 17> as fidl::encoding::ValueTypeMarker>::borrow,
16604                ),
16605                encoder,
16606                offset + cur_offset,
16607                depth,
16608            )?;
16609
16610            _prev_end_offset = cur_offset + envelope_size;
16611            if 5 > max_ordinal {
16612                return Ok(());
16613            }
16614
16615            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
16616            // are envelope_size bytes.
16617            let cur_offset: usize = (5 - 1) * envelope_size;
16618
16619            // Zero reserved fields.
16620            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
16621
16622            // Safety:
16623            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
16624            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
16625            //   envelope_size bytes, there is always sufficient room.
16626            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u8, 8>, D>(
16627                self.extended_pan_id.as_ref().map(
16628                    <fidl::encoding::Vector<u8, 8> as fidl::encoding::ValueTypeMarker>::borrow,
16629                ),
16630                encoder,
16631                offset + cur_offset,
16632                depth,
16633            )?;
16634
16635            _prev_end_offset = cur_offset + envelope_size;
16636            if 6 > max_ordinal {
16637                return Ok(());
16638            }
16639
16640            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
16641            // are envelope_size bytes.
16642            let cur_offset: usize = (6 - 1) * envelope_size;
16643
16644            // Zero reserved fields.
16645            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
16646
16647            // Safety:
16648            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
16649            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
16650            //   envelope_size bytes, there is always sufficient room.
16651            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u8, 8>, D>(
16652                self.mesh_local_prefix.as_ref().map(
16653                    <fidl::encoding::Vector<u8, 8> as fidl::encoding::ValueTypeMarker>::borrow,
16654                ),
16655                encoder,
16656                offset + cur_offset,
16657                depth,
16658            )?;
16659
16660            _prev_end_offset = cur_offset + envelope_size;
16661            if 7 > max_ordinal {
16662                return Ok(());
16663            }
16664
16665            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
16666            // are envelope_size bytes.
16667            let cur_offset: usize = (7 - 1) * envelope_size;
16668
16669            // Zero reserved fields.
16670            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
16671
16672            // Safety:
16673            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
16674            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
16675            //   envelope_size bytes, there is always sufficient room.
16676            fidl::encoding::encode_in_envelope_optional::<u32, D>(
16677                self.delay.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
16678                encoder,
16679                offset + cur_offset,
16680                depth,
16681            )?;
16682
16683            _prev_end_offset = cur_offset + envelope_size;
16684            if 8 > max_ordinal {
16685                return Ok(());
16686            }
16687
16688            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
16689            // are envelope_size bytes.
16690            let cur_offset: usize = (8 - 1) * envelope_size;
16691
16692            // Zero reserved fields.
16693            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
16694
16695            // Safety:
16696            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
16697            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
16698            //   envelope_size bytes, there is always sufficient room.
16699            fidl::encoding::encode_in_envelope_optional::<u16, D>(
16700                self.pan_id.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
16701                encoder,
16702                offset + cur_offset,
16703                depth,
16704            )?;
16705
16706            _prev_end_offset = cur_offset + envelope_size;
16707            if 9 > max_ordinal {
16708                return Ok(());
16709            }
16710
16711            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
16712            // are envelope_size bytes.
16713            let cur_offset: usize = (9 - 1) * envelope_size;
16714
16715            // Zero reserved fields.
16716            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
16717
16718            // Safety:
16719            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
16720            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
16721            //   envelope_size bytes, there is always sufficient room.
16722            fidl::encoding::encode_in_envelope_optional::<u16, D>(
16723                self.channel.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
16724                encoder,
16725                offset + cur_offset,
16726                depth,
16727            )?;
16728
16729            _prev_end_offset = cur_offset + envelope_size;
16730            if 10 > max_ordinal {
16731                return Ok(());
16732            }
16733
16734            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
16735            // are envelope_size bytes.
16736            let cur_offset: usize = (10 - 1) * envelope_size;
16737
16738            // Zero reserved fields.
16739            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
16740
16741            // Safety:
16742            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
16743            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
16744            //   envelope_size bytes, there is always sufficient room.
16745            fidl::encoding::encode_in_envelope_optional::<u16, D>(
16746                self.wakeup_channel.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
16747                encoder,
16748                offset + cur_offset,
16749                depth,
16750            )?;
16751
16752            _prev_end_offset = cur_offset + envelope_size;
16753            if 11 > max_ordinal {
16754                return Ok(());
16755            }
16756
16757            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
16758            // are envelope_size bytes.
16759            let cur_offset: usize = (11 - 1) * envelope_size;
16760
16761            // Zero reserved fields.
16762            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
16763
16764            // Safety:
16765            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
16766            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
16767            //   envelope_size bytes, there is always sufficient room.
16768            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u8, 16>, D>(
16769                self.pskc.as_ref().map(
16770                    <fidl::encoding::Vector<u8, 16> as fidl::encoding::ValueTypeMarker>::borrow,
16771                ),
16772                encoder,
16773                offset + cur_offset,
16774                depth,
16775            )?;
16776
16777            _prev_end_offset = cur_offset + envelope_size;
16778            if 12 > max_ordinal {
16779                return Ok(());
16780            }
16781
16782            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
16783            // are envelope_size bytes.
16784            let cur_offset: usize = (12 - 1) * envelope_size;
16785
16786            // Zero reserved fields.
16787            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
16788
16789            // Safety:
16790            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
16791            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
16792            //   envelope_size bytes, there is always sufficient room.
16793            fidl::encoding::encode_in_envelope_optional::<SecurityPolicy, D>(
16794                self.security_policy
16795                    .as_ref()
16796                    .map(<SecurityPolicy as fidl::encoding::ValueTypeMarker>::borrow),
16797                encoder,
16798                offset + cur_offset,
16799                depth,
16800            )?;
16801
16802            _prev_end_offset = cur_offset + envelope_size;
16803            if 13 > max_ordinal {
16804                return Ok(());
16805            }
16806
16807            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
16808            // are envelope_size bytes.
16809            let cur_offset: usize = (13 - 1) * envelope_size;
16810
16811            // Zero reserved fields.
16812            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
16813
16814            // Safety:
16815            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
16816            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
16817            //   envelope_size bytes, there is always sufficient room.
16818            fidl::encoding::encode_in_envelope_optional::<u32, D>(
16819                self.channel_mask.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
16820                encoder,
16821                offset + cur_offset,
16822                depth,
16823            )?;
16824
16825            _prev_end_offset = cur_offset + envelope_size;
16826
16827            Ok(())
16828        }
16829    }
16830
16831    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for OperationalDataset {
16832        #[inline(always)]
16833        fn new_empty() -> Self {
16834            Self::default()
16835        }
16836
16837        unsafe fn decode(
16838            &mut self,
16839            decoder: &mut fidl::encoding::Decoder<'_, D>,
16840            offset: usize,
16841            mut depth: fidl::encoding::Depth,
16842        ) -> fidl::Result<()> {
16843            decoder.debug_check_bounds::<Self>(offset);
16844            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
16845                None => return Err(fidl::Error::NotNullable),
16846                Some(len) => len,
16847            };
16848            // Calling decoder.out_of_line_offset(0) is not allowed.
16849            if len == 0 {
16850                return Ok(());
16851            };
16852            depth.increment()?;
16853            let envelope_size = 8;
16854            let bytes_len = len * envelope_size;
16855            let offset = decoder.out_of_line_offset(bytes_len)?;
16856            // Decode the envelope for each type.
16857            let mut _next_ordinal_to_read = 0;
16858            let mut next_offset = offset;
16859            let end_offset = offset + bytes_len;
16860            _next_ordinal_to_read += 1;
16861            if next_offset >= end_offset {
16862                return Ok(());
16863            }
16864
16865            // Decode unknown envelopes for gaps in ordinals.
16866            while _next_ordinal_to_read < 1 {
16867                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
16868                _next_ordinal_to_read += 1;
16869                next_offset += envelope_size;
16870            }
16871
16872            let next_out_of_line = decoder.next_out_of_line();
16873            let handles_before = decoder.remaining_handles();
16874            if let Some((inlined, num_bytes, num_handles)) =
16875                fidl::encoding::decode_envelope_header(decoder, next_offset)?
16876            {
16877                let member_inline_size =
16878                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
16879                if inlined != (member_inline_size <= 4) {
16880                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
16881                }
16882                let inner_offset;
16883                let mut inner_depth = depth.clone();
16884                if inlined {
16885                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
16886                    inner_offset = next_offset;
16887                } else {
16888                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
16889                    inner_depth.increment()?;
16890                }
16891                let val_ref = self.active_timestamp.get_or_insert_with(|| fidl::new_empty!(i64, D));
16892                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
16893                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
16894                {
16895                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
16896                }
16897                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
16898                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
16899                }
16900            }
16901
16902            next_offset += envelope_size;
16903            _next_ordinal_to_read += 1;
16904            if next_offset >= end_offset {
16905                return Ok(());
16906            }
16907
16908            // Decode unknown envelopes for gaps in ordinals.
16909            while _next_ordinal_to_read < 2 {
16910                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
16911                _next_ordinal_to_read += 1;
16912                next_offset += envelope_size;
16913            }
16914
16915            let next_out_of_line = decoder.next_out_of_line();
16916            let handles_before = decoder.remaining_handles();
16917            if let Some((inlined, num_bytes, num_handles)) =
16918                fidl::encoding::decode_envelope_header(decoder, next_offset)?
16919            {
16920                let member_inline_size =
16921                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
16922                if inlined != (member_inline_size <= 4) {
16923                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
16924                }
16925                let inner_offset;
16926                let mut inner_depth = depth.clone();
16927                if inlined {
16928                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
16929                    inner_offset = next_offset;
16930                } else {
16931                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
16932                    inner_depth.increment()?;
16933                }
16934                let val_ref =
16935                    self.pending_timestamp.get_or_insert_with(|| fidl::new_empty!(i64, D));
16936                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
16937                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
16938                {
16939                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
16940                }
16941                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
16942                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
16943                }
16944            }
16945
16946            next_offset += envelope_size;
16947            _next_ordinal_to_read += 1;
16948            if next_offset >= end_offset {
16949                return Ok(());
16950            }
16951
16952            // Decode unknown envelopes for gaps in ordinals.
16953            while _next_ordinal_to_read < 3 {
16954                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
16955                _next_ordinal_to_read += 1;
16956                next_offset += envelope_size;
16957            }
16958
16959            let next_out_of_line = decoder.next_out_of_line();
16960            let handles_before = decoder.remaining_handles();
16961            if let Some((inlined, num_bytes, num_handles)) =
16962                fidl::encoding::decode_envelope_header(decoder, next_offset)?
16963            {
16964                let member_inline_size =
16965                    <fidl::encoding::Vector<u8, 16> as fidl::encoding::TypeMarker>::inline_size(
16966                        decoder.context,
16967                    );
16968                if inlined != (member_inline_size <= 4) {
16969                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
16970                }
16971                let inner_offset;
16972                let mut inner_depth = depth.clone();
16973                if inlined {
16974                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
16975                    inner_offset = next_offset;
16976                } else {
16977                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
16978                    inner_depth.increment()?;
16979                }
16980                let val_ref = self
16981                    .network_key
16982                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u8, 16>, D));
16983                fidl::decode!(fidl::encoding::Vector<u8, 16>, D, val_ref, decoder, inner_offset, inner_depth)?;
16984                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
16985                {
16986                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
16987                }
16988                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
16989                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
16990                }
16991            }
16992
16993            next_offset += envelope_size;
16994            _next_ordinal_to_read += 1;
16995            if next_offset >= end_offset {
16996                return Ok(());
16997            }
16998
16999            // Decode unknown envelopes for gaps in ordinals.
17000            while _next_ordinal_to_read < 4 {
17001                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
17002                _next_ordinal_to_read += 1;
17003                next_offset += envelope_size;
17004            }
17005
17006            let next_out_of_line = decoder.next_out_of_line();
17007            let handles_before = decoder.remaining_handles();
17008            if let Some((inlined, num_bytes, num_handles)) =
17009                fidl::encoding::decode_envelope_header(decoder, next_offset)?
17010            {
17011                let member_inline_size =
17012                    <fidl::encoding::Vector<u8, 17> as fidl::encoding::TypeMarker>::inline_size(
17013                        decoder.context,
17014                    );
17015                if inlined != (member_inline_size <= 4) {
17016                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
17017                }
17018                let inner_offset;
17019                let mut inner_depth = depth.clone();
17020                if inlined {
17021                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
17022                    inner_offset = next_offset;
17023                } else {
17024                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
17025                    inner_depth.increment()?;
17026                }
17027                let val_ref = self
17028                    .network_name
17029                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u8, 17>, D));
17030                fidl::decode!(fidl::encoding::Vector<u8, 17>, D, val_ref, decoder, inner_offset, inner_depth)?;
17031                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
17032                {
17033                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
17034                }
17035                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
17036                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
17037                }
17038            }
17039
17040            next_offset += envelope_size;
17041            _next_ordinal_to_read += 1;
17042            if next_offset >= end_offset {
17043                return Ok(());
17044            }
17045
17046            // Decode unknown envelopes for gaps in ordinals.
17047            while _next_ordinal_to_read < 5 {
17048                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
17049                _next_ordinal_to_read += 1;
17050                next_offset += envelope_size;
17051            }
17052
17053            let next_out_of_line = decoder.next_out_of_line();
17054            let handles_before = decoder.remaining_handles();
17055            if let Some((inlined, num_bytes, num_handles)) =
17056                fidl::encoding::decode_envelope_header(decoder, next_offset)?
17057            {
17058                let member_inline_size =
17059                    <fidl::encoding::Vector<u8, 8> as fidl::encoding::TypeMarker>::inline_size(
17060                        decoder.context,
17061                    );
17062                if inlined != (member_inline_size <= 4) {
17063                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
17064                }
17065                let inner_offset;
17066                let mut inner_depth = depth.clone();
17067                if inlined {
17068                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
17069                    inner_offset = next_offset;
17070                } else {
17071                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
17072                    inner_depth.increment()?;
17073                }
17074                let val_ref = self
17075                    .extended_pan_id
17076                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u8, 8>, D));
17077                fidl::decode!(fidl::encoding::Vector<u8, 8>, D, val_ref, decoder, inner_offset, inner_depth)?;
17078                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
17079                {
17080                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
17081                }
17082                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
17083                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
17084                }
17085            }
17086
17087            next_offset += envelope_size;
17088            _next_ordinal_to_read += 1;
17089            if next_offset >= end_offset {
17090                return Ok(());
17091            }
17092
17093            // Decode unknown envelopes for gaps in ordinals.
17094            while _next_ordinal_to_read < 6 {
17095                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
17096                _next_ordinal_to_read += 1;
17097                next_offset += envelope_size;
17098            }
17099
17100            let next_out_of_line = decoder.next_out_of_line();
17101            let handles_before = decoder.remaining_handles();
17102            if let Some((inlined, num_bytes, num_handles)) =
17103                fidl::encoding::decode_envelope_header(decoder, next_offset)?
17104            {
17105                let member_inline_size =
17106                    <fidl::encoding::Vector<u8, 8> as fidl::encoding::TypeMarker>::inline_size(
17107                        decoder.context,
17108                    );
17109                if inlined != (member_inline_size <= 4) {
17110                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
17111                }
17112                let inner_offset;
17113                let mut inner_depth = depth.clone();
17114                if inlined {
17115                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
17116                    inner_offset = next_offset;
17117                } else {
17118                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
17119                    inner_depth.increment()?;
17120                }
17121                let val_ref = self
17122                    .mesh_local_prefix
17123                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u8, 8>, D));
17124                fidl::decode!(fidl::encoding::Vector<u8, 8>, D, val_ref, decoder, inner_offset, inner_depth)?;
17125                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
17126                {
17127                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
17128                }
17129                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
17130                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
17131                }
17132            }
17133
17134            next_offset += envelope_size;
17135            _next_ordinal_to_read += 1;
17136            if next_offset >= end_offset {
17137                return Ok(());
17138            }
17139
17140            // Decode unknown envelopes for gaps in ordinals.
17141            while _next_ordinal_to_read < 7 {
17142                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
17143                _next_ordinal_to_read += 1;
17144                next_offset += envelope_size;
17145            }
17146
17147            let next_out_of_line = decoder.next_out_of_line();
17148            let handles_before = decoder.remaining_handles();
17149            if let Some((inlined, num_bytes, num_handles)) =
17150                fidl::encoding::decode_envelope_header(decoder, next_offset)?
17151            {
17152                let member_inline_size =
17153                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
17154                if inlined != (member_inline_size <= 4) {
17155                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
17156                }
17157                let inner_offset;
17158                let mut inner_depth = depth.clone();
17159                if inlined {
17160                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
17161                    inner_offset = next_offset;
17162                } else {
17163                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
17164                    inner_depth.increment()?;
17165                }
17166                let val_ref = self.delay.get_or_insert_with(|| fidl::new_empty!(u32, D));
17167                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
17168                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
17169                {
17170                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
17171                }
17172                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
17173                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
17174                }
17175            }
17176
17177            next_offset += envelope_size;
17178            _next_ordinal_to_read += 1;
17179            if next_offset >= end_offset {
17180                return Ok(());
17181            }
17182
17183            // Decode unknown envelopes for gaps in ordinals.
17184            while _next_ordinal_to_read < 8 {
17185                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
17186                _next_ordinal_to_read += 1;
17187                next_offset += envelope_size;
17188            }
17189
17190            let next_out_of_line = decoder.next_out_of_line();
17191            let handles_before = decoder.remaining_handles();
17192            if let Some((inlined, num_bytes, num_handles)) =
17193                fidl::encoding::decode_envelope_header(decoder, next_offset)?
17194            {
17195                let member_inline_size =
17196                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
17197                if inlined != (member_inline_size <= 4) {
17198                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
17199                }
17200                let inner_offset;
17201                let mut inner_depth = depth.clone();
17202                if inlined {
17203                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
17204                    inner_offset = next_offset;
17205                } else {
17206                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
17207                    inner_depth.increment()?;
17208                }
17209                let val_ref = self.pan_id.get_or_insert_with(|| fidl::new_empty!(u16, D));
17210                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
17211                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
17212                {
17213                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
17214                }
17215                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
17216                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
17217                }
17218            }
17219
17220            next_offset += envelope_size;
17221            _next_ordinal_to_read += 1;
17222            if next_offset >= end_offset {
17223                return Ok(());
17224            }
17225
17226            // Decode unknown envelopes for gaps in ordinals.
17227            while _next_ordinal_to_read < 9 {
17228                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
17229                _next_ordinal_to_read += 1;
17230                next_offset += envelope_size;
17231            }
17232
17233            let next_out_of_line = decoder.next_out_of_line();
17234            let handles_before = decoder.remaining_handles();
17235            if let Some((inlined, num_bytes, num_handles)) =
17236                fidl::encoding::decode_envelope_header(decoder, next_offset)?
17237            {
17238                let member_inline_size =
17239                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
17240                if inlined != (member_inline_size <= 4) {
17241                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
17242                }
17243                let inner_offset;
17244                let mut inner_depth = depth.clone();
17245                if inlined {
17246                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
17247                    inner_offset = next_offset;
17248                } else {
17249                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
17250                    inner_depth.increment()?;
17251                }
17252                let val_ref = self.channel.get_or_insert_with(|| fidl::new_empty!(u16, D));
17253                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
17254                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
17255                {
17256                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
17257                }
17258                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
17259                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
17260                }
17261            }
17262
17263            next_offset += envelope_size;
17264            _next_ordinal_to_read += 1;
17265            if next_offset >= end_offset {
17266                return Ok(());
17267            }
17268
17269            // Decode unknown envelopes for gaps in ordinals.
17270            while _next_ordinal_to_read < 10 {
17271                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
17272                _next_ordinal_to_read += 1;
17273                next_offset += envelope_size;
17274            }
17275
17276            let next_out_of_line = decoder.next_out_of_line();
17277            let handles_before = decoder.remaining_handles();
17278            if let Some((inlined, num_bytes, num_handles)) =
17279                fidl::encoding::decode_envelope_header(decoder, next_offset)?
17280            {
17281                let member_inline_size =
17282                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
17283                if inlined != (member_inline_size <= 4) {
17284                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
17285                }
17286                let inner_offset;
17287                let mut inner_depth = depth.clone();
17288                if inlined {
17289                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
17290                    inner_offset = next_offset;
17291                } else {
17292                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
17293                    inner_depth.increment()?;
17294                }
17295                let val_ref = self.wakeup_channel.get_or_insert_with(|| fidl::new_empty!(u16, D));
17296                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
17297                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
17298                {
17299                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
17300                }
17301                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
17302                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
17303                }
17304            }
17305
17306            next_offset += envelope_size;
17307            _next_ordinal_to_read += 1;
17308            if next_offset >= end_offset {
17309                return Ok(());
17310            }
17311
17312            // Decode unknown envelopes for gaps in ordinals.
17313            while _next_ordinal_to_read < 11 {
17314                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
17315                _next_ordinal_to_read += 1;
17316                next_offset += envelope_size;
17317            }
17318
17319            let next_out_of_line = decoder.next_out_of_line();
17320            let handles_before = decoder.remaining_handles();
17321            if let Some((inlined, num_bytes, num_handles)) =
17322                fidl::encoding::decode_envelope_header(decoder, next_offset)?
17323            {
17324                let member_inline_size =
17325                    <fidl::encoding::Vector<u8, 16> as fidl::encoding::TypeMarker>::inline_size(
17326                        decoder.context,
17327                    );
17328                if inlined != (member_inline_size <= 4) {
17329                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
17330                }
17331                let inner_offset;
17332                let mut inner_depth = depth.clone();
17333                if inlined {
17334                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
17335                    inner_offset = next_offset;
17336                } else {
17337                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
17338                    inner_depth.increment()?;
17339                }
17340                let val_ref = self
17341                    .pskc
17342                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u8, 16>, D));
17343                fidl::decode!(fidl::encoding::Vector<u8, 16>, D, val_ref, decoder, inner_offset, inner_depth)?;
17344                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
17345                {
17346                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
17347                }
17348                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
17349                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
17350                }
17351            }
17352
17353            next_offset += envelope_size;
17354            _next_ordinal_to_read += 1;
17355            if next_offset >= end_offset {
17356                return Ok(());
17357            }
17358
17359            // Decode unknown envelopes for gaps in ordinals.
17360            while _next_ordinal_to_read < 12 {
17361                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
17362                _next_ordinal_to_read += 1;
17363                next_offset += envelope_size;
17364            }
17365
17366            let next_out_of_line = decoder.next_out_of_line();
17367            let handles_before = decoder.remaining_handles();
17368            if let Some((inlined, num_bytes, num_handles)) =
17369                fidl::encoding::decode_envelope_header(decoder, next_offset)?
17370            {
17371                let member_inline_size =
17372                    <SecurityPolicy as fidl::encoding::TypeMarker>::inline_size(decoder.context);
17373                if inlined != (member_inline_size <= 4) {
17374                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
17375                }
17376                let inner_offset;
17377                let mut inner_depth = depth.clone();
17378                if inlined {
17379                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
17380                    inner_offset = next_offset;
17381                } else {
17382                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
17383                    inner_depth.increment()?;
17384                }
17385                let val_ref =
17386                    self.security_policy.get_or_insert_with(|| fidl::new_empty!(SecurityPolicy, D));
17387                fidl::decode!(SecurityPolicy, D, val_ref, decoder, inner_offset, inner_depth)?;
17388                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
17389                {
17390                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
17391                }
17392                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
17393                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
17394                }
17395            }
17396
17397            next_offset += envelope_size;
17398            _next_ordinal_to_read += 1;
17399            if next_offset >= end_offset {
17400                return Ok(());
17401            }
17402
17403            // Decode unknown envelopes for gaps in ordinals.
17404            while _next_ordinal_to_read < 13 {
17405                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
17406                _next_ordinal_to_read += 1;
17407                next_offset += envelope_size;
17408            }
17409
17410            let next_out_of_line = decoder.next_out_of_line();
17411            let handles_before = decoder.remaining_handles();
17412            if let Some((inlined, num_bytes, num_handles)) =
17413                fidl::encoding::decode_envelope_header(decoder, next_offset)?
17414            {
17415                let member_inline_size =
17416                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
17417                if inlined != (member_inline_size <= 4) {
17418                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
17419                }
17420                let inner_offset;
17421                let mut inner_depth = depth.clone();
17422                if inlined {
17423                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
17424                    inner_offset = next_offset;
17425                } else {
17426                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
17427                    inner_depth.increment()?;
17428                }
17429                let val_ref = self.channel_mask.get_or_insert_with(|| fidl::new_empty!(u32, D));
17430                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
17431                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
17432                {
17433                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
17434                }
17435                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
17436                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
17437                }
17438            }
17439
17440            next_offset += envelope_size;
17441
17442            // Decode the remaining unknown envelopes.
17443            while next_offset < end_offset {
17444                _next_ordinal_to_read += 1;
17445                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
17446                next_offset += envelope_size;
17447            }
17448
17449            Ok(())
17450        }
17451    }
17452
17453    impl PdProcessedRaInfo {
17454        #[inline(always)]
17455        fn max_ordinal_present(&self) -> u64 {
17456            if let Some(_) = self.last_platform_ra_msec {
17457                return 3;
17458            }
17459            if let Some(_) = self.num_platform_pio_processed {
17460                return 2;
17461            }
17462            if let Some(_) = self.num_platform_ra_received {
17463                return 1;
17464            }
17465            0
17466        }
17467    }
17468
17469    impl fidl::encoding::ValueTypeMarker for PdProcessedRaInfo {
17470        type Borrowed<'a> = &'a Self;
17471        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
17472            value
17473        }
17474    }
17475
17476    unsafe impl fidl::encoding::TypeMarker for PdProcessedRaInfo {
17477        type Owned = Self;
17478
17479        #[inline(always)]
17480        fn inline_align(_context: fidl::encoding::Context) -> usize {
17481            8
17482        }
17483
17484        #[inline(always)]
17485        fn inline_size(_context: fidl::encoding::Context) -> usize {
17486            16
17487        }
17488    }
17489
17490    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<PdProcessedRaInfo, D>
17491        for &PdProcessedRaInfo
17492    {
17493        unsafe fn encode(
17494            self,
17495            encoder: &mut fidl::encoding::Encoder<'_, D>,
17496            offset: usize,
17497            mut depth: fidl::encoding::Depth,
17498        ) -> fidl::Result<()> {
17499            encoder.debug_check_bounds::<PdProcessedRaInfo>(offset);
17500            // Vector header
17501            let max_ordinal: u64 = self.max_ordinal_present();
17502            encoder.write_num(max_ordinal, offset);
17503            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
17504            // Calling encoder.out_of_line_offset(0) is not allowed.
17505            if max_ordinal == 0 {
17506                return Ok(());
17507            }
17508            depth.increment()?;
17509            let envelope_size = 8;
17510            let bytes_len = max_ordinal as usize * envelope_size;
17511            #[allow(unused_variables)]
17512            let offset = encoder.out_of_line_offset(bytes_len);
17513            let mut _prev_end_offset: usize = 0;
17514            if 1 > max_ordinal {
17515                return Ok(());
17516            }
17517
17518            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
17519            // are envelope_size bytes.
17520            let cur_offset: usize = (1 - 1) * envelope_size;
17521
17522            // Zero reserved fields.
17523            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
17524
17525            // Safety:
17526            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
17527            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
17528            //   envelope_size bytes, there is always sufficient room.
17529            fidl::encoding::encode_in_envelope_optional::<u32, D>(
17530                self.num_platform_ra_received
17531                    .as_ref()
17532                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
17533                encoder,
17534                offset + cur_offset,
17535                depth,
17536            )?;
17537
17538            _prev_end_offset = cur_offset + envelope_size;
17539            if 2 > max_ordinal {
17540                return Ok(());
17541            }
17542
17543            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
17544            // are envelope_size bytes.
17545            let cur_offset: usize = (2 - 1) * envelope_size;
17546
17547            // Zero reserved fields.
17548            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
17549
17550            // Safety:
17551            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
17552            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
17553            //   envelope_size bytes, there is always sufficient room.
17554            fidl::encoding::encode_in_envelope_optional::<u32, D>(
17555                self.num_platform_pio_processed
17556                    .as_ref()
17557                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
17558                encoder,
17559                offset + cur_offset,
17560                depth,
17561            )?;
17562
17563            _prev_end_offset = cur_offset + envelope_size;
17564            if 3 > max_ordinal {
17565                return Ok(());
17566            }
17567
17568            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
17569            // are envelope_size bytes.
17570            let cur_offset: usize = (3 - 1) * envelope_size;
17571
17572            // Zero reserved fields.
17573            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
17574
17575            // Safety:
17576            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
17577            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
17578            //   envelope_size bytes, there is always sufficient room.
17579            fidl::encoding::encode_in_envelope_optional::<u32, D>(
17580                self.last_platform_ra_msec
17581                    .as_ref()
17582                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
17583                encoder,
17584                offset + cur_offset,
17585                depth,
17586            )?;
17587
17588            _prev_end_offset = cur_offset + envelope_size;
17589
17590            Ok(())
17591        }
17592    }
17593
17594    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for PdProcessedRaInfo {
17595        #[inline(always)]
17596        fn new_empty() -> Self {
17597            Self::default()
17598        }
17599
17600        unsafe fn decode(
17601            &mut self,
17602            decoder: &mut fidl::encoding::Decoder<'_, D>,
17603            offset: usize,
17604            mut depth: fidl::encoding::Depth,
17605        ) -> fidl::Result<()> {
17606            decoder.debug_check_bounds::<Self>(offset);
17607            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
17608                None => return Err(fidl::Error::NotNullable),
17609                Some(len) => len,
17610            };
17611            // Calling decoder.out_of_line_offset(0) is not allowed.
17612            if len == 0 {
17613                return Ok(());
17614            };
17615            depth.increment()?;
17616            let envelope_size = 8;
17617            let bytes_len = len * envelope_size;
17618            let offset = decoder.out_of_line_offset(bytes_len)?;
17619            // Decode the envelope for each type.
17620            let mut _next_ordinal_to_read = 0;
17621            let mut next_offset = offset;
17622            let end_offset = offset + bytes_len;
17623            _next_ordinal_to_read += 1;
17624            if next_offset >= end_offset {
17625                return Ok(());
17626            }
17627
17628            // Decode unknown envelopes for gaps in ordinals.
17629            while _next_ordinal_to_read < 1 {
17630                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
17631                _next_ordinal_to_read += 1;
17632                next_offset += envelope_size;
17633            }
17634
17635            let next_out_of_line = decoder.next_out_of_line();
17636            let handles_before = decoder.remaining_handles();
17637            if let Some((inlined, num_bytes, num_handles)) =
17638                fidl::encoding::decode_envelope_header(decoder, next_offset)?
17639            {
17640                let member_inline_size =
17641                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
17642                if inlined != (member_inline_size <= 4) {
17643                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
17644                }
17645                let inner_offset;
17646                let mut inner_depth = depth.clone();
17647                if inlined {
17648                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
17649                    inner_offset = next_offset;
17650                } else {
17651                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
17652                    inner_depth.increment()?;
17653                }
17654                let val_ref =
17655                    self.num_platform_ra_received.get_or_insert_with(|| fidl::new_empty!(u32, D));
17656                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
17657                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
17658                {
17659                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
17660                }
17661                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
17662                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
17663                }
17664            }
17665
17666            next_offset += envelope_size;
17667            _next_ordinal_to_read += 1;
17668            if next_offset >= end_offset {
17669                return Ok(());
17670            }
17671
17672            // Decode unknown envelopes for gaps in ordinals.
17673            while _next_ordinal_to_read < 2 {
17674                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
17675                _next_ordinal_to_read += 1;
17676                next_offset += envelope_size;
17677            }
17678
17679            let next_out_of_line = decoder.next_out_of_line();
17680            let handles_before = decoder.remaining_handles();
17681            if let Some((inlined, num_bytes, num_handles)) =
17682                fidl::encoding::decode_envelope_header(decoder, next_offset)?
17683            {
17684                let member_inline_size =
17685                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
17686                if inlined != (member_inline_size <= 4) {
17687                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
17688                }
17689                let inner_offset;
17690                let mut inner_depth = depth.clone();
17691                if inlined {
17692                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
17693                    inner_offset = next_offset;
17694                } else {
17695                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
17696                    inner_depth.increment()?;
17697                }
17698                let val_ref =
17699                    self.num_platform_pio_processed.get_or_insert_with(|| fidl::new_empty!(u32, D));
17700                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
17701                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
17702                {
17703                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
17704                }
17705                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
17706                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
17707                }
17708            }
17709
17710            next_offset += envelope_size;
17711            _next_ordinal_to_read += 1;
17712            if next_offset >= end_offset {
17713                return Ok(());
17714            }
17715
17716            // Decode unknown envelopes for gaps in ordinals.
17717            while _next_ordinal_to_read < 3 {
17718                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
17719                _next_ordinal_to_read += 1;
17720                next_offset += envelope_size;
17721            }
17722
17723            let next_out_of_line = decoder.next_out_of_line();
17724            let handles_before = decoder.remaining_handles();
17725            if let Some((inlined, num_bytes, num_handles)) =
17726                fidl::encoding::decode_envelope_header(decoder, next_offset)?
17727            {
17728                let member_inline_size =
17729                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
17730                if inlined != (member_inline_size <= 4) {
17731                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
17732                }
17733                let inner_offset;
17734                let mut inner_depth = depth.clone();
17735                if inlined {
17736                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
17737                    inner_offset = next_offset;
17738                } else {
17739                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
17740                    inner_depth.increment()?;
17741                }
17742                let val_ref =
17743                    self.last_platform_ra_msec.get_or_insert_with(|| fidl::new_empty!(u32, D));
17744                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
17745                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
17746                {
17747                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
17748                }
17749                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
17750                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
17751                }
17752            }
17753
17754            next_offset += envelope_size;
17755
17756            // Decode the remaining unknown envelopes.
17757            while next_offset < end_offset {
17758                _next_ordinal_to_read += 1;
17759                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
17760                next_offset += envelope_size;
17761            }
17762
17763            Ok(())
17764        }
17765    }
17766
17767    impl RadioLinkInfo {
17768        #[inline(always)]
17769        fn max_ordinal_present(&self) -> u64 {
17770            if let Some(_) = self.preference {
17771                return 2;
17772            }
17773            if let Some(_) = self.link_type {
17774                return 1;
17775            }
17776            0
17777        }
17778    }
17779
17780    impl fidl::encoding::ValueTypeMarker for RadioLinkInfo {
17781        type Borrowed<'a> = &'a Self;
17782        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
17783            value
17784        }
17785    }
17786
17787    unsafe impl fidl::encoding::TypeMarker for RadioLinkInfo {
17788        type Owned = Self;
17789
17790        #[inline(always)]
17791        fn inline_align(_context: fidl::encoding::Context) -> usize {
17792            8
17793        }
17794
17795        #[inline(always)]
17796        fn inline_size(_context: fidl::encoding::Context) -> usize {
17797            16
17798        }
17799    }
17800
17801    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<RadioLinkInfo, D>
17802        for &RadioLinkInfo
17803    {
17804        unsafe fn encode(
17805            self,
17806            encoder: &mut fidl::encoding::Encoder<'_, D>,
17807            offset: usize,
17808            mut depth: fidl::encoding::Depth,
17809        ) -> fidl::Result<()> {
17810            encoder.debug_check_bounds::<RadioLinkInfo>(offset);
17811            // Vector header
17812            let max_ordinal: u64 = self.max_ordinal_present();
17813            encoder.write_num(max_ordinal, offset);
17814            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
17815            // Calling encoder.out_of_line_offset(0) is not allowed.
17816            if max_ordinal == 0 {
17817                return Ok(());
17818            }
17819            depth.increment()?;
17820            let envelope_size = 8;
17821            let bytes_len = max_ordinal as usize * envelope_size;
17822            #[allow(unused_variables)]
17823            let offset = encoder.out_of_line_offset(bytes_len);
17824            let mut _prev_end_offset: usize = 0;
17825            if 1 > max_ordinal {
17826                return Ok(());
17827            }
17828
17829            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
17830            // are envelope_size bytes.
17831            let cur_offset: usize = (1 - 1) * envelope_size;
17832
17833            // Zero reserved fields.
17834            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
17835
17836            // Safety:
17837            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
17838            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
17839            //   envelope_size bytes, there is always sufficient room.
17840            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<10>, D>(
17841                self.link_type.as_ref().map(
17842                    <fidl::encoding::BoundedString<10> as fidl::encoding::ValueTypeMarker>::borrow,
17843                ),
17844                encoder,
17845                offset + cur_offset,
17846                depth,
17847            )?;
17848
17849            _prev_end_offset = cur_offset + envelope_size;
17850            if 2 > max_ordinal {
17851                return Ok(());
17852            }
17853
17854            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
17855            // are envelope_size bytes.
17856            let cur_offset: usize = (2 - 1) * envelope_size;
17857
17858            // Zero reserved fields.
17859            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
17860
17861            // Safety:
17862            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
17863            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
17864            //   envelope_size bytes, there is always sufficient room.
17865            fidl::encoding::encode_in_envelope_optional::<u8, D>(
17866                self.preference.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
17867                encoder,
17868                offset + cur_offset,
17869                depth,
17870            )?;
17871
17872            _prev_end_offset = cur_offset + envelope_size;
17873
17874            Ok(())
17875        }
17876    }
17877
17878    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for RadioLinkInfo {
17879        #[inline(always)]
17880        fn new_empty() -> Self {
17881            Self::default()
17882        }
17883
17884        unsafe fn decode(
17885            &mut self,
17886            decoder: &mut fidl::encoding::Decoder<'_, D>,
17887            offset: usize,
17888            mut depth: fidl::encoding::Depth,
17889        ) -> fidl::Result<()> {
17890            decoder.debug_check_bounds::<Self>(offset);
17891            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
17892                None => return Err(fidl::Error::NotNullable),
17893                Some(len) => len,
17894            };
17895            // Calling decoder.out_of_line_offset(0) is not allowed.
17896            if len == 0 {
17897                return Ok(());
17898            };
17899            depth.increment()?;
17900            let envelope_size = 8;
17901            let bytes_len = len * envelope_size;
17902            let offset = decoder.out_of_line_offset(bytes_len)?;
17903            // Decode the envelope for each type.
17904            let mut _next_ordinal_to_read = 0;
17905            let mut next_offset = offset;
17906            let end_offset = offset + bytes_len;
17907            _next_ordinal_to_read += 1;
17908            if next_offset >= end_offset {
17909                return Ok(());
17910            }
17911
17912            // Decode unknown envelopes for gaps in ordinals.
17913            while _next_ordinal_to_read < 1 {
17914                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
17915                _next_ordinal_to_read += 1;
17916                next_offset += envelope_size;
17917            }
17918
17919            let next_out_of_line = decoder.next_out_of_line();
17920            let handles_before = decoder.remaining_handles();
17921            if let Some((inlined, num_bytes, num_handles)) =
17922                fidl::encoding::decode_envelope_header(decoder, next_offset)?
17923            {
17924                let member_inline_size =
17925                    <fidl::encoding::BoundedString<10> as fidl::encoding::TypeMarker>::inline_size(
17926                        decoder.context,
17927                    );
17928                if inlined != (member_inline_size <= 4) {
17929                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
17930                }
17931                let inner_offset;
17932                let mut inner_depth = depth.clone();
17933                if inlined {
17934                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
17935                    inner_offset = next_offset;
17936                } else {
17937                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
17938                    inner_depth.increment()?;
17939                }
17940                let val_ref = self
17941                    .link_type
17942                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<10>, D));
17943                fidl::decode!(
17944                    fidl::encoding::BoundedString<10>,
17945                    D,
17946                    val_ref,
17947                    decoder,
17948                    inner_offset,
17949                    inner_depth
17950                )?;
17951                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
17952                {
17953                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
17954                }
17955                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
17956                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
17957                }
17958            }
17959
17960            next_offset += envelope_size;
17961            _next_ordinal_to_read += 1;
17962            if next_offset >= end_offset {
17963                return Ok(());
17964            }
17965
17966            // Decode unknown envelopes for gaps in ordinals.
17967            while _next_ordinal_to_read < 2 {
17968                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
17969                _next_ordinal_to_read += 1;
17970                next_offset += envelope_size;
17971            }
17972
17973            let next_out_of_line = decoder.next_out_of_line();
17974            let handles_before = decoder.remaining_handles();
17975            if let Some((inlined, num_bytes, num_handles)) =
17976                fidl::encoding::decode_envelope_header(decoder, next_offset)?
17977            {
17978                let member_inline_size =
17979                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
17980                if inlined != (member_inline_size <= 4) {
17981                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
17982                }
17983                let inner_offset;
17984                let mut inner_depth = depth.clone();
17985                if inlined {
17986                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
17987                    inner_offset = next_offset;
17988                } else {
17989                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
17990                    inner_depth.increment()?;
17991                }
17992                let val_ref = self.preference.get_or_insert_with(|| fidl::new_empty!(u8, D));
17993                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
17994                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
17995                {
17996                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
17997                }
17998                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
17999                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
18000                }
18001            }
18002
18003            next_offset += envelope_size;
18004
18005            // Decode the remaining unknown envelopes.
18006            while next_offset < end_offset {
18007                _next_ordinal_to_read += 1;
18008                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
18009                next_offset += envelope_size;
18010            }
18011
18012            Ok(())
18013        }
18014    }
18015
18016    impl RouterInfo {
18017        #[inline(always)]
18018        fn max_ordinal_present(&self) -> u64 {
18019            if let Some(_) = self.link_established {
18020                return 9;
18021            }
18022            if let Some(_) = self.age {
18023                return 8;
18024            }
18025            if let Some(_) = self.link_quality_out {
18026                return 7;
18027            }
18028            if let Some(_) = self.link_quality_in {
18029                return 6;
18030            }
18031            if let Some(_) = self.path_cost {
18032                return 5;
18033            }
18034            if let Some(_) = self.next_hop {
18035                return 4;
18036            }
18037            if let Some(_) = self.router_id {
18038                return 3;
18039            }
18040            if let Some(_) = self.thread_rloc {
18041                return 2;
18042            }
18043            if let Some(_) = self.extended_address {
18044                return 1;
18045            }
18046            0
18047        }
18048    }
18049
18050    impl fidl::encoding::ValueTypeMarker for RouterInfo {
18051        type Borrowed<'a> = &'a Self;
18052        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
18053            value
18054        }
18055    }
18056
18057    unsafe impl fidl::encoding::TypeMarker for RouterInfo {
18058        type Owned = Self;
18059
18060        #[inline(always)]
18061        fn inline_align(_context: fidl::encoding::Context) -> usize {
18062            8
18063        }
18064
18065        #[inline(always)]
18066        fn inline_size(_context: fidl::encoding::Context) -> usize {
18067            16
18068        }
18069    }
18070
18071    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<RouterInfo, D>
18072        for &RouterInfo
18073    {
18074        unsafe fn encode(
18075            self,
18076            encoder: &mut fidl::encoding::Encoder<'_, D>,
18077            offset: usize,
18078            mut depth: fidl::encoding::Depth,
18079        ) -> fidl::Result<()> {
18080            encoder.debug_check_bounds::<RouterInfo>(offset);
18081            // Vector header
18082            let max_ordinal: u64 = self.max_ordinal_present();
18083            encoder.write_num(max_ordinal, offset);
18084            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
18085            // Calling encoder.out_of_line_offset(0) is not allowed.
18086            if max_ordinal == 0 {
18087                return Ok(());
18088            }
18089            depth.increment()?;
18090            let envelope_size = 8;
18091            let bytes_len = max_ordinal as usize * envelope_size;
18092            #[allow(unused_variables)]
18093            let offset = encoder.out_of_line_offset(bytes_len);
18094            let mut _prev_end_offset: usize = 0;
18095            if 1 > max_ordinal {
18096                return Ok(());
18097            }
18098
18099            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
18100            // are envelope_size bytes.
18101            let cur_offset: usize = (1 - 1) * envelope_size;
18102
18103            // Zero reserved fields.
18104            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
18105
18106            // Safety:
18107            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
18108            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
18109            //   envelope_size bytes, there is always sufficient room.
18110            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u8, 8>, D>(
18111                self.extended_address.as_ref().map(
18112                    <fidl::encoding::Vector<u8, 8> as fidl::encoding::ValueTypeMarker>::borrow,
18113                ),
18114                encoder,
18115                offset + cur_offset,
18116                depth,
18117            )?;
18118
18119            _prev_end_offset = cur_offset + envelope_size;
18120            if 2 > max_ordinal {
18121                return Ok(());
18122            }
18123
18124            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
18125            // are envelope_size bytes.
18126            let cur_offset: usize = (2 - 1) * envelope_size;
18127
18128            // Zero reserved fields.
18129            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
18130
18131            // Safety:
18132            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
18133            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
18134            //   envelope_size bytes, there is always sufficient room.
18135            fidl::encoding::encode_in_envelope_optional::<u16, D>(
18136                self.thread_rloc.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
18137                encoder,
18138                offset + cur_offset,
18139                depth,
18140            )?;
18141
18142            _prev_end_offset = cur_offset + envelope_size;
18143            if 3 > max_ordinal {
18144                return Ok(());
18145            }
18146
18147            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
18148            // are envelope_size bytes.
18149            let cur_offset: usize = (3 - 1) * envelope_size;
18150
18151            // Zero reserved fields.
18152            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
18153
18154            // Safety:
18155            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
18156            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
18157            //   envelope_size bytes, there is always sufficient room.
18158            fidl::encoding::encode_in_envelope_optional::<u8, D>(
18159                self.router_id.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
18160                encoder,
18161                offset + cur_offset,
18162                depth,
18163            )?;
18164
18165            _prev_end_offset = cur_offset + envelope_size;
18166            if 4 > max_ordinal {
18167                return Ok(());
18168            }
18169
18170            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
18171            // are envelope_size bytes.
18172            let cur_offset: usize = (4 - 1) * envelope_size;
18173
18174            // Zero reserved fields.
18175            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
18176
18177            // Safety:
18178            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
18179            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
18180            //   envelope_size bytes, there is always sufficient room.
18181            fidl::encoding::encode_in_envelope_optional::<u8, D>(
18182                self.next_hop.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
18183                encoder,
18184                offset + cur_offset,
18185                depth,
18186            )?;
18187
18188            _prev_end_offset = cur_offset + envelope_size;
18189            if 5 > max_ordinal {
18190                return Ok(());
18191            }
18192
18193            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
18194            // are envelope_size bytes.
18195            let cur_offset: usize = (5 - 1) * envelope_size;
18196
18197            // Zero reserved fields.
18198            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
18199
18200            // Safety:
18201            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
18202            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
18203            //   envelope_size bytes, there is always sufficient room.
18204            fidl::encoding::encode_in_envelope_optional::<u8, D>(
18205                self.path_cost.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
18206                encoder,
18207                offset + cur_offset,
18208                depth,
18209            )?;
18210
18211            _prev_end_offset = cur_offset + envelope_size;
18212            if 6 > max_ordinal {
18213                return Ok(());
18214            }
18215
18216            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
18217            // are envelope_size bytes.
18218            let cur_offset: usize = (6 - 1) * envelope_size;
18219
18220            // Zero reserved fields.
18221            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
18222
18223            // Safety:
18224            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
18225            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
18226            //   envelope_size bytes, there is always sufficient room.
18227            fidl::encoding::encode_in_envelope_optional::<u8, D>(
18228                self.link_quality_in.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
18229                encoder,
18230                offset + cur_offset,
18231                depth,
18232            )?;
18233
18234            _prev_end_offset = cur_offset + envelope_size;
18235            if 7 > max_ordinal {
18236                return Ok(());
18237            }
18238
18239            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
18240            // are envelope_size bytes.
18241            let cur_offset: usize = (7 - 1) * envelope_size;
18242
18243            // Zero reserved fields.
18244            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
18245
18246            // Safety:
18247            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
18248            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
18249            //   envelope_size bytes, there is always sufficient room.
18250            fidl::encoding::encode_in_envelope_optional::<u8, D>(
18251                self.link_quality_out.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
18252                encoder,
18253                offset + cur_offset,
18254                depth,
18255            )?;
18256
18257            _prev_end_offset = cur_offset + envelope_size;
18258            if 8 > max_ordinal {
18259                return Ok(());
18260            }
18261
18262            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
18263            // are envelope_size bytes.
18264            let cur_offset: usize = (8 - 1) * envelope_size;
18265
18266            // Zero reserved fields.
18267            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
18268
18269            // Safety:
18270            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
18271            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
18272            //   envelope_size bytes, there is always sufficient room.
18273            fidl::encoding::encode_in_envelope_optional::<i64, D>(
18274                self.age.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
18275                encoder,
18276                offset + cur_offset,
18277                depth,
18278            )?;
18279
18280            _prev_end_offset = cur_offset + envelope_size;
18281            if 9 > max_ordinal {
18282                return Ok(());
18283            }
18284
18285            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
18286            // are envelope_size bytes.
18287            let cur_offset: usize = (9 - 1) * envelope_size;
18288
18289            // Zero reserved fields.
18290            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
18291
18292            // Safety:
18293            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
18294            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
18295            //   envelope_size bytes, there is always sufficient room.
18296            fidl::encoding::encode_in_envelope_optional::<bool, D>(
18297                self.link_established
18298                    .as_ref()
18299                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
18300                encoder,
18301                offset + cur_offset,
18302                depth,
18303            )?;
18304
18305            _prev_end_offset = cur_offset + envelope_size;
18306
18307            Ok(())
18308        }
18309    }
18310
18311    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for RouterInfo {
18312        #[inline(always)]
18313        fn new_empty() -> Self {
18314            Self::default()
18315        }
18316
18317        unsafe fn decode(
18318            &mut self,
18319            decoder: &mut fidl::encoding::Decoder<'_, D>,
18320            offset: usize,
18321            mut depth: fidl::encoding::Depth,
18322        ) -> fidl::Result<()> {
18323            decoder.debug_check_bounds::<Self>(offset);
18324            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
18325                None => return Err(fidl::Error::NotNullable),
18326                Some(len) => len,
18327            };
18328            // Calling decoder.out_of_line_offset(0) is not allowed.
18329            if len == 0 {
18330                return Ok(());
18331            };
18332            depth.increment()?;
18333            let envelope_size = 8;
18334            let bytes_len = len * envelope_size;
18335            let offset = decoder.out_of_line_offset(bytes_len)?;
18336            // Decode the envelope for each type.
18337            let mut _next_ordinal_to_read = 0;
18338            let mut next_offset = offset;
18339            let end_offset = offset + bytes_len;
18340            _next_ordinal_to_read += 1;
18341            if next_offset >= end_offset {
18342                return Ok(());
18343            }
18344
18345            // Decode unknown envelopes for gaps in ordinals.
18346            while _next_ordinal_to_read < 1 {
18347                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
18348                _next_ordinal_to_read += 1;
18349                next_offset += envelope_size;
18350            }
18351
18352            let next_out_of_line = decoder.next_out_of_line();
18353            let handles_before = decoder.remaining_handles();
18354            if let Some((inlined, num_bytes, num_handles)) =
18355                fidl::encoding::decode_envelope_header(decoder, next_offset)?
18356            {
18357                let member_inline_size =
18358                    <fidl::encoding::Vector<u8, 8> as fidl::encoding::TypeMarker>::inline_size(
18359                        decoder.context,
18360                    );
18361                if inlined != (member_inline_size <= 4) {
18362                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
18363                }
18364                let inner_offset;
18365                let mut inner_depth = depth.clone();
18366                if inlined {
18367                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
18368                    inner_offset = next_offset;
18369                } else {
18370                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
18371                    inner_depth.increment()?;
18372                }
18373                let val_ref = self
18374                    .extended_address
18375                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u8, 8>, D));
18376                fidl::decode!(fidl::encoding::Vector<u8, 8>, D, val_ref, decoder, inner_offset, inner_depth)?;
18377                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
18378                {
18379                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
18380                }
18381                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
18382                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
18383                }
18384            }
18385
18386            next_offset += envelope_size;
18387            _next_ordinal_to_read += 1;
18388            if next_offset >= end_offset {
18389                return Ok(());
18390            }
18391
18392            // Decode unknown envelopes for gaps in ordinals.
18393            while _next_ordinal_to_read < 2 {
18394                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
18395                _next_ordinal_to_read += 1;
18396                next_offset += envelope_size;
18397            }
18398
18399            let next_out_of_line = decoder.next_out_of_line();
18400            let handles_before = decoder.remaining_handles();
18401            if let Some((inlined, num_bytes, num_handles)) =
18402                fidl::encoding::decode_envelope_header(decoder, next_offset)?
18403            {
18404                let member_inline_size =
18405                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
18406                if inlined != (member_inline_size <= 4) {
18407                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
18408                }
18409                let inner_offset;
18410                let mut inner_depth = depth.clone();
18411                if inlined {
18412                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
18413                    inner_offset = next_offset;
18414                } else {
18415                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
18416                    inner_depth.increment()?;
18417                }
18418                let val_ref = self.thread_rloc.get_or_insert_with(|| fidl::new_empty!(u16, D));
18419                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
18420                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
18421                {
18422                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
18423                }
18424                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
18425                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
18426                }
18427            }
18428
18429            next_offset += envelope_size;
18430            _next_ordinal_to_read += 1;
18431            if next_offset >= end_offset {
18432                return Ok(());
18433            }
18434
18435            // Decode unknown envelopes for gaps in ordinals.
18436            while _next_ordinal_to_read < 3 {
18437                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
18438                _next_ordinal_to_read += 1;
18439                next_offset += envelope_size;
18440            }
18441
18442            let next_out_of_line = decoder.next_out_of_line();
18443            let handles_before = decoder.remaining_handles();
18444            if let Some((inlined, num_bytes, num_handles)) =
18445                fidl::encoding::decode_envelope_header(decoder, next_offset)?
18446            {
18447                let member_inline_size =
18448                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
18449                if inlined != (member_inline_size <= 4) {
18450                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
18451                }
18452                let inner_offset;
18453                let mut inner_depth = depth.clone();
18454                if inlined {
18455                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
18456                    inner_offset = next_offset;
18457                } else {
18458                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
18459                    inner_depth.increment()?;
18460                }
18461                let val_ref = self.router_id.get_or_insert_with(|| fidl::new_empty!(u8, D));
18462                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
18463                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
18464                {
18465                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
18466                }
18467                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
18468                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
18469                }
18470            }
18471
18472            next_offset += envelope_size;
18473            _next_ordinal_to_read += 1;
18474            if next_offset >= end_offset {
18475                return Ok(());
18476            }
18477
18478            // Decode unknown envelopes for gaps in ordinals.
18479            while _next_ordinal_to_read < 4 {
18480                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
18481                _next_ordinal_to_read += 1;
18482                next_offset += envelope_size;
18483            }
18484
18485            let next_out_of_line = decoder.next_out_of_line();
18486            let handles_before = decoder.remaining_handles();
18487            if let Some((inlined, num_bytes, num_handles)) =
18488                fidl::encoding::decode_envelope_header(decoder, next_offset)?
18489            {
18490                let member_inline_size =
18491                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
18492                if inlined != (member_inline_size <= 4) {
18493                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
18494                }
18495                let inner_offset;
18496                let mut inner_depth = depth.clone();
18497                if inlined {
18498                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
18499                    inner_offset = next_offset;
18500                } else {
18501                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
18502                    inner_depth.increment()?;
18503                }
18504                let val_ref = self.next_hop.get_or_insert_with(|| fidl::new_empty!(u8, D));
18505                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
18506                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
18507                {
18508                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
18509                }
18510                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
18511                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
18512                }
18513            }
18514
18515            next_offset += envelope_size;
18516            _next_ordinal_to_read += 1;
18517            if next_offset >= end_offset {
18518                return Ok(());
18519            }
18520
18521            // Decode unknown envelopes for gaps in ordinals.
18522            while _next_ordinal_to_read < 5 {
18523                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
18524                _next_ordinal_to_read += 1;
18525                next_offset += envelope_size;
18526            }
18527
18528            let next_out_of_line = decoder.next_out_of_line();
18529            let handles_before = decoder.remaining_handles();
18530            if let Some((inlined, num_bytes, num_handles)) =
18531                fidl::encoding::decode_envelope_header(decoder, next_offset)?
18532            {
18533                let member_inline_size =
18534                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
18535                if inlined != (member_inline_size <= 4) {
18536                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
18537                }
18538                let inner_offset;
18539                let mut inner_depth = depth.clone();
18540                if inlined {
18541                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
18542                    inner_offset = next_offset;
18543                } else {
18544                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
18545                    inner_depth.increment()?;
18546                }
18547                let val_ref = self.path_cost.get_or_insert_with(|| fidl::new_empty!(u8, D));
18548                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
18549                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
18550                {
18551                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
18552                }
18553                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
18554                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
18555                }
18556            }
18557
18558            next_offset += envelope_size;
18559            _next_ordinal_to_read += 1;
18560            if next_offset >= end_offset {
18561                return Ok(());
18562            }
18563
18564            // Decode unknown envelopes for gaps in ordinals.
18565            while _next_ordinal_to_read < 6 {
18566                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
18567                _next_ordinal_to_read += 1;
18568                next_offset += envelope_size;
18569            }
18570
18571            let next_out_of_line = decoder.next_out_of_line();
18572            let handles_before = decoder.remaining_handles();
18573            if let Some((inlined, num_bytes, num_handles)) =
18574                fidl::encoding::decode_envelope_header(decoder, next_offset)?
18575            {
18576                let member_inline_size =
18577                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
18578                if inlined != (member_inline_size <= 4) {
18579                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
18580                }
18581                let inner_offset;
18582                let mut inner_depth = depth.clone();
18583                if inlined {
18584                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
18585                    inner_offset = next_offset;
18586                } else {
18587                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
18588                    inner_depth.increment()?;
18589                }
18590                let val_ref = self.link_quality_in.get_or_insert_with(|| fidl::new_empty!(u8, D));
18591                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
18592                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
18593                {
18594                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
18595                }
18596                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
18597                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
18598                }
18599            }
18600
18601            next_offset += envelope_size;
18602            _next_ordinal_to_read += 1;
18603            if next_offset >= end_offset {
18604                return Ok(());
18605            }
18606
18607            // Decode unknown envelopes for gaps in ordinals.
18608            while _next_ordinal_to_read < 7 {
18609                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
18610                _next_ordinal_to_read += 1;
18611                next_offset += envelope_size;
18612            }
18613
18614            let next_out_of_line = decoder.next_out_of_line();
18615            let handles_before = decoder.remaining_handles();
18616            if let Some((inlined, num_bytes, num_handles)) =
18617                fidl::encoding::decode_envelope_header(decoder, next_offset)?
18618            {
18619                let member_inline_size =
18620                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
18621                if inlined != (member_inline_size <= 4) {
18622                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
18623                }
18624                let inner_offset;
18625                let mut inner_depth = depth.clone();
18626                if inlined {
18627                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
18628                    inner_offset = next_offset;
18629                } else {
18630                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
18631                    inner_depth.increment()?;
18632                }
18633                let val_ref = self.link_quality_out.get_or_insert_with(|| fidl::new_empty!(u8, D));
18634                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
18635                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
18636                {
18637                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
18638                }
18639                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
18640                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
18641                }
18642            }
18643
18644            next_offset += envelope_size;
18645            _next_ordinal_to_read += 1;
18646            if next_offset >= end_offset {
18647                return Ok(());
18648            }
18649
18650            // Decode unknown envelopes for gaps in ordinals.
18651            while _next_ordinal_to_read < 8 {
18652                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
18653                _next_ordinal_to_read += 1;
18654                next_offset += envelope_size;
18655            }
18656
18657            let next_out_of_line = decoder.next_out_of_line();
18658            let handles_before = decoder.remaining_handles();
18659            if let Some((inlined, num_bytes, num_handles)) =
18660                fidl::encoding::decode_envelope_header(decoder, next_offset)?
18661            {
18662                let member_inline_size =
18663                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
18664                if inlined != (member_inline_size <= 4) {
18665                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
18666                }
18667                let inner_offset;
18668                let mut inner_depth = depth.clone();
18669                if inlined {
18670                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
18671                    inner_offset = next_offset;
18672                } else {
18673                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
18674                    inner_depth.increment()?;
18675                }
18676                let val_ref = self.age.get_or_insert_with(|| fidl::new_empty!(i64, D));
18677                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
18678                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
18679                {
18680                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
18681                }
18682                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
18683                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
18684                }
18685            }
18686
18687            next_offset += envelope_size;
18688            _next_ordinal_to_read += 1;
18689            if next_offset >= end_offset {
18690                return Ok(());
18691            }
18692
18693            // Decode unknown envelopes for gaps in ordinals.
18694            while _next_ordinal_to_read < 9 {
18695                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
18696                _next_ordinal_to_read += 1;
18697                next_offset += envelope_size;
18698            }
18699
18700            let next_out_of_line = decoder.next_out_of_line();
18701            let handles_before = decoder.remaining_handles();
18702            if let Some((inlined, num_bytes, num_handles)) =
18703                fidl::encoding::decode_envelope_header(decoder, next_offset)?
18704            {
18705                let member_inline_size =
18706                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
18707                if inlined != (member_inline_size <= 4) {
18708                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
18709                }
18710                let inner_offset;
18711                let mut inner_depth = depth.clone();
18712                if inlined {
18713                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
18714                    inner_offset = next_offset;
18715                } else {
18716                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
18717                    inner_depth.increment()?;
18718                }
18719                let val_ref =
18720                    self.link_established.get_or_insert_with(|| fidl::new_empty!(bool, D));
18721                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
18722                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
18723                {
18724                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
18725                }
18726                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
18727                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
18728                }
18729            }
18730
18731            next_offset += envelope_size;
18732
18733            // Decode the remaining unknown envelopes.
18734            while next_offset < end_offset {
18735                _next_ordinal_to_read += 1;
18736                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
18737                next_offset += envelope_size;
18738            }
18739
18740            Ok(())
18741        }
18742    }
18743
18744    impl SecurityPolicy {
18745        #[inline(always)]
18746        fn max_ordinal_present(&self) -> u64 {
18747            if let Some(_) = self.version_threshold_for_routing {
18748                return 10;
18749            }
18750            if let Some(_) = self.nonccm_routers_enabled {
18751                return 9;
18752            }
18753            if let Some(_) = self.toble_link_enabled {
18754                return 8;
18755            }
18756            if let Some(_) = self.network_key_provisioning_enabled {
18757                return 7;
18758            }
18759            if let Some(_) = self.autonomous_enrollment_enabled {
18760                return 6;
18761            }
18762            if let Some(_) = self.external_commissioning_enabled {
18763                return 5;
18764            }
18765            if let Some(_) = self.routers_enabled {
18766                return 4;
18767            }
18768            if let Some(_) = self.native_commissioning_enabled {
18769                return 3;
18770            }
18771            if let Some(_) = self.obtain_network_key_enabled {
18772                return 2;
18773            }
18774            if let Some(_) = self.rotation_time {
18775                return 1;
18776            }
18777            0
18778        }
18779    }
18780
18781    impl fidl::encoding::ValueTypeMarker for SecurityPolicy {
18782        type Borrowed<'a> = &'a Self;
18783        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
18784            value
18785        }
18786    }
18787
18788    unsafe impl fidl::encoding::TypeMarker for SecurityPolicy {
18789        type Owned = Self;
18790
18791        #[inline(always)]
18792        fn inline_align(_context: fidl::encoding::Context) -> usize {
18793            8
18794        }
18795
18796        #[inline(always)]
18797        fn inline_size(_context: fidl::encoding::Context) -> usize {
18798            16
18799        }
18800    }
18801
18802    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<SecurityPolicy, D>
18803        for &SecurityPolicy
18804    {
18805        unsafe fn encode(
18806            self,
18807            encoder: &mut fidl::encoding::Encoder<'_, D>,
18808            offset: usize,
18809            mut depth: fidl::encoding::Depth,
18810        ) -> fidl::Result<()> {
18811            encoder.debug_check_bounds::<SecurityPolicy>(offset);
18812            // Vector header
18813            let max_ordinal: u64 = self.max_ordinal_present();
18814            encoder.write_num(max_ordinal, offset);
18815            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
18816            // Calling encoder.out_of_line_offset(0) is not allowed.
18817            if max_ordinal == 0 {
18818                return Ok(());
18819            }
18820            depth.increment()?;
18821            let envelope_size = 8;
18822            let bytes_len = max_ordinal as usize * envelope_size;
18823            #[allow(unused_variables)]
18824            let offset = encoder.out_of_line_offset(bytes_len);
18825            let mut _prev_end_offset: usize = 0;
18826            if 1 > max_ordinal {
18827                return Ok(());
18828            }
18829
18830            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
18831            // are envelope_size bytes.
18832            let cur_offset: usize = (1 - 1) * envelope_size;
18833
18834            // Zero reserved fields.
18835            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
18836
18837            // Safety:
18838            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
18839            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
18840            //   envelope_size bytes, there is always sufficient room.
18841            fidl::encoding::encode_in_envelope_optional::<u16, D>(
18842                self.rotation_time.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
18843                encoder,
18844                offset + cur_offset,
18845                depth,
18846            )?;
18847
18848            _prev_end_offset = cur_offset + envelope_size;
18849            if 2 > max_ordinal {
18850                return Ok(());
18851            }
18852
18853            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
18854            // are envelope_size bytes.
18855            let cur_offset: usize = (2 - 1) * envelope_size;
18856
18857            // Zero reserved fields.
18858            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
18859
18860            // Safety:
18861            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
18862            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
18863            //   envelope_size bytes, there is always sufficient room.
18864            fidl::encoding::encode_in_envelope_optional::<bool, D>(
18865                self.obtain_network_key_enabled
18866                    .as_ref()
18867                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
18868                encoder,
18869                offset + cur_offset,
18870                depth,
18871            )?;
18872
18873            _prev_end_offset = cur_offset + envelope_size;
18874            if 3 > max_ordinal {
18875                return Ok(());
18876            }
18877
18878            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
18879            // are envelope_size bytes.
18880            let cur_offset: usize = (3 - 1) * envelope_size;
18881
18882            // Zero reserved fields.
18883            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
18884
18885            // Safety:
18886            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
18887            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
18888            //   envelope_size bytes, there is always sufficient room.
18889            fidl::encoding::encode_in_envelope_optional::<bool, D>(
18890                self.native_commissioning_enabled
18891                    .as_ref()
18892                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
18893                encoder,
18894                offset + cur_offset,
18895                depth,
18896            )?;
18897
18898            _prev_end_offset = cur_offset + envelope_size;
18899            if 4 > max_ordinal {
18900                return Ok(());
18901            }
18902
18903            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
18904            // are envelope_size bytes.
18905            let cur_offset: usize = (4 - 1) * envelope_size;
18906
18907            // Zero reserved fields.
18908            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
18909
18910            // Safety:
18911            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
18912            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
18913            //   envelope_size bytes, there is always sufficient room.
18914            fidl::encoding::encode_in_envelope_optional::<bool, D>(
18915                self.routers_enabled
18916                    .as_ref()
18917                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
18918                encoder,
18919                offset + cur_offset,
18920                depth,
18921            )?;
18922
18923            _prev_end_offset = cur_offset + envelope_size;
18924            if 5 > max_ordinal {
18925                return Ok(());
18926            }
18927
18928            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
18929            // are envelope_size bytes.
18930            let cur_offset: usize = (5 - 1) * envelope_size;
18931
18932            // Zero reserved fields.
18933            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
18934
18935            // Safety:
18936            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
18937            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
18938            //   envelope_size bytes, there is always sufficient room.
18939            fidl::encoding::encode_in_envelope_optional::<bool, D>(
18940                self.external_commissioning_enabled
18941                    .as_ref()
18942                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
18943                encoder,
18944                offset + cur_offset,
18945                depth,
18946            )?;
18947
18948            _prev_end_offset = cur_offset + envelope_size;
18949            if 6 > max_ordinal {
18950                return Ok(());
18951            }
18952
18953            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
18954            // are envelope_size bytes.
18955            let cur_offset: usize = (6 - 1) * envelope_size;
18956
18957            // Zero reserved fields.
18958            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
18959
18960            // Safety:
18961            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
18962            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
18963            //   envelope_size bytes, there is always sufficient room.
18964            fidl::encoding::encode_in_envelope_optional::<bool, D>(
18965                self.autonomous_enrollment_enabled
18966                    .as_ref()
18967                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
18968                encoder,
18969                offset + cur_offset,
18970                depth,
18971            )?;
18972
18973            _prev_end_offset = cur_offset + envelope_size;
18974            if 7 > max_ordinal {
18975                return Ok(());
18976            }
18977
18978            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
18979            // are envelope_size bytes.
18980            let cur_offset: usize = (7 - 1) * envelope_size;
18981
18982            // Zero reserved fields.
18983            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
18984
18985            // Safety:
18986            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
18987            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
18988            //   envelope_size bytes, there is always sufficient room.
18989            fidl::encoding::encode_in_envelope_optional::<bool, D>(
18990                self.network_key_provisioning_enabled
18991                    .as_ref()
18992                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
18993                encoder,
18994                offset + cur_offset,
18995                depth,
18996            )?;
18997
18998            _prev_end_offset = cur_offset + envelope_size;
18999            if 8 > max_ordinal {
19000                return Ok(());
19001            }
19002
19003            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
19004            // are envelope_size bytes.
19005            let cur_offset: usize = (8 - 1) * envelope_size;
19006
19007            // Zero reserved fields.
19008            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
19009
19010            // Safety:
19011            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
19012            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
19013            //   envelope_size bytes, there is always sufficient room.
19014            fidl::encoding::encode_in_envelope_optional::<bool, D>(
19015                self.toble_link_enabled
19016                    .as_ref()
19017                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
19018                encoder,
19019                offset + cur_offset,
19020                depth,
19021            )?;
19022
19023            _prev_end_offset = cur_offset + envelope_size;
19024            if 9 > max_ordinal {
19025                return Ok(());
19026            }
19027
19028            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
19029            // are envelope_size bytes.
19030            let cur_offset: usize = (9 - 1) * envelope_size;
19031
19032            // Zero reserved fields.
19033            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
19034
19035            // Safety:
19036            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
19037            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
19038            //   envelope_size bytes, there is always sufficient room.
19039            fidl::encoding::encode_in_envelope_optional::<bool, D>(
19040                self.nonccm_routers_enabled
19041                    .as_ref()
19042                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
19043                encoder,
19044                offset + cur_offset,
19045                depth,
19046            )?;
19047
19048            _prev_end_offset = cur_offset + envelope_size;
19049            if 10 > max_ordinal {
19050                return Ok(());
19051            }
19052
19053            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
19054            // are envelope_size bytes.
19055            let cur_offset: usize = (10 - 1) * envelope_size;
19056
19057            // Zero reserved fields.
19058            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
19059
19060            // Safety:
19061            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
19062            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
19063            //   envelope_size bytes, there is always sufficient room.
19064            fidl::encoding::encode_in_envelope_optional::<u8, D>(
19065                self.version_threshold_for_routing
19066                    .as_ref()
19067                    .map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
19068                encoder,
19069                offset + cur_offset,
19070                depth,
19071            )?;
19072
19073            _prev_end_offset = cur_offset + envelope_size;
19074
19075            Ok(())
19076        }
19077    }
19078
19079    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SecurityPolicy {
19080        #[inline(always)]
19081        fn new_empty() -> Self {
19082            Self::default()
19083        }
19084
19085        unsafe fn decode(
19086            &mut self,
19087            decoder: &mut fidl::encoding::Decoder<'_, D>,
19088            offset: usize,
19089            mut depth: fidl::encoding::Depth,
19090        ) -> fidl::Result<()> {
19091            decoder.debug_check_bounds::<Self>(offset);
19092            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
19093                None => return Err(fidl::Error::NotNullable),
19094                Some(len) => len,
19095            };
19096            // Calling decoder.out_of_line_offset(0) is not allowed.
19097            if len == 0 {
19098                return Ok(());
19099            };
19100            depth.increment()?;
19101            let envelope_size = 8;
19102            let bytes_len = len * envelope_size;
19103            let offset = decoder.out_of_line_offset(bytes_len)?;
19104            // Decode the envelope for each type.
19105            let mut _next_ordinal_to_read = 0;
19106            let mut next_offset = offset;
19107            let end_offset = offset + bytes_len;
19108            _next_ordinal_to_read += 1;
19109            if next_offset >= end_offset {
19110                return Ok(());
19111            }
19112
19113            // Decode unknown envelopes for gaps in ordinals.
19114            while _next_ordinal_to_read < 1 {
19115                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
19116                _next_ordinal_to_read += 1;
19117                next_offset += envelope_size;
19118            }
19119
19120            let next_out_of_line = decoder.next_out_of_line();
19121            let handles_before = decoder.remaining_handles();
19122            if let Some((inlined, num_bytes, num_handles)) =
19123                fidl::encoding::decode_envelope_header(decoder, next_offset)?
19124            {
19125                let member_inline_size =
19126                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
19127                if inlined != (member_inline_size <= 4) {
19128                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
19129                }
19130                let inner_offset;
19131                let mut inner_depth = depth.clone();
19132                if inlined {
19133                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
19134                    inner_offset = next_offset;
19135                } else {
19136                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
19137                    inner_depth.increment()?;
19138                }
19139                let val_ref = self.rotation_time.get_or_insert_with(|| fidl::new_empty!(u16, D));
19140                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
19141                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
19142                {
19143                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
19144                }
19145                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
19146                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
19147                }
19148            }
19149
19150            next_offset += envelope_size;
19151            _next_ordinal_to_read += 1;
19152            if next_offset >= end_offset {
19153                return Ok(());
19154            }
19155
19156            // Decode unknown envelopes for gaps in ordinals.
19157            while _next_ordinal_to_read < 2 {
19158                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
19159                _next_ordinal_to_read += 1;
19160                next_offset += envelope_size;
19161            }
19162
19163            let next_out_of_line = decoder.next_out_of_line();
19164            let handles_before = decoder.remaining_handles();
19165            if let Some((inlined, num_bytes, num_handles)) =
19166                fidl::encoding::decode_envelope_header(decoder, next_offset)?
19167            {
19168                let member_inline_size =
19169                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
19170                if inlined != (member_inline_size <= 4) {
19171                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
19172                }
19173                let inner_offset;
19174                let mut inner_depth = depth.clone();
19175                if inlined {
19176                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
19177                    inner_offset = next_offset;
19178                } else {
19179                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
19180                    inner_depth.increment()?;
19181                }
19182                let val_ref = self
19183                    .obtain_network_key_enabled
19184                    .get_or_insert_with(|| fidl::new_empty!(bool, D));
19185                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
19186                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
19187                {
19188                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
19189                }
19190                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
19191                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
19192                }
19193            }
19194
19195            next_offset += envelope_size;
19196            _next_ordinal_to_read += 1;
19197            if next_offset >= end_offset {
19198                return Ok(());
19199            }
19200
19201            // Decode unknown envelopes for gaps in ordinals.
19202            while _next_ordinal_to_read < 3 {
19203                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
19204                _next_ordinal_to_read += 1;
19205                next_offset += envelope_size;
19206            }
19207
19208            let next_out_of_line = decoder.next_out_of_line();
19209            let handles_before = decoder.remaining_handles();
19210            if let Some((inlined, num_bytes, num_handles)) =
19211                fidl::encoding::decode_envelope_header(decoder, next_offset)?
19212            {
19213                let member_inline_size =
19214                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
19215                if inlined != (member_inline_size <= 4) {
19216                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
19217                }
19218                let inner_offset;
19219                let mut inner_depth = depth.clone();
19220                if inlined {
19221                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
19222                    inner_offset = next_offset;
19223                } else {
19224                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
19225                    inner_depth.increment()?;
19226                }
19227                let val_ref = self
19228                    .native_commissioning_enabled
19229                    .get_or_insert_with(|| fidl::new_empty!(bool, D));
19230                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
19231                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
19232                {
19233                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
19234                }
19235                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
19236                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
19237                }
19238            }
19239
19240            next_offset += envelope_size;
19241            _next_ordinal_to_read += 1;
19242            if next_offset >= end_offset {
19243                return Ok(());
19244            }
19245
19246            // Decode unknown envelopes for gaps in ordinals.
19247            while _next_ordinal_to_read < 4 {
19248                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
19249                _next_ordinal_to_read += 1;
19250                next_offset += envelope_size;
19251            }
19252
19253            let next_out_of_line = decoder.next_out_of_line();
19254            let handles_before = decoder.remaining_handles();
19255            if let Some((inlined, num_bytes, num_handles)) =
19256                fidl::encoding::decode_envelope_header(decoder, next_offset)?
19257            {
19258                let member_inline_size =
19259                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
19260                if inlined != (member_inline_size <= 4) {
19261                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
19262                }
19263                let inner_offset;
19264                let mut inner_depth = depth.clone();
19265                if inlined {
19266                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
19267                    inner_offset = next_offset;
19268                } else {
19269                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
19270                    inner_depth.increment()?;
19271                }
19272                let val_ref = self.routers_enabled.get_or_insert_with(|| fidl::new_empty!(bool, D));
19273                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
19274                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
19275                {
19276                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
19277                }
19278                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
19279                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
19280                }
19281            }
19282
19283            next_offset += envelope_size;
19284            _next_ordinal_to_read += 1;
19285            if next_offset >= end_offset {
19286                return Ok(());
19287            }
19288
19289            // Decode unknown envelopes for gaps in ordinals.
19290            while _next_ordinal_to_read < 5 {
19291                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
19292                _next_ordinal_to_read += 1;
19293                next_offset += envelope_size;
19294            }
19295
19296            let next_out_of_line = decoder.next_out_of_line();
19297            let handles_before = decoder.remaining_handles();
19298            if let Some((inlined, num_bytes, num_handles)) =
19299                fidl::encoding::decode_envelope_header(decoder, next_offset)?
19300            {
19301                let member_inline_size =
19302                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
19303                if inlined != (member_inline_size <= 4) {
19304                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
19305                }
19306                let inner_offset;
19307                let mut inner_depth = depth.clone();
19308                if inlined {
19309                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
19310                    inner_offset = next_offset;
19311                } else {
19312                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
19313                    inner_depth.increment()?;
19314                }
19315                let val_ref = self
19316                    .external_commissioning_enabled
19317                    .get_or_insert_with(|| fidl::new_empty!(bool, D));
19318                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
19319                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
19320                {
19321                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
19322                }
19323                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
19324                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
19325                }
19326            }
19327
19328            next_offset += envelope_size;
19329            _next_ordinal_to_read += 1;
19330            if next_offset >= end_offset {
19331                return Ok(());
19332            }
19333
19334            // Decode unknown envelopes for gaps in ordinals.
19335            while _next_ordinal_to_read < 6 {
19336                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
19337                _next_ordinal_to_read += 1;
19338                next_offset += envelope_size;
19339            }
19340
19341            let next_out_of_line = decoder.next_out_of_line();
19342            let handles_before = decoder.remaining_handles();
19343            if let Some((inlined, num_bytes, num_handles)) =
19344                fidl::encoding::decode_envelope_header(decoder, next_offset)?
19345            {
19346                let member_inline_size =
19347                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
19348                if inlined != (member_inline_size <= 4) {
19349                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
19350                }
19351                let inner_offset;
19352                let mut inner_depth = depth.clone();
19353                if inlined {
19354                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
19355                    inner_offset = next_offset;
19356                } else {
19357                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
19358                    inner_depth.increment()?;
19359                }
19360                let val_ref = self
19361                    .autonomous_enrollment_enabled
19362                    .get_or_insert_with(|| fidl::new_empty!(bool, D));
19363                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
19364                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
19365                {
19366                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
19367                }
19368                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
19369                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
19370                }
19371            }
19372
19373            next_offset += envelope_size;
19374            _next_ordinal_to_read += 1;
19375            if next_offset >= end_offset {
19376                return Ok(());
19377            }
19378
19379            // Decode unknown envelopes for gaps in ordinals.
19380            while _next_ordinal_to_read < 7 {
19381                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
19382                _next_ordinal_to_read += 1;
19383                next_offset += envelope_size;
19384            }
19385
19386            let next_out_of_line = decoder.next_out_of_line();
19387            let handles_before = decoder.remaining_handles();
19388            if let Some((inlined, num_bytes, num_handles)) =
19389                fidl::encoding::decode_envelope_header(decoder, next_offset)?
19390            {
19391                let member_inline_size =
19392                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
19393                if inlined != (member_inline_size <= 4) {
19394                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
19395                }
19396                let inner_offset;
19397                let mut inner_depth = depth.clone();
19398                if inlined {
19399                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
19400                    inner_offset = next_offset;
19401                } else {
19402                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
19403                    inner_depth.increment()?;
19404                }
19405                let val_ref = self
19406                    .network_key_provisioning_enabled
19407                    .get_or_insert_with(|| fidl::new_empty!(bool, D));
19408                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
19409                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
19410                {
19411                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
19412                }
19413                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
19414                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
19415                }
19416            }
19417
19418            next_offset += envelope_size;
19419            _next_ordinal_to_read += 1;
19420            if next_offset >= end_offset {
19421                return Ok(());
19422            }
19423
19424            // Decode unknown envelopes for gaps in ordinals.
19425            while _next_ordinal_to_read < 8 {
19426                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
19427                _next_ordinal_to_read += 1;
19428                next_offset += envelope_size;
19429            }
19430
19431            let next_out_of_line = decoder.next_out_of_line();
19432            let handles_before = decoder.remaining_handles();
19433            if let Some((inlined, num_bytes, num_handles)) =
19434                fidl::encoding::decode_envelope_header(decoder, next_offset)?
19435            {
19436                let member_inline_size =
19437                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
19438                if inlined != (member_inline_size <= 4) {
19439                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
19440                }
19441                let inner_offset;
19442                let mut inner_depth = depth.clone();
19443                if inlined {
19444                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
19445                    inner_offset = next_offset;
19446                } else {
19447                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
19448                    inner_depth.increment()?;
19449                }
19450                let val_ref =
19451                    self.toble_link_enabled.get_or_insert_with(|| fidl::new_empty!(bool, D));
19452                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
19453                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
19454                {
19455                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
19456                }
19457                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
19458                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
19459                }
19460            }
19461
19462            next_offset += envelope_size;
19463            _next_ordinal_to_read += 1;
19464            if next_offset >= end_offset {
19465                return Ok(());
19466            }
19467
19468            // Decode unknown envelopes for gaps in ordinals.
19469            while _next_ordinal_to_read < 9 {
19470                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
19471                _next_ordinal_to_read += 1;
19472                next_offset += envelope_size;
19473            }
19474
19475            let next_out_of_line = decoder.next_out_of_line();
19476            let handles_before = decoder.remaining_handles();
19477            if let Some((inlined, num_bytes, num_handles)) =
19478                fidl::encoding::decode_envelope_header(decoder, next_offset)?
19479            {
19480                let member_inline_size =
19481                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
19482                if inlined != (member_inline_size <= 4) {
19483                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
19484                }
19485                let inner_offset;
19486                let mut inner_depth = depth.clone();
19487                if inlined {
19488                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
19489                    inner_offset = next_offset;
19490                } else {
19491                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
19492                    inner_depth.increment()?;
19493                }
19494                let val_ref =
19495                    self.nonccm_routers_enabled.get_or_insert_with(|| fidl::new_empty!(bool, D));
19496                fidl::decode!(bool, 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 < 10 {
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                    <u8 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 = self
19539                    .version_threshold_for_routing
19540                    .get_or_insert_with(|| fidl::new_empty!(u8, D));
19541                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
19542                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
19543                {
19544                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
19545                }
19546                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
19547                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
19548                }
19549            }
19550
19551            next_offset += envelope_size;
19552
19553            // Decode the remaining unknown envelopes.
19554            while next_offset < end_offset {
19555                _next_ordinal_to_read += 1;
19556                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
19557                next_offset += envelope_size;
19558            }
19559
19560            Ok(())
19561        }
19562    }
19563
19564    impl ServerConfig {
19565        #[inline(always)]
19566        fn max_ordinal_present(&self) -> u64 {
19567            if let Some(_) = self.rloc16 {
19568                return 4;
19569            }
19570            if let Some(_) = self.server_data {
19571                return 3;
19572            }
19573            if let Some(_) = self.server_data_length {
19574                return 2;
19575            }
19576            if let Some(_) = self.stable {
19577                return 1;
19578            }
19579            0
19580        }
19581    }
19582
19583    impl fidl::encoding::ValueTypeMarker for ServerConfig {
19584        type Borrowed<'a> = &'a Self;
19585        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
19586            value
19587        }
19588    }
19589
19590    unsafe impl fidl::encoding::TypeMarker for ServerConfig {
19591        type Owned = Self;
19592
19593        #[inline(always)]
19594        fn inline_align(_context: fidl::encoding::Context) -> usize {
19595            8
19596        }
19597
19598        #[inline(always)]
19599        fn inline_size(_context: fidl::encoding::Context) -> usize {
19600            16
19601        }
19602    }
19603
19604    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<ServerConfig, D>
19605        for &ServerConfig
19606    {
19607        unsafe fn encode(
19608            self,
19609            encoder: &mut fidl::encoding::Encoder<'_, D>,
19610            offset: usize,
19611            mut depth: fidl::encoding::Depth,
19612        ) -> fidl::Result<()> {
19613            encoder.debug_check_bounds::<ServerConfig>(offset);
19614            // Vector header
19615            let max_ordinal: u64 = self.max_ordinal_present();
19616            encoder.write_num(max_ordinal, offset);
19617            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
19618            // Calling encoder.out_of_line_offset(0) is not allowed.
19619            if max_ordinal == 0 {
19620                return Ok(());
19621            }
19622            depth.increment()?;
19623            let envelope_size = 8;
19624            let bytes_len = max_ordinal as usize * envelope_size;
19625            #[allow(unused_variables)]
19626            let offset = encoder.out_of_line_offset(bytes_len);
19627            let mut _prev_end_offset: usize = 0;
19628            if 1 > max_ordinal {
19629                return Ok(());
19630            }
19631
19632            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
19633            // are envelope_size bytes.
19634            let cur_offset: usize = (1 - 1) * envelope_size;
19635
19636            // Zero reserved fields.
19637            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
19638
19639            // Safety:
19640            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
19641            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
19642            //   envelope_size bytes, there is always sufficient room.
19643            fidl::encoding::encode_in_envelope_optional::<bool, D>(
19644                self.stable.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
19645                encoder,
19646                offset + cur_offset,
19647                depth,
19648            )?;
19649
19650            _prev_end_offset = cur_offset + envelope_size;
19651            if 2 > max_ordinal {
19652                return Ok(());
19653            }
19654
19655            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
19656            // are envelope_size bytes.
19657            let cur_offset: usize = (2 - 1) * envelope_size;
19658
19659            // Zero reserved fields.
19660            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
19661
19662            // Safety:
19663            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
19664            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
19665            //   envelope_size bytes, there is always sufficient room.
19666            fidl::encoding::encode_in_envelope_optional::<u8, D>(
19667                self.server_data_length
19668                    .as_ref()
19669                    .map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
19670                encoder,
19671                offset + cur_offset,
19672                depth,
19673            )?;
19674
19675            _prev_end_offset = cur_offset + envelope_size;
19676            if 3 > max_ordinal {
19677                return Ok(());
19678            }
19679
19680            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
19681            // are envelope_size bytes.
19682            let cur_offset: usize = (3 - 1) * envelope_size;
19683
19684            // Zero reserved fields.
19685            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
19686
19687            // Safety:
19688            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
19689            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
19690            //   envelope_size bytes, there is always sufficient room.
19691            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u8, 252>, D>(
19692                self.server_data.as_ref().map(
19693                    <fidl::encoding::Vector<u8, 252> as fidl::encoding::ValueTypeMarker>::borrow,
19694                ),
19695                encoder,
19696                offset + cur_offset,
19697                depth,
19698            )?;
19699
19700            _prev_end_offset = cur_offset + envelope_size;
19701            if 4 > max_ordinal {
19702                return Ok(());
19703            }
19704
19705            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
19706            // are envelope_size bytes.
19707            let cur_offset: usize = (4 - 1) * envelope_size;
19708
19709            // Zero reserved fields.
19710            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
19711
19712            // Safety:
19713            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
19714            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
19715            //   envelope_size bytes, there is always sufficient room.
19716            fidl::encoding::encode_in_envelope_optional::<u16, D>(
19717                self.rloc16.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
19718                encoder,
19719                offset + cur_offset,
19720                depth,
19721            )?;
19722
19723            _prev_end_offset = cur_offset + envelope_size;
19724
19725            Ok(())
19726        }
19727    }
19728
19729    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ServerConfig {
19730        #[inline(always)]
19731        fn new_empty() -> Self {
19732            Self::default()
19733        }
19734
19735        unsafe fn decode(
19736            &mut self,
19737            decoder: &mut fidl::encoding::Decoder<'_, D>,
19738            offset: usize,
19739            mut depth: fidl::encoding::Depth,
19740        ) -> fidl::Result<()> {
19741            decoder.debug_check_bounds::<Self>(offset);
19742            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
19743                None => return Err(fidl::Error::NotNullable),
19744                Some(len) => len,
19745            };
19746            // Calling decoder.out_of_line_offset(0) is not allowed.
19747            if len == 0 {
19748                return Ok(());
19749            };
19750            depth.increment()?;
19751            let envelope_size = 8;
19752            let bytes_len = len * envelope_size;
19753            let offset = decoder.out_of_line_offset(bytes_len)?;
19754            // Decode the envelope for each type.
19755            let mut _next_ordinal_to_read = 0;
19756            let mut next_offset = offset;
19757            let end_offset = offset + bytes_len;
19758            _next_ordinal_to_read += 1;
19759            if next_offset >= end_offset {
19760                return Ok(());
19761            }
19762
19763            // Decode unknown envelopes for gaps in ordinals.
19764            while _next_ordinal_to_read < 1 {
19765                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
19766                _next_ordinal_to_read += 1;
19767                next_offset += envelope_size;
19768            }
19769
19770            let next_out_of_line = decoder.next_out_of_line();
19771            let handles_before = decoder.remaining_handles();
19772            if let Some((inlined, num_bytes, num_handles)) =
19773                fidl::encoding::decode_envelope_header(decoder, next_offset)?
19774            {
19775                let member_inline_size =
19776                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
19777                if inlined != (member_inline_size <= 4) {
19778                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
19779                }
19780                let inner_offset;
19781                let mut inner_depth = depth.clone();
19782                if inlined {
19783                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
19784                    inner_offset = next_offset;
19785                } else {
19786                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
19787                    inner_depth.increment()?;
19788                }
19789                let val_ref = self.stable.get_or_insert_with(|| fidl::new_empty!(bool, D));
19790                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
19791                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
19792                {
19793                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
19794                }
19795                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
19796                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
19797                }
19798            }
19799
19800            next_offset += envelope_size;
19801            _next_ordinal_to_read += 1;
19802            if next_offset >= end_offset {
19803                return Ok(());
19804            }
19805
19806            // Decode unknown envelopes for gaps in ordinals.
19807            while _next_ordinal_to_read < 2 {
19808                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
19809                _next_ordinal_to_read += 1;
19810                next_offset += envelope_size;
19811            }
19812
19813            let next_out_of_line = decoder.next_out_of_line();
19814            let handles_before = decoder.remaining_handles();
19815            if let Some((inlined, num_bytes, num_handles)) =
19816                fidl::encoding::decode_envelope_header(decoder, next_offset)?
19817            {
19818                let member_inline_size =
19819                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
19820                if inlined != (member_inline_size <= 4) {
19821                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
19822                }
19823                let inner_offset;
19824                let mut inner_depth = depth.clone();
19825                if inlined {
19826                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
19827                    inner_offset = next_offset;
19828                } else {
19829                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
19830                    inner_depth.increment()?;
19831                }
19832                let val_ref =
19833                    self.server_data_length.get_or_insert_with(|| fidl::new_empty!(u8, D));
19834                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
19835                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
19836                {
19837                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
19838                }
19839                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
19840                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
19841                }
19842            }
19843
19844            next_offset += envelope_size;
19845            _next_ordinal_to_read += 1;
19846            if next_offset >= end_offset {
19847                return Ok(());
19848            }
19849
19850            // Decode unknown envelopes for gaps in ordinals.
19851            while _next_ordinal_to_read < 3 {
19852                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
19853                _next_ordinal_to_read += 1;
19854                next_offset += envelope_size;
19855            }
19856
19857            let next_out_of_line = decoder.next_out_of_line();
19858            let handles_before = decoder.remaining_handles();
19859            if let Some((inlined, num_bytes, num_handles)) =
19860                fidl::encoding::decode_envelope_header(decoder, next_offset)?
19861            {
19862                let member_inline_size =
19863                    <fidl::encoding::Vector<u8, 252> as fidl::encoding::TypeMarker>::inline_size(
19864                        decoder.context,
19865                    );
19866                if inlined != (member_inline_size <= 4) {
19867                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
19868                }
19869                let inner_offset;
19870                let mut inner_depth = depth.clone();
19871                if inlined {
19872                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
19873                    inner_offset = next_offset;
19874                } else {
19875                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
19876                    inner_depth.increment()?;
19877                }
19878                let val_ref = self
19879                    .server_data
19880                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u8, 252>, D));
19881                fidl::decode!(fidl::encoding::Vector<u8, 252>, D, val_ref, decoder, inner_offset, inner_depth)?;
19882                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
19883                {
19884                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
19885                }
19886                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
19887                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
19888                }
19889            }
19890
19891            next_offset += envelope_size;
19892            _next_ordinal_to_read += 1;
19893            if next_offset >= end_offset {
19894                return Ok(());
19895            }
19896
19897            // Decode unknown envelopes for gaps in ordinals.
19898            while _next_ordinal_to_read < 4 {
19899                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
19900                _next_ordinal_to_read += 1;
19901                next_offset += envelope_size;
19902            }
19903
19904            let next_out_of_line = decoder.next_out_of_line();
19905            let handles_before = decoder.remaining_handles();
19906            if let Some((inlined, num_bytes, num_handles)) =
19907                fidl::encoding::decode_envelope_header(decoder, next_offset)?
19908            {
19909                let member_inline_size =
19910                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
19911                if inlined != (member_inline_size <= 4) {
19912                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
19913                }
19914                let inner_offset;
19915                let mut inner_depth = depth.clone();
19916                if inlined {
19917                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
19918                    inner_offset = next_offset;
19919                } else {
19920                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
19921                    inner_depth.increment()?;
19922                }
19923                let val_ref = self.rloc16.get_or_insert_with(|| fidl::new_empty!(u16, D));
19924                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
19925                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
19926                {
19927                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
19928                }
19929                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
19930                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
19931                }
19932            }
19933
19934            next_offset += envelope_size;
19935
19936            // Decode the remaining unknown envelopes.
19937            while next_offset < end_offset {
19938                _next_ordinal_to_read += 1;
19939                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
19940                next_offset += envelope_size;
19941            }
19942
19943            Ok(())
19944        }
19945    }
19946
19947    impl ServiceConfig {
19948        #[inline(always)]
19949        fn max_ordinal_present(&self) -> u64 {
19950            if let Some(_) = self.server_config {
19951                return 5;
19952            }
19953            if let Some(_) = self.service_data {
19954                return 4;
19955            }
19956            if let Some(_) = self.service_data_length {
19957                return 3;
19958            }
19959            if let Some(_) = self.enterprise_number {
19960                return 2;
19961            }
19962            if let Some(_) = self.service_id {
19963                return 1;
19964            }
19965            0
19966        }
19967    }
19968
19969    impl fidl::encoding::ValueTypeMarker for ServiceConfig {
19970        type Borrowed<'a> = &'a Self;
19971        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
19972            value
19973        }
19974    }
19975
19976    unsafe impl fidl::encoding::TypeMarker for ServiceConfig {
19977        type Owned = Self;
19978
19979        #[inline(always)]
19980        fn inline_align(_context: fidl::encoding::Context) -> usize {
19981            8
19982        }
19983
19984        #[inline(always)]
19985        fn inline_size(_context: fidl::encoding::Context) -> usize {
19986            16
19987        }
19988    }
19989
19990    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<ServiceConfig, D>
19991        for &ServiceConfig
19992    {
19993        unsafe fn encode(
19994            self,
19995            encoder: &mut fidl::encoding::Encoder<'_, D>,
19996            offset: usize,
19997            mut depth: fidl::encoding::Depth,
19998        ) -> fidl::Result<()> {
19999            encoder.debug_check_bounds::<ServiceConfig>(offset);
20000            // Vector header
20001            let max_ordinal: u64 = self.max_ordinal_present();
20002            encoder.write_num(max_ordinal, offset);
20003            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
20004            // Calling encoder.out_of_line_offset(0) is not allowed.
20005            if max_ordinal == 0 {
20006                return Ok(());
20007            }
20008            depth.increment()?;
20009            let envelope_size = 8;
20010            let bytes_len = max_ordinal as usize * envelope_size;
20011            #[allow(unused_variables)]
20012            let offset = encoder.out_of_line_offset(bytes_len);
20013            let mut _prev_end_offset: usize = 0;
20014            if 1 > max_ordinal {
20015                return Ok(());
20016            }
20017
20018            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
20019            // are envelope_size bytes.
20020            let cur_offset: usize = (1 - 1) * envelope_size;
20021
20022            // Zero reserved fields.
20023            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
20024
20025            // Safety:
20026            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
20027            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
20028            //   envelope_size bytes, there is always sufficient room.
20029            fidl::encoding::encode_in_envelope_optional::<u8, D>(
20030                self.service_id.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
20031                encoder,
20032                offset + cur_offset,
20033                depth,
20034            )?;
20035
20036            _prev_end_offset = cur_offset + envelope_size;
20037            if 2 > max_ordinal {
20038                return Ok(());
20039            }
20040
20041            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
20042            // are envelope_size bytes.
20043            let cur_offset: usize = (2 - 1) * envelope_size;
20044
20045            // Zero reserved fields.
20046            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
20047
20048            // Safety:
20049            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
20050            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
20051            //   envelope_size bytes, there is always sufficient room.
20052            fidl::encoding::encode_in_envelope_optional::<u32, D>(
20053                self.enterprise_number
20054                    .as_ref()
20055                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
20056                encoder,
20057                offset + cur_offset,
20058                depth,
20059            )?;
20060
20061            _prev_end_offset = cur_offset + envelope_size;
20062            if 3 > max_ordinal {
20063                return Ok(());
20064            }
20065
20066            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
20067            // are envelope_size bytes.
20068            let cur_offset: usize = (3 - 1) * envelope_size;
20069
20070            // Zero reserved fields.
20071            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
20072
20073            // Safety:
20074            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
20075            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
20076            //   envelope_size bytes, there is always sufficient room.
20077            fidl::encoding::encode_in_envelope_optional::<u8, D>(
20078                self.service_data_length
20079                    .as_ref()
20080                    .map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
20081                encoder,
20082                offset + cur_offset,
20083                depth,
20084            )?;
20085
20086            _prev_end_offset = cur_offset + envelope_size;
20087            if 4 > max_ordinal {
20088                return Ok(());
20089            }
20090
20091            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
20092            // are envelope_size bytes.
20093            let cur_offset: usize = (4 - 1) * envelope_size;
20094
20095            // Zero reserved fields.
20096            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
20097
20098            // Safety:
20099            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
20100            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
20101            //   envelope_size bytes, there is always sufficient room.
20102            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u8, 252>, D>(
20103                self.service_data.as_ref().map(
20104                    <fidl::encoding::Vector<u8, 252> as fidl::encoding::ValueTypeMarker>::borrow,
20105                ),
20106                encoder,
20107                offset + cur_offset,
20108                depth,
20109            )?;
20110
20111            _prev_end_offset = cur_offset + envelope_size;
20112            if 5 > max_ordinal {
20113                return Ok(());
20114            }
20115
20116            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
20117            // are envelope_size bytes.
20118            let cur_offset: usize = (5 - 1) * envelope_size;
20119
20120            // Zero reserved fields.
20121            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
20122
20123            // Safety:
20124            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
20125            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
20126            //   envelope_size bytes, there is always sufficient room.
20127            fidl::encoding::encode_in_envelope_optional::<ServerConfig, D>(
20128                self.server_config
20129                    .as_ref()
20130                    .map(<ServerConfig as fidl::encoding::ValueTypeMarker>::borrow),
20131                encoder,
20132                offset + cur_offset,
20133                depth,
20134            )?;
20135
20136            _prev_end_offset = cur_offset + envelope_size;
20137
20138            Ok(())
20139        }
20140    }
20141
20142    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ServiceConfig {
20143        #[inline(always)]
20144        fn new_empty() -> Self {
20145            Self::default()
20146        }
20147
20148        unsafe fn decode(
20149            &mut self,
20150            decoder: &mut fidl::encoding::Decoder<'_, D>,
20151            offset: usize,
20152            mut depth: fidl::encoding::Depth,
20153        ) -> fidl::Result<()> {
20154            decoder.debug_check_bounds::<Self>(offset);
20155            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
20156                None => return Err(fidl::Error::NotNullable),
20157                Some(len) => len,
20158            };
20159            // Calling decoder.out_of_line_offset(0) is not allowed.
20160            if len == 0 {
20161                return Ok(());
20162            };
20163            depth.increment()?;
20164            let envelope_size = 8;
20165            let bytes_len = len * envelope_size;
20166            let offset = decoder.out_of_line_offset(bytes_len)?;
20167            // Decode the envelope for each type.
20168            let mut _next_ordinal_to_read = 0;
20169            let mut next_offset = offset;
20170            let end_offset = offset + bytes_len;
20171            _next_ordinal_to_read += 1;
20172            if next_offset >= end_offset {
20173                return Ok(());
20174            }
20175
20176            // Decode unknown envelopes for gaps in ordinals.
20177            while _next_ordinal_to_read < 1 {
20178                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
20179                _next_ordinal_to_read += 1;
20180                next_offset += envelope_size;
20181            }
20182
20183            let next_out_of_line = decoder.next_out_of_line();
20184            let handles_before = decoder.remaining_handles();
20185            if let Some((inlined, num_bytes, num_handles)) =
20186                fidl::encoding::decode_envelope_header(decoder, next_offset)?
20187            {
20188                let member_inline_size =
20189                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
20190                if inlined != (member_inline_size <= 4) {
20191                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
20192                }
20193                let inner_offset;
20194                let mut inner_depth = depth.clone();
20195                if inlined {
20196                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
20197                    inner_offset = next_offset;
20198                } else {
20199                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
20200                    inner_depth.increment()?;
20201                }
20202                let val_ref = self.service_id.get_or_insert_with(|| fidl::new_empty!(u8, D));
20203                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
20204                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
20205                {
20206                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
20207                }
20208                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
20209                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
20210                }
20211            }
20212
20213            next_offset += envelope_size;
20214            _next_ordinal_to_read += 1;
20215            if next_offset >= end_offset {
20216                return Ok(());
20217            }
20218
20219            // Decode unknown envelopes for gaps in ordinals.
20220            while _next_ordinal_to_read < 2 {
20221                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
20222                _next_ordinal_to_read += 1;
20223                next_offset += envelope_size;
20224            }
20225
20226            let next_out_of_line = decoder.next_out_of_line();
20227            let handles_before = decoder.remaining_handles();
20228            if let Some((inlined, num_bytes, num_handles)) =
20229                fidl::encoding::decode_envelope_header(decoder, next_offset)?
20230            {
20231                let member_inline_size =
20232                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
20233                if inlined != (member_inline_size <= 4) {
20234                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
20235                }
20236                let inner_offset;
20237                let mut inner_depth = depth.clone();
20238                if inlined {
20239                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
20240                    inner_offset = next_offset;
20241                } else {
20242                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
20243                    inner_depth.increment()?;
20244                }
20245                let val_ref =
20246                    self.enterprise_number.get_or_insert_with(|| fidl::new_empty!(u32, D));
20247                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
20248                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
20249                {
20250                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
20251                }
20252                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
20253                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
20254                }
20255            }
20256
20257            next_offset += envelope_size;
20258            _next_ordinal_to_read += 1;
20259            if next_offset >= end_offset {
20260                return Ok(());
20261            }
20262
20263            // Decode unknown envelopes for gaps in ordinals.
20264            while _next_ordinal_to_read < 3 {
20265                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
20266                _next_ordinal_to_read += 1;
20267                next_offset += envelope_size;
20268            }
20269
20270            let next_out_of_line = decoder.next_out_of_line();
20271            let handles_before = decoder.remaining_handles();
20272            if let Some((inlined, num_bytes, num_handles)) =
20273                fidl::encoding::decode_envelope_header(decoder, next_offset)?
20274            {
20275                let member_inline_size =
20276                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
20277                if inlined != (member_inline_size <= 4) {
20278                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
20279                }
20280                let inner_offset;
20281                let mut inner_depth = depth.clone();
20282                if inlined {
20283                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
20284                    inner_offset = next_offset;
20285                } else {
20286                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
20287                    inner_depth.increment()?;
20288                }
20289                let val_ref =
20290                    self.service_data_length.get_or_insert_with(|| fidl::new_empty!(u8, D));
20291                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
20292                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
20293                {
20294                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
20295                }
20296                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
20297                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
20298                }
20299            }
20300
20301            next_offset += envelope_size;
20302            _next_ordinal_to_read += 1;
20303            if next_offset >= end_offset {
20304                return Ok(());
20305            }
20306
20307            // Decode unknown envelopes for gaps in ordinals.
20308            while _next_ordinal_to_read < 4 {
20309                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
20310                _next_ordinal_to_read += 1;
20311                next_offset += envelope_size;
20312            }
20313
20314            let next_out_of_line = decoder.next_out_of_line();
20315            let handles_before = decoder.remaining_handles();
20316            if let Some((inlined, num_bytes, num_handles)) =
20317                fidl::encoding::decode_envelope_header(decoder, next_offset)?
20318            {
20319                let member_inline_size =
20320                    <fidl::encoding::Vector<u8, 252> as fidl::encoding::TypeMarker>::inline_size(
20321                        decoder.context,
20322                    );
20323                if inlined != (member_inline_size <= 4) {
20324                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
20325                }
20326                let inner_offset;
20327                let mut inner_depth = depth.clone();
20328                if inlined {
20329                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
20330                    inner_offset = next_offset;
20331                } else {
20332                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
20333                    inner_depth.increment()?;
20334                }
20335                let val_ref = self
20336                    .service_data
20337                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u8, 252>, D));
20338                fidl::decode!(fidl::encoding::Vector<u8, 252>, D, val_ref, decoder, inner_offset, inner_depth)?;
20339                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
20340                {
20341                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
20342                }
20343                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
20344                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
20345                }
20346            }
20347
20348            next_offset += envelope_size;
20349            _next_ordinal_to_read += 1;
20350            if next_offset >= end_offset {
20351                return Ok(());
20352            }
20353
20354            // Decode unknown envelopes for gaps in ordinals.
20355            while _next_ordinal_to_read < 5 {
20356                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
20357                _next_ordinal_to_read += 1;
20358                next_offset += envelope_size;
20359            }
20360
20361            let next_out_of_line = decoder.next_out_of_line();
20362            let handles_before = decoder.remaining_handles();
20363            if let Some((inlined, num_bytes, num_handles)) =
20364                fidl::encoding::decode_envelope_header(decoder, next_offset)?
20365            {
20366                let member_inline_size =
20367                    <ServerConfig as fidl::encoding::TypeMarker>::inline_size(decoder.context);
20368                if inlined != (member_inline_size <= 4) {
20369                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
20370                }
20371                let inner_offset;
20372                let mut inner_depth = depth.clone();
20373                if inlined {
20374                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
20375                    inner_offset = next_offset;
20376                } else {
20377                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
20378                    inner_depth.increment()?;
20379                }
20380                let val_ref =
20381                    self.server_config.get_or_insert_with(|| fidl::new_empty!(ServerConfig, D));
20382                fidl::decode!(ServerConfig, D, val_ref, decoder, inner_offset, inner_depth)?;
20383                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
20384                {
20385                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
20386                }
20387                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
20388                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
20389                }
20390            }
20391
20392            next_offset += envelope_size;
20393
20394            // Decode the remaining unknown envelopes.
20395            while next_offset < end_offset {
20396                _next_ordinal_to_read += 1;
20397                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
20398                next_offset += envelope_size;
20399            }
20400
20401            Ok(())
20402        }
20403    }
20404
20405    impl SrpServerHost {
20406        #[inline(always)]
20407        fn max_ordinal_present(&self) -> u64 {
20408            if let Some(_) = self.addresses {
20409                return 3;
20410            }
20411            if let Some(_) = self.deleted {
20412                return 2;
20413            }
20414            if let Some(_) = self.name {
20415                return 1;
20416            }
20417            0
20418        }
20419    }
20420
20421    impl fidl::encoding::ValueTypeMarker for SrpServerHost {
20422        type Borrowed<'a> = &'a Self;
20423        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
20424            value
20425        }
20426    }
20427
20428    unsafe impl fidl::encoding::TypeMarker for SrpServerHost {
20429        type Owned = Self;
20430
20431        #[inline(always)]
20432        fn inline_align(_context: fidl::encoding::Context) -> usize {
20433            8
20434        }
20435
20436        #[inline(always)]
20437        fn inline_size(_context: fidl::encoding::Context) -> usize {
20438            16
20439        }
20440    }
20441
20442    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<SrpServerHost, D>
20443        for &SrpServerHost
20444    {
20445        unsafe fn encode(
20446            self,
20447            encoder: &mut fidl::encoding::Encoder<'_, D>,
20448            offset: usize,
20449            mut depth: fidl::encoding::Depth,
20450        ) -> fidl::Result<()> {
20451            encoder.debug_check_bounds::<SrpServerHost>(offset);
20452            // Vector header
20453            let max_ordinal: u64 = self.max_ordinal_present();
20454            encoder.write_num(max_ordinal, offset);
20455            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
20456            // Calling encoder.out_of_line_offset(0) is not allowed.
20457            if max_ordinal == 0 {
20458                return Ok(());
20459            }
20460            depth.increment()?;
20461            let envelope_size = 8;
20462            let bytes_len = max_ordinal as usize * envelope_size;
20463            #[allow(unused_variables)]
20464            let offset = encoder.out_of_line_offset(bytes_len);
20465            let mut _prev_end_offset: usize = 0;
20466            if 1 > max_ordinal {
20467                return Ok(());
20468            }
20469
20470            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
20471            // are envelope_size bytes.
20472            let cur_offset: usize = (1 - 1) * envelope_size;
20473
20474            // Zero reserved fields.
20475            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
20476
20477            // Safety:
20478            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
20479            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
20480            //   envelope_size bytes, there is always sufficient room.
20481            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<255>, D>(
20482                self.name.as_ref().map(
20483                    <fidl::encoding::BoundedString<255> as fidl::encoding::ValueTypeMarker>::borrow,
20484                ),
20485                encoder,
20486                offset + cur_offset,
20487                depth,
20488            )?;
20489
20490            _prev_end_offset = cur_offset + envelope_size;
20491            if 2 > max_ordinal {
20492                return Ok(());
20493            }
20494
20495            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
20496            // are envelope_size bytes.
20497            let cur_offset: usize = (2 - 1) * envelope_size;
20498
20499            // Zero reserved fields.
20500            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
20501
20502            // Safety:
20503            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
20504            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
20505            //   envelope_size bytes, there is always sufficient room.
20506            fidl::encoding::encode_in_envelope_optional::<bool, D>(
20507                self.deleted.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
20508                encoder,
20509                offset + cur_offset,
20510                depth,
20511            )?;
20512
20513            _prev_end_offset = cur_offset + envelope_size;
20514            if 3 > max_ordinal {
20515                return Ok(());
20516            }
20517
20518            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
20519            // are envelope_size bytes.
20520            let cur_offset: usize = (3 - 1) * envelope_size;
20521
20522            // Zero reserved fields.
20523            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
20524
20525            // Safety:
20526            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
20527            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
20528            //   envelope_size bytes, there is always sufficient room.
20529            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<fidl_fuchsia_net__common::Ipv6Address, 16>, D>(
20530            self.addresses.as_ref().map(<fidl::encoding::Vector<fidl_fuchsia_net__common::Ipv6Address, 16> as fidl::encoding::ValueTypeMarker>::borrow),
20531            encoder, offset + cur_offset, depth
20532        )?;
20533
20534            _prev_end_offset = cur_offset + envelope_size;
20535
20536            Ok(())
20537        }
20538    }
20539
20540    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SrpServerHost {
20541        #[inline(always)]
20542        fn new_empty() -> Self {
20543            Self::default()
20544        }
20545
20546        unsafe fn decode(
20547            &mut self,
20548            decoder: &mut fidl::encoding::Decoder<'_, D>,
20549            offset: usize,
20550            mut depth: fidl::encoding::Depth,
20551        ) -> fidl::Result<()> {
20552            decoder.debug_check_bounds::<Self>(offset);
20553            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
20554                None => return Err(fidl::Error::NotNullable),
20555                Some(len) => len,
20556            };
20557            // Calling decoder.out_of_line_offset(0) is not allowed.
20558            if len == 0 {
20559                return Ok(());
20560            };
20561            depth.increment()?;
20562            let envelope_size = 8;
20563            let bytes_len = len * envelope_size;
20564            let offset = decoder.out_of_line_offset(bytes_len)?;
20565            // Decode the envelope for each type.
20566            let mut _next_ordinal_to_read = 0;
20567            let mut next_offset = offset;
20568            let end_offset = offset + bytes_len;
20569            _next_ordinal_to_read += 1;
20570            if next_offset >= end_offset {
20571                return Ok(());
20572            }
20573
20574            // Decode unknown envelopes for gaps in ordinals.
20575            while _next_ordinal_to_read < 1 {
20576                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
20577                _next_ordinal_to_read += 1;
20578                next_offset += envelope_size;
20579            }
20580
20581            let next_out_of_line = decoder.next_out_of_line();
20582            let handles_before = decoder.remaining_handles();
20583            if let Some((inlined, num_bytes, num_handles)) =
20584                fidl::encoding::decode_envelope_header(decoder, next_offset)?
20585            {
20586                let member_inline_size =
20587                    <fidl::encoding::BoundedString<255> as fidl::encoding::TypeMarker>::inline_size(
20588                        decoder.context,
20589                    );
20590                if inlined != (member_inline_size <= 4) {
20591                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
20592                }
20593                let inner_offset;
20594                let mut inner_depth = depth.clone();
20595                if inlined {
20596                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
20597                    inner_offset = next_offset;
20598                } else {
20599                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
20600                    inner_depth.increment()?;
20601                }
20602                let val_ref = self
20603                    .name
20604                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<255>, D));
20605                fidl::decode!(
20606                    fidl::encoding::BoundedString<255>,
20607                    D,
20608                    val_ref,
20609                    decoder,
20610                    inner_offset,
20611                    inner_depth
20612                )?;
20613                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
20614                {
20615                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
20616                }
20617                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
20618                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
20619                }
20620            }
20621
20622            next_offset += envelope_size;
20623            _next_ordinal_to_read += 1;
20624            if next_offset >= end_offset {
20625                return Ok(());
20626            }
20627
20628            // Decode unknown envelopes for gaps in ordinals.
20629            while _next_ordinal_to_read < 2 {
20630                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
20631                _next_ordinal_to_read += 1;
20632                next_offset += envelope_size;
20633            }
20634
20635            let next_out_of_line = decoder.next_out_of_line();
20636            let handles_before = decoder.remaining_handles();
20637            if let Some((inlined, num_bytes, num_handles)) =
20638                fidl::encoding::decode_envelope_header(decoder, next_offset)?
20639            {
20640                let member_inline_size =
20641                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
20642                if inlined != (member_inline_size <= 4) {
20643                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
20644                }
20645                let inner_offset;
20646                let mut inner_depth = depth.clone();
20647                if inlined {
20648                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
20649                    inner_offset = next_offset;
20650                } else {
20651                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
20652                    inner_depth.increment()?;
20653                }
20654                let val_ref = self.deleted.get_or_insert_with(|| fidl::new_empty!(bool, D));
20655                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
20656                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
20657                {
20658                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
20659                }
20660                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
20661                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
20662                }
20663            }
20664
20665            next_offset += envelope_size;
20666            _next_ordinal_to_read += 1;
20667            if next_offset >= end_offset {
20668                return Ok(());
20669            }
20670
20671            // Decode unknown envelopes for gaps in ordinals.
20672            while _next_ordinal_to_read < 3 {
20673                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
20674                _next_ordinal_to_read += 1;
20675                next_offset += envelope_size;
20676            }
20677
20678            let next_out_of_line = decoder.next_out_of_line();
20679            let handles_before = decoder.remaining_handles();
20680            if let Some((inlined, num_bytes, num_handles)) =
20681                fidl::encoding::decode_envelope_header(decoder, next_offset)?
20682            {
20683                let member_inline_size = <fidl::encoding::Vector<
20684                    fidl_fuchsia_net__common::Ipv6Address,
20685                    16,
20686                > as fidl::encoding::TypeMarker>::inline_size(
20687                    decoder.context
20688                );
20689                if inlined != (member_inline_size <= 4) {
20690                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
20691                }
20692                let inner_offset;
20693                let mut inner_depth = depth.clone();
20694                if inlined {
20695                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
20696                    inner_offset = next_offset;
20697                } else {
20698                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
20699                    inner_depth.increment()?;
20700                }
20701                let val_ref =
20702                self.addresses.get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<fidl_fuchsia_net__common::Ipv6Address, 16>, D));
20703                fidl::decode!(fidl::encoding::Vector<fidl_fuchsia_net__common::Ipv6Address, 16>, D, val_ref, decoder, inner_offset, inner_depth)?;
20704                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
20705                {
20706                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
20707                }
20708                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
20709                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
20710                }
20711            }
20712
20713            next_offset += envelope_size;
20714
20715            // Decode the remaining unknown envelopes.
20716            while next_offset < end_offset {
20717                _next_ordinal_to_read += 1;
20718                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
20719                next_offset += envelope_size;
20720            }
20721
20722            Ok(())
20723        }
20724    }
20725
20726    impl SrpServerInfo {
20727        #[inline(always)]
20728        fn max_ordinal_present(&self) -> u64 {
20729            if let Some(_) = self.services {
20730                return 8;
20731            }
20732            if let Some(_) = self.hosts {
20733                return 7;
20734            }
20735            if let Some(_) = self.services_registration {
20736                return 6;
20737            }
20738            if let Some(_) = self.hosts_registration {
20739                return 5;
20740            }
20741            if let Some(_) = self.response_counters {
20742                return 4;
20743            }
20744            if let Some(_) = self.address_mode {
20745                return 3;
20746            }
20747            if let Some(_) = self.port {
20748                return 2;
20749            }
20750            if let Some(_) = self.state {
20751                return 1;
20752            }
20753            0
20754        }
20755    }
20756
20757    impl fidl::encoding::ValueTypeMarker for SrpServerInfo {
20758        type Borrowed<'a> = &'a Self;
20759        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
20760            value
20761        }
20762    }
20763
20764    unsafe impl fidl::encoding::TypeMarker for SrpServerInfo {
20765        type Owned = Self;
20766
20767        #[inline(always)]
20768        fn inline_align(_context: fidl::encoding::Context) -> usize {
20769            8
20770        }
20771
20772        #[inline(always)]
20773        fn inline_size(_context: fidl::encoding::Context) -> usize {
20774            16
20775        }
20776    }
20777
20778    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<SrpServerInfo, D>
20779        for &SrpServerInfo
20780    {
20781        unsafe fn encode(
20782            self,
20783            encoder: &mut fidl::encoding::Encoder<'_, D>,
20784            offset: usize,
20785            mut depth: fidl::encoding::Depth,
20786        ) -> fidl::Result<()> {
20787            encoder.debug_check_bounds::<SrpServerInfo>(offset);
20788            // Vector header
20789            let max_ordinal: u64 = self.max_ordinal_present();
20790            encoder.write_num(max_ordinal, offset);
20791            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
20792            // Calling encoder.out_of_line_offset(0) is not allowed.
20793            if max_ordinal == 0 {
20794                return Ok(());
20795            }
20796            depth.increment()?;
20797            let envelope_size = 8;
20798            let bytes_len = max_ordinal as usize * envelope_size;
20799            #[allow(unused_variables)]
20800            let offset = encoder.out_of_line_offset(bytes_len);
20801            let mut _prev_end_offset: usize = 0;
20802            if 1 > max_ordinal {
20803                return Ok(());
20804            }
20805
20806            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
20807            // are envelope_size bytes.
20808            let cur_offset: usize = (1 - 1) * envelope_size;
20809
20810            // Zero reserved fields.
20811            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
20812
20813            // Safety:
20814            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
20815            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
20816            //   envelope_size bytes, there is always sufficient room.
20817            fidl::encoding::encode_in_envelope_optional::<SrpServerState, D>(
20818                self.state
20819                    .as_ref()
20820                    .map(<SrpServerState as fidl::encoding::ValueTypeMarker>::borrow),
20821                encoder,
20822                offset + cur_offset,
20823                depth,
20824            )?;
20825
20826            _prev_end_offset = cur_offset + envelope_size;
20827            if 2 > max_ordinal {
20828                return Ok(());
20829            }
20830
20831            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
20832            // are envelope_size bytes.
20833            let cur_offset: usize = (2 - 1) * envelope_size;
20834
20835            // Zero reserved fields.
20836            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
20837
20838            // Safety:
20839            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
20840            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
20841            //   envelope_size bytes, there is always sufficient room.
20842            fidl::encoding::encode_in_envelope_optional::<u16, D>(
20843                self.port.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
20844                encoder,
20845                offset + cur_offset,
20846                depth,
20847            )?;
20848
20849            _prev_end_offset = cur_offset + envelope_size;
20850            if 3 > max_ordinal {
20851                return Ok(());
20852            }
20853
20854            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
20855            // are envelope_size bytes.
20856            let cur_offset: usize = (3 - 1) * envelope_size;
20857
20858            // Zero reserved fields.
20859            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
20860
20861            // Safety:
20862            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
20863            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
20864            //   envelope_size bytes, there is always sufficient room.
20865            fidl::encoding::encode_in_envelope_optional::<SrpServerAddressMode, D>(
20866                self.address_mode
20867                    .as_ref()
20868                    .map(<SrpServerAddressMode as fidl::encoding::ValueTypeMarker>::borrow),
20869                encoder,
20870                offset + cur_offset,
20871                depth,
20872            )?;
20873
20874            _prev_end_offset = cur_offset + envelope_size;
20875            if 4 > max_ordinal {
20876                return Ok(());
20877            }
20878
20879            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
20880            // are envelope_size bytes.
20881            let cur_offset: usize = (4 - 1) * envelope_size;
20882
20883            // Zero reserved fields.
20884            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
20885
20886            // Safety:
20887            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
20888            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
20889            //   envelope_size bytes, there is always sufficient room.
20890            fidl::encoding::encode_in_envelope_optional::<SrpServerResponseCounters, D>(
20891                self.response_counters
20892                    .as_ref()
20893                    .map(<SrpServerResponseCounters as fidl::encoding::ValueTypeMarker>::borrow),
20894                encoder,
20895                offset + cur_offset,
20896                depth,
20897            )?;
20898
20899            _prev_end_offset = cur_offset + envelope_size;
20900            if 5 > max_ordinal {
20901                return Ok(());
20902            }
20903
20904            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
20905            // are envelope_size bytes.
20906            let cur_offset: usize = (5 - 1) * envelope_size;
20907
20908            // Zero reserved fields.
20909            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
20910
20911            // Safety:
20912            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
20913            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
20914            //   envelope_size bytes, there is always sufficient room.
20915            fidl::encoding::encode_in_envelope_optional::<SrpServerRegistration, D>(
20916                self.hosts_registration
20917                    .as_ref()
20918                    .map(<SrpServerRegistration as fidl::encoding::ValueTypeMarker>::borrow),
20919                encoder,
20920                offset + cur_offset,
20921                depth,
20922            )?;
20923
20924            _prev_end_offset = cur_offset + envelope_size;
20925            if 6 > max_ordinal {
20926                return Ok(());
20927            }
20928
20929            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
20930            // are envelope_size bytes.
20931            let cur_offset: usize = (6 - 1) * envelope_size;
20932
20933            // Zero reserved fields.
20934            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
20935
20936            // Safety:
20937            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
20938            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
20939            //   envelope_size bytes, there is always sufficient room.
20940            fidl::encoding::encode_in_envelope_optional::<SrpServerRegistration, D>(
20941                self.services_registration
20942                    .as_ref()
20943                    .map(<SrpServerRegistration as fidl::encoding::ValueTypeMarker>::borrow),
20944                encoder,
20945                offset + cur_offset,
20946                depth,
20947            )?;
20948
20949            _prev_end_offset = cur_offset + envelope_size;
20950            if 7 > max_ordinal {
20951                return Ok(());
20952            }
20953
20954            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
20955            // are envelope_size bytes.
20956            let cur_offset: usize = (7 - 1) * envelope_size;
20957
20958            // Zero reserved fields.
20959            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
20960
20961            // Safety:
20962            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
20963            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
20964            //   envelope_size bytes, there is always sufficient room.
20965            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<SrpServerHost, 64>, D>(
20966            self.hosts.as_ref().map(<fidl::encoding::Vector<SrpServerHost, 64> as fidl::encoding::ValueTypeMarker>::borrow),
20967            encoder, offset + cur_offset, depth
20968        )?;
20969
20970            _prev_end_offset = cur_offset + envelope_size;
20971            if 8 > max_ordinal {
20972                return Ok(());
20973            }
20974
20975            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
20976            // are envelope_size bytes.
20977            let cur_offset: usize = (8 - 1) * envelope_size;
20978
20979            // Zero reserved fields.
20980            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
20981
20982            // Safety:
20983            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
20984            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
20985            //   envelope_size bytes, there is always sufficient room.
20986            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<SrpServerService, 64>, D>(
20987            self.services.as_ref().map(<fidl::encoding::Vector<SrpServerService, 64> as fidl::encoding::ValueTypeMarker>::borrow),
20988            encoder, offset + cur_offset, depth
20989        )?;
20990
20991            _prev_end_offset = cur_offset + envelope_size;
20992
20993            Ok(())
20994        }
20995    }
20996
20997    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SrpServerInfo {
20998        #[inline(always)]
20999        fn new_empty() -> Self {
21000            Self::default()
21001        }
21002
21003        unsafe fn decode(
21004            &mut self,
21005            decoder: &mut fidl::encoding::Decoder<'_, D>,
21006            offset: usize,
21007            mut depth: fidl::encoding::Depth,
21008        ) -> fidl::Result<()> {
21009            decoder.debug_check_bounds::<Self>(offset);
21010            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
21011                None => return Err(fidl::Error::NotNullable),
21012                Some(len) => len,
21013            };
21014            // Calling decoder.out_of_line_offset(0) is not allowed.
21015            if len == 0 {
21016                return Ok(());
21017            };
21018            depth.increment()?;
21019            let envelope_size = 8;
21020            let bytes_len = len * envelope_size;
21021            let offset = decoder.out_of_line_offset(bytes_len)?;
21022            // Decode the envelope for each type.
21023            let mut _next_ordinal_to_read = 0;
21024            let mut next_offset = offset;
21025            let end_offset = offset + bytes_len;
21026            _next_ordinal_to_read += 1;
21027            if next_offset >= end_offset {
21028                return Ok(());
21029            }
21030
21031            // Decode unknown envelopes for gaps in ordinals.
21032            while _next_ordinal_to_read < 1 {
21033                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
21034                _next_ordinal_to_read += 1;
21035                next_offset += envelope_size;
21036            }
21037
21038            let next_out_of_line = decoder.next_out_of_line();
21039            let handles_before = decoder.remaining_handles();
21040            if let Some((inlined, num_bytes, num_handles)) =
21041                fidl::encoding::decode_envelope_header(decoder, next_offset)?
21042            {
21043                let member_inline_size =
21044                    <SrpServerState as fidl::encoding::TypeMarker>::inline_size(decoder.context);
21045                if inlined != (member_inline_size <= 4) {
21046                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
21047                }
21048                let inner_offset;
21049                let mut inner_depth = depth.clone();
21050                if inlined {
21051                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
21052                    inner_offset = next_offset;
21053                } else {
21054                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
21055                    inner_depth.increment()?;
21056                }
21057                let val_ref = self.state.get_or_insert_with(|| fidl::new_empty!(SrpServerState, D));
21058                fidl::decode!(SrpServerState, D, val_ref, decoder, inner_offset, inner_depth)?;
21059                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
21060                {
21061                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
21062                }
21063                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
21064                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
21065                }
21066            }
21067
21068            next_offset += envelope_size;
21069            _next_ordinal_to_read += 1;
21070            if next_offset >= end_offset {
21071                return Ok(());
21072            }
21073
21074            // Decode unknown envelopes for gaps in ordinals.
21075            while _next_ordinal_to_read < 2 {
21076                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
21077                _next_ordinal_to_read += 1;
21078                next_offset += envelope_size;
21079            }
21080
21081            let next_out_of_line = decoder.next_out_of_line();
21082            let handles_before = decoder.remaining_handles();
21083            if let Some((inlined, num_bytes, num_handles)) =
21084                fidl::encoding::decode_envelope_header(decoder, next_offset)?
21085            {
21086                let member_inline_size =
21087                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
21088                if inlined != (member_inline_size <= 4) {
21089                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
21090                }
21091                let inner_offset;
21092                let mut inner_depth = depth.clone();
21093                if inlined {
21094                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
21095                    inner_offset = next_offset;
21096                } else {
21097                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
21098                    inner_depth.increment()?;
21099                }
21100                let val_ref = self.port.get_or_insert_with(|| fidl::new_empty!(u16, D));
21101                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
21102                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
21103                {
21104                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
21105                }
21106                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
21107                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
21108                }
21109            }
21110
21111            next_offset += envelope_size;
21112            _next_ordinal_to_read += 1;
21113            if next_offset >= end_offset {
21114                return Ok(());
21115            }
21116
21117            // Decode unknown envelopes for gaps in ordinals.
21118            while _next_ordinal_to_read < 3 {
21119                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
21120                _next_ordinal_to_read += 1;
21121                next_offset += envelope_size;
21122            }
21123
21124            let next_out_of_line = decoder.next_out_of_line();
21125            let handles_before = decoder.remaining_handles();
21126            if let Some((inlined, num_bytes, num_handles)) =
21127                fidl::encoding::decode_envelope_header(decoder, next_offset)?
21128            {
21129                let member_inline_size =
21130                    <SrpServerAddressMode as fidl::encoding::TypeMarker>::inline_size(
21131                        decoder.context,
21132                    );
21133                if inlined != (member_inline_size <= 4) {
21134                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
21135                }
21136                let inner_offset;
21137                let mut inner_depth = depth.clone();
21138                if inlined {
21139                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
21140                    inner_offset = next_offset;
21141                } else {
21142                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
21143                    inner_depth.increment()?;
21144                }
21145                let val_ref = self
21146                    .address_mode
21147                    .get_or_insert_with(|| fidl::new_empty!(SrpServerAddressMode, D));
21148                fidl::decode!(
21149                    SrpServerAddressMode,
21150                    D,
21151                    val_ref,
21152                    decoder,
21153                    inner_offset,
21154                    inner_depth
21155                )?;
21156                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
21157                {
21158                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
21159                }
21160                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
21161                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
21162                }
21163            }
21164
21165            next_offset += envelope_size;
21166            _next_ordinal_to_read += 1;
21167            if next_offset >= end_offset {
21168                return Ok(());
21169            }
21170
21171            // Decode unknown envelopes for gaps in ordinals.
21172            while _next_ordinal_to_read < 4 {
21173                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
21174                _next_ordinal_to_read += 1;
21175                next_offset += envelope_size;
21176            }
21177
21178            let next_out_of_line = decoder.next_out_of_line();
21179            let handles_before = decoder.remaining_handles();
21180            if let Some((inlined, num_bytes, num_handles)) =
21181                fidl::encoding::decode_envelope_header(decoder, next_offset)?
21182            {
21183                let member_inline_size =
21184                    <SrpServerResponseCounters as fidl::encoding::TypeMarker>::inline_size(
21185                        decoder.context,
21186                    );
21187                if inlined != (member_inline_size <= 4) {
21188                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
21189                }
21190                let inner_offset;
21191                let mut inner_depth = depth.clone();
21192                if inlined {
21193                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
21194                    inner_offset = next_offset;
21195                } else {
21196                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
21197                    inner_depth.increment()?;
21198                }
21199                let val_ref = self
21200                    .response_counters
21201                    .get_or_insert_with(|| fidl::new_empty!(SrpServerResponseCounters, D));
21202                fidl::decode!(
21203                    SrpServerResponseCounters,
21204                    D,
21205                    val_ref,
21206                    decoder,
21207                    inner_offset,
21208                    inner_depth
21209                )?;
21210                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
21211                {
21212                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
21213                }
21214                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
21215                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
21216                }
21217            }
21218
21219            next_offset += envelope_size;
21220            _next_ordinal_to_read += 1;
21221            if next_offset >= end_offset {
21222                return Ok(());
21223            }
21224
21225            // Decode unknown envelopes for gaps in ordinals.
21226            while _next_ordinal_to_read < 5 {
21227                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
21228                _next_ordinal_to_read += 1;
21229                next_offset += envelope_size;
21230            }
21231
21232            let next_out_of_line = decoder.next_out_of_line();
21233            let handles_before = decoder.remaining_handles();
21234            if let Some((inlined, num_bytes, num_handles)) =
21235                fidl::encoding::decode_envelope_header(decoder, next_offset)?
21236            {
21237                let member_inline_size =
21238                    <SrpServerRegistration as fidl::encoding::TypeMarker>::inline_size(
21239                        decoder.context,
21240                    );
21241                if inlined != (member_inline_size <= 4) {
21242                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
21243                }
21244                let inner_offset;
21245                let mut inner_depth = depth.clone();
21246                if inlined {
21247                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
21248                    inner_offset = next_offset;
21249                } else {
21250                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
21251                    inner_depth.increment()?;
21252                }
21253                let val_ref = self
21254                    .hosts_registration
21255                    .get_or_insert_with(|| fidl::new_empty!(SrpServerRegistration, D));
21256                fidl::decode!(
21257                    SrpServerRegistration,
21258                    D,
21259                    val_ref,
21260                    decoder,
21261                    inner_offset,
21262                    inner_depth
21263                )?;
21264                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
21265                {
21266                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
21267                }
21268                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
21269                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
21270                }
21271            }
21272
21273            next_offset += envelope_size;
21274            _next_ordinal_to_read += 1;
21275            if next_offset >= end_offset {
21276                return Ok(());
21277            }
21278
21279            // Decode unknown envelopes for gaps in ordinals.
21280            while _next_ordinal_to_read < 6 {
21281                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
21282                _next_ordinal_to_read += 1;
21283                next_offset += envelope_size;
21284            }
21285
21286            let next_out_of_line = decoder.next_out_of_line();
21287            let handles_before = decoder.remaining_handles();
21288            if let Some((inlined, num_bytes, num_handles)) =
21289                fidl::encoding::decode_envelope_header(decoder, next_offset)?
21290            {
21291                let member_inline_size =
21292                    <SrpServerRegistration as fidl::encoding::TypeMarker>::inline_size(
21293                        decoder.context,
21294                    );
21295                if inlined != (member_inline_size <= 4) {
21296                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
21297                }
21298                let inner_offset;
21299                let mut inner_depth = depth.clone();
21300                if inlined {
21301                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
21302                    inner_offset = next_offset;
21303                } else {
21304                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
21305                    inner_depth.increment()?;
21306                }
21307                let val_ref = self
21308                    .services_registration
21309                    .get_or_insert_with(|| fidl::new_empty!(SrpServerRegistration, D));
21310                fidl::decode!(
21311                    SrpServerRegistration,
21312                    D,
21313                    val_ref,
21314                    decoder,
21315                    inner_offset,
21316                    inner_depth
21317                )?;
21318                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
21319                {
21320                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
21321                }
21322                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
21323                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
21324                }
21325            }
21326
21327            next_offset += envelope_size;
21328            _next_ordinal_to_read += 1;
21329            if next_offset >= end_offset {
21330                return Ok(());
21331            }
21332
21333            // Decode unknown envelopes for gaps in ordinals.
21334            while _next_ordinal_to_read < 7 {
21335                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
21336                _next_ordinal_to_read += 1;
21337                next_offset += envelope_size;
21338            }
21339
21340            let next_out_of_line = decoder.next_out_of_line();
21341            let handles_before = decoder.remaining_handles();
21342            if let Some((inlined, num_bytes, num_handles)) =
21343                fidl::encoding::decode_envelope_header(decoder, next_offset)?
21344            {
21345                let member_inline_size = <fidl::encoding::Vector<SrpServerHost, 64> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
21346                if inlined != (member_inline_size <= 4) {
21347                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
21348                }
21349                let inner_offset;
21350                let mut inner_depth = depth.clone();
21351                if inlined {
21352                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
21353                    inner_offset = next_offset;
21354                } else {
21355                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
21356                    inner_depth.increment()?;
21357                }
21358                let val_ref = self.hosts.get_or_insert_with(
21359                    || fidl::new_empty!(fidl::encoding::Vector<SrpServerHost, 64>, D),
21360                );
21361                fidl::decode!(fidl::encoding::Vector<SrpServerHost, 64>, D, val_ref, decoder, inner_offset, inner_depth)?;
21362                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
21363                {
21364                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
21365                }
21366                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
21367                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
21368                }
21369            }
21370
21371            next_offset += envelope_size;
21372            _next_ordinal_to_read += 1;
21373            if next_offset >= end_offset {
21374                return Ok(());
21375            }
21376
21377            // Decode unknown envelopes for gaps in ordinals.
21378            while _next_ordinal_to_read < 8 {
21379                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
21380                _next_ordinal_to_read += 1;
21381                next_offset += envelope_size;
21382            }
21383
21384            let next_out_of_line = decoder.next_out_of_line();
21385            let handles_before = decoder.remaining_handles();
21386            if let Some((inlined, num_bytes, num_handles)) =
21387                fidl::encoding::decode_envelope_header(decoder, next_offset)?
21388            {
21389                let member_inline_size = <fidl::encoding::Vector<SrpServerService, 64> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
21390                if inlined != (member_inline_size <= 4) {
21391                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
21392                }
21393                let inner_offset;
21394                let mut inner_depth = depth.clone();
21395                if inlined {
21396                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
21397                    inner_offset = next_offset;
21398                } else {
21399                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
21400                    inner_depth.increment()?;
21401                }
21402                let val_ref = self.services.get_or_insert_with(
21403                    || fidl::new_empty!(fidl::encoding::Vector<SrpServerService, 64>, D),
21404                );
21405                fidl::decode!(fidl::encoding::Vector<SrpServerService, 64>, D, val_ref, decoder, inner_offset, inner_depth)?;
21406                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
21407                {
21408                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
21409                }
21410                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
21411                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
21412                }
21413            }
21414
21415            next_offset += envelope_size;
21416
21417            // Decode the remaining unknown envelopes.
21418            while next_offset < end_offset {
21419                _next_ordinal_to_read += 1;
21420                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
21421                next_offset += envelope_size;
21422            }
21423
21424            Ok(())
21425        }
21426    }
21427
21428    impl SrpServerRegistration {
21429        #[inline(always)]
21430        fn max_ordinal_present(&self) -> u64 {
21431            if let Some(_) = self.remaining_key_lease_time_total {
21432                return 6;
21433            }
21434            if let Some(_) = self.remaining_lease_time_total {
21435                return 5;
21436            }
21437            if let Some(_) = self.key_lease_time_total {
21438                return 4;
21439            }
21440            if let Some(_) = self.lease_time_total {
21441                return 3;
21442            }
21443            if let Some(_) = self.deleted_count {
21444                return 2;
21445            }
21446            if let Some(_) = self.fresh_count {
21447                return 1;
21448            }
21449            0
21450        }
21451    }
21452
21453    impl fidl::encoding::ValueTypeMarker for SrpServerRegistration {
21454        type Borrowed<'a> = &'a Self;
21455        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
21456            value
21457        }
21458    }
21459
21460    unsafe impl fidl::encoding::TypeMarker for SrpServerRegistration {
21461        type Owned = Self;
21462
21463        #[inline(always)]
21464        fn inline_align(_context: fidl::encoding::Context) -> usize {
21465            8
21466        }
21467
21468        #[inline(always)]
21469        fn inline_size(_context: fidl::encoding::Context) -> usize {
21470            16
21471        }
21472    }
21473
21474    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<SrpServerRegistration, D>
21475        for &SrpServerRegistration
21476    {
21477        unsafe fn encode(
21478            self,
21479            encoder: &mut fidl::encoding::Encoder<'_, D>,
21480            offset: usize,
21481            mut depth: fidl::encoding::Depth,
21482        ) -> fidl::Result<()> {
21483            encoder.debug_check_bounds::<SrpServerRegistration>(offset);
21484            // Vector header
21485            let max_ordinal: u64 = self.max_ordinal_present();
21486            encoder.write_num(max_ordinal, offset);
21487            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
21488            // Calling encoder.out_of_line_offset(0) is not allowed.
21489            if max_ordinal == 0 {
21490                return Ok(());
21491            }
21492            depth.increment()?;
21493            let envelope_size = 8;
21494            let bytes_len = max_ordinal as usize * envelope_size;
21495            #[allow(unused_variables)]
21496            let offset = encoder.out_of_line_offset(bytes_len);
21497            let mut _prev_end_offset: usize = 0;
21498            if 1 > max_ordinal {
21499                return Ok(());
21500            }
21501
21502            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
21503            // are envelope_size bytes.
21504            let cur_offset: usize = (1 - 1) * envelope_size;
21505
21506            // Zero reserved fields.
21507            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
21508
21509            // Safety:
21510            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
21511            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
21512            //   envelope_size bytes, there is always sufficient room.
21513            fidl::encoding::encode_in_envelope_optional::<u32, D>(
21514                self.fresh_count.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
21515                encoder,
21516                offset + cur_offset,
21517                depth,
21518            )?;
21519
21520            _prev_end_offset = cur_offset + envelope_size;
21521            if 2 > max_ordinal {
21522                return Ok(());
21523            }
21524
21525            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
21526            // are envelope_size bytes.
21527            let cur_offset: usize = (2 - 1) * envelope_size;
21528
21529            // Zero reserved fields.
21530            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
21531
21532            // Safety:
21533            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
21534            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
21535            //   envelope_size bytes, there is always sufficient room.
21536            fidl::encoding::encode_in_envelope_optional::<u32, D>(
21537                self.deleted_count.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
21538                encoder,
21539                offset + cur_offset,
21540                depth,
21541            )?;
21542
21543            _prev_end_offset = cur_offset + envelope_size;
21544            if 3 > max_ordinal {
21545                return Ok(());
21546            }
21547
21548            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
21549            // are envelope_size bytes.
21550            let cur_offset: usize = (3 - 1) * envelope_size;
21551
21552            // Zero reserved fields.
21553            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
21554
21555            // Safety:
21556            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
21557            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
21558            //   envelope_size bytes, there is always sufficient room.
21559            fidl::encoding::encode_in_envelope_optional::<i64, D>(
21560                self.lease_time_total
21561                    .as_ref()
21562                    .map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
21563                encoder,
21564                offset + cur_offset,
21565                depth,
21566            )?;
21567
21568            _prev_end_offset = cur_offset + envelope_size;
21569            if 4 > max_ordinal {
21570                return Ok(());
21571            }
21572
21573            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
21574            // are envelope_size bytes.
21575            let cur_offset: usize = (4 - 1) * envelope_size;
21576
21577            // Zero reserved fields.
21578            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
21579
21580            // Safety:
21581            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
21582            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
21583            //   envelope_size bytes, there is always sufficient room.
21584            fidl::encoding::encode_in_envelope_optional::<i64, D>(
21585                self.key_lease_time_total
21586                    .as_ref()
21587                    .map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
21588                encoder,
21589                offset + cur_offset,
21590                depth,
21591            )?;
21592
21593            _prev_end_offset = cur_offset + envelope_size;
21594            if 5 > max_ordinal {
21595                return Ok(());
21596            }
21597
21598            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
21599            // are envelope_size bytes.
21600            let cur_offset: usize = (5 - 1) * envelope_size;
21601
21602            // Zero reserved fields.
21603            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
21604
21605            // Safety:
21606            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
21607            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
21608            //   envelope_size bytes, there is always sufficient room.
21609            fidl::encoding::encode_in_envelope_optional::<i64, D>(
21610                self.remaining_lease_time_total
21611                    .as_ref()
21612                    .map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
21613                encoder,
21614                offset + cur_offset,
21615                depth,
21616            )?;
21617
21618            _prev_end_offset = cur_offset + envelope_size;
21619            if 6 > max_ordinal {
21620                return Ok(());
21621            }
21622
21623            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
21624            // are envelope_size bytes.
21625            let cur_offset: usize = (6 - 1) * envelope_size;
21626
21627            // Zero reserved fields.
21628            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
21629
21630            // Safety:
21631            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
21632            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
21633            //   envelope_size bytes, there is always sufficient room.
21634            fidl::encoding::encode_in_envelope_optional::<i64, D>(
21635                self.remaining_key_lease_time_total
21636                    .as_ref()
21637                    .map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
21638                encoder,
21639                offset + cur_offset,
21640                depth,
21641            )?;
21642
21643            _prev_end_offset = cur_offset + envelope_size;
21644
21645            Ok(())
21646        }
21647    }
21648
21649    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SrpServerRegistration {
21650        #[inline(always)]
21651        fn new_empty() -> Self {
21652            Self::default()
21653        }
21654
21655        unsafe fn decode(
21656            &mut self,
21657            decoder: &mut fidl::encoding::Decoder<'_, D>,
21658            offset: usize,
21659            mut depth: fidl::encoding::Depth,
21660        ) -> fidl::Result<()> {
21661            decoder.debug_check_bounds::<Self>(offset);
21662            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
21663                None => return Err(fidl::Error::NotNullable),
21664                Some(len) => len,
21665            };
21666            // Calling decoder.out_of_line_offset(0) is not allowed.
21667            if len == 0 {
21668                return Ok(());
21669            };
21670            depth.increment()?;
21671            let envelope_size = 8;
21672            let bytes_len = len * envelope_size;
21673            let offset = decoder.out_of_line_offset(bytes_len)?;
21674            // Decode the envelope for each type.
21675            let mut _next_ordinal_to_read = 0;
21676            let mut next_offset = offset;
21677            let end_offset = offset + bytes_len;
21678            _next_ordinal_to_read += 1;
21679            if next_offset >= end_offset {
21680                return Ok(());
21681            }
21682
21683            // Decode unknown envelopes for gaps in ordinals.
21684            while _next_ordinal_to_read < 1 {
21685                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
21686                _next_ordinal_to_read += 1;
21687                next_offset += envelope_size;
21688            }
21689
21690            let next_out_of_line = decoder.next_out_of_line();
21691            let handles_before = decoder.remaining_handles();
21692            if let Some((inlined, num_bytes, num_handles)) =
21693                fidl::encoding::decode_envelope_header(decoder, next_offset)?
21694            {
21695                let member_inline_size =
21696                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
21697                if inlined != (member_inline_size <= 4) {
21698                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
21699                }
21700                let inner_offset;
21701                let mut inner_depth = depth.clone();
21702                if inlined {
21703                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
21704                    inner_offset = next_offset;
21705                } else {
21706                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
21707                    inner_depth.increment()?;
21708                }
21709                let val_ref = self.fresh_count.get_or_insert_with(|| fidl::new_empty!(u32, D));
21710                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
21711                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
21712                {
21713                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
21714                }
21715                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
21716                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
21717                }
21718            }
21719
21720            next_offset += envelope_size;
21721            _next_ordinal_to_read += 1;
21722            if next_offset >= end_offset {
21723                return Ok(());
21724            }
21725
21726            // Decode unknown envelopes for gaps in ordinals.
21727            while _next_ordinal_to_read < 2 {
21728                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
21729                _next_ordinal_to_read += 1;
21730                next_offset += envelope_size;
21731            }
21732
21733            let next_out_of_line = decoder.next_out_of_line();
21734            let handles_before = decoder.remaining_handles();
21735            if let Some((inlined, num_bytes, num_handles)) =
21736                fidl::encoding::decode_envelope_header(decoder, next_offset)?
21737            {
21738                let member_inline_size =
21739                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
21740                if inlined != (member_inline_size <= 4) {
21741                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
21742                }
21743                let inner_offset;
21744                let mut inner_depth = depth.clone();
21745                if inlined {
21746                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
21747                    inner_offset = next_offset;
21748                } else {
21749                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
21750                    inner_depth.increment()?;
21751                }
21752                let val_ref = self.deleted_count.get_or_insert_with(|| fidl::new_empty!(u32, D));
21753                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
21754                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
21755                {
21756                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
21757                }
21758                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
21759                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
21760                }
21761            }
21762
21763            next_offset += envelope_size;
21764            _next_ordinal_to_read += 1;
21765            if next_offset >= end_offset {
21766                return Ok(());
21767            }
21768
21769            // Decode unknown envelopes for gaps in ordinals.
21770            while _next_ordinal_to_read < 3 {
21771                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
21772                _next_ordinal_to_read += 1;
21773                next_offset += envelope_size;
21774            }
21775
21776            let next_out_of_line = decoder.next_out_of_line();
21777            let handles_before = decoder.remaining_handles();
21778            if let Some((inlined, num_bytes, num_handles)) =
21779                fidl::encoding::decode_envelope_header(decoder, next_offset)?
21780            {
21781                let member_inline_size =
21782                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
21783                if inlined != (member_inline_size <= 4) {
21784                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
21785                }
21786                let inner_offset;
21787                let mut inner_depth = depth.clone();
21788                if inlined {
21789                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
21790                    inner_offset = next_offset;
21791                } else {
21792                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
21793                    inner_depth.increment()?;
21794                }
21795                let val_ref = self.lease_time_total.get_or_insert_with(|| fidl::new_empty!(i64, D));
21796                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
21797                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
21798                {
21799                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
21800                }
21801                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
21802                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
21803                }
21804            }
21805
21806            next_offset += envelope_size;
21807            _next_ordinal_to_read += 1;
21808            if next_offset >= end_offset {
21809                return Ok(());
21810            }
21811
21812            // Decode unknown envelopes for gaps in ordinals.
21813            while _next_ordinal_to_read < 4 {
21814                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
21815                _next_ordinal_to_read += 1;
21816                next_offset += envelope_size;
21817            }
21818
21819            let next_out_of_line = decoder.next_out_of_line();
21820            let handles_before = decoder.remaining_handles();
21821            if let Some((inlined, num_bytes, num_handles)) =
21822                fidl::encoding::decode_envelope_header(decoder, next_offset)?
21823            {
21824                let member_inline_size =
21825                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
21826                if inlined != (member_inline_size <= 4) {
21827                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
21828                }
21829                let inner_offset;
21830                let mut inner_depth = depth.clone();
21831                if inlined {
21832                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
21833                    inner_offset = next_offset;
21834                } else {
21835                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
21836                    inner_depth.increment()?;
21837                }
21838                let val_ref =
21839                    self.key_lease_time_total.get_or_insert_with(|| fidl::new_empty!(i64, D));
21840                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
21841                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
21842                {
21843                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
21844                }
21845                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
21846                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
21847                }
21848            }
21849
21850            next_offset += envelope_size;
21851            _next_ordinal_to_read += 1;
21852            if next_offset >= end_offset {
21853                return Ok(());
21854            }
21855
21856            // Decode unknown envelopes for gaps in ordinals.
21857            while _next_ordinal_to_read < 5 {
21858                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
21859                _next_ordinal_to_read += 1;
21860                next_offset += envelope_size;
21861            }
21862
21863            let next_out_of_line = decoder.next_out_of_line();
21864            let handles_before = decoder.remaining_handles();
21865            if let Some((inlined, num_bytes, num_handles)) =
21866                fidl::encoding::decode_envelope_header(decoder, next_offset)?
21867            {
21868                let member_inline_size =
21869                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
21870                if inlined != (member_inline_size <= 4) {
21871                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
21872                }
21873                let inner_offset;
21874                let mut inner_depth = depth.clone();
21875                if inlined {
21876                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
21877                    inner_offset = next_offset;
21878                } else {
21879                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
21880                    inner_depth.increment()?;
21881                }
21882                let val_ref =
21883                    self.remaining_lease_time_total.get_or_insert_with(|| fidl::new_empty!(i64, D));
21884                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
21885                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
21886                {
21887                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
21888                }
21889                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
21890                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
21891                }
21892            }
21893
21894            next_offset += envelope_size;
21895            _next_ordinal_to_read += 1;
21896            if next_offset >= end_offset {
21897                return Ok(());
21898            }
21899
21900            // Decode unknown envelopes for gaps in ordinals.
21901            while _next_ordinal_to_read < 6 {
21902                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
21903                _next_ordinal_to_read += 1;
21904                next_offset += envelope_size;
21905            }
21906
21907            let next_out_of_line = decoder.next_out_of_line();
21908            let handles_before = decoder.remaining_handles();
21909            if let Some((inlined, num_bytes, num_handles)) =
21910                fidl::encoding::decode_envelope_header(decoder, next_offset)?
21911            {
21912                let member_inline_size =
21913                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
21914                if inlined != (member_inline_size <= 4) {
21915                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
21916                }
21917                let inner_offset;
21918                let mut inner_depth = depth.clone();
21919                if inlined {
21920                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
21921                    inner_offset = next_offset;
21922                } else {
21923                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
21924                    inner_depth.increment()?;
21925                }
21926                let val_ref = self
21927                    .remaining_key_lease_time_total
21928                    .get_or_insert_with(|| fidl::new_empty!(i64, D));
21929                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
21930                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
21931                {
21932                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
21933                }
21934                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
21935                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
21936                }
21937            }
21938
21939            next_offset += envelope_size;
21940
21941            // Decode the remaining unknown envelopes.
21942            while next_offset < end_offset {
21943                _next_ordinal_to_read += 1;
21944                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
21945                next_offset += envelope_size;
21946            }
21947
21948            Ok(())
21949        }
21950    }
21951
21952    impl SrpServerResponseCounters {
21953        #[inline(always)]
21954        fn max_ordinal_present(&self) -> u64 {
21955            if let Some(_) = self.other_response {
21956                return 6;
21957            }
21958            if let Some(_) = self.refused_response {
21959                return 5;
21960            }
21961            if let Some(_) = self.name_exists_response {
21962                return 4;
21963            }
21964            if let Some(_) = self.format_error_response {
21965                return 3;
21966            }
21967            if let Some(_) = self.server_failure_response {
21968                return 2;
21969            }
21970            if let Some(_) = self.success_response {
21971                return 1;
21972            }
21973            0
21974        }
21975    }
21976
21977    impl fidl::encoding::ValueTypeMarker for SrpServerResponseCounters {
21978        type Borrowed<'a> = &'a Self;
21979        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
21980            value
21981        }
21982    }
21983
21984    unsafe impl fidl::encoding::TypeMarker for SrpServerResponseCounters {
21985        type Owned = Self;
21986
21987        #[inline(always)]
21988        fn inline_align(_context: fidl::encoding::Context) -> usize {
21989            8
21990        }
21991
21992        #[inline(always)]
21993        fn inline_size(_context: fidl::encoding::Context) -> usize {
21994            16
21995        }
21996    }
21997
21998    unsafe impl<D: fidl::encoding::ResourceDialect>
21999        fidl::encoding::Encode<SrpServerResponseCounters, D> for &SrpServerResponseCounters
22000    {
22001        unsafe fn encode(
22002            self,
22003            encoder: &mut fidl::encoding::Encoder<'_, D>,
22004            offset: usize,
22005            mut depth: fidl::encoding::Depth,
22006        ) -> fidl::Result<()> {
22007            encoder.debug_check_bounds::<SrpServerResponseCounters>(offset);
22008            // Vector header
22009            let max_ordinal: u64 = self.max_ordinal_present();
22010            encoder.write_num(max_ordinal, offset);
22011            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
22012            // Calling encoder.out_of_line_offset(0) is not allowed.
22013            if max_ordinal == 0 {
22014                return Ok(());
22015            }
22016            depth.increment()?;
22017            let envelope_size = 8;
22018            let bytes_len = max_ordinal as usize * envelope_size;
22019            #[allow(unused_variables)]
22020            let offset = encoder.out_of_line_offset(bytes_len);
22021            let mut _prev_end_offset: usize = 0;
22022            if 1 > max_ordinal {
22023                return Ok(());
22024            }
22025
22026            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
22027            // are envelope_size bytes.
22028            let cur_offset: usize = (1 - 1) * envelope_size;
22029
22030            // Zero reserved fields.
22031            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
22032
22033            // Safety:
22034            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
22035            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
22036            //   envelope_size bytes, there is always sufficient room.
22037            fidl::encoding::encode_in_envelope_optional::<u32, D>(
22038                self.success_response
22039                    .as_ref()
22040                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
22041                encoder,
22042                offset + cur_offset,
22043                depth,
22044            )?;
22045
22046            _prev_end_offset = cur_offset + envelope_size;
22047            if 2 > max_ordinal {
22048                return Ok(());
22049            }
22050
22051            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
22052            // are envelope_size bytes.
22053            let cur_offset: usize = (2 - 1) * envelope_size;
22054
22055            // Zero reserved fields.
22056            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
22057
22058            // Safety:
22059            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
22060            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
22061            //   envelope_size bytes, there is always sufficient room.
22062            fidl::encoding::encode_in_envelope_optional::<u32, D>(
22063                self.server_failure_response
22064                    .as_ref()
22065                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
22066                encoder,
22067                offset + cur_offset,
22068                depth,
22069            )?;
22070
22071            _prev_end_offset = cur_offset + envelope_size;
22072            if 3 > max_ordinal {
22073                return Ok(());
22074            }
22075
22076            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
22077            // are envelope_size bytes.
22078            let cur_offset: usize = (3 - 1) * envelope_size;
22079
22080            // Zero reserved fields.
22081            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
22082
22083            // Safety:
22084            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
22085            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
22086            //   envelope_size bytes, there is always sufficient room.
22087            fidl::encoding::encode_in_envelope_optional::<u32, D>(
22088                self.format_error_response
22089                    .as_ref()
22090                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
22091                encoder,
22092                offset + cur_offset,
22093                depth,
22094            )?;
22095
22096            _prev_end_offset = cur_offset + envelope_size;
22097            if 4 > max_ordinal {
22098                return Ok(());
22099            }
22100
22101            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
22102            // are envelope_size bytes.
22103            let cur_offset: usize = (4 - 1) * envelope_size;
22104
22105            // Zero reserved fields.
22106            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
22107
22108            // Safety:
22109            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
22110            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
22111            //   envelope_size bytes, there is always sufficient room.
22112            fidl::encoding::encode_in_envelope_optional::<u32, D>(
22113                self.name_exists_response
22114                    .as_ref()
22115                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
22116                encoder,
22117                offset + cur_offset,
22118                depth,
22119            )?;
22120
22121            _prev_end_offset = cur_offset + envelope_size;
22122            if 5 > max_ordinal {
22123                return Ok(());
22124            }
22125
22126            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
22127            // are envelope_size bytes.
22128            let cur_offset: usize = (5 - 1) * envelope_size;
22129
22130            // Zero reserved fields.
22131            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
22132
22133            // Safety:
22134            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
22135            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
22136            //   envelope_size bytes, there is always sufficient room.
22137            fidl::encoding::encode_in_envelope_optional::<u32, D>(
22138                self.refused_response
22139                    .as_ref()
22140                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
22141                encoder,
22142                offset + cur_offset,
22143                depth,
22144            )?;
22145
22146            _prev_end_offset = cur_offset + envelope_size;
22147            if 6 > max_ordinal {
22148                return Ok(());
22149            }
22150
22151            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
22152            // are envelope_size bytes.
22153            let cur_offset: usize = (6 - 1) * envelope_size;
22154
22155            // Zero reserved fields.
22156            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
22157
22158            // Safety:
22159            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
22160            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
22161            //   envelope_size bytes, there is always sufficient room.
22162            fidl::encoding::encode_in_envelope_optional::<u32, D>(
22163                self.other_response.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
22164                encoder,
22165                offset + cur_offset,
22166                depth,
22167            )?;
22168
22169            _prev_end_offset = cur_offset + envelope_size;
22170
22171            Ok(())
22172        }
22173    }
22174
22175    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
22176        for SrpServerResponseCounters
22177    {
22178        #[inline(always)]
22179        fn new_empty() -> Self {
22180            Self::default()
22181        }
22182
22183        unsafe fn decode(
22184            &mut self,
22185            decoder: &mut fidl::encoding::Decoder<'_, D>,
22186            offset: usize,
22187            mut depth: fidl::encoding::Depth,
22188        ) -> fidl::Result<()> {
22189            decoder.debug_check_bounds::<Self>(offset);
22190            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
22191                None => return Err(fidl::Error::NotNullable),
22192                Some(len) => len,
22193            };
22194            // Calling decoder.out_of_line_offset(0) is not allowed.
22195            if len == 0 {
22196                return Ok(());
22197            };
22198            depth.increment()?;
22199            let envelope_size = 8;
22200            let bytes_len = len * envelope_size;
22201            let offset = decoder.out_of_line_offset(bytes_len)?;
22202            // Decode the envelope for each type.
22203            let mut _next_ordinal_to_read = 0;
22204            let mut next_offset = offset;
22205            let end_offset = offset + bytes_len;
22206            _next_ordinal_to_read += 1;
22207            if next_offset >= end_offset {
22208                return Ok(());
22209            }
22210
22211            // Decode unknown envelopes for gaps in ordinals.
22212            while _next_ordinal_to_read < 1 {
22213                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
22214                _next_ordinal_to_read += 1;
22215                next_offset += envelope_size;
22216            }
22217
22218            let next_out_of_line = decoder.next_out_of_line();
22219            let handles_before = decoder.remaining_handles();
22220            if let Some((inlined, num_bytes, num_handles)) =
22221                fidl::encoding::decode_envelope_header(decoder, next_offset)?
22222            {
22223                let member_inline_size =
22224                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
22225                if inlined != (member_inline_size <= 4) {
22226                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
22227                }
22228                let inner_offset;
22229                let mut inner_depth = depth.clone();
22230                if inlined {
22231                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
22232                    inner_offset = next_offset;
22233                } else {
22234                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
22235                    inner_depth.increment()?;
22236                }
22237                let val_ref = self.success_response.get_or_insert_with(|| fidl::new_empty!(u32, D));
22238                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
22239                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
22240                {
22241                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
22242                }
22243                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
22244                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
22245                }
22246            }
22247
22248            next_offset += envelope_size;
22249            _next_ordinal_to_read += 1;
22250            if next_offset >= end_offset {
22251                return Ok(());
22252            }
22253
22254            // Decode unknown envelopes for gaps in ordinals.
22255            while _next_ordinal_to_read < 2 {
22256                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
22257                _next_ordinal_to_read += 1;
22258                next_offset += envelope_size;
22259            }
22260
22261            let next_out_of_line = decoder.next_out_of_line();
22262            let handles_before = decoder.remaining_handles();
22263            if let Some((inlined, num_bytes, num_handles)) =
22264                fidl::encoding::decode_envelope_header(decoder, next_offset)?
22265            {
22266                let member_inline_size =
22267                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
22268                if inlined != (member_inline_size <= 4) {
22269                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
22270                }
22271                let inner_offset;
22272                let mut inner_depth = depth.clone();
22273                if inlined {
22274                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
22275                    inner_offset = next_offset;
22276                } else {
22277                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
22278                    inner_depth.increment()?;
22279                }
22280                let val_ref =
22281                    self.server_failure_response.get_or_insert_with(|| fidl::new_empty!(u32, D));
22282                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
22283                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
22284                {
22285                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
22286                }
22287                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
22288                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
22289                }
22290            }
22291
22292            next_offset += envelope_size;
22293            _next_ordinal_to_read += 1;
22294            if next_offset >= end_offset {
22295                return Ok(());
22296            }
22297
22298            // Decode unknown envelopes for gaps in ordinals.
22299            while _next_ordinal_to_read < 3 {
22300                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
22301                _next_ordinal_to_read += 1;
22302                next_offset += envelope_size;
22303            }
22304
22305            let next_out_of_line = decoder.next_out_of_line();
22306            let handles_before = decoder.remaining_handles();
22307            if let Some((inlined, num_bytes, num_handles)) =
22308                fidl::encoding::decode_envelope_header(decoder, next_offset)?
22309            {
22310                let member_inline_size =
22311                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
22312                if inlined != (member_inline_size <= 4) {
22313                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
22314                }
22315                let inner_offset;
22316                let mut inner_depth = depth.clone();
22317                if inlined {
22318                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
22319                    inner_offset = next_offset;
22320                } else {
22321                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
22322                    inner_depth.increment()?;
22323                }
22324                let val_ref =
22325                    self.format_error_response.get_or_insert_with(|| fidl::new_empty!(u32, D));
22326                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
22327                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
22328                {
22329                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
22330                }
22331                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
22332                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
22333                }
22334            }
22335
22336            next_offset += envelope_size;
22337            _next_ordinal_to_read += 1;
22338            if next_offset >= end_offset {
22339                return Ok(());
22340            }
22341
22342            // Decode unknown envelopes for gaps in ordinals.
22343            while _next_ordinal_to_read < 4 {
22344                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
22345                _next_ordinal_to_read += 1;
22346                next_offset += envelope_size;
22347            }
22348
22349            let next_out_of_line = decoder.next_out_of_line();
22350            let handles_before = decoder.remaining_handles();
22351            if let Some((inlined, num_bytes, num_handles)) =
22352                fidl::encoding::decode_envelope_header(decoder, next_offset)?
22353            {
22354                let member_inline_size =
22355                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
22356                if inlined != (member_inline_size <= 4) {
22357                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
22358                }
22359                let inner_offset;
22360                let mut inner_depth = depth.clone();
22361                if inlined {
22362                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
22363                    inner_offset = next_offset;
22364                } else {
22365                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
22366                    inner_depth.increment()?;
22367                }
22368                let val_ref =
22369                    self.name_exists_response.get_or_insert_with(|| fidl::new_empty!(u32, D));
22370                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
22371                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
22372                {
22373                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
22374                }
22375                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
22376                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
22377                }
22378            }
22379
22380            next_offset += envelope_size;
22381            _next_ordinal_to_read += 1;
22382            if next_offset >= end_offset {
22383                return Ok(());
22384            }
22385
22386            // Decode unknown envelopes for gaps in ordinals.
22387            while _next_ordinal_to_read < 5 {
22388                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
22389                _next_ordinal_to_read += 1;
22390                next_offset += envelope_size;
22391            }
22392
22393            let next_out_of_line = decoder.next_out_of_line();
22394            let handles_before = decoder.remaining_handles();
22395            if let Some((inlined, num_bytes, num_handles)) =
22396                fidl::encoding::decode_envelope_header(decoder, next_offset)?
22397            {
22398                let member_inline_size =
22399                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
22400                if inlined != (member_inline_size <= 4) {
22401                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
22402                }
22403                let inner_offset;
22404                let mut inner_depth = depth.clone();
22405                if inlined {
22406                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
22407                    inner_offset = next_offset;
22408                } else {
22409                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
22410                    inner_depth.increment()?;
22411                }
22412                let val_ref = self.refused_response.get_or_insert_with(|| fidl::new_empty!(u32, D));
22413                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
22414                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
22415                {
22416                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
22417                }
22418                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
22419                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
22420                }
22421            }
22422
22423            next_offset += envelope_size;
22424            _next_ordinal_to_read += 1;
22425            if next_offset >= end_offset {
22426                return Ok(());
22427            }
22428
22429            // Decode unknown envelopes for gaps in ordinals.
22430            while _next_ordinal_to_read < 6 {
22431                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
22432                _next_ordinal_to_read += 1;
22433                next_offset += envelope_size;
22434            }
22435
22436            let next_out_of_line = decoder.next_out_of_line();
22437            let handles_before = decoder.remaining_handles();
22438            if let Some((inlined, num_bytes, num_handles)) =
22439                fidl::encoding::decode_envelope_header(decoder, next_offset)?
22440            {
22441                let member_inline_size =
22442                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
22443                if inlined != (member_inline_size <= 4) {
22444                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
22445                }
22446                let inner_offset;
22447                let mut inner_depth = depth.clone();
22448                if inlined {
22449                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
22450                    inner_offset = next_offset;
22451                } else {
22452                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
22453                    inner_depth.increment()?;
22454                }
22455                let val_ref = self.other_response.get_or_insert_with(|| fidl::new_empty!(u32, D));
22456                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
22457                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
22458                {
22459                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
22460                }
22461                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
22462                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
22463                }
22464            }
22465
22466            next_offset += envelope_size;
22467
22468            // Decode the remaining unknown envelopes.
22469            while next_offset < end_offset {
22470                _next_ordinal_to_read += 1;
22471                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
22472                next_offset += envelope_size;
22473            }
22474
22475            Ok(())
22476        }
22477    }
22478
22479    impl SrpServerService {
22480        #[inline(always)]
22481        fn max_ordinal_present(&self) -> u64 {
22482            if let Some(_) = self.host {
22483                return 11;
22484            }
22485            if let Some(_) = self.txt_data {
22486                return 10;
22487            }
22488            if let Some(_) = self.key_lease {
22489                return 9;
22490            }
22491            if let Some(_) = self.lease {
22492                return 8;
22493            }
22494            if let Some(_) = self.ttl {
22495                return 7;
22496            }
22497            if let Some(_) = self.weight {
22498                return 6;
22499            }
22500            if let Some(_) = self.priority {
22501                return 5;
22502            }
22503            if let Some(_) = self.port {
22504                return 4;
22505            }
22506            if let Some(_) = self.subtypes {
22507                return 3;
22508            }
22509            if let Some(_) = self.deleted {
22510                return 2;
22511            }
22512            if let Some(_) = self.instance_name {
22513                return 1;
22514            }
22515            0
22516        }
22517    }
22518
22519    impl fidl::encoding::ValueTypeMarker for SrpServerService {
22520        type Borrowed<'a> = &'a Self;
22521        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
22522            value
22523        }
22524    }
22525
22526    unsafe impl fidl::encoding::TypeMarker for SrpServerService {
22527        type Owned = Self;
22528
22529        #[inline(always)]
22530        fn inline_align(_context: fidl::encoding::Context) -> usize {
22531            8
22532        }
22533
22534        #[inline(always)]
22535        fn inline_size(_context: fidl::encoding::Context) -> usize {
22536            16
22537        }
22538    }
22539
22540    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<SrpServerService, D>
22541        for &SrpServerService
22542    {
22543        unsafe fn encode(
22544            self,
22545            encoder: &mut fidl::encoding::Encoder<'_, D>,
22546            offset: usize,
22547            mut depth: fidl::encoding::Depth,
22548        ) -> fidl::Result<()> {
22549            encoder.debug_check_bounds::<SrpServerService>(offset);
22550            // Vector header
22551            let max_ordinal: u64 = self.max_ordinal_present();
22552            encoder.write_num(max_ordinal, offset);
22553            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
22554            // Calling encoder.out_of_line_offset(0) is not allowed.
22555            if max_ordinal == 0 {
22556                return Ok(());
22557            }
22558            depth.increment()?;
22559            let envelope_size = 8;
22560            let bytes_len = max_ordinal as usize * envelope_size;
22561            #[allow(unused_variables)]
22562            let offset = encoder.out_of_line_offset(bytes_len);
22563            let mut _prev_end_offset: usize = 0;
22564            if 1 > max_ordinal {
22565                return Ok(());
22566            }
22567
22568            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
22569            // are envelope_size bytes.
22570            let cur_offset: usize = (1 - 1) * envelope_size;
22571
22572            // Zero reserved fields.
22573            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
22574
22575            // Safety:
22576            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
22577            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
22578            //   envelope_size bytes, there is always sufficient room.
22579            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<255>, D>(
22580                self.instance_name.as_ref().map(
22581                    <fidl::encoding::BoundedString<255> as fidl::encoding::ValueTypeMarker>::borrow,
22582                ),
22583                encoder,
22584                offset + cur_offset,
22585                depth,
22586            )?;
22587
22588            _prev_end_offset = cur_offset + envelope_size;
22589            if 2 > max_ordinal {
22590                return Ok(());
22591            }
22592
22593            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
22594            // are envelope_size bytes.
22595            let cur_offset: usize = (2 - 1) * envelope_size;
22596
22597            // Zero reserved fields.
22598            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
22599
22600            // Safety:
22601            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
22602            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
22603            //   envelope_size bytes, there is always sufficient room.
22604            fidl::encoding::encode_in_envelope_optional::<bool, D>(
22605                self.deleted.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
22606                encoder,
22607                offset + cur_offset,
22608                depth,
22609            )?;
22610
22611            _prev_end_offset = cur_offset + envelope_size;
22612            if 3 > max_ordinal {
22613                return Ok(());
22614            }
22615
22616            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
22617            // are envelope_size bytes.
22618            let cur_offset: usize = (3 - 1) * envelope_size;
22619
22620            // Zero reserved fields.
22621            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
22622
22623            // Safety:
22624            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
22625            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
22626            //   envelope_size bytes, there is always sufficient room.
22627            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<fidl::encoding::BoundedString<63>, 6>, D>(
22628            self.subtypes.as_ref().map(<fidl::encoding::Vector<fidl::encoding::BoundedString<63>, 6> as fidl::encoding::ValueTypeMarker>::borrow),
22629            encoder, offset + cur_offset, depth
22630        )?;
22631
22632            _prev_end_offset = cur_offset + envelope_size;
22633            if 4 > max_ordinal {
22634                return Ok(());
22635            }
22636
22637            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
22638            // are envelope_size bytes.
22639            let cur_offset: usize = (4 - 1) * envelope_size;
22640
22641            // Zero reserved fields.
22642            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
22643
22644            // Safety:
22645            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
22646            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
22647            //   envelope_size bytes, there is always sufficient room.
22648            fidl::encoding::encode_in_envelope_optional::<u16, D>(
22649                self.port.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
22650                encoder,
22651                offset + cur_offset,
22652                depth,
22653            )?;
22654
22655            _prev_end_offset = cur_offset + envelope_size;
22656            if 5 > max_ordinal {
22657                return Ok(());
22658            }
22659
22660            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
22661            // are envelope_size bytes.
22662            let cur_offset: usize = (5 - 1) * envelope_size;
22663
22664            // Zero reserved fields.
22665            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
22666
22667            // Safety:
22668            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
22669            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
22670            //   envelope_size bytes, there is always sufficient room.
22671            fidl::encoding::encode_in_envelope_optional::<u16, D>(
22672                self.priority.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
22673                encoder,
22674                offset + cur_offset,
22675                depth,
22676            )?;
22677
22678            _prev_end_offset = cur_offset + envelope_size;
22679            if 6 > max_ordinal {
22680                return Ok(());
22681            }
22682
22683            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
22684            // are envelope_size bytes.
22685            let cur_offset: usize = (6 - 1) * envelope_size;
22686
22687            // Zero reserved fields.
22688            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
22689
22690            // Safety:
22691            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
22692            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
22693            //   envelope_size bytes, there is always sufficient room.
22694            fidl::encoding::encode_in_envelope_optional::<u16, D>(
22695                self.weight.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
22696                encoder,
22697                offset + cur_offset,
22698                depth,
22699            )?;
22700
22701            _prev_end_offset = cur_offset + envelope_size;
22702            if 7 > max_ordinal {
22703                return Ok(());
22704            }
22705
22706            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
22707            // are envelope_size bytes.
22708            let cur_offset: usize = (7 - 1) * envelope_size;
22709
22710            // Zero reserved fields.
22711            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
22712
22713            // Safety:
22714            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
22715            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
22716            //   envelope_size bytes, there is always sufficient room.
22717            fidl::encoding::encode_in_envelope_optional::<i64, D>(
22718                self.ttl.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
22719                encoder,
22720                offset + cur_offset,
22721                depth,
22722            )?;
22723
22724            _prev_end_offset = cur_offset + envelope_size;
22725            if 8 > max_ordinal {
22726                return Ok(());
22727            }
22728
22729            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
22730            // are envelope_size bytes.
22731            let cur_offset: usize = (8 - 1) * envelope_size;
22732
22733            // Zero reserved fields.
22734            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
22735
22736            // Safety:
22737            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
22738            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
22739            //   envelope_size bytes, there is always sufficient room.
22740            fidl::encoding::encode_in_envelope_optional::<i64, D>(
22741                self.lease.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
22742                encoder,
22743                offset + cur_offset,
22744                depth,
22745            )?;
22746
22747            _prev_end_offset = cur_offset + envelope_size;
22748            if 9 > max_ordinal {
22749                return Ok(());
22750            }
22751
22752            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
22753            // are envelope_size bytes.
22754            let cur_offset: usize = (9 - 1) * envelope_size;
22755
22756            // Zero reserved fields.
22757            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
22758
22759            // Safety:
22760            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
22761            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
22762            //   envelope_size bytes, there is always sufficient room.
22763            fidl::encoding::encode_in_envelope_optional::<i64, D>(
22764                self.key_lease.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
22765                encoder,
22766                offset + cur_offset,
22767                depth,
22768            )?;
22769
22770            _prev_end_offset = cur_offset + envelope_size;
22771            if 10 > max_ordinal {
22772                return Ok(());
22773            }
22774
22775            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
22776            // are envelope_size bytes.
22777            let cur_offset: usize = (10 - 1) * envelope_size;
22778
22779            // Zero reserved fields.
22780            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
22781
22782            // Safety:
22783            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
22784            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
22785            //   envelope_size bytes, there is always sufficient room.
22786            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<DnsTxtEntry>, D>(
22787            self.txt_data.as_ref().map(<fidl::encoding::UnboundedVector<DnsTxtEntry> as fidl::encoding::ValueTypeMarker>::borrow),
22788            encoder, offset + cur_offset, depth
22789        )?;
22790
22791            _prev_end_offset = cur_offset + envelope_size;
22792            if 11 > max_ordinal {
22793                return Ok(());
22794            }
22795
22796            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
22797            // are envelope_size bytes.
22798            let cur_offset: usize = (11 - 1) * envelope_size;
22799
22800            // Zero reserved fields.
22801            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
22802
22803            // Safety:
22804            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
22805            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
22806            //   envelope_size bytes, there is always sufficient room.
22807            fidl::encoding::encode_in_envelope_optional::<SrpServerHost, D>(
22808                self.host.as_ref().map(<SrpServerHost as fidl::encoding::ValueTypeMarker>::borrow),
22809                encoder,
22810                offset + cur_offset,
22811                depth,
22812            )?;
22813
22814            _prev_end_offset = cur_offset + envelope_size;
22815
22816            Ok(())
22817        }
22818    }
22819
22820    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SrpServerService {
22821        #[inline(always)]
22822        fn new_empty() -> Self {
22823            Self::default()
22824        }
22825
22826        unsafe fn decode(
22827            &mut self,
22828            decoder: &mut fidl::encoding::Decoder<'_, D>,
22829            offset: usize,
22830            mut depth: fidl::encoding::Depth,
22831        ) -> fidl::Result<()> {
22832            decoder.debug_check_bounds::<Self>(offset);
22833            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
22834                None => return Err(fidl::Error::NotNullable),
22835                Some(len) => len,
22836            };
22837            // Calling decoder.out_of_line_offset(0) is not allowed.
22838            if len == 0 {
22839                return Ok(());
22840            };
22841            depth.increment()?;
22842            let envelope_size = 8;
22843            let bytes_len = len * envelope_size;
22844            let offset = decoder.out_of_line_offset(bytes_len)?;
22845            // Decode the envelope for each type.
22846            let mut _next_ordinal_to_read = 0;
22847            let mut next_offset = offset;
22848            let end_offset = offset + bytes_len;
22849            _next_ordinal_to_read += 1;
22850            if next_offset >= end_offset {
22851                return Ok(());
22852            }
22853
22854            // Decode unknown envelopes for gaps in ordinals.
22855            while _next_ordinal_to_read < 1 {
22856                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
22857                _next_ordinal_to_read += 1;
22858                next_offset += envelope_size;
22859            }
22860
22861            let next_out_of_line = decoder.next_out_of_line();
22862            let handles_before = decoder.remaining_handles();
22863            if let Some((inlined, num_bytes, num_handles)) =
22864                fidl::encoding::decode_envelope_header(decoder, next_offset)?
22865            {
22866                let member_inline_size =
22867                    <fidl::encoding::BoundedString<255> as fidl::encoding::TypeMarker>::inline_size(
22868                        decoder.context,
22869                    );
22870                if inlined != (member_inline_size <= 4) {
22871                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
22872                }
22873                let inner_offset;
22874                let mut inner_depth = depth.clone();
22875                if inlined {
22876                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
22877                    inner_offset = next_offset;
22878                } else {
22879                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
22880                    inner_depth.increment()?;
22881                }
22882                let val_ref = self
22883                    .instance_name
22884                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<255>, D));
22885                fidl::decode!(
22886                    fidl::encoding::BoundedString<255>,
22887                    D,
22888                    val_ref,
22889                    decoder,
22890                    inner_offset,
22891                    inner_depth
22892                )?;
22893                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
22894                {
22895                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
22896                }
22897                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
22898                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
22899                }
22900            }
22901
22902            next_offset += envelope_size;
22903            _next_ordinal_to_read += 1;
22904            if next_offset >= end_offset {
22905                return Ok(());
22906            }
22907
22908            // Decode unknown envelopes for gaps in ordinals.
22909            while _next_ordinal_to_read < 2 {
22910                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
22911                _next_ordinal_to_read += 1;
22912                next_offset += envelope_size;
22913            }
22914
22915            let next_out_of_line = decoder.next_out_of_line();
22916            let handles_before = decoder.remaining_handles();
22917            if let Some((inlined, num_bytes, num_handles)) =
22918                fidl::encoding::decode_envelope_header(decoder, next_offset)?
22919            {
22920                let member_inline_size =
22921                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
22922                if inlined != (member_inline_size <= 4) {
22923                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
22924                }
22925                let inner_offset;
22926                let mut inner_depth = depth.clone();
22927                if inlined {
22928                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
22929                    inner_offset = next_offset;
22930                } else {
22931                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
22932                    inner_depth.increment()?;
22933                }
22934                let val_ref = self.deleted.get_or_insert_with(|| fidl::new_empty!(bool, D));
22935                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
22936                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
22937                {
22938                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
22939                }
22940                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
22941                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
22942                }
22943            }
22944
22945            next_offset += envelope_size;
22946            _next_ordinal_to_read += 1;
22947            if next_offset >= end_offset {
22948                return Ok(());
22949            }
22950
22951            // Decode unknown envelopes for gaps in ordinals.
22952            while _next_ordinal_to_read < 3 {
22953                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
22954                _next_ordinal_to_read += 1;
22955                next_offset += envelope_size;
22956            }
22957
22958            let next_out_of_line = decoder.next_out_of_line();
22959            let handles_before = decoder.remaining_handles();
22960            if let Some((inlined, num_bytes, num_handles)) =
22961                fidl::encoding::decode_envelope_header(decoder, next_offset)?
22962            {
22963                let member_inline_size = <fidl::encoding::Vector<
22964                    fidl::encoding::BoundedString<63>,
22965                    6,
22966                > as fidl::encoding::TypeMarker>::inline_size(
22967                    decoder.context
22968                );
22969                if inlined != (member_inline_size <= 4) {
22970                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
22971                }
22972                let inner_offset;
22973                let mut inner_depth = depth.clone();
22974                if inlined {
22975                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
22976                    inner_offset = next_offset;
22977                } else {
22978                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
22979                    inner_depth.increment()?;
22980                }
22981                let val_ref = self.subtypes.get_or_insert_with(|| {
22982                    fidl::new_empty!(
22983                        fidl::encoding::Vector<fidl::encoding::BoundedString<63>, 6>,
22984                        D
22985                    )
22986                });
22987                fidl::decode!(
22988                    fidl::encoding::Vector<fidl::encoding::BoundedString<63>, 6>,
22989                    D,
22990                    val_ref,
22991                    decoder,
22992                    inner_offset,
22993                    inner_depth
22994                )?;
22995                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
22996                {
22997                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
22998                }
22999                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
23000                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
23001                }
23002            }
23003
23004            next_offset += envelope_size;
23005            _next_ordinal_to_read += 1;
23006            if next_offset >= end_offset {
23007                return Ok(());
23008            }
23009
23010            // Decode unknown envelopes for gaps in ordinals.
23011            while _next_ordinal_to_read < 4 {
23012                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
23013                _next_ordinal_to_read += 1;
23014                next_offset += envelope_size;
23015            }
23016
23017            let next_out_of_line = decoder.next_out_of_line();
23018            let handles_before = decoder.remaining_handles();
23019            if let Some((inlined, num_bytes, num_handles)) =
23020                fidl::encoding::decode_envelope_header(decoder, next_offset)?
23021            {
23022                let member_inline_size =
23023                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
23024                if inlined != (member_inline_size <= 4) {
23025                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
23026                }
23027                let inner_offset;
23028                let mut inner_depth = depth.clone();
23029                if inlined {
23030                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
23031                    inner_offset = next_offset;
23032                } else {
23033                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
23034                    inner_depth.increment()?;
23035                }
23036                let val_ref = self.port.get_or_insert_with(|| fidl::new_empty!(u16, D));
23037                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
23038                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
23039                {
23040                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
23041                }
23042                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
23043                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
23044                }
23045            }
23046
23047            next_offset += envelope_size;
23048            _next_ordinal_to_read += 1;
23049            if next_offset >= end_offset {
23050                return Ok(());
23051            }
23052
23053            // Decode unknown envelopes for gaps in ordinals.
23054            while _next_ordinal_to_read < 5 {
23055                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
23056                _next_ordinal_to_read += 1;
23057                next_offset += envelope_size;
23058            }
23059
23060            let next_out_of_line = decoder.next_out_of_line();
23061            let handles_before = decoder.remaining_handles();
23062            if let Some((inlined, num_bytes, num_handles)) =
23063                fidl::encoding::decode_envelope_header(decoder, next_offset)?
23064            {
23065                let member_inline_size =
23066                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
23067                if inlined != (member_inline_size <= 4) {
23068                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
23069                }
23070                let inner_offset;
23071                let mut inner_depth = depth.clone();
23072                if inlined {
23073                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
23074                    inner_offset = next_offset;
23075                } else {
23076                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
23077                    inner_depth.increment()?;
23078                }
23079                let val_ref = self.priority.get_or_insert_with(|| fidl::new_empty!(u16, D));
23080                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
23081                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
23082                {
23083                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
23084                }
23085                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
23086                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
23087                }
23088            }
23089
23090            next_offset += envelope_size;
23091            _next_ordinal_to_read += 1;
23092            if next_offset >= end_offset {
23093                return Ok(());
23094            }
23095
23096            // Decode unknown envelopes for gaps in ordinals.
23097            while _next_ordinal_to_read < 6 {
23098                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
23099                _next_ordinal_to_read += 1;
23100                next_offset += envelope_size;
23101            }
23102
23103            let next_out_of_line = decoder.next_out_of_line();
23104            let handles_before = decoder.remaining_handles();
23105            if let Some((inlined, num_bytes, num_handles)) =
23106                fidl::encoding::decode_envelope_header(decoder, next_offset)?
23107            {
23108                let member_inline_size =
23109                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
23110                if inlined != (member_inline_size <= 4) {
23111                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
23112                }
23113                let inner_offset;
23114                let mut inner_depth = depth.clone();
23115                if inlined {
23116                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
23117                    inner_offset = next_offset;
23118                } else {
23119                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
23120                    inner_depth.increment()?;
23121                }
23122                let val_ref = self.weight.get_or_insert_with(|| fidl::new_empty!(u16, D));
23123                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
23124                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
23125                {
23126                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
23127                }
23128                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
23129                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
23130                }
23131            }
23132
23133            next_offset += envelope_size;
23134            _next_ordinal_to_read += 1;
23135            if next_offset >= end_offset {
23136                return Ok(());
23137            }
23138
23139            // Decode unknown envelopes for gaps in ordinals.
23140            while _next_ordinal_to_read < 7 {
23141                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
23142                _next_ordinal_to_read += 1;
23143                next_offset += envelope_size;
23144            }
23145
23146            let next_out_of_line = decoder.next_out_of_line();
23147            let handles_before = decoder.remaining_handles();
23148            if let Some((inlined, num_bytes, num_handles)) =
23149                fidl::encoding::decode_envelope_header(decoder, next_offset)?
23150            {
23151                let member_inline_size =
23152                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
23153                if inlined != (member_inline_size <= 4) {
23154                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
23155                }
23156                let inner_offset;
23157                let mut inner_depth = depth.clone();
23158                if inlined {
23159                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
23160                    inner_offset = next_offset;
23161                } else {
23162                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
23163                    inner_depth.increment()?;
23164                }
23165                let val_ref = self.ttl.get_or_insert_with(|| fidl::new_empty!(i64, D));
23166                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
23167                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
23168                {
23169                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
23170                }
23171                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
23172                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
23173                }
23174            }
23175
23176            next_offset += envelope_size;
23177            _next_ordinal_to_read += 1;
23178            if next_offset >= end_offset {
23179                return Ok(());
23180            }
23181
23182            // Decode unknown envelopes for gaps in ordinals.
23183            while _next_ordinal_to_read < 8 {
23184                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
23185                _next_ordinal_to_read += 1;
23186                next_offset += envelope_size;
23187            }
23188
23189            let next_out_of_line = decoder.next_out_of_line();
23190            let handles_before = decoder.remaining_handles();
23191            if let Some((inlined, num_bytes, num_handles)) =
23192                fidl::encoding::decode_envelope_header(decoder, next_offset)?
23193            {
23194                let member_inline_size =
23195                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
23196                if inlined != (member_inline_size <= 4) {
23197                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
23198                }
23199                let inner_offset;
23200                let mut inner_depth = depth.clone();
23201                if inlined {
23202                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
23203                    inner_offset = next_offset;
23204                } else {
23205                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
23206                    inner_depth.increment()?;
23207                }
23208                let val_ref = self.lease.get_or_insert_with(|| fidl::new_empty!(i64, D));
23209                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
23210                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
23211                {
23212                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
23213                }
23214                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
23215                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
23216                }
23217            }
23218
23219            next_offset += envelope_size;
23220            _next_ordinal_to_read += 1;
23221            if next_offset >= end_offset {
23222                return Ok(());
23223            }
23224
23225            // Decode unknown envelopes for gaps in ordinals.
23226            while _next_ordinal_to_read < 9 {
23227                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
23228                _next_ordinal_to_read += 1;
23229                next_offset += envelope_size;
23230            }
23231
23232            let next_out_of_line = decoder.next_out_of_line();
23233            let handles_before = decoder.remaining_handles();
23234            if let Some((inlined, num_bytes, num_handles)) =
23235                fidl::encoding::decode_envelope_header(decoder, next_offset)?
23236            {
23237                let member_inline_size =
23238                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
23239                if inlined != (member_inline_size <= 4) {
23240                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
23241                }
23242                let inner_offset;
23243                let mut inner_depth = depth.clone();
23244                if inlined {
23245                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
23246                    inner_offset = next_offset;
23247                } else {
23248                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
23249                    inner_depth.increment()?;
23250                }
23251                let val_ref = self.key_lease.get_or_insert_with(|| fidl::new_empty!(i64, D));
23252                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
23253                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
23254                {
23255                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
23256                }
23257                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
23258                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
23259                }
23260            }
23261
23262            next_offset += envelope_size;
23263            _next_ordinal_to_read += 1;
23264            if next_offset >= end_offset {
23265                return Ok(());
23266            }
23267
23268            // Decode unknown envelopes for gaps in ordinals.
23269            while _next_ordinal_to_read < 10 {
23270                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
23271                _next_ordinal_to_read += 1;
23272                next_offset += envelope_size;
23273            }
23274
23275            let next_out_of_line = decoder.next_out_of_line();
23276            let handles_before = decoder.remaining_handles();
23277            if let Some((inlined, num_bytes, num_handles)) =
23278                fidl::encoding::decode_envelope_header(decoder, next_offset)?
23279            {
23280                let member_inline_size = <fidl::encoding::UnboundedVector<DnsTxtEntry> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
23281                if inlined != (member_inline_size <= 4) {
23282                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
23283                }
23284                let inner_offset;
23285                let mut inner_depth = depth.clone();
23286                if inlined {
23287                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
23288                    inner_offset = next_offset;
23289                } else {
23290                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
23291                    inner_depth.increment()?;
23292                }
23293                let val_ref = self.txt_data.get_or_insert_with(|| {
23294                    fidl::new_empty!(fidl::encoding::UnboundedVector<DnsTxtEntry>, D)
23295                });
23296                fidl::decode!(
23297                    fidl::encoding::UnboundedVector<DnsTxtEntry>,
23298                    D,
23299                    val_ref,
23300                    decoder,
23301                    inner_offset,
23302                    inner_depth
23303                )?;
23304                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
23305                {
23306                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
23307                }
23308                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
23309                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
23310                }
23311            }
23312
23313            next_offset += envelope_size;
23314            _next_ordinal_to_read += 1;
23315            if next_offset >= end_offset {
23316                return Ok(());
23317            }
23318
23319            // Decode unknown envelopes for gaps in ordinals.
23320            while _next_ordinal_to_read < 11 {
23321                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
23322                _next_ordinal_to_read += 1;
23323                next_offset += envelope_size;
23324            }
23325
23326            let next_out_of_line = decoder.next_out_of_line();
23327            let handles_before = decoder.remaining_handles();
23328            if let Some((inlined, num_bytes, num_handles)) =
23329                fidl::encoding::decode_envelope_header(decoder, next_offset)?
23330            {
23331                let member_inline_size =
23332                    <SrpServerHost as fidl::encoding::TypeMarker>::inline_size(decoder.context);
23333                if inlined != (member_inline_size <= 4) {
23334                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
23335                }
23336                let inner_offset;
23337                let mut inner_depth = depth.clone();
23338                if inlined {
23339                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
23340                    inner_offset = next_offset;
23341                } else {
23342                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
23343                    inner_depth.increment()?;
23344                }
23345                let val_ref = self.host.get_or_insert_with(|| fidl::new_empty!(SrpServerHost, D));
23346                fidl::decode!(SrpServerHost, D, val_ref, decoder, inner_offset, inner_depth)?;
23347                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
23348                {
23349                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
23350                }
23351                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
23352                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
23353                }
23354            }
23355
23356            next_offset += envelope_size;
23357
23358            // Decode the remaining unknown envelopes.
23359            while next_offset < end_offset {
23360                _next_ordinal_to_read += 1;
23361                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
23362                next_offset += envelope_size;
23363            }
23364
23365            Ok(())
23366        }
23367    }
23368
23369    impl Telemetry {
23370        #[inline(always)]
23371        fn max_ordinal_present(&self) -> u64 {
23372            if let Some(_) = self.network_data {
23373                return 33;
23374            }
23375            if let Some(_) = self.router_info {
23376                return 32;
23377            }
23378            if let Some(_) = self.multiradio_neighbor_info {
23379                return 31;
23380            }
23381            if let Some(_) = self.active_dataset {
23382                return 30;
23383            }
23384            if let Some(_) = self.border_routing_routers {
23385                return 29;
23386            }
23387            if let Some(_) = self.border_routing_peers {
23388                return 28;
23389            }
23390            if let Some(_) = self.extended_pan_id {
23391                return 27;
23392            }
23393            if let Some(_) = self.multi_ail_detected {
23394                return 26;
23395            }
23396            if let Some(_) = self.border_agent_counters {
23397                return 25;
23398            }
23399            if let Some(_) = self.link_metrics_entries {
23400                return 24;
23401            }
23402            if let Some(_) = self.dhcp6pd_info {
23403                return 23;
23404            }
23405            if let Some(_) = self.upstream_dns_info {
23406                return 22;
23407            }
23408            if let Some(_) = self.trel_peers_info {
23409                return 21;
23410            }
23411            if let Some(_) = self.trel_counters {
23412                return 20;
23413            }
23414            if let Some(_) = self.nat64_info {
23415                return 19;
23416            }
23417            if let Some(_) = self.uptime {
23418                return 18;
23419            }
23420            if let Some(_) = self.leader_data {
23421                return 17;
23422            }
23423            if let Some(_) = self.dnssd_counters {
23424                return 16;
23425            }
23426            if let Some(_) = self.srp_server_info {
23427                return 15;
23428            }
23429            if let Some(_) = self.thread_border_routing_counters {
23430                return 14;
23431            }
23432            if let Some(_) = self.thread_stable_network_data {
23433                return 13;
23434            }
23435            if let Some(_) = self.thread_network_data {
23436                return 12;
23437            }
23438            if let Some(_) = self.thread_stable_network_data_version {
23439                return 11;
23440            }
23441            if let Some(_) = self.thread_network_data_version {
23442                return 10;
23443            }
23444            if let Some(_) = self.thread_rloc {
23445                return 9;
23446            }
23447            if let Some(_) = self.thread_router_id {
23448                return 8;
23449            }
23450            if let Some(_) = self.thread_link_mode {
23451                return 7;
23452            }
23453            if let Some(_) = self.rcp_version {
23454                return 6;
23455            }
23456            if let Some(_) = self.stack_version {
23457                return 5;
23458            }
23459            if let Some(_) = self.partition_id {
23460                return 4;
23461            }
23462            if let Some(_) = self.channel_index {
23463                return 3;
23464            }
23465            if let Some(_) = self.tx_power {
23466                return 2;
23467            }
23468            if let Some(_) = self.rssi {
23469                return 1;
23470            }
23471            0
23472        }
23473    }
23474
23475    impl fidl::encoding::ValueTypeMarker for Telemetry {
23476        type Borrowed<'a> = &'a Self;
23477        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
23478            value
23479        }
23480    }
23481
23482    unsafe impl fidl::encoding::TypeMarker for Telemetry {
23483        type Owned = Self;
23484
23485        #[inline(always)]
23486        fn inline_align(_context: fidl::encoding::Context) -> usize {
23487            8
23488        }
23489
23490        #[inline(always)]
23491        fn inline_size(_context: fidl::encoding::Context) -> usize {
23492            16
23493        }
23494    }
23495
23496    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Telemetry, D>
23497        for &Telemetry
23498    {
23499        unsafe fn encode(
23500            self,
23501            encoder: &mut fidl::encoding::Encoder<'_, D>,
23502            offset: usize,
23503            mut depth: fidl::encoding::Depth,
23504        ) -> fidl::Result<()> {
23505            encoder.debug_check_bounds::<Telemetry>(offset);
23506            // Vector header
23507            let max_ordinal: u64 = self.max_ordinal_present();
23508            encoder.write_num(max_ordinal, offset);
23509            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
23510            // Calling encoder.out_of_line_offset(0) is not allowed.
23511            if max_ordinal == 0 {
23512                return Ok(());
23513            }
23514            depth.increment()?;
23515            let envelope_size = 8;
23516            let bytes_len = max_ordinal as usize * envelope_size;
23517            #[allow(unused_variables)]
23518            let offset = encoder.out_of_line_offset(bytes_len);
23519            let mut _prev_end_offset: usize = 0;
23520            if 1 > max_ordinal {
23521                return Ok(());
23522            }
23523
23524            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
23525            // are envelope_size bytes.
23526            let cur_offset: usize = (1 - 1) * envelope_size;
23527
23528            // Zero reserved fields.
23529            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
23530
23531            // Safety:
23532            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
23533            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
23534            //   envelope_size bytes, there is always sufficient room.
23535            fidl::encoding::encode_in_envelope_optional::<i8, D>(
23536                self.rssi.as_ref().map(<i8 as fidl::encoding::ValueTypeMarker>::borrow),
23537                encoder,
23538                offset + cur_offset,
23539                depth,
23540            )?;
23541
23542            _prev_end_offset = cur_offset + envelope_size;
23543            if 2 > max_ordinal {
23544                return Ok(());
23545            }
23546
23547            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
23548            // are envelope_size bytes.
23549            let cur_offset: usize = (2 - 1) * envelope_size;
23550
23551            // Zero reserved fields.
23552            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
23553
23554            // Safety:
23555            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
23556            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
23557            //   envelope_size bytes, there is always sufficient room.
23558            fidl::encoding::encode_in_envelope_optional::<i8, D>(
23559                self.tx_power.as_ref().map(<i8 as fidl::encoding::ValueTypeMarker>::borrow),
23560                encoder,
23561                offset + cur_offset,
23562                depth,
23563            )?;
23564
23565            _prev_end_offset = cur_offset + envelope_size;
23566            if 3 > max_ordinal {
23567                return Ok(());
23568            }
23569
23570            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
23571            // are envelope_size bytes.
23572            let cur_offset: usize = (3 - 1) * envelope_size;
23573
23574            // Zero reserved fields.
23575            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
23576
23577            // Safety:
23578            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
23579            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
23580            //   envelope_size bytes, there is always sufficient room.
23581            fidl::encoding::encode_in_envelope_optional::<u16, D>(
23582                self.channel_index.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
23583                encoder,
23584                offset + cur_offset,
23585                depth,
23586            )?;
23587
23588            _prev_end_offset = cur_offset + envelope_size;
23589            if 4 > max_ordinal {
23590                return Ok(());
23591            }
23592
23593            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
23594            // are envelope_size bytes.
23595            let cur_offset: usize = (4 - 1) * envelope_size;
23596
23597            // Zero reserved fields.
23598            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
23599
23600            // Safety:
23601            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
23602            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
23603            //   envelope_size bytes, there is always sufficient room.
23604            fidl::encoding::encode_in_envelope_optional::<u32, D>(
23605                self.partition_id.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
23606                encoder,
23607                offset + cur_offset,
23608                depth,
23609            )?;
23610
23611            _prev_end_offset = cur_offset + envelope_size;
23612            if 5 > max_ordinal {
23613                return Ok(());
23614            }
23615
23616            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
23617            // are envelope_size bytes.
23618            let cur_offset: usize = (5 - 1) * envelope_size;
23619
23620            // Zero reserved fields.
23621            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
23622
23623            // Safety:
23624            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
23625            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
23626            //   envelope_size bytes, there is always sufficient room.
23627            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<256>, D>(
23628                self.stack_version.as_ref().map(
23629                    <fidl::encoding::BoundedString<256> as fidl::encoding::ValueTypeMarker>::borrow,
23630                ),
23631                encoder,
23632                offset + cur_offset,
23633                depth,
23634            )?;
23635
23636            _prev_end_offset = cur_offset + envelope_size;
23637            if 6 > max_ordinal {
23638                return Ok(());
23639            }
23640
23641            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
23642            // are envelope_size bytes.
23643            let cur_offset: usize = (6 - 1) * envelope_size;
23644
23645            // Zero reserved fields.
23646            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
23647
23648            // Safety:
23649            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
23650            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
23651            //   envelope_size bytes, there is always sufficient room.
23652            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<256>, D>(
23653                self.rcp_version.as_ref().map(
23654                    <fidl::encoding::BoundedString<256> as fidl::encoding::ValueTypeMarker>::borrow,
23655                ),
23656                encoder,
23657                offset + cur_offset,
23658                depth,
23659            )?;
23660
23661            _prev_end_offset = cur_offset + envelope_size;
23662            if 7 > max_ordinal {
23663                return Ok(());
23664            }
23665
23666            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
23667            // are envelope_size bytes.
23668            let cur_offset: usize = (7 - 1) * envelope_size;
23669
23670            // Zero reserved fields.
23671            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
23672
23673            // Safety:
23674            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
23675            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
23676            //   envelope_size bytes, there is always sufficient room.
23677            fidl::encoding::encode_in_envelope_optional::<u8, D>(
23678                self.thread_link_mode.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
23679                encoder,
23680                offset + cur_offset,
23681                depth,
23682            )?;
23683
23684            _prev_end_offset = cur_offset + envelope_size;
23685            if 8 > max_ordinal {
23686                return Ok(());
23687            }
23688
23689            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
23690            // are envelope_size bytes.
23691            let cur_offset: usize = (8 - 1) * envelope_size;
23692
23693            // Zero reserved fields.
23694            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
23695
23696            // Safety:
23697            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
23698            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
23699            //   envelope_size bytes, there is always sufficient room.
23700            fidl::encoding::encode_in_envelope_optional::<u8, D>(
23701                self.thread_router_id.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
23702                encoder,
23703                offset + cur_offset,
23704                depth,
23705            )?;
23706
23707            _prev_end_offset = cur_offset + envelope_size;
23708            if 9 > max_ordinal {
23709                return Ok(());
23710            }
23711
23712            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
23713            // are envelope_size bytes.
23714            let cur_offset: usize = (9 - 1) * envelope_size;
23715
23716            // Zero reserved fields.
23717            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
23718
23719            // Safety:
23720            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
23721            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
23722            //   envelope_size bytes, there is always sufficient room.
23723            fidl::encoding::encode_in_envelope_optional::<u16, D>(
23724                self.thread_rloc.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
23725                encoder,
23726                offset + cur_offset,
23727                depth,
23728            )?;
23729
23730            _prev_end_offset = cur_offset + envelope_size;
23731            if 10 > max_ordinal {
23732                return Ok(());
23733            }
23734
23735            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
23736            // are envelope_size bytes.
23737            let cur_offset: usize = (10 - 1) * envelope_size;
23738
23739            // Zero reserved fields.
23740            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
23741
23742            // Safety:
23743            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
23744            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
23745            //   envelope_size bytes, there is always sufficient room.
23746            fidl::encoding::encode_in_envelope_optional::<u8, D>(
23747                self.thread_network_data_version
23748                    .as_ref()
23749                    .map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
23750                encoder,
23751                offset + cur_offset,
23752                depth,
23753            )?;
23754
23755            _prev_end_offset = cur_offset + envelope_size;
23756            if 11 > max_ordinal {
23757                return Ok(());
23758            }
23759
23760            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
23761            // are envelope_size bytes.
23762            let cur_offset: usize = (11 - 1) * envelope_size;
23763
23764            // Zero reserved fields.
23765            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
23766
23767            // Safety:
23768            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
23769            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
23770            //   envelope_size bytes, there is always sufficient room.
23771            fidl::encoding::encode_in_envelope_optional::<u8, D>(
23772                self.thread_stable_network_data_version
23773                    .as_ref()
23774                    .map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
23775                encoder,
23776                offset + cur_offset,
23777                depth,
23778            )?;
23779
23780            _prev_end_offset = cur_offset + envelope_size;
23781            if 12 > max_ordinal {
23782                return Ok(());
23783            }
23784
23785            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
23786            // are envelope_size bytes.
23787            let cur_offset: usize = (12 - 1) * envelope_size;
23788
23789            // Zero reserved fields.
23790            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
23791
23792            // Safety:
23793            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
23794            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
23795            //   envelope_size bytes, there is always sufficient room.
23796            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u8, 255>, D>(
23797                self.thread_network_data.as_ref().map(
23798                    <fidl::encoding::Vector<u8, 255> as fidl::encoding::ValueTypeMarker>::borrow,
23799                ),
23800                encoder,
23801                offset + cur_offset,
23802                depth,
23803            )?;
23804
23805            _prev_end_offset = cur_offset + envelope_size;
23806            if 13 > max_ordinal {
23807                return Ok(());
23808            }
23809
23810            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
23811            // are envelope_size bytes.
23812            let cur_offset: usize = (13 - 1) * envelope_size;
23813
23814            // Zero reserved fields.
23815            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
23816
23817            // Safety:
23818            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
23819            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
23820            //   envelope_size bytes, there is always sufficient room.
23821            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u8, 255>, D>(
23822                self.thread_stable_network_data.as_ref().map(
23823                    <fidl::encoding::Vector<u8, 255> as fidl::encoding::ValueTypeMarker>::borrow,
23824                ),
23825                encoder,
23826                offset + cur_offset,
23827                depth,
23828            )?;
23829
23830            _prev_end_offset = cur_offset + envelope_size;
23831            if 14 > max_ordinal {
23832                return Ok(());
23833            }
23834
23835            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
23836            // are envelope_size bytes.
23837            let cur_offset: usize = (14 - 1) * envelope_size;
23838
23839            // Zero reserved fields.
23840            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
23841
23842            // Safety:
23843            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
23844            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
23845            //   envelope_size bytes, there is always sufficient room.
23846            fidl::encoding::encode_in_envelope_optional::<BorderRoutingCounters, D>(
23847                self.thread_border_routing_counters
23848                    .as_ref()
23849                    .map(<BorderRoutingCounters as fidl::encoding::ValueTypeMarker>::borrow),
23850                encoder,
23851                offset + cur_offset,
23852                depth,
23853            )?;
23854
23855            _prev_end_offset = cur_offset + envelope_size;
23856            if 15 > max_ordinal {
23857                return Ok(());
23858            }
23859
23860            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
23861            // are envelope_size bytes.
23862            let cur_offset: usize = (15 - 1) * envelope_size;
23863
23864            // Zero reserved fields.
23865            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
23866
23867            // Safety:
23868            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
23869            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
23870            //   envelope_size bytes, there is always sufficient room.
23871            fidl::encoding::encode_in_envelope_optional::<SrpServerInfo, D>(
23872                self.srp_server_info
23873                    .as_ref()
23874                    .map(<SrpServerInfo as fidl::encoding::ValueTypeMarker>::borrow),
23875                encoder,
23876                offset + cur_offset,
23877                depth,
23878            )?;
23879
23880            _prev_end_offset = cur_offset + envelope_size;
23881            if 16 > max_ordinal {
23882                return Ok(());
23883            }
23884
23885            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
23886            // are envelope_size bytes.
23887            let cur_offset: usize = (16 - 1) * envelope_size;
23888
23889            // Zero reserved fields.
23890            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
23891
23892            // Safety:
23893            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
23894            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
23895            //   envelope_size bytes, there is always sufficient room.
23896            fidl::encoding::encode_in_envelope_optional::<DnssdCounters, D>(
23897                self.dnssd_counters
23898                    .as_ref()
23899                    .map(<DnssdCounters as fidl::encoding::ValueTypeMarker>::borrow),
23900                encoder,
23901                offset + cur_offset,
23902                depth,
23903            )?;
23904
23905            _prev_end_offset = cur_offset + envelope_size;
23906            if 17 > max_ordinal {
23907                return Ok(());
23908            }
23909
23910            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
23911            // are envelope_size bytes.
23912            let cur_offset: usize = (17 - 1) * envelope_size;
23913
23914            // Zero reserved fields.
23915            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
23916
23917            // Safety:
23918            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
23919            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
23920            //   envelope_size bytes, there is always sufficient room.
23921            fidl::encoding::encode_in_envelope_optional::<LeaderData, D>(
23922                self.leader_data
23923                    .as_ref()
23924                    .map(<LeaderData as fidl::encoding::ValueTypeMarker>::borrow),
23925                encoder,
23926                offset + cur_offset,
23927                depth,
23928            )?;
23929
23930            _prev_end_offset = cur_offset + envelope_size;
23931            if 18 > max_ordinal {
23932                return Ok(());
23933            }
23934
23935            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
23936            // are envelope_size bytes.
23937            let cur_offset: usize = (18 - 1) * envelope_size;
23938
23939            // Zero reserved fields.
23940            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
23941
23942            // Safety:
23943            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
23944            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
23945            //   envelope_size bytes, there is always sufficient room.
23946            fidl::encoding::encode_in_envelope_optional::<i64, D>(
23947                self.uptime.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
23948                encoder,
23949                offset + cur_offset,
23950                depth,
23951            )?;
23952
23953            _prev_end_offset = cur_offset + envelope_size;
23954            if 19 > max_ordinal {
23955                return Ok(());
23956            }
23957
23958            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
23959            // are envelope_size bytes.
23960            let cur_offset: usize = (19 - 1) * envelope_size;
23961
23962            // Zero reserved fields.
23963            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
23964
23965            // Safety:
23966            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
23967            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
23968            //   envelope_size bytes, there is always sufficient room.
23969            fidl::encoding::encode_in_envelope_optional::<Nat64Info, D>(
23970                self.nat64_info
23971                    .as_ref()
23972                    .map(<Nat64Info as fidl::encoding::ValueTypeMarker>::borrow),
23973                encoder,
23974                offset + cur_offset,
23975                depth,
23976            )?;
23977
23978            _prev_end_offset = cur_offset + envelope_size;
23979            if 20 > max_ordinal {
23980                return Ok(());
23981            }
23982
23983            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
23984            // are envelope_size bytes.
23985            let cur_offset: usize = (20 - 1) * envelope_size;
23986
23987            // Zero reserved fields.
23988            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
23989
23990            // Safety:
23991            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
23992            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
23993            //   envelope_size bytes, there is always sufficient room.
23994            fidl::encoding::encode_in_envelope_optional::<TrelCounters, D>(
23995                self.trel_counters
23996                    .as_ref()
23997                    .map(<TrelCounters as fidl::encoding::ValueTypeMarker>::borrow),
23998                encoder,
23999                offset + cur_offset,
24000                depth,
24001            )?;
24002
24003            _prev_end_offset = cur_offset + envelope_size;
24004            if 21 > max_ordinal {
24005                return Ok(());
24006            }
24007
24008            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
24009            // are envelope_size bytes.
24010            let cur_offset: usize = (21 - 1) * envelope_size;
24011
24012            // Zero reserved fields.
24013            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
24014
24015            // Safety:
24016            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
24017            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
24018            //   envelope_size bytes, there is always sufficient room.
24019            fidl::encoding::encode_in_envelope_optional::<TrelPeersInfo, D>(
24020                self.trel_peers_info
24021                    .as_ref()
24022                    .map(<TrelPeersInfo as fidl::encoding::ValueTypeMarker>::borrow),
24023                encoder,
24024                offset + cur_offset,
24025                depth,
24026            )?;
24027
24028            _prev_end_offset = cur_offset + envelope_size;
24029            if 22 > max_ordinal {
24030                return Ok(());
24031            }
24032
24033            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
24034            // are envelope_size bytes.
24035            let cur_offset: usize = (22 - 1) * envelope_size;
24036
24037            // Zero reserved fields.
24038            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
24039
24040            // Safety:
24041            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
24042            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
24043            //   envelope_size bytes, there is always sufficient room.
24044            fidl::encoding::encode_in_envelope_optional::<UpstreamDnsInfo, D>(
24045                self.upstream_dns_info
24046                    .as_ref()
24047                    .map(<UpstreamDnsInfo as fidl::encoding::ValueTypeMarker>::borrow),
24048                encoder,
24049                offset + cur_offset,
24050                depth,
24051            )?;
24052
24053            _prev_end_offset = cur_offset + envelope_size;
24054            if 23 > max_ordinal {
24055                return Ok(());
24056            }
24057
24058            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
24059            // are envelope_size bytes.
24060            let cur_offset: usize = (23 - 1) * envelope_size;
24061
24062            // Zero reserved fields.
24063            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
24064
24065            // Safety:
24066            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
24067            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
24068            //   envelope_size bytes, there is always sufficient room.
24069            fidl::encoding::encode_in_envelope_optional::<Dhcp6PdInfo, D>(
24070                self.dhcp6pd_info
24071                    .as_ref()
24072                    .map(<Dhcp6PdInfo as fidl::encoding::ValueTypeMarker>::borrow),
24073                encoder,
24074                offset + cur_offset,
24075                depth,
24076            )?;
24077
24078            _prev_end_offset = cur_offset + envelope_size;
24079            if 24 > max_ordinal {
24080                return Ok(());
24081            }
24082
24083            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
24084            // are envelope_size bytes.
24085            let cur_offset: usize = (24 - 1) * envelope_size;
24086
24087            // Zero reserved fields.
24088            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
24089
24090            // Safety:
24091            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
24092            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
24093            //   envelope_size bytes, there is always sufficient room.
24094            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<LinkMetricsEntry, 64>, D>(
24095            self.link_metrics_entries.as_ref().map(<fidl::encoding::Vector<LinkMetricsEntry, 64> as fidl::encoding::ValueTypeMarker>::borrow),
24096            encoder, offset + cur_offset, depth
24097        )?;
24098
24099            _prev_end_offset = cur_offset + envelope_size;
24100            if 25 > max_ordinal {
24101                return Ok(());
24102            }
24103
24104            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
24105            // are envelope_size bytes.
24106            let cur_offset: usize = (25 - 1) * envelope_size;
24107
24108            // Zero reserved fields.
24109            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
24110
24111            // Safety:
24112            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
24113            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
24114            //   envelope_size bytes, there is always sufficient room.
24115            fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_lowpan_device__common::BorderAgentCounters, D>(
24116            self.border_agent_counters.as_ref().map(<fidl_fuchsia_lowpan_device__common::BorderAgentCounters as fidl::encoding::ValueTypeMarker>::borrow),
24117            encoder, offset + cur_offset, depth
24118        )?;
24119
24120            _prev_end_offset = cur_offset + envelope_size;
24121            if 26 > max_ordinal {
24122                return Ok(());
24123            }
24124
24125            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
24126            // are envelope_size bytes.
24127            let cur_offset: usize = (26 - 1) * envelope_size;
24128
24129            // Zero reserved fields.
24130            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
24131
24132            // Safety:
24133            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
24134            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
24135            //   envelope_size bytes, there is always sufficient room.
24136            fidl::encoding::encode_in_envelope_optional::<bool, D>(
24137                self.multi_ail_detected
24138                    .as_ref()
24139                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
24140                encoder,
24141                offset + cur_offset,
24142                depth,
24143            )?;
24144
24145            _prev_end_offset = cur_offset + envelope_size;
24146            if 27 > max_ordinal {
24147                return Ok(());
24148            }
24149
24150            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
24151            // are envelope_size bytes.
24152            let cur_offset: usize = (27 - 1) * envelope_size;
24153
24154            // Zero reserved fields.
24155            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
24156
24157            // Safety:
24158            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
24159            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
24160            //   envelope_size bytes, there is always sufficient room.
24161            fidl::encoding::encode_in_envelope_optional::<u64, D>(
24162                self.extended_pan_id.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
24163                encoder,
24164                offset + cur_offset,
24165                depth,
24166            )?;
24167
24168            _prev_end_offset = cur_offset + envelope_size;
24169            if 28 > max_ordinal {
24170                return Ok(());
24171            }
24172
24173            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
24174            // are envelope_size bytes.
24175            let cur_offset: usize = (28 - 1) * envelope_size;
24176
24177            // Zero reserved fields.
24178            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
24179
24180            // Safety:
24181            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
24182            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
24183            //   envelope_size bytes, there is always sufficient room.
24184            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<BorderRoutingPeer, 64>, D>(
24185            self.border_routing_peers.as_ref().map(<fidl::encoding::Vector<BorderRoutingPeer, 64> as fidl::encoding::ValueTypeMarker>::borrow),
24186            encoder, offset + cur_offset, depth
24187        )?;
24188
24189            _prev_end_offset = cur_offset + envelope_size;
24190            if 29 > max_ordinal {
24191                return Ok(());
24192            }
24193
24194            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
24195            // are envelope_size bytes.
24196            let cur_offset: usize = (29 - 1) * envelope_size;
24197
24198            // Zero reserved fields.
24199            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
24200
24201            // Safety:
24202            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
24203            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
24204            //   envelope_size bytes, there is always sufficient room.
24205            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<BorderRoutingRouter, 64>, D>(
24206            self.border_routing_routers.as_ref().map(<fidl::encoding::Vector<BorderRoutingRouter, 64> as fidl::encoding::ValueTypeMarker>::borrow),
24207            encoder, offset + cur_offset, depth
24208        )?;
24209
24210            _prev_end_offset = cur_offset + envelope_size;
24211            if 30 > max_ordinal {
24212                return Ok(());
24213            }
24214
24215            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
24216            // are envelope_size bytes.
24217            let cur_offset: usize = (30 - 1) * envelope_size;
24218
24219            // Zero reserved fields.
24220            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
24221
24222            // Safety:
24223            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
24224            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
24225            //   envelope_size bytes, there is always sufficient room.
24226            fidl::encoding::encode_in_envelope_optional::<OperationalDataset, D>(
24227                self.active_dataset
24228                    .as_ref()
24229                    .map(<OperationalDataset as fidl::encoding::ValueTypeMarker>::borrow),
24230                encoder,
24231                offset + cur_offset,
24232                depth,
24233            )?;
24234
24235            _prev_end_offset = cur_offset + envelope_size;
24236            if 31 > max_ordinal {
24237                return Ok(());
24238            }
24239
24240            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
24241            // are envelope_size bytes.
24242            let cur_offset: usize = (31 - 1) * envelope_size;
24243
24244            // Zero reserved fields.
24245            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
24246
24247            // Safety:
24248            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
24249            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
24250            //   envelope_size bytes, there is always sufficient room.
24251            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<MultiRadioNeighborInfo, 64>, D>(
24252            self.multiradio_neighbor_info.as_ref().map(<fidl::encoding::Vector<MultiRadioNeighborInfo, 64> as fidl::encoding::ValueTypeMarker>::borrow),
24253            encoder, offset + cur_offset, depth
24254        )?;
24255
24256            _prev_end_offset = cur_offset + envelope_size;
24257            if 32 > max_ordinal {
24258                return Ok(());
24259            }
24260
24261            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
24262            // are envelope_size bytes.
24263            let cur_offset: usize = (32 - 1) * envelope_size;
24264
24265            // Zero reserved fields.
24266            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
24267
24268            // Safety:
24269            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
24270            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
24271            //   envelope_size bytes, there is always sufficient room.
24272            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<RouterInfo, 64>, D>(
24273            self.router_info.as_ref().map(<fidl::encoding::Vector<RouterInfo, 64> as fidl::encoding::ValueTypeMarker>::borrow),
24274            encoder, offset + cur_offset, depth
24275        )?;
24276
24277            _prev_end_offset = cur_offset + envelope_size;
24278            if 33 > max_ordinal {
24279                return Ok(());
24280            }
24281
24282            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
24283            // are envelope_size bytes.
24284            let cur_offset: usize = (33 - 1) * envelope_size;
24285
24286            // Zero reserved fields.
24287            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
24288
24289            // Safety:
24290            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
24291            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
24292            //   envelope_size bytes, there is always sufficient room.
24293            fidl::encoding::encode_in_envelope_optional::<NetworkData, D>(
24294                self.network_data
24295                    .as_ref()
24296                    .map(<NetworkData as fidl::encoding::ValueTypeMarker>::borrow),
24297                encoder,
24298                offset + cur_offset,
24299                depth,
24300            )?;
24301
24302            _prev_end_offset = cur_offset + envelope_size;
24303
24304            Ok(())
24305        }
24306    }
24307
24308    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Telemetry {
24309        #[inline(always)]
24310        fn new_empty() -> Self {
24311            Self::default()
24312        }
24313
24314        unsafe fn decode(
24315            &mut self,
24316            decoder: &mut fidl::encoding::Decoder<'_, D>,
24317            offset: usize,
24318            mut depth: fidl::encoding::Depth,
24319        ) -> fidl::Result<()> {
24320            decoder.debug_check_bounds::<Self>(offset);
24321            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
24322                None => return Err(fidl::Error::NotNullable),
24323                Some(len) => len,
24324            };
24325            // Calling decoder.out_of_line_offset(0) is not allowed.
24326            if len == 0 {
24327                return Ok(());
24328            };
24329            depth.increment()?;
24330            let envelope_size = 8;
24331            let bytes_len = len * envelope_size;
24332            let offset = decoder.out_of_line_offset(bytes_len)?;
24333            // Decode the envelope for each type.
24334            let mut _next_ordinal_to_read = 0;
24335            let mut next_offset = offset;
24336            let end_offset = offset + bytes_len;
24337            _next_ordinal_to_read += 1;
24338            if next_offset >= end_offset {
24339                return Ok(());
24340            }
24341
24342            // Decode unknown envelopes for gaps in ordinals.
24343            while _next_ordinal_to_read < 1 {
24344                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
24345                _next_ordinal_to_read += 1;
24346                next_offset += envelope_size;
24347            }
24348
24349            let next_out_of_line = decoder.next_out_of_line();
24350            let handles_before = decoder.remaining_handles();
24351            if let Some((inlined, num_bytes, num_handles)) =
24352                fidl::encoding::decode_envelope_header(decoder, next_offset)?
24353            {
24354                let member_inline_size =
24355                    <i8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
24356                if inlined != (member_inline_size <= 4) {
24357                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
24358                }
24359                let inner_offset;
24360                let mut inner_depth = depth.clone();
24361                if inlined {
24362                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
24363                    inner_offset = next_offset;
24364                } else {
24365                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
24366                    inner_depth.increment()?;
24367                }
24368                let val_ref = self.rssi.get_or_insert_with(|| fidl::new_empty!(i8, D));
24369                fidl::decode!(i8, D, val_ref, decoder, inner_offset, inner_depth)?;
24370                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
24371                {
24372                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
24373                }
24374                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
24375                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
24376                }
24377            }
24378
24379            next_offset += envelope_size;
24380            _next_ordinal_to_read += 1;
24381            if next_offset >= end_offset {
24382                return Ok(());
24383            }
24384
24385            // Decode unknown envelopes for gaps in ordinals.
24386            while _next_ordinal_to_read < 2 {
24387                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
24388                _next_ordinal_to_read += 1;
24389                next_offset += envelope_size;
24390            }
24391
24392            let next_out_of_line = decoder.next_out_of_line();
24393            let handles_before = decoder.remaining_handles();
24394            if let Some((inlined, num_bytes, num_handles)) =
24395                fidl::encoding::decode_envelope_header(decoder, next_offset)?
24396            {
24397                let member_inline_size =
24398                    <i8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
24399                if inlined != (member_inline_size <= 4) {
24400                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
24401                }
24402                let inner_offset;
24403                let mut inner_depth = depth.clone();
24404                if inlined {
24405                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
24406                    inner_offset = next_offset;
24407                } else {
24408                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
24409                    inner_depth.increment()?;
24410                }
24411                let val_ref = self.tx_power.get_or_insert_with(|| fidl::new_empty!(i8, D));
24412                fidl::decode!(i8, D, val_ref, decoder, inner_offset, inner_depth)?;
24413                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
24414                {
24415                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
24416                }
24417                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
24418                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
24419                }
24420            }
24421
24422            next_offset += envelope_size;
24423            _next_ordinal_to_read += 1;
24424            if next_offset >= end_offset {
24425                return Ok(());
24426            }
24427
24428            // Decode unknown envelopes for gaps in ordinals.
24429            while _next_ordinal_to_read < 3 {
24430                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
24431                _next_ordinal_to_read += 1;
24432                next_offset += envelope_size;
24433            }
24434
24435            let next_out_of_line = decoder.next_out_of_line();
24436            let handles_before = decoder.remaining_handles();
24437            if let Some((inlined, num_bytes, num_handles)) =
24438                fidl::encoding::decode_envelope_header(decoder, next_offset)?
24439            {
24440                let member_inline_size =
24441                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
24442                if inlined != (member_inline_size <= 4) {
24443                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
24444                }
24445                let inner_offset;
24446                let mut inner_depth = depth.clone();
24447                if inlined {
24448                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
24449                    inner_offset = next_offset;
24450                } else {
24451                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
24452                    inner_depth.increment()?;
24453                }
24454                let val_ref = self.channel_index.get_or_insert_with(|| fidl::new_empty!(u16, D));
24455                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
24456                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
24457                {
24458                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
24459                }
24460                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
24461                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
24462                }
24463            }
24464
24465            next_offset += envelope_size;
24466            _next_ordinal_to_read += 1;
24467            if next_offset >= end_offset {
24468                return Ok(());
24469            }
24470
24471            // Decode unknown envelopes for gaps in ordinals.
24472            while _next_ordinal_to_read < 4 {
24473                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
24474                _next_ordinal_to_read += 1;
24475                next_offset += envelope_size;
24476            }
24477
24478            let next_out_of_line = decoder.next_out_of_line();
24479            let handles_before = decoder.remaining_handles();
24480            if let Some((inlined, num_bytes, num_handles)) =
24481                fidl::encoding::decode_envelope_header(decoder, next_offset)?
24482            {
24483                let member_inline_size =
24484                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
24485                if inlined != (member_inline_size <= 4) {
24486                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
24487                }
24488                let inner_offset;
24489                let mut inner_depth = depth.clone();
24490                if inlined {
24491                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
24492                    inner_offset = next_offset;
24493                } else {
24494                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
24495                    inner_depth.increment()?;
24496                }
24497                let val_ref = self.partition_id.get_or_insert_with(|| fidl::new_empty!(u32, D));
24498                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
24499                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
24500                {
24501                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
24502                }
24503                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
24504                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
24505                }
24506            }
24507
24508            next_offset += envelope_size;
24509            _next_ordinal_to_read += 1;
24510            if next_offset >= end_offset {
24511                return Ok(());
24512            }
24513
24514            // Decode unknown envelopes for gaps in ordinals.
24515            while _next_ordinal_to_read < 5 {
24516                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
24517                _next_ordinal_to_read += 1;
24518                next_offset += envelope_size;
24519            }
24520
24521            let next_out_of_line = decoder.next_out_of_line();
24522            let handles_before = decoder.remaining_handles();
24523            if let Some((inlined, num_bytes, num_handles)) =
24524                fidl::encoding::decode_envelope_header(decoder, next_offset)?
24525            {
24526                let member_inline_size =
24527                    <fidl::encoding::BoundedString<256> as fidl::encoding::TypeMarker>::inline_size(
24528                        decoder.context,
24529                    );
24530                if inlined != (member_inline_size <= 4) {
24531                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
24532                }
24533                let inner_offset;
24534                let mut inner_depth = depth.clone();
24535                if inlined {
24536                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
24537                    inner_offset = next_offset;
24538                } else {
24539                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
24540                    inner_depth.increment()?;
24541                }
24542                let val_ref = self
24543                    .stack_version
24544                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<256>, D));
24545                fidl::decode!(
24546                    fidl::encoding::BoundedString<256>,
24547                    D,
24548                    val_ref,
24549                    decoder,
24550                    inner_offset,
24551                    inner_depth
24552                )?;
24553                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
24554                {
24555                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
24556                }
24557                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
24558                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
24559                }
24560            }
24561
24562            next_offset += envelope_size;
24563            _next_ordinal_to_read += 1;
24564            if next_offset >= end_offset {
24565                return Ok(());
24566            }
24567
24568            // Decode unknown envelopes for gaps in ordinals.
24569            while _next_ordinal_to_read < 6 {
24570                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
24571                _next_ordinal_to_read += 1;
24572                next_offset += envelope_size;
24573            }
24574
24575            let next_out_of_line = decoder.next_out_of_line();
24576            let handles_before = decoder.remaining_handles();
24577            if let Some((inlined, num_bytes, num_handles)) =
24578                fidl::encoding::decode_envelope_header(decoder, next_offset)?
24579            {
24580                let member_inline_size =
24581                    <fidl::encoding::BoundedString<256> as fidl::encoding::TypeMarker>::inline_size(
24582                        decoder.context,
24583                    );
24584                if inlined != (member_inline_size <= 4) {
24585                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
24586                }
24587                let inner_offset;
24588                let mut inner_depth = depth.clone();
24589                if inlined {
24590                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
24591                    inner_offset = next_offset;
24592                } else {
24593                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
24594                    inner_depth.increment()?;
24595                }
24596                let val_ref = self
24597                    .rcp_version
24598                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<256>, D));
24599                fidl::decode!(
24600                    fidl::encoding::BoundedString<256>,
24601                    D,
24602                    val_ref,
24603                    decoder,
24604                    inner_offset,
24605                    inner_depth
24606                )?;
24607                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
24608                {
24609                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
24610                }
24611                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
24612                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
24613                }
24614            }
24615
24616            next_offset += envelope_size;
24617            _next_ordinal_to_read += 1;
24618            if next_offset >= end_offset {
24619                return Ok(());
24620            }
24621
24622            // Decode unknown envelopes for gaps in ordinals.
24623            while _next_ordinal_to_read < 7 {
24624                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
24625                _next_ordinal_to_read += 1;
24626                next_offset += envelope_size;
24627            }
24628
24629            let next_out_of_line = decoder.next_out_of_line();
24630            let handles_before = decoder.remaining_handles();
24631            if let Some((inlined, num_bytes, num_handles)) =
24632                fidl::encoding::decode_envelope_header(decoder, next_offset)?
24633            {
24634                let member_inline_size =
24635                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
24636                if inlined != (member_inline_size <= 4) {
24637                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
24638                }
24639                let inner_offset;
24640                let mut inner_depth = depth.clone();
24641                if inlined {
24642                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
24643                    inner_offset = next_offset;
24644                } else {
24645                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
24646                    inner_depth.increment()?;
24647                }
24648                let val_ref = self.thread_link_mode.get_or_insert_with(|| fidl::new_empty!(u8, D));
24649                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
24650                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
24651                {
24652                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
24653                }
24654                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
24655                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
24656                }
24657            }
24658
24659            next_offset += envelope_size;
24660            _next_ordinal_to_read += 1;
24661            if next_offset >= end_offset {
24662                return Ok(());
24663            }
24664
24665            // Decode unknown envelopes for gaps in ordinals.
24666            while _next_ordinal_to_read < 8 {
24667                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
24668                _next_ordinal_to_read += 1;
24669                next_offset += envelope_size;
24670            }
24671
24672            let next_out_of_line = decoder.next_out_of_line();
24673            let handles_before = decoder.remaining_handles();
24674            if let Some((inlined, num_bytes, num_handles)) =
24675                fidl::encoding::decode_envelope_header(decoder, next_offset)?
24676            {
24677                let member_inline_size =
24678                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
24679                if inlined != (member_inline_size <= 4) {
24680                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
24681                }
24682                let inner_offset;
24683                let mut inner_depth = depth.clone();
24684                if inlined {
24685                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
24686                    inner_offset = next_offset;
24687                } else {
24688                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
24689                    inner_depth.increment()?;
24690                }
24691                let val_ref = self.thread_router_id.get_or_insert_with(|| fidl::new_empty!(u8, D));
24692                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
24693                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
24694                {
24695                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
24696                }
24697                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
24698                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
24699                }
24700            }
24701
24702            next_offset += envelope_size;
24703            _next_ordinal_to_read += 1;
24704            if next_offset >= end_offset {
24705                return Ok(());
24706            }
24707
24708            // Decode unknown envelopes for gaps in ordinals.
24709            while _next_ordinal_to_read < 9 {
24710                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
24711                _next_ordinal_to_read += 1;
24712                next_offset += envelope_size;
24713            }
24714
24715            let next_out_of_line = decoder.next_out_of_line();
24716            let handles_before = decoder.remaining_handles();
24717            if let Some((inlined, num_bytes, num_handles)) =
24718                fidl::encoding::decode_envelope_header(decoder, next_offset)?
24719            {
24720                let member_inline_size =
24721                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
24722                if inlined != (member_inline_size <= 4) {
24723                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
24724                }
24725                let inner_offset;
24726                let mut inner_depth = depth.clone();
24727                if inlined {
24728                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
24729                    inner_offset = next_offset;
24730                } else {
24731                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
24732                    inner_depth.increment()?;
24733                }
24734                let val_ref = self.thread_rloc.get_or_insert_with(|| fidl::new_empty!(u16, D));
24735                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
24736                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
24737                {
24738                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
24739                }
24740                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
24741                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
24742                }
24743            }
24744
24745            next_offset += envelope_size;
24746            _next_ordinal_to_read += 1;
24747            if next_offset >= end_offset {
24748                return Ok(());
24749            }
24750
24751            // Decode unknown envelopes for gaps in ordinals.
24752            while _next_ordinal_to_read < 10 {
24753                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
24754                _next_ordinal_to_read += 1;
24755                next_offset += envelope_size;
24756            }
24757
24758            let next_out_of_line = decoder.next_out_of_line();
24759            let handles_before = decoder.remaining_handles();
24760            if let Some((inlined, num_bytes, num_handles)) =
24761                fidl::encoding::decode_envelope_header(decoder, next_offset)?
24762            {
24763                let member_inline_size =
24764                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
24765                if inlined != (member_inline_size <= 4) {
24766                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
24767                }
24768                let inner_offset;
24769                let mut inner_depth = depth.clone();
24770                if inlined {
24771                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
24772                    inner_offset = next_offset;
24773                } else {
24774                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
24775                    inner_depth.increment()?;
24776                }
24777                let val_ref =
24778                    self.thread_network_data_version.get_or_insert_with(|| fidl::new_empty!(u8, D));
24779                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
24780                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
24781                {
24782                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
24783                }
24784                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
24785                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
24786                }
24787            }
24788
24789            next_offset += envelope_size;
24790            _next_ordinal_to_read += 1;
24791            if next_offset >= end_offset {
24792                return Ok(());
24793            }
24794
24795            // Decode unknown envelopes for gaps in ordinals.
24796            while _next_ordinal_to_read < 11 {
24797                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
24798                _next_ordinal_to_read += 1;
24799                next_offset += envelope_size;
24800            }
24801
24802            let next_out_of_line = decoder.next_out_of_line();
24803            let handles_before = decoder.remaining_handles();
24804            if let Some((inlined, num_bytes, num_handles)) =
24805                fidl::encoding::decode_envelope_header(decoder, next_offset)?
24806            {
24807                let member_inline_size =
24808                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
24809                if inlined != (member_inline_size <= 4) {
24810                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
24811                }
24812                let inner_offset;
24813                let mut inner_depth = depth.clone();
24814                if inlined {
24815                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
24816                    inner_offset = next_offset;
24817                } else {
24818                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
24819                    inner_depth.increment()?;
24820                }
24821                let val_ref = self
24822                    .thread_stable_network_data_version
24823                    .get_or_insert_with(|| fidl::new_empty!(u8, D));
24824                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
24825                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
24826                {
24827                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
24828                }
24829                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
24830                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
24831                }
24832            }
24833
24834            next_offset += envelope_size;
24835            _next_ordinal_to_read += 1;
24836            if next_offset >= end_offset {
24837                return Ok(());
24838            }
24839
24840            // Decode unknown envelopes for gaps in ordinals.
24841            while _next_ordinal_to_read < 12 {
24842                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
24843                _next_ordinal_to_read += 1;
24844                next_offset += envelope_size;
24845            }
24846
24847            let next_out_of_line = decoder.next_out_of_line();
24848            let handles_before = decoder.remaining_handles();
24849            if let Some((inlined, num_bytes, num_handles)) =
24850                fidl::encoding::decode_envelope_header(decoder, next_offset)?
24851            {
24852                let member_inline_size =
24853                    <fidl::encoding::Vector<u8, 255> as fidl::encoding::TypeMarker>::inline_size(
24854                        decoder.context,
24855                    );
24856                if inlined != (member_inline_size <= 4) {
24857                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
24858                }
24859                let inner_offset;
24860                let mut inner_depth = depth.clone();
24861                if inlined {
24862                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
24863                    inner_offset = next_offset;
24864                } else {
24865                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
24866                    inner_depth.increment()?;
24867                }
24868                let val_ref = self
24869                    .thread_network_data
24870                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u8, 255>, D));
24871                fidl::decode!(fidl::encoding::Vector<u8, 255>, D, val_ref, decoder, inner_offset, inner_depth)?;
24872                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
24873                {
24874                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
24875                }
24876                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
24877                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
24878                }
24879            }
24880
24881            next_offset += envelope_size;
24882            _next_ordinal_to_read += 1;
24883            if next_offset >= end_offset {
24884                return Ok(());
24885            }
24886
24887            // Decode unknown envelopes for gaps in ordinals.
24888            while _next_ordinal_to_read < 13 {
24889                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
24890                _next_ordinal_to_read += 1;
24891                next_offset += envelope_size;
24892            }
24893
24894            let next_out_of_line = decoder.next_out_of_line();
24895            let handles_before = decoder.remaining_handles();
24896            if let Some((inlined, num_bytes, num_handles)) =
24897                fidl::encoding::decode_envelope_header(decoder, next_offset)?
24898            {
24899                let member_inline_size =
24900                    <fidl::encoding::Vector<u8, 255> as fidl::encoding::TypeMarker>::inline_size(
24901                        decoder.context,
24902                    );
24903                if inlined != (member_inline_size <= 4) {
24904                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
24905                }
24906                let inner_offset;
24907                let mut inner_depth = depth.clone();
24908                if inlined {
24909                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
24910                    inner_offset = next_offset;
24911                } else {
24912                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
24913                    inner_depth.increment()?;
24914                }
24915                let val_ref = self
24916                    .thread_stable_network_data
24917                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u8, 255>, D));
24918                fidl::decode!(fidl::encoding::Vector<u8, 255>, D, val_ref, decoder, inner_offset, inner_depth)?;
24919                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
24920                {
24921                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
24922                }
24923                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
24924                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
24925                }
24926            }
24927
24928            next_offset += envelope_size;
24929            _next_ordinal_to_read += 1;
24930            if next_offset >= end_offset {
24931                return Ok(());
24932            }
24933
24934            // Decode unknown envelopes for gaps in ordinals.
24935            while _next_ordinal_to_read < 14 {
24936                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
24937                _next_ordinal_to_read += 1;
24938                next_offset += envelope_size;
24939            }
24940
24941            let next_out_of_line = decoder.next_out_of_line();
24942            let handles_before = decoder.remaining_handles();
24943            if let Some((inlined, num_bytes, num_handles)) =
24944                fidl::encoding::decode_envelope_header(decoder, next_offset)?
24945            {
24946                let member_inline_size =
24947                    <BorderRoutingCounters as fidl::encoding::TypeMarker>::inline_size(
24948                        decoder.context,
24949                    );
24950                if inlined != (member_inline_size <= 4) {
24951                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
24952                }
24953                let inner_offset;
24954                let mut inner_depth = depth.clone();
24955                if inlined {
24956                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
24957                    inner_offset = next_offset;
24958                } else {
24959                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
24960                    inner_depth.increment()?;
24961                }
24962                let val_ref = self
24963                    .thread_border_routing_counters
24964                    .get_or_insert_with(|| fidl::new_empty!(BorderRoutingCounters, D));
24965                fidl::decode!(
24966                    BorderRoutingCounters,
24967                    D,
24968                    val_ref,
24969                    decoder,
24970                    inner_offset,
24971                    inner_depth
24972                )?;
24973                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
24974                {
24975                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
24976                }
24977                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
24978                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
24979                }
24980            }
24981
24982            next_offset += envelope_size;
24983            _next_ordinal_to_read += 1;
24984            if next_offset >= end_offset {
24985                return Ok(());
24986            }
24987
24988            // Decode unknown envelopes for gaps in ordinals.
24989            while _next_ordinal_to_read < 15 {
24990                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
24991                _next_ordinal_to_read += 1;
24992                next_offset += envelope_size;
24993            }
24994
24995            let next_out_of_line = decoder.next_out_of_line();
24996            let handles_before = decoder.remaining_handles();
24997            if let Some((inlined, num_bytes, num_handles)) =
24998                fidl::encoding::decode_envelope_header(decoder, next_offset)?
24999            {
25000                let member_inline_size =
25001                    <SrpServerInfo as fidl::encoding::TypeMarker>::inline_size(decoder.context);
25002                if inlined != (member_inline_size <= 4) {
25003                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
25004                }
25005                let inner_offset;
25006                let mut inner_depth = depth.clone();
25007                if inlined {
25008                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
25009                    inner_offset = next_offset;
25010                } else {
25011                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
25012                    inner_depth.increment()?;
25013                }
25014                let val_ref =
25015                    self.srp_server_info.get_or_insert_with(|| fidl::new_empty!(SrpServerInfo, D));
25016                fidl::decode!(SrpServerInfo, D, val_ref, decoder, inner_offset, inner_depth)?;
25017                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
25018                {
25019                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
25020                }
25021                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
25022                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
25023                }
25024            }
25025
25026            next_offset += envelope_size;
25027            _next_ordinal_to_read += 1;
25028            if next_offset >= end_offset {
25029                return Ok(());
25030            }
25031
25032            // Decode unknown envelopes for gaps in ordinals.
25033            while _next_ordinal_to_read < 16 {
25034                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
25035                _next_ordinal_to_read += 1;
25036                next_offset += envelope_size;
25037            }
25038
25039            let next_out_of_line = decoder.next_out_of_line();
25040            let handles_before = decoder.remaining_handles();
25041            if let Some((inlined, num_bytes, num_handles)) =
25042                fidl::encoding::decode_envelope_header(decoder, next_offset)?
25043            {
25044                let member_inline_size =
25045                    <DnssdCounters as fidl::encoding::TypeMarker>::inline_size(decoder.context);
25046                if inlined != (member_inline_size <= 4) {
25047                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
25048                }
25049                let inner_offset;
25050                let mut inner_depth = depth.clone();
25051                if inlined {
25052                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
25053                    inner_offset = next_offset;
25054                } else {
25055                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
25056                    inner_depth.increment()?;
25057                }
25058                let val_ref =
25059                    self.dnssd_counters.get_or_insert_with(|| fidl::new_empty!(DnssdCounters, D));
25060                fidl::decode!(DnssdCounters, D, val_ref, decoder, inner_offset, inner_depth)?;
25061                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
25062                {
25063                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
25064                }
25065                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
25066                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
25067                }
25068            }
25069
25070            next_offset += envelope_size;
25071            _next_ordinal_to_read += 1;
25072            if next_offset >= end_offset {
25073                return Ok(());
25074            }
25075
25076            // Decode unknown envelopes for gaps in ordinals.
25077            while _next_ordinal_to_read < 17 {
25078                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
25079                _next_ordinal_to_read += 1;
25080                next_offset += envelope_size;
25081            }
25082
25083            let next_out_of_line = decoder.next_out_of_line();
25084            let handles_before = decoder.remaining_handles();
25085            if let Some((inlined, num_bytes, num_handles)) =
25086                fidl::encoding::decode_envelope_header(decoder, next_offset)?
25087            {
25088                let member_inline_size =
25089                    <LeaderData as fidl::encoding::TypeMarker>::inline_size(decoder.context);
25090                if inlined != (member_inline_size <= 4) {
25091                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
25092                }
25093                let inner_offset;
25094                let mut inner_depth = depth.clone();
25095                if inlined {
25096                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
25097                    inner_offset = next_offset;
25098                } else {
25099                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
25100                    inner_depth.increment()?;
25101                }
25102                let val_ref =
25103                    self.leader_data.get_or_insert_with(|| fidl::new_empty!(LeaderData, D));
25104                fidl::decode!(LeaderData, D, val_ref, decoder, inner_offset, inner_depth)?;
25105                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
25106                {
25107                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
25108                }
25109                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
25110                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
25111                }
25112            }
25113
25114            next_offset += envelope_size;
25115            _next_ordinal_to_read += 1;
25116            if next_offset >= end_offset {
25117                return Ok(());
25118            }
25119
25120            // Decode unknown envelopes for gaps in ordinals.
25121            while _next_ordinal_to_read < 18 {
25122                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
25123                _next_ordinal_to_read += 1;
25124                next_offset += envelope_size;
25125            }
25126
25127            let next_out_of_line = decoder.next_out_of_line();
25128            let handles_before = decoder.remaining_handles();
25129            if let Some((inlined, num_bytes, num_handles)) =
25130                fidl::encoding::decode_envelope_header(decoder, next_offset)?
25131            {
25132                let member_inline_size =
25133                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
25134                if inlined != (member_inline_size <= 4) {
25135                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
25136                }
25137                let inner_offset;
25138                let mut inner_depth = depth.clone();
25139                if inlined {
25140                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
25141                    inner_offset = next_offset;
25142                } else {
25143                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
25144                    inner_depth.increment()?;
25145                }
25146                let val_ref = self.uptime.get_or_insert_with(|| fidl::new_empty!(i64, D));
25147                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
25148                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
25149                {
25150                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
25151                }
25152                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
25153                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
25154                }
25155            }
25156
25157            next_offset += envelope_size;
25158            _next_ordinal_to_read += 1;
25159            if next_offset >= end_offset {
25160                return Ok(());
25161            }
25162
25163            // Decode unknown envelopes for gaps in ordinals.
25164            while _next_ordinal_to_read < 19 {
25165                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
25166                _next_ordinal_to_read += 1;
25167                next_offset += envelope_size;
25168            }
25169
25170            let next_out_of_line = decoder.next_out_of_line();
25171            let handles_before = decoder.remaining_handles();
25172            if let Some((inlined, num_bytes, num_handles)) =
25173                fidl::encoding::decode_envelope_header(decoder, next_offset)?
25174            {
25175                let member_inline_size =
25176                    <Nat64Info as fidl::encoding::TypeMarker>::inline_size(decoder.context);
25177                if inlined != (member_inline_size <= 4) {
25178                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
25179                }
25180                let inner_offset;
25181                let mut inner_depth = depth.clone();
25182                if inlined {
25183                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
25184                    inner_offset = next_offset;
25185                } else {
25186                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
25187                    inner_depth.increment()?;
25188                }
25189                let val_ref = self.nat64_info.get_or_insert_with(|| fidl::new_empty!(Nat64Info, D));
25190                fidl::decode!(Nat64Info, D, val_ref, decoder, inner_offset, inner_depth)?;
25191                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
25192                {
25193                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
25194                }
25195                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
25196                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
25197                }
25198            }
25199
25200            next_offset += envelope_size;
25201            _next_ordinal_to_read += 1;
25202            if next_offset >= end_offset {
25203                return Ok(());
25204            }
25205
25206            // Decode unknown envelopes for gaps in ordinals.
25207            while _next_ordinal_to_read < 20 {
25208                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
25209                _next_ordinal_to_read += 1;
25210                next_offset += envelope_size;
25211            }
25212
25213            let next_out_of_line = decoder.next_out_of_line();
25214            let handles_before = decoder.remaining_handles();
25215            if let Some((inlined, num_bytes, num_handles)) =
25216                fidl::encoding::decode_envelope_header(decoder, next_offset)?
25217            {
25218                let member_inline_size =
25219                    <TrelCounters as fidl::encoding::TypeMarker>::inline_size(decoder.context);
25220                if inlined != (member_inline_size <= 4) {
25221                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
25222                }
25223                let inner_offset;
25224                let mut inner_depth = depth.clone();
25225                if inlined {
25226                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
25227                    inner_offset = next_offset;
25228                } else {
25229                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
25230                    inner_depth.increment()?;
25231                }
25232                let val_ref =
25233                    self.trel_counters.get_or_insert_with(|| fidl::new_empty!(TrelCounters, D));
25234                fidl::decode!(TrelCounters, D, val_ref, decoder, inner_offset, inner_depth)?;
25235                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
25236                {
25237                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
25238                }
25239                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
25240                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
25241                }
25242            }
25243
25244            next_offset += envelope_size;
25245            _next_ordinal_to_read += 1;
25246            if next_offset >= end_offset {
25247                return Ok(());
25248            }
25249
25250            // Decode unknown envelopes for gaps in ordinals.
25251            while _next_ordinal_to_read < 21 {
25252                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
25253                _next_ordinal_to_read += 1;
25254                next_offset += envelope_size;
25255            }
25256
25257            let next_out_of_line = decoder.next_out_of_line();
25258            let handles_before = decoder.remaining_handles();
25259            if let Some((inlined, num_bytes, num_handles)) =
25260                fidl::encoding::decode_envelope_header(decoder, next_offset)?
25261            {
25262                let member_inline_size =
25263                    <TrelPeersInfo as fidl::encoding::TypeMarker>::inline_size(decoder.context);
25264                if inlined != (member_inline_size <= 4) {
25265                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
25266                }
25267                let inner_offset;
25268                let mut inner_depth = depth.clone();
25269                if inlined {
25270                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
25271                    inner_offset = next_offset;
25272                } else {
25273                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
25274                    inner_depth.increment()?;
25275                }
25276                let val_ref =
25277                    self.trel_peers_info.get_or_insert_with(|| fidl::new_empty!(TrelPeersInfo, D));
25278                fidl::decode!(TrelPeersInfo, D, val_ref, decoder, inner_offset, inner_depth)?;
25279                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
25280                {
25281                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
25282                }
25283                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
25284                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
25285                }
25286            }
25287
25288            next_offset += envelope_size;
25289            _next_ordinal_to_read += 1;
25290            if next_offset >= end_offset {
25291                return Ok(());
25292            }
25293
25294            // Decode unknown envelopes for gaps in ordinals.
25295            while _next_ordinal_to_read < 22 {
25296                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
25297                _next_ordinal_to_read += 1;
25298                next_offset += envelope_size;
25299            }
25300
25301            let next_out_of_line = decoder.next_out_of_line();
25302            let handles_before = decoder.remaining_handles();
25303            if let Some((inlined, num_bytes, num_handles)) =
25304                fidl::encoding::decode_envelope_header(decoder, next_offset)?
25305            {
25306                let member_inline_size =
25307                    <UpstreamDnsInfo as fidl::encoding::TypeMarker>::inline_size(decoder.context);
25308                if inlined != (member_inline_size <= 4) {
25309                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
25310                }
25311                let inner_offset;
25312                let mut inner_depth = depth.clone();
25313                if inlined {
25314                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
25315                    inner_offset = next_offset;
25316                } else {
25317                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
25318                    inner_depth.increment()?;
25319                }
25320                let val_ref = self
25321                    .upstream_dns_info
25322                    .get_or_insert_with(|| fidl::new_empty!(UpstreamDnsInfo, D));
25323                fidl::decode!(UpstreamDnsInfo, D, val_ref, decoder, inner_offset, inner_depth)?;
25324                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
25325                {
25326                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
25327                }
25328                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
25329                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
25330                }
25331            }
25332
25333            next_offset += envelope_size;
25334            _next_ordinal_to_read += 1;
25335            if next_offset >= end_offset {
25336                return Ok(());
25337            }
25338
25339            // Decode unknown envelopes for gaps in ordinals.
25340            while _next_ordinal_to_read < 23 {
25341                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
25342                _next_ordinal_to_read += 1;
25343                next_offset += envelope_size;
25344            }
25345
25346            let next_out_of_line = decoder.next_out_of_line();
25347            let handles_before = decoder.remaining_handles();
25348            if let Some((inlined, num_bytes, num_handles)) =
25349                fidl::encoding::decode_envelope_header(decoder, next_offset)?
25350            {
25351                let member_inline_size =
25352                    <Dhcp6PdInfo as fidl::encoding::TypeMarker>::inline_size(decoder.context);
25353                if inlined != (member_inline_size <= 4) {
25354                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
25355                }
25356                let inner_offset;
25357                let mut inner_depth = depth.clone();
25358                if inlined {
25359                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
25360                    inner_offset = next_offset;
25361                } else {
25362                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
25363                    inner_depth.increment()?;
25364                }
25365                let val_ref =
25366                    self.dhcp6pd_info.get_or_insert_with(|| fidl::new_empty!(Dhcp6PdInfo, D));
25367                fidl::decode!(Dhcp6PdInfo, D, val_ref, decoder, inner_offset, inner_depth)?;
25368                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
25369                {
25370                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
25371                }
25372                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
25373                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
25374                }
25375            }
25376
25377            next_offset += envelope_size;
25378            _next_ordinal_to_read += 1;
25379            if next_offset >= end_offset {
25380                return Ok(());
25381            }
25382
25383            // Decode unknown envelopes for gaps in ordinals.
25384            while _next_ordinal_to_read < 24 {
25385                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
25386                _next_ordinal_to_read += 1;
25387                next_offset += envelope_size;
25388            }
25389
25390            let next_out_of_line = decoder.next_out_of_line();
25391            let handles_before = decoder.remaining_handles();
25392            if let Some((inlined, num_bytes, num_handles)) =
25393                fidl::encoding::decode_envelope_header(decoder, next_offset)?
25394            {
25395                let member_inline_size = <fidl::encoding::Vector<LinkMetricsEntry, 64> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
25396                if inlined != (member_inline_size <= 4) {
25397                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
25398                }
25399                let inner_offset;
25400                let mut inner_depth = depth.clone();
25401                if inlined {
25402                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
25403                    inner_offset = next_offset;
25404                } else {
25405                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
25406                    inner_depth.increment()?;
25407                }
25408                let val_ref = self.link_metrics_entries.get_or_insert_with(
25409                    || fidl::new_empty!(fidl::encoding::Vector<LinkMetricsEntry, 64>, D),
25410                );
25411                fidl::decode!(fidl::encoding::Vector<LinkMetricsEntry, 64>, D, val_ref, decoder, inner_offset, inner_depth)?;
25412                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
25413                {
25414                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
25415                }
25416                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
25417                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
25418                }
25419            }
25420
25421            next_offset += envelope_size;
25422            _next_ordinal_to_read += 1;
25423            if next_offset >= end_offset {
25424                return Ok(());
25425            }
25426
25427            // Decode unknown envelopes for gaps in ordinals.
25428            while _next_ordinal_to_read < 25 {
25429                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
25430                _next_ordinal_to_read += 1;
25431                next_offset += envelope_size;
25432            }
25433
25434            let next_out_of_line = decoder.next_out_of_line();
25435            let handles_before = decoder.remaining_handles();
25436            if let Some((inlined, num_bytes, num_handles)) =
25437                fidl::encoding::decode_envelope_header(decoder, next_offset)?
25438            {
25439                let member_inline_size = <fidl_fuchsia_lowpan_device__common::BorderAgentCounters as fidl::encoding::TypeMarker>::inline_size(decoder.context);
25440                if inlined != (member_inline_size <= 4) {
25441                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
25442                }
25443                let inner_offset;
25444                let mut inner_depth = depth.clone();
25445                if inlined {
25446                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
25447                    inner_offset = next_offset;
25448                } else {
25449                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
25450                    inner_depth.increment()?;
25451                }
25452                let val_ref = self.border_agent_counters.get_or_insert_with(|| {
25453                    fidl::new_empty!(fidl_fuchsia_lowpan_device__common::BorderAgentCounters, D)
25454                });
25455                fidl::decode!(
25456                    fidl_fuchsia_lowpan_device__common::BorderAgentCounters,
25457                    D,
25458                    val_ref,
25459                    decoder,
25460                    inner_offset,
25461                    inner_depth
25462                )?;
25463                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
25464                {
25465                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
25466                }
25467                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
25468                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
25469                }
25470            }
25471
25472            next_offset += envelope_size;
25473            _next_ordinal_to_read += 1;
25474            if next_offset >= end_offset {
25475                return Ok(());
25476            }
25477
25478            // Decode unknown envelopes for gaps in ordinals.
25479            while _next_ordinal_to_read < 26 {
25480                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
25481                _next_ordinal_to_read += 1;
25482                next_offset += envelope_size;
25483            }
25484
25485            let next_out_of_line = decoder.next_out_of_line();
25486            let handles_before = decoder.remaining_handles();
25487            if let Some((inlined, num_bytes, num_handles)) =
25488                fidl::encoding::decode_envelope_header(decoder, next_offset)?
25489            {
25490                let member_inline_size =
25491                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
25492                if inlined != (member_inline_size <= 4) {
25493                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
25494                }
25495                let inner_offset;
25496                let mut inner_depth = depth.clone();
25497                if inlined {
25498                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
25499                    inner_offset = next_offset;
25500                } else {
25501                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
25502                    inner_depth.increment()?;
25503                }
25504                let val_ref =
25505                    self.multi_ail_detected.get_or_insert_with(|| fidl::new_empty!(bool, D));
25506                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
25507                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
25508                {
25509                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
25510                }
25511                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
25512                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
25513                }
25514            }
25515
25516            next_offset += envelope_size;
25517            _next_ordinal_to_read += 1;
25518            if next_offset >= end_offset {
25519                return Ok(());
25520            }
25521
25522            // Decode unknown envelopes for gaps in ordinals.
25523            while _next_ordinal_to_read < 27 {
25524                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
25525                _next_ordinal_to_read += 1;
25526                next_offset += envelope_size;
25527            }
25528
25529            let next_out_of_line = decoder.next_out_of_line();
25530            let handles_before = decoder.remaining_handles();
25531            if let Some((inlined, num_bytes, num_handles)) =
25532                fidl::encoding::decode_envelope_header(decoder, next_offset)?
25533            {
25534                let member_inline_size =
25535                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
25536                if inlined != (member_inline_size <= 4) {
25537                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
25538                }
25539                let inner_offset;
25540                let mut inner_depth = depth.clone();
25541                if inlined {
25542                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
25543                    inner_offset = next_offset;
25544                } else {
25545                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
25546                    inner_depth.increment()?;
25547                }
25548                let val_ref = self.extended_pan_id.get_or_insert_with(|| fidl::new_empty!(u64, D));
25549                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
25550                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
25551                {
25552                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
25553                }
25554                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
25555                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
25556                }
25557            }
25558
25559            next_offset += envelope_size;
25560            _next_ordinal_to_read += 1;
25561            if next_offset >= end_offset {
25562                return Ok(());
25563            }
25564
25565            // Decode unknown envelopes for gaps in ordinals.
25566            while _next_ordinal_to_read < 28 {
25567                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
25568                _next_ordinal_to_read += 1;
25569                next_offset += envelope_size;
25570            }
25571
25572            let next_out_of_line = decoder.next_out_of_line();
25573            let handles_before = decoder.remaining_handles();
25574            if let Some((inlined, num_bytes, num_handles)) =
25575                fidl::encoding::decode_envelope_header(decoder, next_offset)?
25576            {
25577                let member_inline_size = <fidl::encoding::Vector<BorderRoutingPeer, 64> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
25578                if inlined != (member_inline_size <= 4) {
25579                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
25580                }
25581                let inner_offset;
25582                let mut inner_depth = depth.clone();
25583                if inlined {
25584                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
25585                    inner_offset = next_offset;
25586                } else {
25587                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
25588                    inner_depth.increment()?;
25589                }
25590                let val_ref = self.border_routing_peers.get_or_insert_with(
25591                    || fidl::new_empty!(fidl::encoding::Vector<BorderRoutingPeer, 64>, D),
25592                );
25593                fidl::decode!(fidl::encoding::Vector<BorderRoutingPeer, 64>, D, val_ref, decoder, inner_offset, inner_depth)?;
25594                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
25595                {
25596                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
25597                }
25598                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
25599                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
25600                }
25601            }
25602
25603            next_offset += envelope_size;
25604            _next_ordinal_to_read += 1;
25605            if next_offset >= end_offset {
25606                return Ok(());
25607            }
25608
25609            // Decode unknown envelopes for gaps in ordinals.
25610            while _next_ordinal_to_read < 29 {
25611                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
25612                _next_ordinal_to_read += 1;
25613                next_offset += envelope_size;
25614            }
25615
25616            let next_out_of_line = decoder.next_out_of_line();
25617            let handles_before = decoder.remaining_handles();
25618            if let Some((inlined, num_bytes, num_handles)) =
25619                fidl::encoding::decode_envelope_header(decoder, next_offset)?
25620            {
25621                let member_inline_size = <fidl::encoding::Vector<BorderRoutingRouter, 64> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
25622                if inlined != (member_inline_size <= 4) {
25623                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
25624                }
25625                let inner_offset;
25626                let mut inner_depth = depth.clone();
25627                if inlined {
25628                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
25629                    inner_offset = next_offset;
25630                } else {
25631                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
25632                    inner_depth.increment()?;
25633                }
25634                let val_ref = self.border_routing_routers.get_or_insert_with(
25635                    || fidl::new_empty!(fidl::encoding::Vector<BorderRoutingRouter, 64>, D),
25636                );
25637                fidl::decode!(fidl::encoding::Vector<BorderRoutingRouter, 64>, D, val_ref, decoder, inner_offset, inner_depth)?;
25638                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
25639                {
25640                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
25641                }
25642                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
25643                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
25644                }
25645            }
25646
25647            next_offset += envelope_size;
25648            _next_ordinal_to_read += 1;
25649            if next_offset >= end_offset {
25650                return Ok(());
25651            }
25652
25653            // Decode unknown envelopes for gaps in ordinals.
25654            while _next_ordinal_to_read < 30 {
25655                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
25656                _next_ordinal_to_read += 1;
25657                next_offset += envelope_size;
25658            }
25659
25660            let next_out_of_line = decoder.next_out_of_line();
25661            let handles_before = decoder.remaining_handles();
25662            if let Some((inlined, num_bytes, num_handles)) =
25663                fidl::encoding::decode_envelope_header(decoder, next_offset)?
25664            {
25665                let member_inline_size =
25666                    <OperationalDataset as fidl::encoding::TypeMarker>::inline_size(
25667                        decoder.context,
25668                    );
25669                if inlined != (member_inline_size <= 4) {
25670                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
25671                }
25672                let inner_offset;
25673                let mut inner_depth = depth.clone();
25674                if inlined {
25675                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
25676                    inner_offset = next_offset;
25677                } else {
25678                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
25679                    inner_depth.increment()?;
25680                }
25681                let val_ref = self
25682                    .active_dataset
25683                    .get_or_insert_with(|| fidl::new_empty!(OperationalDataset, D));
25684                fidl::decode!(OperationalDataset, D, val_ref, decoder, inner_offset, inner_depth)?;
25685                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
25686                {
25687                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
25688                }
25689                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
25690                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
25691                }
25692            }
25693
25694            next_offset += envelope_size;
25695            _next_ordinal_to_read += 1;
25696            if next_offset >= end_offset {
25697                return Ok(());
25698            }
25699
25700            // Decode unknown envelopes for gaps in ordinals.
25701            while _next_ordinal_to_read < 31 {
25702                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
25703                _next_ordinal_to_read += 1;
25704                next_offset += envelope_size;
25705            }
25706
25707            let next_out_of_line = decoder.next_out_of_line();
25708            let handles_before = decoder.remaining_handles();
25709            if let Some((inlined, num_bytes, num_handles)) =
25710                fidl::encoding::decode_envelope_header(decoder, next_offset)?
25711            {
25712                let member_inline_size = <fidl::encoding::Vector<MultiRadioNeighborInfo, 64> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
25713                if inlined != (member_inline_size <= 4) {
25714                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
25715                }
25716                let inner_offset;
25717                let mut inner_depth = depth.clone();
25718                if inlined {
25719                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
25720                    inner_offset = next_offset;
25721                } else {
25722                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
25723                    inner_depth.increment()?;
25724                }
25725                let val_ref = self.multiradio_neighbor_info.get_or_insert_with(
25726                    || fidl::new_empty!(fidl::encoding::Vector<MultiRadioNeighborInfo, 64>, D),
25727                );
25728                fidl::decode!(fidl::encoding::Vector<MultiRadioNeighborInfo, 64>, D, val_ref, decoder, inner_offset, inner_depth)?;
25729                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
25730                {
25731                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
25732                }
25733                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
25734                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
25735                }
25736            }
25737
25738            next_offset += envelope_size;
25739            _next_ordinal_to_read += 1;
25740            if next_offset >= end_offset {
25741                return Ok(());
25742            }
25743
25744            // Decode unknown envelopes for gaps in ordinals.
25745            while _next_ordinal_to_read < 32 {
25746                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
25747                _next_ordinal_to_read += 1;
25748                next_offset += envelope_size;
25749            }
25750
25751            let next_out_of_line = decoder.next_out_of_line();
25752            let handles_before = decoder.remaining_handles();
25753            if let Some((inlined, num_bytes, num_handles)) =
25754                fidl::encoding::decode_envelope_header(decoder, next_offset)?
25755            {
25756                let member_inline_size = <fidl::encoding::Vector<RouterInfo, 64> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
25757                if inlined != (member_inline_size <= 4) {
25758                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
25759                }
25760                let inner_offset;
25761                let mut inner_depth = depth.clone();
25762                if inlined {
25763                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
25764                    inner_offset = next_offset;
25765                } else {
25766                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
25767                    inner_depth.increment()?;
25768                }
25769                let val_ref = self.router_info.get_or_insert_with(
25770                    || fidl::new_empty!(fidl::encoding::Vector<RouterInfo, 64>, D),
25771                );
25772                fidl::decode!(fidl::encoding::Vector<RouterInfo, 64>, D, val_ref, decoder, inner_offset, inner_depth)?;
25773                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
25774                {
25775                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
25776                }
25777                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
25778                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
25779                }
25780            }
25781
25782            next_offset += envelope_size;
25783            _next_ordinal_to_read += 1;
25784            if next_offset >= end_offset {
25785                return Ok(());
25786            }
25787
25788            // Decode unknown envelopes for gaps in ordinals.
25789            while _next_ordinal_to_read < 33 {
25790                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
25791                _next_ordinal_to_read += 1;
25792                next_offset += envelope_size;
25793            }
25794
25795            let next_out_of_line = decoder.next_out_of_line();
25796            let handles_before = decoder.remaining_handles();
25797            if let Some((inlined, num_bytes, num_handles)) =
25798                fidl::encoding::decode_envelope_header(decoder, next_offset)?
25799            {
25800                let member_inline_size =
25801                    <NetworkData as fidl::encoding::TypeMarker>::inline_size(decoder.context);
25802                if inlined != (member_inline_size <= 4) {
25803                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
25804                }
25805                let inner_offset;
25806                let mut inner_depth = depth.clone();
25807                if inlined {
25808                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
25809                    inner_offset = next_offset;
25810                } else {
25811                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
25812                    inner_depth.increment()?;
25813                }
25814                let val_ref =
25815                    self.network_data.get_or_insert_with(|| fidl::new_empty!(NetworkData, D));
25816                fidl::decode!(NetworkData, D, val_ref, decoder, inner_offset, inner_depth)?;
25817                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
25818                {
25819                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
25820                }
25821                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
25822                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
25823                }
25824            }
25825
25826            next_offset += envelope_size;
25827
25828            // Decode the remaining unknown envelopes.
25829            while next_offset < end_offset {
25830                _next_ordinal_to_read += 1;
25831                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
25832                next_offset += envelope_size;
25833            }
25834
25835            Ok(())
25836        }
25837    }
25838
25839    impl TrelCounters {
25840        #[inline(always)]
25841        fn max_ordinal_present(&self) -> u64 {
25842            if let Some(_) = self.tx_packets {
25843                return 5;
25844            }
25845            if let Some(_) = self.tx_failure {
25846                return 4;
25847            }
25848            if let Some(_) = self.tx_bytes {
25849                return 3;
25850            }
25851            if let Some(_) = self.rx_packets {
25852                return 2;
25853            }
25854            if let Some(_) = self.rx_bytes {
25855                return 1;
25856            }
25857            0
25858        }
25859    }
25860
25861    impl fidl::encoding::ValueTypeMarker for TrelCounters {
25862        type Borrowed<'a> = &'a Self;
25863        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
25864            value
25865        }
25866    }
25867
25868    unsafe impl fidl::encoding::TypeMarker for TrelCounters {
25869        type Owned = Self;
25870
25871        #[inline(always)]
25872        fn inline_align(_context: fidl::encoding::Context) -> usize {
25873            8
25874        }
25875
25876        #[inline(always)]
25877        fn inline_size(_context: fidl::encoding::Context) -> usize {
25878            16
25879        }
25880    }
25881
25882    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<TrelCounters, D>
25883        for &TrelCounters
25884    {
25885        unsafe fn encode(
25886            self,
25887            encoder: &mut fidl::encoding::Encoder<'_, D>,
25888            offset: usize,
25889            mut depth: fidl::encoding::Depth,
25890        ) -> fidl::Result<()> {
25891            encoder.debug_check_bounds::<TrelCounters>(offset);
25892            // Vector header
25893            let max_ordinal: u64 = self.max_ordinal_present();
25894            encoder.write_num(max_ordinal, offset);
25895            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
25896            // Calling encoder.out_of_line_offset(0) is not allowed.
25897            if max_ordinal == 0 {
25898                return Ok(());
25899            }
25900            depth.increment()?;
25901            let envelope_size = 8;
25902            let bytes_len = max_ordinal as usize * envelope_size;
25903            #[allow(unused_variables)]
25904            let offset = encoder.out_of_line_offset(bytes_len);
25905            let mut _prev_end_offset: usize = 0;
25906            if 1 > max_ordinal {
25907                return Ok(());
25908            }
25909
25910            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
25911            // are envelope_size bytes.
25912            let cur_offset: usize = (1 - 1) * envelope_size;
25913
25914            // Zero reserved fields.
25915            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
25916
25917            // Safety:
25918            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
25919            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
25920            //   envelope_size bytes, there is always sufficient room.
25921            fidl::encoding::encode_in_envelope_optional::<u64, D>(
25922                self.rx_bytes.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
25923                encoder,
25924                offset + cur_offset,
25925                depth,
25926            )?;
25927
25928            _prev_end_offset = cur_offset + envelope_size;
25929            if 2 > max_ordinal {
25930                return Ok(());
25931            }
25932
25933            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
25934            // are envelope_size bytes.
25935            let cur_offset: usize = (2 - 1) * envelope_size;
25936
25937            // Zero reserved fields.
25938            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
25939
25940            // Safety:
25941            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
25942            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
25943            //   envelope_size bytes, there is always sufficient room.
25944            fidl::encoding::encode_in_envelope_optional::<u64, D>(
25945                self.rx_packets.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
25946                encoder,
25947                offset + cur_offset,
25948                depth,
25949            )?;
25950
25951            _prev_end_offset = cur_offset + envelope_size;
25952            if 3 > max_ordinal {
25953                return Ok(());
25954            }
25955
25956            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
25957            // are envelope_size bytes.
25958            let cur_offset: usize = (3 - 1) * envelope_size;
25959
25960            // Zero reserved fields.
25961            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
25962
25963            // Safety:
25964            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
25965            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
25966            //   envelope_size bytes, there is always sufficient room.
25967            fidl::encoding::encode_in_envelope_optional::<u64, D>(
25968                self.tx_bytes.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
25969                encoder,
25970                offset + cur_offset,
25971                depth,
25972            )?;
25973
25974            _prev_end_offset = cur_offset + envelope_size;
25975            if 4 > max_ordinal {
25976                return Ok(());
25977            }
25978
25979            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
25980            // are envelope_size bytes.
25981            let cur_offset: usize = (4 - 1) * envelope_size;
25982
25983            // Zero reserved fields.
25984            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
25985
25986            // Safety:
25987            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
25988            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
25989            //   envelope_size bytes, there is always sufficient room.
25990            fidl::encoding::encode_in_envelope_optional::<u64, D>(
25991                self.tx_failure.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
25992                encoder,
25993                offset + cur_offset,
25994                depth,
25995            )?;
25996
25997            _prev_end_offset = cur_offset + envelope_size;
25998            if 5 > max_ordinal {
25999                return Ok(());
26000            }
26001
26002            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
26003            // are envelope_size bytes.
26004            let cur_offset: usize = (5 - 1) * envelope_size;
26005
26006            // Zero reserved fields.
26007            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
26008
26009            // Safety:
26010            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
26011            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
26012            //   envelope_size bytes, there is always sufficient room.
26013            fidl::encoding::encode_in_envelope_optional::<u64, D>(
26014                self.tx_packets.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
26015                encoder,
26016                offset + cur_offset,
26017                depth,
26018            )?;
26019
26020            _prev_end_offset = cur_offset + envelope_size;
26021
26022            Ok(())
26023        }
26024    }
26025
26026    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for TrelCounters {
26027        #[inline(always)]
26028        fn new_empty() -> Self {
26029            Self::default()
26030        }
26031
26032        unsafe fn decode(
26033            &mut self,
26034            decoder: &mut fidl::encoding::Decoder<'_, D>,
26035            offset: usize,
26036            mut depth: fidl::encoding::Depth,
26037        ) -> fidl::Result<()> {
26038            decoder.debug_check_bounds::<Self>(offset);
26039            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
26040                None => return Err(fidl::Error::NotNullable),
26041                Some(len) => len,
26042            };
26043            // Calling decoder.out_of_line_offset(0) is not allowed.
26044            if len == 0 {
26045                return Ok(());
26046            };
26047            depth.increment()?;
26048            let envelope_size = 8;
26049            let bytes_len = len * envelope_size;
26050            let offset = decoder.out_of_line_offset(bytes_len)?;
26051            // Decode the envelope for each type.
26052            let mut _next_ordinal_to_read = 0;
26053            let mut next_offset = offset;
26054            let end_offset = offset + bytes_len;
26055            _next_ordinal_to_read += 1;
26056            if next_offset >= end_offset {
26057                return Ok(());
26058            }
26059
26060            // Decode unknown envelopes for gaps in ordinals.
26061            while _next_ordinal_to_read < 1 {
26062                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
26063                _next_ordinal_to_read += 1;
26064                next_offset += envelope_size;
26065            }
26066
26067            let next_out_of_line = decoder.next_out_of_line();
26068            let handles_before = decoder.remaining_handles();
26069            if let Some((inlined, num_bytes, num_handles)) =
26070                fidl::encoding::decode_envelope_header(decoder, next_offset)?
26071            {
26072                let member_inline_size =
26073                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
26074                if inlined != (member_inline_size <= 4) {
26075                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
26076                }
26077                let inner_offset;
26078                let mut inner_depth = depth.clone();
26079                if inlined {
26080                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
26081                    inner_offset = next_offset;
26082                } else {
26083                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
26084                    inner_depth.increment()?;
26085                }
26086                let val_ref = self.rx_bytes.get_or_insert_with(|| fidl::new_empty!(u64, D));
26087                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
26088                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
26089                {
26090                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
26091                }
26092                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
26093                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
26094                }
26095            }
26096
26097            next_offset += envelope_size;
26098            _next_ordinal_to_read += 1;
26099            if next_offset >= end_offset {
26100                return Ok(());
26101            }
26102
26103            // Decode unknown envelopes for gaps in ordinals.
26104            while _next_ordinal_to_read < 2 {
26105                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
26106                _next_ordinal_to_read += 1;
26107                next_offset += envelope_size;
26108            }
26109
26110            let next_out_of_line = decoder.next_out_of_line();
26111            let handles_before = decoder.remaining_handles();
26112            if let Some((inlined, num_bytes, num_handles)) =
26113                fidl::encoding::decode_envelope_header(decoder, next_offset)?
26114            {
26115                let member_inline_size =
26116                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
26117                if inlined != (member_inline_size <= 4) {
26118                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
26119                }
26120                let inner_offset;
26121                let mut inner_depth = depth.clone();
26122                if inlined {
26123                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
26124                    inner_offset = next_offset;
26125                } else {
26126                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
26127                    inner_depth.increment()?;
26128                }
26129                let val_ref = self.rx_packets.get_or_insert_with(|| fidl::new_empty!(u64, D));
26130                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
26131                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
26132                {
26133                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
26134                }
26135                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
26136                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
26137                }
26138            }
26139
26140            next_offset += envelope_size;
26141            _next_ordinal_to_read += 1;
26142            if next_offset >= end_offset {
26143                return Ok(());
26144            }
26145
26146            // Decode unknown envelopes for gaps in ordinals.
26147            while _next_ordinal_to_read < 3 {
26148                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
26149                _next_ordinal_to_read += 1;
26150                next_offset += envelope_size;
26151            }
26152
26153            let next_out_of_line = decoder.next_out_of_line();
26154            let handles_before = decoder.remaining_handles();
26155            if let Some((inlined, num_bytes, num_handles)) =
26156                fidl::encoding::decode_envelope_header(decoder, next_offset)?
26157            {
26158                let member_inline_size =
26159                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
26160                if inlined != (member_inline_size <= 4) {
26161                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
26162                }
26163                let inner_offset;
26164                let mut inner_depth = depth.clone();
26165                if inlined {
26166                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
26167                    inner_offset = next_offset;
26168                } else {
26169                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
26170                    inner_depth.increment()?;
26171                }
26172                let val_ref = self.tx_bytes.get_or_insert_with(|| fidl::new_empty!(u64, D));
26173                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
26174                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
26175                {
26176                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
26177                }
26178                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
26179                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
26180                }
26181            }
26182
26183            next_offset += envelope_size;
26184            _next_ordinal_to_read += 1;
26185            if next_offset >= end_offset {
26186                return Ok(());
26187            }
26188
26189            // Decode unknown envelopes for gaps in ordinals.
26190            while _next_ordinal_to_read < 4 {
26191                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
26192                _next_ordinal_to_read += 1;
26193                next_offset += envelope_size;
26194            }
26195
26196            let next_out_of_line = decoder.next_out_of_line();
26197            let handles_before = decoder.remaining_handles();
26198            if let Some((inlined, num_bytes, num_handles)) =
26199                fidl::encoding::decode_envelope_header(decoder, next_offset)?
26200            {
26201                let member_inline_size =
26202                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
26203                if inlined != (member_inline_size <= 4) {
26204                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
26205                }
26206                let inner_offset;
26207                let mut inner_depth = depth.clone();
26208                if inlined {
26209                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
26210                    inner_offset = next_offset;
26211                } else {
26212                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
26213                    inner_depth.increment()?;
26214                }
26215                let val_ref = self.tx_failure.get_or_insert_with(|| fidl::new_empty!(u64, D));
26216                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
26217                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
26218                {
26219                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
26220                }
26221                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
26222                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
26223                }
26224            }
26225
26226            next_offset += envelope_size;
26227            _next_ordinal_to_read += 1;
26228            if next_offset >= end_offset {
26229                return Ok(());
26230            }
26231
26232            // Decode unknown envelopes for gaps in ordinals.
26233            while _next_ordinal_to_read < 5 {
26234                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
26235                _next_ordinal_to_read += 1;
26236                next_offset += envelope_size;
26237            }
26238
26239            let next_out_of_line = decoder.next_out_of_line();
26240            let handles_before = decoder.remaining_handles();
26241            if let Some((inlined, num_bytes, num_handles)) =
26242                fidl::encoding::decode_envelope_header(decoder, next_offset)?
26243            {
26244                let member_inline_size =
26245                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
26246                if inlined != (member_inline_size <= 4) {
26247                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
26248                }
26249                let inner_offset;
26250                let mut inner_depth = depth.clone();
26251                if inlined {
26252                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
26253                    inner_offset = next_offset;
26254                } else {
26255                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
26256                    inner_depth.increment()?;
26257                }
26258                let val_ref = self.tx_packets.get_or_insert_with(|| fidl::new_empty!(u64, D));
26259                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
26260                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
26261                {
26262                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
26263                }
26264                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
26265                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
26266                }
26267            }
26268
26269            next_offset += envelope_size;
26270
26271            // Decode the remaining unknown envelopes.
26272            while next_offset < end_offset {
26273                _next_ordinal_to_read += 1;
26274                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
26275                next_offset += envelope_size;
26276            }
26277
26278            Ok(())
26279        }
26280    }
26281
26282    impl TrelPeersInfo {
26283        #[inline(always)]
26284        fn max_ordinal_present(&self) -> u64 {
26285            if let Some(_) = self.num_trel_peers {
26286                return 1;
26287            }
26288            0
26289        }
26290    }
26291
26292    impl fidl::encoding::ValueTypeMarker for TrelPeersInfo {
26293        type Borrowed<'a> = &'a Self;
26294        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
26295            value
26296        }
26297    }
26298
26299    unsafe impl fidl::encoding::TypeMarker for TrelPeersInfo {
26300        type Owned = Self;
26301
26302        #[inline(always)]
26303        fn inline_align(_context: fidl::encoding::Context) -> usize {
26304            8
26305        }
26306
26307        #[inline(always)]
26308        fn inline_size(_context: fidl::encoding::Context) -> usize {
26309            16
26310        }
26311    }
26312
26313    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<TrelPeersInfo, D>
26314        for &TrelPeersInfo
26315    {
26316        unsafe fn encode(
26317            self,
26318            encoder: &mut fidl::encoding::Encoder<'_, D>,
26319            offset: usize,
26320            mut depth: fidl::encoding::Depth,
26321        ) -> fidl::Result<()> {
26322            encoder.debug_check_bounds::<TrelPeersInfo>(offset);
26323            // Vector header
26324            let max_ordinal: u64 = self.max_ordinal_present();
26325            encoder.write_num(max_ordinal, offset);
26326            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
26327            // Calling encoder.out_of_line_offset(0) is not allowed.
26328            if max_ordinal == 0 {
26329                return Ok(());
26330            }
26331            depth.increment()?;
26332            let envelope_size = 8;
26333            let bytes_len = max_ordinal as usize * envelope_size;
26334            #[allow(unused_variables)]
26335            let offset = encoder.out_of_line_offset(bytes_len);
26336            let mut _prev_end_offset: usize = 0;
26337            if 1 > max_ordinal {
26338                return Ok(());
26339            }
26340
26341            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
26342            // are envelope_size bytes.
26343            let cur_offset: usize = (1 - 1) * envelope_size;
26344
26345            // Zero reserved fields.
26346            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
26347
26348            // Safety:
26349            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
26350            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
26351            //   envelope_size bytes, there is always sufficient room.
26352            fidl::encoding::encode_in_envelope_optional::<u16, D>(
26353                self.num_trel_peers.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
26354                encoder,
26355                offset + cur_offset,
26356                depth,
26357            )?;
26358
26359            _prev_end_offset = cur_offset + envelope_size;
26360
26361            Ok(())
26362        }
26363    }
26364
26365    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for TrelPeersInfo {
26366        #[inline(always)]
26367        fn new_empty() -> Self {
26368            Self::default()
26369        }
26370
26371        unsafe fn decode(
26372            &mut self,
26373            decoder: &mut fidl::encoding::Decoder<'_, D>,
26374            offset: usize,
26375            mut depth: fidl::encoding::Depth,
26376        ) -> fidl::Result<()> {
26377            decoder.debug_check_bounds::<Self>(offset);
26378            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
26379                None => return Err(fidl::Error::NotNullable),
26380                Some(len) => len,
26381            };
26382            // Calling decoder.out_of_line_offset(0) is not allowed.
26383            if len == 0 {
26384                return Ok(());
26385            };
26386            depth.increment()?;
26387            let envelope_size = 8;
26388            let bytes_len = len * envelope_size;
26389            let offset = decoder.out_of_line_offset(bytes_len)?;
26390            // Decode the envelope for each type.
26391            let mut _next_ordinal_to_read = 0;
26392            let mut next_offset = offset;
26393            let end_offset = offset + bytes_len;
26394            _next_ordinal_to_read += 1;
26395            if next_offset >= end_offset {
26396                return Ok(());
26397            }
26398
26399            // Decode unknown envelopes for gaps in ordinals.
26400            while _next_ordinal_to_read < 1 {
26401                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
26402                _next_ordinal_to_read += 1;
26403                next_offset += envelope_size;
26404            }
26405
26406            let next_out_of_line = decoder.next_out_of_line();
26407            let handles_before = decoder.remaining_handles();
26408            if let Some((inlined, num_bytes, num_handles)) =
26409                fidl::encoding::decode_envelope_header(decoder, next_offset)?
26410            {
26411                let member_inline_size =
26412                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
26413                if inlined != (member_inline_size <= 4) {
26414                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
26415                }
26416                let inner_offset;
26417                let mut inner_depth = depth.clone();
26418                if inlined {
26419                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
26420                    inner_offset = next_offset;
26421                } else {
26422                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
26423                    inner_depth.increment()?;
26424                }
26425                let val_ref = self.num_trel_peers.get_or_insert_with(|| fidl::new_empty!(u16, D));
26426                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
26427                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
26428                {
26429                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
26430                }
26431                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
26432                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
26433                }
26434            }
26435
26436            next_offset += envelope_size;
26437
26438            // Decode the remaining unknown envelopes.
26439            while next_offset < end_offset {
26440                _next_ordinal_to_read += 1;
26441                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
26442                next_offset += envelope_size;
26443            }
26444
26445            Ok(())
26446        }
26447    }
26448
26449    impl UpstreamDnsCounters {
26450        #[inline(always)]
26451        fn max_ordinal_present(&self) -> u64 {
26452            if let Some(_) = self.failures {
26453                return 3;
26454            }
26455            if let Some(_) = self.responses {
26456                return 2;
26457            }
26458            if let Some(_) = self.queries {
26459                return 1;
26460            }
26461            0
26462        }
26463    }
26464
26465    impl fidl::encoding::ValueTypeMarker for UpstreamDnsCounters {
26466        type Borrowed<'a> = &'a Self;
26467        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
26468            value
26469        }
26470    }
26471
26472    unsafe impl fidl::encoding::TypeMarker for UpstreamDnsCounters {
26473        type Owned = Self;
26474
26475        #[inline(always)]
26476        fn inline_align(_context: fidl::encoding::Context) -> usize {
26477            8
26478        }
26479
26480        #[inline(always)]
26481        fn inline_size(_context: fidl::encoding::Context) -> usize {
26482            16
26483        }
26484    }
26485
26486    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<UpstreamDnsCounters, D>
26487        for &UpstreamDnsCounters
26488    {
26489        unsafe fn encode(
26490            self,
26491            encoder: &mut fidl::encoding::Encoder<'_, D>,
26492            offset: usize,
26493            mut depth: fidl::encoding::Depth,
26494        ) -> fidl::Result<()> {
26495            encoder.debug_check_bounds::<UpstreamDnsCounters>(offset);
26496            // Vector header
26497            let max_ordinal: u64 = self.max_ordinal_present();
26498            encoder.write_num(max_ordinal, offset);
26499            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
26500            // Calling encoder.out_of_line_offset(0) is not allowed.
26501            if max_ordinal == 0 {
26502                return Ok(());
26503            }
26504            depth.increment()?;
26505            let envelope_size = 8;
26506            let bytes_len = max_ordinal as usize * envelope_size;
26507            #[allow(unused_variables)]
26508            let offset = encoder.out_of_line_offset(bytes_len);
26509            let mut _prev_end_offset: usize = 0;
26510            if 1 > max_ordinal {
26511                return Ok(());
26512            }
26513
26514            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
26515            // are envelope_size bytes.
26516            let cur_offset: usize = (1 - 1) * envelope_size;
26517
26518            // Zero reserved fields.
26519            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
26520
26521            // Safety:
26522            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
26523            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
26524            //   envelope_size bytes, there is always sufficient room.
26525            fidl::encoding::encode_in_envelope_optional::<u32, D>(
26526                self.queries.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
26527                encoder,
26528                offset + cur_offset,
26529                depth,
26530            )?;
26531
26532            _prev_end_offset = cur_offset + envelope_size;
26533            if 2 > max_ordinal {
26534                return Ok(());
26535            }
26536
26537            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
26538            // are envelope_size bytes.
26539            let cur_offset: usize = (2 - 1) * envelope_size;
26540
26541            // Zero reserved fields.
26542            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
26543
26544            // Safety:
26545            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
26546            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
26547            //   envelope_size bytes, there is always sufficient room.
26548            fidl::encoding::encode_in_envelope_optional::<u32, D>(
26549                self.responses.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
26550                encoder,
26551                offset + cur_offset,
26552                depth,
26553            )?;
26554
26555            _prev_end_offset = cur_offset + envelope_size;
26556            if 3 > max_ordinal {
26557                return Ok(());
26558            }
26559
26560            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
26561            // are envelope_size bytes.
26562            let cur_offset: usize = (3 - 1) * envelope_size;
26563
26564            // Zero reserved fields.
26565            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
26566
26567            // Safety:
26568            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
26569            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
26570            //   envelope_size bytes, there is always sufficient room.
26571            fidl::encoding::encode_in_envelope_optional::<u32, D>(
26572                self.failures.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
26573                encoder,
26574                offset + cur_offset,
26575                depth,
26576            )?;
26577
26578            _prev_end_offset = cur_offset + envelope_size;
26579
26580            Ok(())
26581        }
26582    }
26583
26584    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for UpstreamDnsCounters {
26585        #[inline(always)]
26586        fn new_empty() -> Self {
26587            Self::default()
26588        }
26589
26590        unsafe fn decode(
26591            &mut self,
26592            decoder: &mut fidl::encoding::Decoder<'_, D>,
26593            offset: usize,
26594            mut depth: fidl::encoding::Depth,
26595        ) -> fidl::Result<()> {
26596            decoder.debug_check_bounds::<Self>(offset);
26597            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
26598                None => return Err(fidl::Error::NotNullable),
26599                Some(len) => len,
26600            };
26601            // Calling decoder.out_of_line_offset(0) is not allowed.
26602            if len == 0 {
26603                return Ok(());
26604            };
26605            depth.increment()?;
26606            let envelope_size = 8;
26607            let bytes_len = len * envelope_size;
26608            let offset = decoder.out_of_line_offset(bytes_len)?;
26609            // Decode the envelope for each type.
26610            let mut _next_ordinal_to_read = 0;
26611            let mut next_offset = offset;
26612            let end_offset = offset + bytes_len;
26613            _next_ordinal_to_read += 1;
26614            if next_offset >= end_offset {
26615                return Ok(());
26616            }
26617
26618            // Decode unknown envelopes for gaps in ordinals.
26619            while _next_ordinal_to_read < 1 {
26620                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
26621                _next_ordinal_to_read += 1;
26622                next_offset += envelope_size;
26623            }
26624
26625            let next_out_of_line = decoder.next_out_of_line();
26626            let handles_before = decoder.remaining_handles();
26627            if let Some((inlined, num_bytes, num_handles)) =
26628                fidl::encoding::decode_envelope_header(decoder, next_offset)?
26629            {
26630                let member_inline_size =
26631                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
26632                if inlined != (member_inline_size <= 4) {
26633                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
26634                }
26635                let inner_offset;
26636                let mut inner_depth = depth.clone();
26637                if inlined {
26638                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
26639                    inner_offset = next_offset;
26640                } else {
26641                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
26642                    inner_depth.increment()?;
26643                }
26644                let val_ref = self.queries.get_or_insert_with(|| fidl::new_empty!(u32, D));
26645                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
26646                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
26647                {
26648                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
26649                }
26650                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
26651                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
26652                }
26653            }
26654
26655            next_offset += envelope_size;
26656            _next_ordinal_to_read += 1;
26657            if next_offset >= end_offset {
26658                return Ok(());
26659            }
26660
26661            // Decode unknown envelopes for gaps in ordinals.
26662            while _next_ordinal_to_read < 2 {
26663                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
26664                _next_ordinal_to_read += 1;
26665                next_offset += envelope_size;
26666            }
26667
26668            let next_out_of_line = decoder.next_out_of_line();
26669            let handles_before = decoder.remaining_handles();
26670            if let Some((inlined, num_bytes, num_handles)) =
26671                fidl::encoding::decode_envelope_header(decoder, next_offset)?
26672            {
26673                let member_inline_size =
26674                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
26675                if inlined != (member_inline_size <= 4) {
26676                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
26677                }
26678                let inner_offset;
26679                let mut inner_depth = depth.clone();
26680                if inlined {
26681                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
26682                    inner_offset = next_offset;
26683                } else {
26684                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
26685                    inner_depth.increment()?;
26686                }
26687                let val_ref = self.responses.get_or_insert_with(|| fidl::new_empty!(u32, D));
26688                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
26689                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
26690                {
26691                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
26692                }
26693                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
26694                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
26695                }
26696            }
26697
26698            next_offset += envelope_size;
26699            _next_ordinal_to_read += 1;
26700            if next_offset >= end_offset {
26701                return Ok(());
26702            }
26703
26704            // Decode unknown envelopes for gaps in ordinals.
26705            while _next_ordinal_to_read < 3 {
26706                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
26707                _next_ordinal_to_read += 1;
26708                next_offset += envelope_size;
26709            }
26710
26711            let next_out_of_line = decoder.next_out_of_line();
26712            let handles_before = decoder.remaining_handles();
26713            if let Some((inlined, num_bytes, num_handles)) =
26714                fidl::encoding::decode_envelope_header(decoder, next_offset)?
26715            {
26716                let member_inline_size =
26717                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
26718                if inlined != (member_inline_size <= 4) {
26719                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
26720                }
26721                let inner_offset;
26722                let mut inner_depth = depth.clone();
26723                if inlined {
26724                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
26725                    inner_offset = next_offset;
26726                } else {
26727                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
26728                    inner_depth.increment()?;
26729                }
26730                let val_ref = self.failures.get_or_insert_with(|| fidl::new_empty!(u32, D));
26731                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
26732                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
26733                {
26734                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
26735                }
26736                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
26737                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
26738                }
26739            }
26740
26741            next_offset += envelope_size;
26742
26743            // Decode the remaining unknown envelopes.
26744            while next_offset < end_offset {
26745                _next_ordinal_to_read += 1;
26746                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
26747                next_offset += envelope_size;
26748            }
26749
26750            Ok(())
26751        }
26752    }
26753
26754    impl UpstreamDnsInfo {
26755        #[inline(always)]
26756        fn max_ordinal_present(&self) -> u64 {
26757            if let Some(_) = self.upstream_dns_query_state {
26758                return 1;
26759            }
26760            0
26761        }
26762    }
26763
26764    impl fidl::encoding::ValueTypeMarker for UpstreamDnsInfo {
26765        type Borrowed<'a> = &'a Self;
26766        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
26767            value
26768        }
26769    }
26770
26771    unsafe impl fidl::encoding::TypeMarker for UpstreamDnsInfo {
26772        type Owned = Self;
26773
26774        #[inline(always)]
26775        fn inline_align(_context: fidl::encoding::Context) -> usize {
26776            8
26777        }
26778
26779        #[inline(always)]
26780        fn inline_size(_context: fidl::encoding::Context) -> usize {
26781            16
26782        }
26783    }
26784
26785    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<UpstreamDnsInfo, D>
26786        for &UpstreamDnsInfo
26787    {
26788        unsafe fn encode(
26789            self,
26790            encoder: &mut fidl::encoding::Encoder<'_, D>,
26791            offset: usize,
26792            mut depth: fidl::encoding::Depth,
26793        ) -> fidl::Result<()> {
26794            encoder.debug_check_bounds::<UpstreamDnsInfo>(offset);
26795            // Vector header
26796            let max_ordinal: u64 = self.max_ordinal_present();
26797            encoder.write_num(max_ordinal, offset);
26798            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
26799            // Calling encoder.out_of_line_offset(0) is not allowed.
26800            if max_ordinal == 0 {
26801                return Ok(());
26802            }
26803            depth.increment()?;
26804            let envelope_size = 8;
26805            let bytes_len = max_ordinal as usize * envelope_size;
26806            #[allow(unused_variables)]
26807            let offset = encoder.out_of_line_offset(bytes_len);
26808            let mut _prev_end_offset: usize = 0;
26809            if 1 > max_ordinal {
26810                return Ok(());
26811            }
26812
26813            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
26814            // are envelope_size bytes.
26815            let cur_offset: usize = (1 - 1) * envelope_size;
26816
26817            // Zero reserved fields.
26818            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
26819
26820            // Safety:
26821            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
26822            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
26823            //   envelope_size bytes, there is always sufficient room.
26824            fidl::encoding::encode_in_envelope_optional::<UpstreamDnsQueryState, D>(
26825                self.upstream_dns_query_state
26826                    .as_ref()
26827                    .map(<UpstreamDnsQueryState as fidl::encoding::ValueTypeMarker>::borrow),
26828                encoder,
26829                offset + cur_offset,
26830                depth,
26831            )?;
26832
26833            _prev_end_offset = cur_offset + envelope_size;
26834
26835            Ok(())
26836        }
26837    }
26838
26839    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for UpstreamDnsInfo {
26840        #[inline(always)]
26841        fn new_empty() -> Self {
26842            Self::default()
26843        }
26844
26845        unsafe fn decode(
26846            &mut self,
26847            decoder: &mut fidl::encoding::Decoder<'_, D>,
26848            offset: usize,
26849            mut depth: fidl::encoding::Depth,
26850        ) -> fidl::Result<()> {
26851            decoder.debug_check_bounds::<Self>(offset);
26852            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
26853                None => return Err(fidl::Error::NotNullable),
26854                Some(len) => len,
26855            };
26856            // Calling decoder.out_of_line_offset(0) is not allowed.
26857            if len == 0 {
26858                return Ok(());
26859            };
26860            depth.increment()?;
26861            let envelope_size = 8;
26862            let bytes_len = len * envelope_size;
26863            let offset = decoder.out_of_line_offset(bytes_len)?;
26864            // Decode the envelope for each type.
26865            let mut _next_ordinal_to_read = 0;
26866            let mut next_offset = offset;
26867            let end_offset = offset + bytes_len;
26868            _next_ordinal_to_read += 1;
26869            if next_offset >= end_offset {
26870                return Ok(());
26871            }
26872
26873            // Decode unknown envelopes for gaps in ordinals.
26874            while _next_ordinal_to_read < 1 {
26875                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
26876                _next_ordinal_to_read += 1;
26877                next_offset += envelope_size;
26878            }
26879
26880            let next_out_of_line = decoder.next_out_of_line();
26881            let handles_before = decoder.remaining_handles();
26882            if let Some((inlined, num_bytes, num_handles)) =
26883                fidl::encoding::decode_envelope_header(decoder, next_offset)?
26884            {
26885                let member_inline_size =
26886                    <UpstreamDnsQueryState as fidl::encoding::TypeMarker>::inline_size(
26887                        decoder.context,
26888                    );
26889                if inlined != (member_inline_size <= 4) {
26890                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
26891                }
26892                let inner_offset;
26893                let mut inner_depth = depth.clone();
26894                if inlined {
26895                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
26896                    inner_offset = next_offset;
26897                } else {
26898                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
26899                    inner_depth.increment()?;
26900                }
26901                let val_ref = self
26902                    .upstream_dns_query_state
26903                    .get_or_insert_with(|| fidl::new_empty!(UpstreamDnsQueryState, D));
26904                fidl::decode!(
26905                    UpstreamDnsQueryState,
26906                    D,
26907                    val_ref,
26908                    decoder,
26909                    inner_offset,
26910                    inner_depth
26911                )?;
26912                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
26913                {
26914                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
26915                }
26916                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
26917                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
26918                }
26919            }
26920
26921            next_offset += envelope_size;
26922
26923            // Decode the remaining unknown envelopes.
26924            while next_offset < end_offset {
26925                _next_ordinal_to_read += 1;
26926                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
26927                next_offset += envelope_size;
26928            }
26929
26930            Ok(())
26931        }
26932    }
26933
26934    impl fidl::encoding::ValueTypeMarker for JoinParams {
26935        type Borrowed<'a> = &'a Self;
26936        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
26937            value
26938        }
26939    }
26940
26941    unsafe impl fidl::encoding::TypeMarker for JoinParams {
26942        type Owned = Self;
26943
26944        #[inline(always)]
26945        fn inline_align(_context: fidl::encoding::Context) -> usize {
26946            8
26947        }
26948
26949        #[inline(always)]
26950        fn inline_size(_context: fidl::encoding::Context) -> usize {
26951            16
26952        }
26953    }
26954
26955    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<JoinParams, D>
26956        for &JoinParams
26957    {
26958        #[inline]
26959        unsafe fn encode(
26960            self,
26961            encoder: &mut fidl::encoding::Encoder<'_, D>,
26962            offset: usize,
26963            _depth: fidl::encoding::Depth,
26964        ) -> fidl::Result<()> {
26965            encoder.debug_check_bounds::<JoinParams>(offset);
26966            encoder.write_num::<u64>(self.ordinal(), offset);
26967            match self {
26968            JoinParams::ProvisioningParameter(ref val) => {
26969                fidl::encoding::encode_in_envelope::<fidl_fuchsia_lowpan_device__common::ProvisioningParams, D>(
26970                    <fidl_fuchsia_lowpan_device__common::ProvisioningParams as fidl::encoding::ValueTypeMarker>::borrow(val),
26971                    encoder, offset + 8, _depth
26972                )
26973            }
26974            JoinParams::JoinerParameter(ref val) => {
26975                fidl::encoding::encode_in_envelope::<JoinerCommissioningParams, D>(
26976                    <JoinerCommissioningParams as fidl::encoding::ValueTypeMarker>::borrow(val),
26977                    encoder, offset + 8, _depth
26978                )
26979            }
26980            JoinParams::__SourceBreaking { .. } => Err(fidl::Error::UnknownUnionTag),
26981        }
26982        }
26983    }
26984
26985    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for JoinParams {
26986        #[inline(always)]
26987        fn new_empty() -> Self {
26988            Self::__SourceBreaking { unknown_ordinal: 0 }
26989        }
26990
26991        #[inline]
26992        unsafe fn decode(
26993            &mut self,
26994            decoder: &mut fidl::encoding::Decoder<'_, D>,
26995            offset: usize,
26996            mut depth: fidl::encoding::Depth,
26997        ) -> fidl::Result<()> {
26998            decoder.debug_check_bounds::<Self>(offset);
26999            #[allow(unused_variables)]
27000            let next_out_of_line = decoder.next_out_of_line();
27001            let handles_before = decoder.remaining_handles();
27002            let (ordinal, inlined, num_bytes, num_handles) =
27003                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
27004
27005            let member_inline_size = match ordinal {
27006            1 => <fidl_fuchsia_lowpan_device__common::ProvisioningParams as fidl::encoding::TypeMarker>::inline_size(decoder.context),
27007            2 => <JoinerCommissioningParams as fidl::encoding::TypeMarker>::inline_size(decoder.context),
27008            0 => return Err(fidl::Error::UnknownUnionTag),
27009            _ => num_bytes as usize,
27010        };
27011
27012            if inlined != (member_inline_size <= 4) {
27013                return Err(fidl::Error::InvalidInlineBitInEnvelope);
27014            }
27015            let _inner_offset;
27016            if inlined {
27017                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
27018                _inner_offset = offset + 8;
27019            } else {
27020                depth.increment()?;
27021                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
27022            }
27023            match ordinal {
27024                1 => {
27025                    #[allow(irrefutable_let_patterns)]
27026                    if let JoinParams::ProvisioningParameter(_) = self {
27027                        // Do nothing, read the value into the object
27028                    } else {
27029                        // Initialize `self` to the right variant
27030                        *self = JoinParams::ProvisioningParameter(fidl::new_empty!(
27031                            fidl_fuchsia_lowpan_device__common::ProvisioningParams,
27032                            D
27033                        ));
27034                    }
27035                    #[allow(irrefutable_let_patterns)]
27036                    if let JoinParams::ProvisioningParameter(ref mut val) = self {
27037                        fidl::decode!(
27038                            fidl_fuchsia_lowpan_device__common::ProvisioningParams,
27039                            D,
27040                            val,
27041                            decoder,
27042                            _inner_offset,
27043                            depth
27044                        )?;
27045                    } else {
27046                        unreachable!()
27047                    }
27048                }
27049                2 => {
27050                    #[allow(irrefutable_let_patterns)]
27051                    if let JoinParams::JoinerParameter(_) = self {
27052                        // Do nothing, read the value into the object
27053                    } else {
27054                        // Initialize `self` to the right variant
27055                        *self = JoinParams::JoinerParameter(fidl::new_empty!(
27056                            JoinerCommissioningParams,
27057                            D
27058                        ));
27059                    }
27060                    #[allow(irrefutable_let_patterns)]
27061                    if let JoinParams::JoinerParameter(ref mut val) = self {
27062                        fidl::decode!(
27063                            JoinerCommissioningParams,
27064                            D,
27065                            val,
27066                            decoder,
27067                            _inner_offset,
27068                            depth
27069                        )?;
27070                    } else {
27071                        unreachable!()
27072                    }
27073                }
27074                #[allow(deprecated)]
27075                ordinal => {
27076                    for _ in 0..num_handles {
27077                        decoder.drop_next_handle()?;
27078                    }
27079                    *self = JoinParams::__SourceBreaking { unknown_ordinal: ordinal };
27080                }
27081            }
27082            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
27083                return Err(fidl::Error::InvalidNumBytesInEnvelope);
27084            }
27085            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
27086                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
27087            }
27088            Ok(())
27089        }
27090    }
27091
27092    impl fidl::encoding::ValueTypeMarker for ProvisioningProgress {
27093        type Borrowed<'a> = &'a Self;
27094        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
27095            value
27096        }
27097    }
27098
27099    unsafe impl fidl::encoding::TypeMarker for ProvisioningProgress {
27100        type Owned = Self;
27101
27102        #[inline(always)]
27103        fn inline_align(_context: fidl::encoding::Context) -> usize {
27104            8
27105        }
27106
27107        #[inline(always)]
27108        fn inline_size(_context: fidl::encoding::Context) -> usize {
27109            16
27110        }
27111    }
27112
27113    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<ProvisioningProgress, D>
27114        for &ProvisioningProgress
27115    {
27116        #[inline]
27117        unsafe fn encode(
27118            self,
27119            encoder: &mut fidl::encoding::Encoder<'_, D>,
27120            offset: usize,
27121            _depth: fidl::encoding::Depth,
27122        ) -> fidl::Result<()> {
27123            encoder.debug_check_bounds::<ProvisioningProgress>(offset);
27124            encoder.write_num::<u64>(self.ordinal(), offset);
27125            match self {
27126            ProvisioningProgress::Progress(ref val) => {
27127                fidl::encoding::encode_in_envelope::<f32, D>(
27128                    <f32 as fidl::encoding::ValueTypeMarker>::borrow(val),
27129                    encoder, offset + 8, _depth
27130                )
27131            }
27132            ProvisioningProgress::Identity(ref val) => {
27133                fidl::encoding::encode_in_envelope::<fidl_fuchsia_lowpan_device__common::Identity, D>(
27134                    <fidl_fuchsia_lowpan_device__common::Identity as fidl::encoding::ValueTypeMarker>::borrow(val),
27135                    encoder, offset + 8, _depth
27136                )
27137            }
27138            ProvisioningProgress::__SourceBreaking { .. } => Err(fidl::Error::UnknownUnionTag),
27139        }
27140        }
27141    }
27142
27143    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ProvisioningProgress {
27144        #[inline(always)]
27145        fn new_empty() -> Self {
27146            Self::__SourceBreaking { unknown_ordinal: 0 }
27147        }
27148
27149        #[inline]
27150        unsafe fn decode(
27151            &mut self,
27152            decoder: &mut fidl::encoding::Decoder<'_, D>,
27153            offset: usize,
27154            mut depth: fidl::encoding::Depth,
27155        ) -> fidl::Result<()> {
27156            decoder.debug_check_bounds::<Self>(offset);
27157            #[allow(unused_variables)]
27158            let next_out_of_line = decoder.next_out_of_line();
27159            let handles_before = decoder.remaining_handles();
27160            let (ordinal, inlined, num_bytes, num_handles) =
27161                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
27162
27163            let member_inline_size = match ordinal {
27164            1 => <f32 as fidl::encoding::TypeMarker>::inline_size(decoder.context),
27165            2 => <fidl_fuchsia_lowpan_device__common::Identity as fidl::encoding::TypeMarker>::inline_size(decoder.context),
27166            0 => return Err(fidl::Error::UnknownUnionTag),
27167            _ => num_bytes as usize,
27168        };
27169
27170            if inlined != (member_inline_size <= 4) {
27171                return Err(fidl::Error::InvalidInlineBitInEnvelope);
27172            }
27173            let _inner_offset;
27174            if inlined {
27175                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
27176                _inner_offset = offset + 8;
27177            } else {
27178                depth.increment()?;
27179                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
27180            }
27181            match ordinal {
27182                1 => {
27183                    #[allow(irrefutable_let_patterns)]
27184                    if let ProvisioningProgress::Progress(_) = self {
27185                        // Do nothing, read the value into the object
27186                    } else {
27187                        // Initialize `self` to the right variant
27188                        *self = ProvisioningProgress::Progress(fidl::new_empty!(f32, D));
27189                    }
27190                    #[allow(irrefutable_let_patterns)]
27191                    if let ProvisioningProgress::Progress(ref mut val) = self {
27192                        fidl::decode!(f32, D, val, decoder, _inner_offset, depth)?;
27193                    } else {
27194                        unreachable!()
27195                    }
27196                }
27197                2 => {
27198                    #[allow(irrefutable_let_patterns)]
27199                    if let ProvisioningProgress::Identity(_) = self {
27200                        // Do nothing, read the value into the object
27201                    } else {
27202                        // Initialize `self` to the right variant
27203                        *self = ProvisioningProgress::Identity(fidl::new_empty!(
27204                            fidl_fuchsia_lowpan_device__common::Identity,
27205                            D
27206                        ));
27207                    }
27208                    #[allow(irrefutable_let_patterns)]
27209                    if let ProvisioningProgress::Identity(ref mut val) = self {
27210                        fidl::decode!(
27211                            fidl_fuchsia_lowpan_device__common::Identity,
27212                            D,
27213                            val,
27214                            decoder,
27215                            _inner_offset,
27216                            depth
27217                        )?;
27218                    } else {
27219                        unreachable!()
27220                    }
27221                }
27222                #[allow(deprecated)]
27223                ordinal => {
27224                    for _ in 0..num_handles {
27225                        decoder.drop_next_handle()?;
27226                    }
27227                    *self = ProvisioningProgress::__SourceBreaking { unknown_ordinal: ordinal };
27228                }
27229            }
27230            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
27231                return Err(fidl::Error::InvalidNumBytesInEnvelope);
27232            }
27233            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
27234                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
27235            }
27236            Ok(())
27237        }
27238    }
27239}