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
13pub const MAX_IP6_SOCK_ADDR_STRING_SIZE: u32 = 48;
14
15/// The maximum number of IPv6 multicast addresses in the insepct dump.
16/// This prevents the inspect tree from becoming excessively large.
17pub const MAX_IPV6_MULTICAST_ADDRS: u32 = 32;
18
19/// The maximum number of IPv6 unicast addresses in the insepct dump. This
20/// prevents the inspect tree from becoming excessively large.
21pub const MAX_IPV6_UNICAST_ADDRS: u32 = 32;
22
23/// The maximum number of entries in Network Data 6LoWPAN Context ID information list,
24/// the maximum size should be aligned with on-mesh prefixes.
25pub const MAX_LOWPAN_CONTEXTS: u32 = 32;
26
27/// The maximum number of entries allowed in the neighbor-related inspect
28/// dump. This prevents the inspect tree from becoming excessively large.
29pub const MAX_NEIGHBOR_INSPECT_ENTRIES: u32 = 64;
30
31pub const MAX_ON_MESH_PREFIXES: u32 = 32;
32
33pub const MAX_PROVISION_URL_LEN: u16 = 64;
34
35/// The maximum size of Server Data in bytes.
36/// Theoretical limit, practically much lower, align with
37/// OT_SERVER_DATA_MAX_SIZE(252).
38pub const MAX_SERVER_DATA_SIZE: u32 = 252;
39
40/// The maximum size of Service Data in bytes, align with
41/// OT_SERVICE_DATA_MAX_SIZE(252).
42pub const MAX_SERVICE_DATA_SIZE: u32 = 252;
43
44/// The maximum number of entries in Network Data Service list, making it consistent
45/// with the sizing for on-mesh prefixes and external routes.
46pub const MAX_SERVICE_ENTRIES: u32 = 32;
47
48/// The maximum number of SRP hosts and services included in the inspect dump.
49/// This limit prevents the inspect tree from becoming excessively large.
50pub const MAX_SRP_INSPECT_ENTRIES: u32 = 64;
51
52/// The maximum Steering Data length in bytes, align with
53/// OT_STEERING_DATA_MAX_LENGTH(16).
54pub const MAX_STEERING_DATA_LENGTH: u32 = 16;
55
56pub const MAX_THREAD_NEIGHBOR_HISTORY_ENTRIES: u32 = 64;
57
58pub const MAX_THREAD_NET_DATA_PREFIX_HISTORY_ENTRIES: u32 = 32;
59
60pub const MAX_THREAD_NET_DATA_ROUTE_HISTORY_ENTRIES: u32 = 32;
61
62pub const MAX_THREAD_NET_INFO_HISTORY_ENTRIES: u32 = 32;
63
64pub const MAX_THREAD_ROUTER_HISTORY_ENTRIES: u32 = 256;
65
66/// The maximum number of UDP sockets in the insepct dump. This prevents the
67/// tree from becoming excessively large.
68pub const MAX_UDP_SOCKETS: u32 = 32;
69
70pub const MAX_VENDOR_DATA_LEN: u16 = 64;
71
72pub const MAX_VENDOR_MODEL_LEN: u16 = 32;
73
74pub const MAX_VENDOR_NAME_LEN: u16 = 32;
75
76pub const MAX_VENDOR_SW_VER_LEN: u16 = 16;
77
78pub const PSKD_LEN: u16 = 32;
79
80/// Enum for the origin of an address.
81#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
82#[repr(u8)]
83pub enum AddressOrigin {
84    /// Thread assigned address (ALOC, RLOC, MLEID, etc).
85    Thread = 0,
86    /// SLAAC assigned address.
87    Slaac = 1,
88    /// DHCPv6 assigned address.
89    Dhcpv6 = 2,
90    /// Manually assigned address.
91    Manual = 3,
92}
93
94impl AddressOrigin {
95    #[inline]
96    pub fn from_primitive(prim: u8) -> Option<Self> {
97        match prim {
98            0 => Some(Self::Thread),
99            1 => Some(Self::Slaac),
100            2 => Some(Self::Dhcpv6),
101            3 => Some(Self::Manual),
102            _ => None,
103        }
104    }
105
106    #[inline]
107    pub const fn into_primitive(self) -> u8 {
108        self as u8
109    }
110}
111
112/// Enum for EID cache entry state.
113///
114/// Derived from [`otCacheEntryState`]
115/// (https://openthread.io/reference/group/api-thread-router#otcacheentrystate).
116#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
117#[repr(u8)]
118pub enum CacheEntryState {
119    Cached = 0,
120    Snooped = 1,
121    Query = 2,
122    Retry = 3,
123}
124
125impl CacheEntryState {
126    #[inline]
127    pub fn from_primitive(prim: u8) -> Option<Self> {
128        match prim {
129            0 => Some(Self::Cached),
130            1 => Some(Self::Snooped),
131            2 => Some(Self::Query),
132            3 => Some(Self::Retry),
133            _ => None,
134        }
135    }
136
137    #[inline]
138    pub const fn into_primitive(self) -> u8 {
139        self as u8
140    }
141}
142
143/// Represents the DHCPv6 PD state.
144#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
145pub enum Dhcp6PdState {
146    Dhcp6PdStateUnspecified,
147    /// DHCPv6 PD is disabled on the border router.
148    Dhcp6PdStateDisabled,
149    /// DHCPv6 PD is enabled but won't try to request and publish a prefix.
150    Dhcp6PdStateStopped,
151    /// DHCPv6 PD is enabled and will try to request and publish a prefix.
152    Dhcp6PdStateRunning,
153    /// DHCPv6 PD is idle; Higher-prf prefix published by other BRs.
154    Dhcp6PdStateIdle,
155    #[doc(hidden)]
156    __SourceBreaking {
157        unknown_ordinal: u32,
158    },
159}
160
161/// Pattern that matches an unknown `Dhcp6PdState` member.
162#[macro_export]
163macro_rules! Dhcp6PdStateUnknown {
164    () => {
165        _
166    };
167}
168
169impl Dhcp6PdState {
170    #[inline]
171    pub fn from_primitive(prim: u32) -> Option<Self> {
172        match prim {
173            0 => Some(Self::Dhcp6PdStateUnspecified),
174            1 => Some(Self::Dhcp6PdStateDisabled),
175            2 => Some(Self::Dhcp6PdStateStopped),
176            3 => Some(Self::Dhcp6PdStateRunning),
177            4 => Some(Self::Dhcp6PdStateIdle),
178            _ => None,
179        }
180    }
181
182    #[inline]
183    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
184        match prim {
185            0 => Self::Dhcp6PdStateUnspecified,
186            1 => Self::Dhcp6PdStateDisabled,
187            2 => Self::Dhcp6PdStateStopped,
188            3 => Self::Dhcp6PdStateRunning,
189            4 => Self::Dhcp6PdStateIdle,
190            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
191        }
192    }
193
194    #[inline]
195    pub fn unknown() -> Self {
196        Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
197    }
198
199    #[inline]
200    pub const fn into_primitive(self) -> u32 {
201        match self {
202            Self::Dhcp6PdStateUnspecified => 0,
203            Self::Dhcp6PdStateDisabled => 1,
204            Self::Dhcp6PdStateStopped => 2,
205            Self::Dhcp6PdStateRunning => 3,
206            Self::Dhcp6PdStateIdle => 4,
207            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
208        }
209    }
210
211    #[inline]
212    pub fn is_unknown(&self) -> bool {
213        match self {
214            Self::__SourceBreaking { unknown_ordinal: _ } => true,
215            _ => false,
216        }
217    }
218}
219
220/// Enum for Neighbor events.
221///
222/// Derived from [`otHistoryTrackerNeighborEvent`]
223/// (https://openthread.io/reference/group/api-history-tracker#othistorytrackerneighborevent).
224#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
225#[repr(u8)]
226pub enum HistoryTrackerNeighborEvent {
227    Added = 0,
228    Removed = 1,
229    Changed = 2,
230    Restoring = 3,
231}
232
233impl HistoryTrackerNeighborEvent {
234    #[inline]
235    pub fn from_primitive(prim: u8) -> Option<Self> {
236        match prim {
237            0 => Some(Self::Added),
238            1 => Some(Self::Removed),
239            2 => Some(Self::Changed),
240            3 => Some(Self::Restoring),
241            _ => None,
242        }
243    }
244
245    #[inline]
246    pub const fn into_primitive(self) -> u8 {
247        self as u8
248    }
249}
250
251/// Enum for Network Data events.
252///
253/// Derived from [`otHistoryTrackerNetDataEvent`]
254/// (https://openthread.io/reference/group/api-history-tracker#othistorytrackernetdataevent).
255#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
256#[repr(u8)]
257pub enum HistoryTrackerNetDataEvent {
258    Added = 0,
259    Removed = 1,
260}
261
262impl HistoryTrackerNetDataEvent {
263    #[inline]
264    pub fn from_primitive(prim: u8) -> Option<Self> {
265        match prim {
266            0 => Some(Self::Added),
267            1 => Some(Self::Removed),
268            _ => None,
269        }
270    }
271
272    #[inline]
273    pub const fn into_primitive(self) -> u8 {
274        self as u8
275    }
276}
277
278/// Enum for Router events.
279///
280/// Derived from [`otHistoryTrackerRouterEvent`]
281/// (https://openthread.io/reference/group/api-history-tracker#othistorytrackerrouterevent).
282#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
283#[repr(u8)]
284pub enum HistoryTrackerRouterEvent {
285    Added = 0,
286    Removed = 1,
287    NextHopChanged = 2,
288    PathCostChanged = 3,
289}
290
291impl HistoryTrackerRouterEvent {
292    #[inline]
293    pub fn from_primitive(prim: u8) -> Option<Self> {
294        match prim {
295            0 => Some(Self::Added),
296            1 => Some(Self::Removed),
297            2 => Some(Self::NextHopChanged),
298            3 => Some(Self::PathCostChanged),
299            _ => None,
300        }
301    }
302
303    #[inline]
304    pub const fn into_primitive(self) -> u8 {
305        self as u8
306    }
307}
308
309#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
310pub enum Nat64State {
311    Nat64StateUnspecified,
312    Nat64StateDisabled,
313    Nat64StateNotRunning,
314    Nat64StateIdle,
315    Nat64StateActive,
316    #[doc(hidden)]
317    __SourceBreaking {
318        unknown_ordinal: u32,
319    },
320}
321
322/// Pattern that matches an unknown `Nat64State` member.
323#[macro_export]
324macro_rules! Nat64StateUnknown {
325    () => {
326        _
327    };
328}
329
330impl Nat64State {
331    #[inline]
332    pub fn from_primitive(prim: u32) -> Option<Self> {
333        match prim {
334            0 => Some(Self::Nat64StateUnspecified),
335            1 => Some(Self::Nat64StateDisabled),
336            2 => Some(Self::Nat64StateNotRunning),
337            3 => Some(Self::Nat64StateIdle),
338            4 => Some(Self::Nat64StateActive),
339            _ => None,
340        }
341    }
342
343    #[inline]
344    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
345        match prim {
346            0 => Self::Nat64StateUnspecified,
347            1 => Self::Nat64StateDisabled,
348            2 => Self::Nat64StateNotRunning,
349            3 => Self::Nat64StateIdle,
350            4 => Self::Nat64StateActive,
351            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
352        }
353    }
354
355    #[inline]
356    pub fn unknown() -> Self {
357        Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
358    }
359
360    #[inline]
361    pub const fn into_primitive(self) -> u32 {
362        match self {
363            Self::Nat64StateUnspecified => 0,
364            Self::Nat64StateDisabled => 1,
365            Self::Nat64StateNotRunning => 2,
366            Self::Nat64StateIdle => 3,
367            Self::Nat64StateActive => 4,
368            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
369        }
370    }
371
372    #[inline]
373    pub fn is_unknown(&self) -> bool {
374        match self {
375            Self::__SourceBreaking { unknown_ordinal: _ } => true,
376            _ => false,
377        }
378    }
379}
380
381/// LoWPAN Provisioning Error
382///
383/// Returned by [`ProvisioningMonitor.WatchProgress`].
384#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
385pub enum ProvisionError {
386    /// Provisioning did not successfully complete because the
387    /// credential was rejected. For example, the key was incorrect.
388    ///
389    /// This may be interpreted as an argument error.
390    CredentialRejected,
391    /// Provisioning did not successfully complete because the
392    /// no peers on the requested network are in range.
393    NetworkNotFound,
394    /// Forming a new network did not successfully complete because the
395    /// a peer with the requested network identity is in range.
396    NetworkAlreadyExists,
397    /// This operation was canceled due to an incompatible operation
398    /// being started before this one was finished.
399    Canceled,
400    #[doc(hidden)]
401    __SourceBreaking { unknown_ordinal: i32 },
402}
403
404/// Pattern that matches an unknown `ProvisionError` member.
405#[macro_export]
406macro_rules! ProvisionErrorUnknown {
407    () => {
408        _
409    };
410}
411
412impl ProvisionError {
413    #[inline]
414    pub fn from_primitive(prim: i32) -> Option<Self> {
415        match prim {
416            1 => Some(Self::CredentialRejected),
417            2 => Some(Self::NetworkNotFound),
418            3 => Some(Self::NetworkAlreadyExists),
419            4 => Some(Self::Canceled),
420            _ => None,
421        }
422    }
423
424    #[inline]
425    pub fn from_primitive_allow_unknown(prim: i32) -> Self {
426        match prim {
427            1 => Self::CredentialRejected,
428            2 => Self::NetworkNotFound,
429            3 => Self::NetworkAlreadyExists,
430            4 => Self::Canceled,
431            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
432        }
433    }
434
435    #[inline]
436    pub fn unknown() -> Self {
437        Self::__SourceBreaking { unknown_ordinal: 0x7fffffff }
438    }
439
440    #[inline]
441    pub const fn into_primitive(self) -> i32 {
442        match self {
443            Self::CredentialRejected => 1,
444            Self::NetworkNotFound => 2,
445            Self::NetworkAlreadyExists => 3,
446            Self::Canceled => 4,
447            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
448        }
449    }
450
451    #[inline]
452    pub fn is_unknown(&self) -> bool {
453        match self {
454            Self::__SourceBreaking { unknown_ordinal: _ } => true,
455            _ => false,
456        }
457    }
458}
459
460/// Route preference, as described in RFC4191.
461#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
462#[repr(i8)]
463pub enum RoutePreference {
464    /// Low route preference.
465    Low = -1,
466    /// Medium route preference.
467    Medium = 0,
468    /// High route preference.
469    High = 1,
470}
471
472impl RoutePreference {
473    #[inline]
474    pub fn from_primitive(prim: i8) -> Option<Self> {
475        match prim {
476            -1 => Some(Self::Low),
477            0 => Some(Self::Medium),
478            1 => Some(Self::High),
479            _ => None,
480        }
481    }
482
483    #[inline]
484    pub const fn into_primitive(self) -> i8 {
485        self as i8
486    }
487}
488
489#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
490#[repr(u32)]
491pub enum SrpServerAddressMode {
492    /// Thread network data is published as unicast addresses.
493    Unicast = 1,
494    /// Thread network data is published as anycast addresses.
495    Anycast = 2,
496}
497
498impl SrpServerAddressMode {
499    #[inline]
500    pub fn from_primitive(prim: u32) -> Option<Self> {
501        match prim {
502            1 => Some(Self::Unicast),
503            2 => Some(Self::Anycast),
504            _ => None,
505        }
506    }
507
508    #[inline]
509    pub const fn into_primitive(self) -> u32 {
510        self as u32
511    }
512}
513
514#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
515#[repr(u32)]
516pub enum SrpServerState {
517    /// The server is disabled.
518    Disabled = 1,
519    /// The server is enabled and running.
520    Running = 2,
521    /// The server is enabled, but stopped.
522    Stopped = 3,
523}
524
525impl SrpServerState {
526    #[inline]
527    pub fn from_primitive(prim: u32) -> Option<Self> {
528        match prim {
529            1 => Some(Self::Disabled),
530            2 => Some(Self::Running),
531            3 => Some(Self::Stopped),
532            _ => None,
533        }
534    }
535
536    #[inline]
537    pub const fn into_primitive(self) -> u32 {
538        self as u32
539    }
540}
541
542/// Represents the Upstream DNS state
543#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
544pub enum UpstreamDnsQueryState {
545    UpstreamdnsQueryStateUnspecified,
546    UpstreamdnsQueryStateEnabled,
547    UpstreamdnsQueryStateDisabled,
548    #[doc(hidden)]
549    __SourceBreaking {
550        unknown_ordinal: u32,
551    },
552}
553
554/// Pattern that matches an unknown `UpstreamDnsQueryState` member.
555#[macro_export]
556macro_rules! UpstreamDnsQueryStateUnknown {
557    () => {
558        _
559    };
560}
561
562impl UpstreamDnsQueryState {
563    #[inline]
564    pub fn from_primitive(prim: u32) -> Option<Self> {
565        match prim {
566            0 => Some(Self::UpstreamdnsQueryStateUnspecified),
567            1 => Some(Self::UpstreamdnsQueryStateEnabled),
568            2 => Some(Self::UpstreamdnsQueryStateDisabled),
569            _ => None,
570        }
571    }
572
573    #[inline]
574    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
575        match prim {
576            0 => Self::UpstreamdnsQueryStateUnspecified,
577            1 => Self::UpstreamdnsQueryStateEnabled,
578            2 => Self::UpstreamdnsQueryStateDisabled,
579            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
580        }
581    }
582
583    #[inline]
584    pub fn unknown() -> Self {
585        Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
586    }
587
588    #[inline]
589    pub const fn into_primitive(self) -> u32 {
590        match self {
591            Self::UpstreamdnsQueryStateUnspecified => 0,
592            Self::UpstreamdnsQueryStateEnabled => 1,
593            Self::UpstreamdnsQueryStateDisabled => 2,
594            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
595        }
596    }
597
598    #[inline]
599    pub fn is_unknown(&self) -> bool {
600        match self {
601            Self::__SourceBreaking { unknown_ordinal: _ } => true,
602            _ => false,
603        }
604    }
605}
606
607#[derive(Clone, Debug, PartialEq)]
608pub struct BeaconInfoStreamNextResponse {
609    pub beacons: Vec<BeaconInfo>,
610}
611
612impl fidl::Persistable for BeaconInfoStreamNextResponse {}
613
614#[derive(Clone, Debug, PartialEq)]
615pub struct DeviceGetSupportedChannelsResponse {
616    pub channels_info: Vec<ChannelInfo>,
617}
618
619impl fidl::Persistable for DeviceGetSupportedChannelsResponse {}
620
621#[derive(Clone, Debug, PartialEq)]
622pub struct DeviceRouteExtraGetLocalExternalRoutesResponse {
623    pub external_routes: Vec<ExternalRoute>,
624}
625
626impl fidl::Persistable for DeviceRouteExtraGetLocalExternalRoutesResponse {}
627
628#[derive(Clone, Debug, PartialEq)]
629pub struct DeviceRouteExtraGetLocalOnMeshPrefixesResponse {
630    pub prefixes: Vec<OnMeshPrefix>,
631}
632
633impl fidl::Persistable for DeviceRouteExtraGetLocalOnMeshPrefixesResponse {}
634
635#[derive(Clone, Debug, PartialEq)]
636pub struct DeviceRouteRegisterExternalRouteRequest {
637    pub external_route: ExternalRoute,
638}
639
640impl fidl::Persistable for DeviceRouteRegisterExternalRouteRequest {}
641
642#[derive(Clone, Debug, PartialEq)]
643pub struct DeviceRouteRegisterOnMeshPrefixRequest {
644    pub prefix: OnMeshPrefix,
645}
646
647impl fidl::Persistable for DeviceRouteRegisterOnMeshPrefixRequest {}
648
649#[derive(Clone, Debug, PartialEq)]
650pub struct DeviceRouteUnregisterExternalRouteRequest {
651    pub subnet: fidl_fuchsia_net_common::Ipv6AddressWithPrefix,
652}
653
654impl fidl::Persistable for DeviceRouteUnregisterExternalRouteRequest {}
655
656#[derive(Clone, Debug, PartialEq)]
657pub struct DeviceRouteUnregisterOnMeshPrefixRequest {
658    pub subnet: fidl_fuchsia_net_common::Ipv6AddressWithPrefix,
659}
660
661impl fidl::Persistable for DeviceRouteUnregisterOnMeshPrefixRequest {}
662
663#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
664#[repr(C)]
665pub struct LegacyJoiningMakeJoinableRequest {
666    pub duration: i64,
667    pub port: u16,
668}
669
670impl fidl::Persistable for LegacyJoiningMakeJoinableRequest {}
671
672#[derive(Clone, Debug, PartialEq)]
673pub struct ProvisioningMonitorWatchProgressResponse {
674    pub progress: ProvisioningProgress,
675}
676
677impl fidl::Persistable for ProvisioningMonitorWatchProgressResponse {}
678
679#[derive(Clone, Debug, PartialEq)]
680pub struct TelemetryProviderGetTelemetryResponse {
681    pub telemetry: Telemetry,
682}
683
684impl fidl::Persistable for TelemetryProviderGetTelemetryResponse {}
685
686#[derive(Clone, Debug, Default, PartialEq)]
687pub struct BeaconInfo {
688    /// The MAC address associated with this beacon.
689    pub address: Option<fidl_fuchsia_lowpan_common::MacAddress>,
690    /// The identity of the network being advertised by
691    /// this beacon.
692    pub identity: Option<fidl_fuchsia_lowpan_device_common::Identity>,
693    /// RSSI of the beacon, measured in dBm.
694    ///
695    /// A value of -128 should be treated as if this
696    /// field was absent.
697    pub rssi: Option<i8>,
698    /// Link Quality Index (LQI) of the beacon.
699    ///
700    /// * A value of 0 should be treated as if this
701    ///   field was absent.
702    /// * A value of 1 indicates the worst possible
703    ///   quality where the decoded beacon is still valid.
704    /// * A value of 255 indicates the best possible
705    ///   quality that can be recognized by the radio
706    ///   hardware.
707    /// * Values 2-254 are intended to represent relative
708    ///   quality levels evenly distributed between the
709    ///   worst and best, with lower values always
710    ///   indicating a worse quality than higher values.
711    pub lqi: Option<u8>,
712    #[doc(hidden)]
713    pub __source_breaking: fidl::marker::SourceBreaking,
714}
715
716impl fidl::Persistable for BeaconInfo {}
717
718/// Represents a Border Router configuration.
719///
720/// Derived from `otBorderRouterConfig`(https://openthread.io/reference/struct/ot-border-router-config)
721#[derive(Clone, Debug, Default, PartialEq)]
722pub struct BorderRouterConfig {
723    /// The IPv6 prefix.
724    ///
725    /// Required.
726    pub prefix: Option<String>,
727    /// A 2-bit signed int preference (OT_ROUTE_PREFERENCE_* values).
728    ///
729    /// Required.
730    pub preference: Option<i8>,
731    /// Whether prefix is preferred.
732    ///
733    /// Required.
734    pub preferred: Option<bool>,
735    /// Whether prefix can be used for address auto-configuration (SLAAC).
736    ///
737    /// Required.
738    pub slaac: Option<bool>,
739    /// Whether border router is DHCPv6 Agent.
740    ///
741    /// Required.
742    pub dhcp: Option<bool>,
743    /// Whether DHCPv6 Agent supplying other config data.
744    ///
745    /// Required.
746    pub configure: Option<bool>,
747    /// Whether border router is a default router for prefix.
748    ///
749    /// Required.
750    pub default_route: Option<bool>,
751    /// Whether this prefix is considered on-mesh.
752    ///
753    /// Required.
754    pub on_mesh: Option<bool>,
755    /// Whether this configuration is considered Stable Network Data.
756    ///
757    /// Required.
758    pub stable: Option<bool>,
759    /// Whether this border router can supply DNS information via ND.
760    ///
761    /// Required.
762    pub nd_dns: Option<bool>,
763    /// Whether prefix is a Thread Domain Prefix (added since Thread 1.2).
764    ///
765    /// Required.
766    pub dp: Option<bool>,
767    /// The border router's RLOC16.
768    ///
769    /// Required.
770    pub rloc16: Option<u16>,
771    #[doc(hidden)]
772    pub __source_breaking: fidl::marker::SourceBreaking,
773}
774
775impl fidl::Persistable for BorderRouterConfig {}
776
777/// Counters associated with border routing.
778#[derive(Clone, Debug, Default, PartialEq)]
779pub struct BorderRoutingCounters {
780    /// The number of packets associated with inbound unicast messages.
781    ///
782    /// Required.
783    pub inbound_unicast_packets: Option<u64>,
784    /// The number of bytes associated with inbound unicast messages.
785    ///
786    /// Required.
787    pub inbound_unicast_bytes: Option<u64>,
788    /// The number of packets associated with inbound multicast messages.
789    ///
790    /// Required.
791    pub inbound_multicast_packets: Option<u64>,
792    /// The number of bytes associated with inbound multicast messages.
793    ///
794    /// Required.
795    pub inbound_multicast_bytes: Option<u64>,
796    /// The number of packets associated with outbound unicast messages.
797    ///
798    /// Required.
799    pub outbound_unicast_packets: Option<u64>,
800    /// The number of bytes associated with outbound unicast messages.
801    ///
802    /// Required.
803    pub outbound_unicast_bytes: Option<u64>,
804    /// The number of packets associated with outbound multicast messages.
805    ///
806    /// Required.
807    pub outbound_multicast_packets: Option<u64>,
808    /// The number of bytes associated with outbound multicast messages.
809    ///
810    /// Required.
811    pub outbound_multicast_bytes: Option<u64>,
812    /// The number of received RA packets.
813    ///
814    /// Required.
815    pub ra_rx: Option<u32>,
816    /// The number of RA packets successfully transmitted.
817    ///
818    /// Required.
819    pub ra_tx_success: Option<u32>,
820    /// The number of RA packets failed to transmit.
821    ///
822    /// Required.
823    pub ra_tx_failure: Option<u32>,
824    /// The number of received RS packets.
825    ///
826    /// Required.
827    pub rs_rx: Option<u32>,
828    /// The number of RS packets successfully transmitted.
829    ///
830    /// Required.
831    pub rs_tx_success: Option<u32>,
832    /// The number of RS packets failed to transmit.
833    ///
834    /// Required.
835    pub rs_tx_failure: Option<u32>,
836    /// Inbound Internet packets when DHCPv6 PD enabled.
837    ///
838    /// Optional.
839    pub inbound_internet_packets: Option<u64>,
840    /// Inbound Internet bytes when DHCPv6 PD enabled.
841    ///
842    /// Optional.
843    pub inbound_internet_bytes: Option<u64>,
844    /// Outbound Internet packets when DHCPv6 PD enabled.
845    ///
846    /// Optional.
847    pub outbound_internet_packets: Option<u64>,
848    /// Outbound Internet bytes when DHCPv6 PD enabled.
849    ///
850    /// Optional.
851    pub outbound_internet_bytes: Option<u64>,
852    #[doc(hidden)]
853    pub __source_breaking: fidl::marker::SourceBreaking,
854}
855
856impl fidl::Persistable for BorderRoutingCounters {}
857
858/// Information about the state of components of NAT64
859#[derive(Clone, Debug, Default, PartialEq)]
860pub struct BorderRoutingNat64State {
861    /// prefix manager state
862    pub prefix_manager_state: Option<Nat64State>,
863    /// translator state
864    pub translator_state: Option<Nat64State>,
865    #[doc(hidden)]
866    pub __source_breaking: fidl::marker::SourceBreaking,
867}
868
869impl fidl::Persistable for BorderRoutingNat64State {}
870
871/// The peer BR's info found in Network Data entries.
872#[derive(Clone, Debug, Default, PartialEq)]
873pub struct BorderRoutingPeer {
874    /// IEEE 802.15.4 short address of neighbor.
875    ///
876    /// Required.
877    pub thread_rloc: Option<u16>,
878    /// The age of this entry in the neighbor table.
879    ///
880    /// Required.
881    pub age: Option<i64>,
882    #[doc(hidden)]
883    pub __source_breaking: fidl::marker::SourceBreaking,
884}
885
886impl fidl::Persistable for BorderRoutingPeer {}
887
888/// The discovered prefixes by Border Routing Manager on the infrastructure link.
889#[derive(Clone, Debug, Default, PartialEq)]
890pub struct BorderRoutingPrefixTable {
891    /// Information about the router advertising this prefix.
892    ///
893    /// Required.
894    pub router: Option<BorderRoutingRouter>,
895    /// The discovered IPv6 prefix.
896    ///
897    /// Required.
898    pub prefix: Option<String>,
899    /// Indicates whether the prefix is on-link or route prefix.
900    ///
901    /// Required.
902    pub is_on_link: Option<bool>,
903    /// Duration since last update of this prefix.
904    ///
905    /// Required.
906    pub duration_since_last_update: Option<i64>,
907    /// Valid lifetime of the prefix.
908    ///
909    /// Required.
910    pub valid_lifetime: Option<u32>,
911    /// Route preference when `is_on_link` is false.
912    ///
913    /// Required.
914    pub preference: Option<i8>,
915    /// Preferred lifetime of the on-link prefix when `is_on_link` is true.
916    ///
917    /// Required.
918    pub preferred_lifetime: Option<u32>,
919    #[doc(hidden)]
920    pub __source_breaking: fidl::marker::SourceBreaking,
921}
922
923impl fidl::Persistable for BorderRoutingPrefixTable {}
924
925/// The discovered Recursive DNS Server (RDNSS) addresses by Border Routing
926/// Manager on the infrastructure link.
927#[derive(Clone, Debug, Default, PartialEq)]
928pub struct BorderRoutingRdnss {
929    /// Information about the router advertising this RDNSS address.
930    ///
931    /// Required.
932    pub router: Option<BorderRoutingRouter>,
933    /// The DNS Server IPv6 address.
934    ///
935    /// Required.
936    pub address: Option<fidl_fuchsia_net_common::Ipv6Address>,
937    /// Duration since last update of this RDNSS address.
938    ///
939    /// Required.
940    pub duration_since_last_update: Option<i64>,
941    /// The lifetime of this RDNSS address.
942    ///
943    /// Required.
944    pub lifetime: Option<u32>,
945    #[doc(hidden)]
946    pub __source_breaking: fidl::marker::SourceBreaking,
947}
948
949impl fidl::Persistable for BorderRoutingRdnss {}
950
951/// The discovered routers by Border Routing Manager on the infrastructure link.
952#[derive(Clone, Debug, Default, PartialEq)]
953pub struct BorderRoutingRouter {
954    /// IPv6 address string of the router.
955    ///
956    /// Required.
957    pub address: Option<String>,
958    /// Duration since last update (any message rx) from this router.
959    ///
960    /// Required.
961    pub duration_since_last_update: Option<i64>,
962    /// The router's age (duration since its first discovery).
963    ///
964    /// Required.
965    pub age: Option<i64>,
966    /// The router's Managed Address Config flag (`M` flag).
967    ///
968    /// Required.
969    pub managed_address_config_flag: Option<bool>,
970    /// The router's Other Config flag (`O` flag).
971    ///
972    /// Required.
973    pub other_config_flag: Option<bool>,
974    /// The router's SNAC Router flag (`S` flag).
975    ///
976    /// Required.
977    pub snac_router_flag: Option<bool>,
978    /// This router is the local device (this BR).
979    ///
980    /// Required.
981    pub is_local_device: Option<bool>,
982    /// This router is reachable.
983    ///
984    /// Required.
985    pub is_reachable: Option<bool>,
986    /// This router is (likely) a peer BR.
987    ///
988    /// Required.
989    pub is_peer_br: Option<bool>,
990    #[doc(hidden)]
991    pub __source_breaking: fidl::marker::SourceBreaking,
992}
993
994impl fidl::Persistable for BorderRoutingRouter {}
995
996#[derive(Clone, Debug, Default, PartialEq)]
997pub struct ChannelInfo {
998    /// The index used by the interface to identify
999    /// this channel.
1000    pub index: Option<u16>,
1001    /// Human-readable identifier for channel.
1002    ///
1003    /// For most network types, this is just
1004    /// the string representation of the index.
1005    /// However, some network types might have
1006    /// non-integer ways of identifying specific
1007    /// channels. This field allows the application
1008    /// to display the name of the channel correctly
1009    /// under such circumstances.
1010    ///
1011    /// The allowed characters include:
1012    ///
1013    ///  * Dash (`-`), Underscore (`_`), Plus(`+`), Semicolon(`:`)
1014    ///  * Numbers (`0`-`9`)
1015    ///  * Letters (`a`-`z`, `A`-`Z`)
1016    pub id: Option<String>,
1017    /// The maximum transmit power allowed on
1018    /// this channel, in dBm.
1019    pub max_transmit_power_dbm: Option<i8>,
1020    /// The center RF frequency of this channel, in Hz.
1021    ///
1022    /// For example, 802.15.4 has the following values:
1023    ///
1024    /// Channel | Center Frequency (Hz)
1025    /// --------|----------------------
1026    /// 11      | 2,405,000,000
1027    /// 12      | 2,410,000,000
1028    /// 13      | 2,415,000,000
1029    /// 14      | 2,420,000,000
1030    /// 15      | 2,425,000,000
1031    /// 16      | 2,430,000,000
1032    /// 17      | 2,435,000,000
1033    /// 18      | 2,440,000,000
1034    /// 19      | 2,445,000,000
1035    /// 20      | 2,450,000,000
1036    /// 21      | 2,455,000,000
1037    /// 22      | 2,460,000,000
1038    /// 23      | 2,465,000,000
1039    /// 24      | 2,470,000,000
1040    /// 25      | 2,475,000,000
1041    /// 26      | 2,480,000,000
1042    pub spectrum_center_frequency_hz: Option<u64>,
1043    /// The RF spectrum bandwidth used by this
1044    /// channel where the power level is expected to
1045    /// be higher than -20dBr, in Hz.
1046    ///
1047    /// For example, 802.15.4 channels 11 thru 26 would
1048    /// have the value 2,000,000 (2 MHz).
1049    pub spectrum_bandwidth_hz: Option<u64>,
1050    /// Indicates if this channel is masked by the
1051    /// current regulatory domain and is thus unable
1052    /// to be used.
1053    pub masked_by_regulatory_domain: Option<bool>,
1054    #[doc(hidden)]
1055    pub __source_breaking: fidl::marker::SourceBreaking,
1056}
1057
1058impl fidl::Persistable for ChannelInfo {}
1059
1060/// Represents a Commissioning Dataset.
1061///
1062/// Derived from `otCommissioningDataset`(https://openthread.io/reference/struct/ot-commissioning-dataset)
1063#[derive(Clone, Debug, Default, PartialEq)]
1064pub struct CommissioningDataset {
1065    /// Border Router RLOC16.
1066    ///
1067    /// Required.
1068    pub locator: Option<u16>,
1069    /// Commissioner Session Id.
1070    ///
1071    /// Required.
1072    pub session_id: Option<u16>,
1073    /// Steering Data.
1074    ///
1075    /// Required.
1076    pub steering_data: Option<Vec<u8>>,
1077    /// Joiner UDP Port.
1078    ///
1079    /// Required.
1080    pub joiner_udp_port: Option<u16>,
1081    /// Whether Border Router RLOC16 is set.
1082    ///
1083    /// Required.
1084    pub is_locator_set: Option<bool>,
1085    /// Whether Commissioner Session Id is set.
1086    ///
1087    /// Required.
1088    pub is_session_id_set: Option<bool>,
1089    /// Whether Steering Data is set.
1090    ///
1091    /// Required.
1092    pub is_steering_data_set: Option<bool>,
1093    /// Whether Joiner UDP Port is set.
1094    ///
1095    /// Required.
1096    pub is_joiner_udp_port_set: Option<bool>,
1097    /// Whether the Dataset contains any extra unknown sub-TLV.
1098    ///
1099    /// Required.
1100    pub has_extra_tlv: Option<bool>,
1101    #[doc(hidden)]
1102    pub __source_breaking: fidl::marker::SourceBreaking,
1103}
1104
1105impl fidl::Persistable for CommissioningDataset {}
1106
1107/// DHCPv6 PD related info.
1108#[derive(Clone, Debug, Default, PartialEq)]
1109pub struct Dhcp6PdInfo {
1110    /// DHCPv6 PD state.
1111    ///
1112    /// Required.
1113    pub dhcp6pd_state: Option<Dhcp6PdState>,
1114    /// DHCPv6 PD processed RA Info.
1115    ///
1116    /// Optional.
1117    pub pd_processed_ra_info: Option<PdProcessedRaInfo>,
1118    /// DHCPv6 PD prefix.
1119    ///
1120    /// Optional.
1121    pub hashed_pd_prefix: Option<Vec<u8>>,
1122    #[doc(hidden)]
1123    pub __source_breaking: fidl::marker::SourceBreaking,
1124}
1125
1126impl fidl::Persistable for Dhcp6PdInfo {}
1127
1128/// Represents a TXT record entry representing a key/value pair (RFC 6763 - section 6.3).
1129#[derive(Clone, Debug, Default, PartialEq)]
1130pub struct DnsTxtEntry {
1131    /// The key string of the TXT record.
1132    ///
1133    /// Maximum length of TXT key string supported by `otDnsTxtEntryIterator` is 64,
1134    /// see OT_DNS_TXT_KEY_ITER_MAX_LENGTH.
1135    ///
1136    /// Required.
1137    pub key: Option<String>,
1138    /// The value of the TXT record.
1139    ///
1140    /// The overall key-value pair encoded length (including the key and "=") must be 255
1141    /// bytes or less.
1142    ///
1143    /// Required.
1144    pub value: Option<Vec<u8>>,
1145    #[doc(hidden)]
1146    pub __source_breaking: fidl::marker::SourceBreaking,
1147}
1148
1149impl fidl::Persistable for DnsTxtEntry {}
1150
1151/// Counters associated with the DNS-SD server.
1152#[derive(Clone, Debug, Default, PartialEq)]
1153pub struct DnssdCounters {
1154    /// The number of successful responses.
1155    ///
1156    /// Required.
1157    pub success_response: Option<u32>,
1158    /// The number of 'server failure' responses.
1159    ///
1160    /// Required.
1161    pub server_failure_response: Option<u32>,
1162    /// The number of 'format error' responses.
1163    ///
1164    /// Required.
1165    pub format_error_response: Option<u32>,
1166    /// The number of 'name error' responses.
1167    ///
1168    /// Required.
1169    pub name_error_response: Option<u32>,
1170    /// The number of 'not implemented' responses.
1171    ///
1172    /// Required.
1173    pub not_implemented_response: Option<u32>,
1174    /// The number of 'other' responses.
1175    ///
1176    /// Required.
1177    pub other_response: Option<u32>,
1178    /// The number of queries completely resolved by the local SRP server.
1179    ///
1180    /// Required.
1181    pub resolved_by_srp: Option<u32>,
1182    /// The counters of upstream DNS feature.
1183    ///
1184    /// Optional.
1185    pub upstream_dns_counters: Option<UpstreamDnsCounters>,
1186    #[doc(hidden)]
1187    pub __source_breaking: fidl::marker::SourceBreaking,
1188}
1189
1190impl fidl::Persistable for DnssdCounters {}
1191
1192/// Represents EID-to-RLOC cache entry info.
1193#[derive(Clone, Debug, Default, PartialEq)]
1194pub struct EidCacheEntry {
1195    /// Target EID.
1196    ///
1197    /// Required.
1198    pub target: Option<fidl_fuchsia_net_common::Ipv6Address>,
1199    /// Rloc16.
1200    ///
1201    /// Required.
1202    pub rloc16: Option<u16>,
1203    /// Entry state.
1204    ///
1205    /// Required.
1206    pub state: Option<CacheEntryState>,
1207    /// Indicates whether the entry can be evicted.
1208    ///
1209    /// Required.
1210    pub can_evict: Option<bool>,
1211    /// Indicates whether in ramp-down mode while in `OT_CACHE_ENTRY_STATE_RETRY_QUERY`.
1212    ///
1213    /// Required.
1214    pub ramp_down: Option<bool>,
1215    /// Indicates whether last transaction time and ML-EID are valid.
1216    ///
1217    /// Required.
1218    pub valid_last_trans: Option<bool>,
1219    /// Last transaction time (applicable in cached state).
1220    ///
1221    /// Required.
1222    pub last_trans_time: Option<i64>,
1223    /// Mesh Local EID (applicable if entry in cached state).
1224    ///
1225    /// Required.
1226    pub mesh_local_eid: Option<fidl_fuchsia_net_common::Ipv6Address>,
1227    /// Timeout (applicable if in snooped/query/retry-query states).
1228    ///
1229    /// Required.
1230    pub timeout: Option<i64>,
1231    /// Retry delay (applicable if in query-retry state).
1232    ///
1233    /// Required.
1234    pub retry_delay: Option<i64>,
1235    #[doc(hidden)]
1236    pub __source_breaking: fidl::marker::SourceBreaking,
1237}
1238
1239impl fidl::Persistable for EidCacheEntry {}
1240
1241/// LoWPAN External Route.
1242///
1243/// Informed by the Thread 1.1.1 Specification, section 5.13.3.
1244#[derive(Clone, Debug, Default, PartialEq)]
1245pub struct ExternalRoute {
1246    /// Subnet for route. Required.
1247    pub subnet: Option<fidl_fuchsia_net_common::Ipv6AddressWithPrefix>,
1248    /// Indicates the what preference this route should be given relative
1249    /// to other devices offering the same external route. If not present,
1250    /// `MEDIUM` preference is assumed.
1251    ///
1252    /// Based on `R_preference` from Section 5.13.3 of the Thread 1.1.1
1253    /// Specification.
1254    pub route_preference: Option<RoutePreference>,
1255    /// True if the route is expected to be available for at least Thread's
1256    /// `MIN_STABLE_LIFETIME`; otherwise, `false`. If not present, assumed to
1257    /// be `false`.
1258    ///
1259    /// The Thread specification defines `MIN_STABLE_LIFETIME` as 168 hours.
1260    ///
1261    /// Based on `R_stable` from Section 5.13.3 of the Thread 1.1.1
1262    /// Specification.
1263    pub stable: Option<bool>,
1264    #[doc(hidden)]
1265    pub __source_breaking: fidl::marker::SourceBreaking,
1266}
1267
1268impl fidl::Persistable for ExternalRoute {}
1269
1270/// Represents an External Route configuration.
1271///
1272/// Derived from `otExternalRouteConfig`(https://openthread.io/reference/struct/ot-external-route-config)
1273#[derive(Clone, Debug, Default, PartialEq)]
1274pub struct ExternalRouteConfig {
1275    /// IPv6 prefix.
1276    ///
1277    /// Required.
1278    pub prefix: Option<String>,
1279    /// The border router's RLOC16.
1280    ///
1281    /// Required.
1282    pub rloc16: Option<u16>,
1283    /// A 2-bit signed int preference.
1284    ///
1285    /// Required.
1286    pub preference: Option<i8>,
1287    /// Whether this is a NAT64 prefix.
1288    ///
1289    /// Required.
1290    pub nat64: Option<bool>,
1291    /// Whether this configuration is considered Stable Network Data.
1292    ///
1293    /// Required.
1294    pub stable: Option<bool>,
1295    /// Whether the next hop is this device.
1296    ///
1297    /// Required.
1298    pub next_hop_is_this_device: Option<bool>,
1299    /// Whether or not BR is advertising a ULA prefix in PIO (AP flag).
1300    ///
1301    /// Required.
1302    pub adv_pio: Option<bool>,
1303    #[doc(hidden)]
1304    pub __source_breaking: fidl::marker::SourceBreaking,
1305}
1306
1307impl fidl::Persistable for ExternalRouteConfig {}
1308
1309/// Parameters for joiner commissioning.
1310///
1311/// More information:
1312/// https://www.threadgroup.org/Portals/0/documents/support/CommissioningWhitePaper_658_2.pdf
1313#[derive(Clone, Debug, Default, PartialEq)]
1314pub struct JoinerCommissioningParams {
1315    /// Commissioning PSKd. Required.
1316    pub pskd: Option<String>,
1317    /// Provisioning URL. Optional.
1318    pub provisioning_url: Option<String>,
1319    /// Vendor name. Optional.
1320    pub vendor_name: Option<String>,
1321    /// Vendor model. Optional.
1322    pub vendor_model: Option<String>,
1323    /// Vendor Software Version. Optional.
1324    pub vendor_sw_version: Option<String>,
1325    /// Vendor data string. Optional.
1326    pub vendor_data_string: Option<String>,
1327    #[doc(hidden)]
1328    pub __source_breaking: fidl::marker::SourceBreaking,
1329}
1330
1331impl fidl::Persistable for JoinerCommissioningParams {}
1332
1333/// Node information for Thread network leaders.
1334#[derive(Clone, Debug, Default, PartialEq)]
1335pub struct LeaderData {
1336    /// The network partition ID of the leader.
1337    ///
1338    /// Required.
1339    pub partition_id: Option<u32>,
1340    /// The weight of this leader on the network.
1341    ///
1342    /// Required.
1343    pub weight: Option<u8>,
1344    /// The full network data version.
1345    ///
1346    /// Required.
1347    pub network_data_version: Option<u8>,
1348    /// The stable network data version.
1349    ///
1350    /// Required.
1351    pub stable_network_data_version: Option<u8>,
1352    /// The router ID of the leader.
1353    ///
1354    /// Required.
1355    pub router_id: Option<u8>,
1356    #[doc(hidden)]
1357    pub __source_breaking: fidl::marker::SourceBreaking,
1358}
1359
1360impl fidl::Persistable for LeaderData {}
1361
1362/// Link Metrics info of the neighbors.
1363#[derive(Clone, Debug, Default, PartialEq)]
1364pub struct LinkMetricsEntry {
1365    /// Link Margin value of the neighbor
1366    pub link_margin: Option<u8>,
1367    /// RSSI value of the neighbor
1368    pub rssi: Option<i8>,
1369    /// IEEE 802.15.4 Extended Address of the neighbor
1370    pub extended_address: Option<Vec<u8>>,
1371    #[doc(hidden)]
1372    pub __source_breaking: fidl::marker::SourceBreaking,
1373}
1374
1375impl fidl::Persistable for LinkMetricsEntry {}
1376
1377/// Represents 6LoWPAN Context ID information associated with a prefix in Network Data.
1378///
1379/// Derived from `otLowpanContextInfo`(https://openthread.io/reference/struct/ot-lowpan-context-info)
1380#[derive(Clone, Debug, Default, PartialEq)]
1381pub struct LowpanContextInfo {
1382    /// The 6LoWPAN Context ID.
1383    ///
1384    /// Required.
1385    pub context_id: Option<u8>,
1386    /// The compress flag.
1387    ///
1388    /// Required.
1389    pub compress_flag: Option<bool>,
1390    /// Whether the Context TLV is marked as Stable Network Data.
1391    ///
1392    /// Required.
1393    pub stable: Option<bool>,
1394    /// The associated IPv6 prefix.
1395    ///
1396    /// Required.
1397    pub prefix: Option<String>,
1398    #[doc(hidden)]
1399    pub __source_breaking: fidl::marker::SourceBreaking,
1400}
1401
1402impl fidl::Persistable for LowpanContextInfo {}
1403
1404/// Multi radio link info associated with a neighbor.
1405#[derive(Clone, Debug, Default, PartialEq)]
1406pub struct MultiRadioNeighborInfo {
1407    /// IEEE 802.15.4 Extended Address.
1408    ///
1409    /// Required.
1410    pub extended_address: Option<Vec<u8>>,
1411    /// IEEE 802.15.4 short address of neighbor.
1412    ///
1413    /// Required.
1414    pub thread_rloc: Option<u16>,
1415    /// Multi radio link info. So far only '15.4' and 'TREL' links.
1416    /// Considering a potential future expansion to other links, set
1417    /// the MAX capability to 5.
1418    ///
1419    /// Required.
1420    pub radio_link_info: Option<Vec<RadioLinkInfo>>,
1421    #[doc(hidden)]
1422    pub __source_breaking: fidl::marker::SourceBreaking,
1423}
1424
1425impl fidl::Persistable for MultiRadioNeighborInfo {}
1426
1427#[derive(Clone, Debug, Default, PartialEq)]
1428pub struct Nat64ErrorCounters {
1429    /// Packet drop for unknown reasons
1430    pub unknown: Option<Nat64PacketCounters>,
1431    /// Packet drop due to failed to parse the datagram
1432    pub illegal_packet: Option<Nat64PacketCounters>,
1433    /// Packet drop due to unsupported IP protocol
1434    pub unsupported_protocol: Option<Nat64PacketCounters>,
1435    /// Packet drop due to no mappings found or mapping pool exhausted
1436    pub no_mapping: Option<Nat64PacketCounters>,
1437    #[doc(hidden)]
1438    pub __source_breaking: fidl::marker::SourceBreaking,
1439}
1440
1441impl fidl::Persistable for Nat64ErrorCounters {}
1442
1443#[derive(Clone, Debug, Default, PartialEq)]
1444pub struct Nat64Info {
1445    /// NAT64 border routing state
1446    pub nat64_state: Option<BorderRoutingNat64State>,
1447    /// NAT64 mapping
1448    pub nat64_mappings: Option<Vec<Nat64Mapping>>,
1449    /// NAT64 error counters
1450    pub nat64_error_counters: Option<Nat64ErrorCounters>,
1451    /// NAT64 protocol counters
1452    pub nat64_protocol_counters: Option<Nat64ProtocolCounters>,
1453    #[doc(hidden)]
1454    pub __source_breaking: fidl::marker::SourceBreaking,
1455}
1456
1457impl fidl::Persistable for Nat64Info {}
1458
1459/// Information about the mappings of NAT64 translator
1460#[derive(Clone, Debug, Default, PartialEq)]
1461pub struct Nat64Mapping {
1462    /// The unique id for a mapping session
1463    pub mapping_id: Option<u64>,
1464    /// The IPv4 address of the mapping
1465    pub ip4_addr: Option<Vec<u8>>,
1466    /// The IPv6 address of the mapping
1467    pub ip6_addr: Option<Vec<u8>>,
1468    /// Remaining time before expiry in milliseconds
1469    pub remaining_time_ms: Option<u32>,
1470    /// Nat64 Counters
1471    pub counters: Option<Nat64ProtocolCounters>,
1472    #[doc(hidden)]
1473    pub __source_breaking: fidl::marker::SourceBreaking,
1474}
1475
1476impl fidl::Persistable for Nat64Mapping {}
1477
1478#[derive(Clone, Debug, Default, PartialEq)]
1479pub struct Nat64PacketCounters {
1480    /// Number of packets translated from IPv4 to IPv6
1481    pub ipv4_to_ipv6_packets: Option<u64>,
1482    /// Number of packets translated from IPv6 to IPv4
1483    pub ipv6_to_ipv4_packets: Option<u64>,
1484    #[doc(hidden)]
1485    pub __source_breaking: fidl::marker::SourceBreaking,
1486}
1487
1488impl fidl::Persistable for Nat64PacketCounters {}
1489
1490#[derive(Clone, Debug, Default, PartialEq)]
1491pub struct Nat64ProtocolCounters {
1492    /// TCP counters
1493    pub tcp: Option<Nat64TrafficCounters>,
1494    /// UDP counters
1495    pub udp: Option<Nat64TrafficCounters>,
1496    /// ICMP counters
1497    pub icmp: Option<Nat64TrafficCounters>,
1498    /// Total counters
1499    pub total: Option<Nat64TrafficCounters>,
1500    #[doc(hidden)]
1501    pub __source_breaking: fidl::marker::SourceBreaking,
1502}
1503
1504impl fidl::Persistable for Nat64ProtocolCounters {}
1505
1506#[derive(Clone, Debug, Default, PartialEq)]
1507pub struct Nat64TrafficCounters {
1508    /// Number of packets translated from IPv4 to IPv6
1509    pub ipv4_to_ipv6_packets: Option<u64>,
1510    /// Sum of size of packets translated from IPv4 to IPv6
1511    pub ipv4_to_ipv6_bytes: Option<u64>,
1512    /// Number of packets translated from IPv6 to IPv4
1513    pub ipv6_to_ipv4_packets: Option<u64>,
1514    /// Sum of size of packets translated from IPv6 to IPv4
1515    pub ipv6_to_ipv4_bytes: Option<u64>,
1516    #[doc(hidden)]
1517    pub __source_breaking: fidl::marker::SourceBreaking,
1518}
1519
1520impl fidl::Persistable for Nat64TrafficCounters {}
1521
1522/// Represents an IPv6 network interface unicast address.
1523///
1524///  Derived from `otNetifAddress`(https://openthread.io/reference/struct/ot-netif-address)
1525#[derive(Clone, Debug, Default, PartialEq)]
1526pub struct NetifAddress {
1527    /// The IPv6 unicast address.
1528    ///
1529    /// Required.
1530    pub address: Option<fidl_fuchsia_net_common::Ipv6Address>,
1531    /// The IPv6 unicast address prefix length.
1532    ///
1533    /// Required.
1534    pub prefix_length: Option<u8>,
1535    /// The IPv6 address origin.
1536    ///
1537    /// Required.
1538    pub origin: Option<AddressOrigin>,
1539    /// Whether the address is preferred or not.
1540    ///
1541    /// Required.
1542    pub preferred: Option<bool>,
1543    /// Whether the address is valid or not.
1544    ///
1545    /// Required.
1546    pub valid: Option<bool>,
1547    #[doc(hidden)]
1548    pub __source_breaking: fidl::marker::SourceBreaking,
1549}
1550
1551impl fidl::Persistable for NetifAddress {}
1552
1553/// Represents the full Network Data received from the Leader.
1554#[derive(Clone, Debug, Default, PartialEq)]
1555pub struct NetworkData {
1556    /// On-mesh prefixes.
1557    ///
1558    /// Required.
1559    pub on_mesh_prefixes: Option<Vec<BorderRouterConfig>>,
1560    /// External Routes.
1561    ///
1562    /// Required.
1563    pub external_routes: Option<Vec<ExternalRouteConfig>>,
1564    /// SRP service entries.
1565    ///
1566    /// Required.
1567    pub services: Option<Vec<ServiceConfig>>,
1568    /// 6LoWPAN Context IDs.
1569    ///
1570    /// Required.
1571    pub contexts: Option<Vec<LowpanContextInfo>>,
1572    /// Commissioning Dataset information.
1573    ///
1574    /// Required.
1575    pub commissioning_dataset: Option<CommissioningDataset>,
1576    #[doc(hidden)]
1577    pub __source_breaking: fidl::marker::SourceBreaking,
1578}
1579
1580impl fidl::Persistable for NetworkData {}
1581
1582/// Describes the parameters of a network scan.
1583#[derive(Clone, Debug, Default, PartialEq)]
1584pub struct NetworkScanParameters {
1585    /// Subset of channels to scan.
1586    ///
1587    /// If unspecified, all channels will be scanned.
1588    pub channels: Option<Vec<u16>>,
1589    /// Transmit power (in dBm to the antenna) for transmitting
1590    /// beacon requests.
1591    ///
1592    /// Note that hardware limitations may cause the actual
1593    /// used transmit power to differ from what is specified.
1594    /// In that case the used transmit power will always be
1595    /// the highest available transmit power that is less than
1596    /// the specified transmit power. If the desired transmit
1597    /// power is lower than the lowest transmit power supported
1598    /// by the hardware, then that will be used instead.
1599    pub tx_power_dbm: Option<i8>,
1600    #[doc(hidden)]
1601    pub __source_breaking: fidl::marker::SourceBreaking,
1602}
1603
1604impl fidl::Persistable for NetworkScanParameters {}
1605
1606/// LoWPAN On-Mesh Prefix.
1607///
1608/// Informed by the Thread 1.1.1 Specification, section 5.13.2.
1609#[derive(Clone, Debug, Default, PartialEq)]
1610pub struct OnMeshPrefix {
1611    /// Subnet to advertise for devices to use on the network. Required.
1612    pub subnet: Option<fidl_fuchsia_net_common::Ipv6AddressWithPrefix>,
1613    /// If present, indicates that this device is offering a default route
1614    /// as well as indicating the what preference this default
1615    /// route should be given relative to other devices offering default
1616    /// routes. If not present, no default route is advertised.
1617    ///
1618    /// Based on `P_default` and `P_preference` from Section 5.13.2 of the
1619    /// Thread 1.1.1 Specification.
1620    pub default_route_preference: Option<RoutePreference>,
1621    /// True if the route is expected to be available for at least Thread's
1622    /// `MIN_STABLE_LIFETIME`; otherwise `false`. If not present, assumed to
1623    /// be `false`.
1624    ///
1625    /// The Thread specification defines `MIN_STABLE_LIFETIME` as 168 hours.
1626    ///
1627    /// Based on `P_stable` from Section 5.13.2 of the
1628    /// Thread 1.1.1 Specification.
1629    pub stable: Option<bool>,
1630    /// True if network devices are allowed to use previously configured
1631    /// addresses using this prefix. If not present, assumed to be `false`.
1632    ///
1633    /// "SLAAC" referrs to StateLess Address Auto Configuration, described in
1634    /// [RFC4862](https://tools.ietf.org/html/rfc4862).
1635    ///
1636    /// Based on `P_slaac_preferred` from Section 5.13.2 of the
1637    /// Thread 1.1.1 Specification.
1638    pub slaac_preferred: Option<bool>,
1639    /// True if network devices are allowed to autoconfigure addresses using
1640    /// this prefix. If not present, assumed to be `false`.
1641    ///
1642    /// "SLAAC" referrs to StateLess Address Auto Configuration, described in
1643    /// [RFC4862](https://tools.ietf.org/html/rfc4862).
1644    ///
1645    /// Based on `P_slaac_valid` from Section 5.13.2 of the
1646    /// Thread 1.1.1 Specification.
1647    pub slaac_valid: Option<bool>,
1648    #[doc(hidden)]
1649    pub __source_breaking: fidl::marker::SourceBreaking,
1650}
1651
1652impl fidl::Persistable for OnMeshPrefix {}
1653
1654/// Represents an Thread Active or Pending Operational Dataset.
1655#[derive(Clone, Debug, Default, PartialEq)]
1656pub struct OperationalDataset {
1657    /// Active Timestamp.
1658    ///
1659    /// Required.
1660    pub active_timestamp: Option<i64>,
1661    /// Pending Timestamp.
1662    ///
1663    /// Required.
1664    pub pending_timestamp: Option<i64>,
1665    /// Network Key.
1666    ///
1667    /// Required.
1668    pub network_key: Option<Vec<u8>>,
1669    /// Network Name.
1670    ///
1671    /// Required.
1672    pub network_name: Option<Vec<u8>>,
1673    /// Extended PAN ID.
1674    ///
1675    /// Required.
1676    pub extended_pan_id: Option<Vec<u8>>,
1677    /// Mesh Local Prefix.
1678    ///
1679    /// Required.
1680    pub mesh_local_prefix: Option<Vec<u8>>,
1681    /// Delay Timer.
1682    ///
1683    /// Required.
1684    pub delay: Option<u32>,
1685    /// PAN ID.
1686    ///
1687    /// Required.
1688    pub pan_id: Option<u16>,
1689    /// Channel.
1690    ///
1691    /// Required.
1692    pub channel: Option<u16>,
1693    /// Wake-up Channel.
1694    ///
1695    /// Required.
1696    pub wakeup_channel: Option<u16>,
1697    /// PSKc.
1698    ///
1699    /// Required.
1700    pub pskc: Option<Vec<u8>>,
1701    /// Security Policy.
1702    ///
1703    /// Required.
1704    pub security_policy: Option<SecurityPolicy>,
1705    /// Channel Mask.
1706    ///
1707    /// Required.
1708    pub channel_mask: Option<u32>,
1709    #[doc(hidden)]
1710    pub __source_breaking: fidl::marker::SourceBreaking,
1711}
1712
1713impl fidl::Persistable for OperationalDataset {}
1714
1715/// Platform counters related to processed RA info when DHCPv6 PD is enabled.
1716#[derive(Clone, Debug, Default, PartialEq)]
1717pub struct PdProcessedRaInfo {
1718    /// The number of platform generated RA handled by ApplyPlatformGeneratedRa.
1719    ///
1720    /// Required.
1721    pub num_platform_ra_received: Option<u32>,
1722    /// The number of PIO processed for adding OMR prefixes.
1723    ///
1724    /// Required.
1725    pub num_platform_pio_processed: Option<u32>,
1726    /// The duration since the last processed RA message.
1727    ///
1728    /// Required.
1729    pub last_platform_ra_msec: Option<u32>,
1730    #[doc(hidden)]
1731    pub __source_breaking: fidl::marker::SourceBreaking,
1732}
1733
1734impl fidl::Persistable for PdProcessedRaInfo {}
1735
1736/// Represents information associated with a radio link.
1737#[derive(Clone, Debug, Default, PartialEq)]
1738pub struct RadioLinkInfo {
1739    /// Radio Link Type, e.g., '15.4' or 'TREL'.
1740    /// Considering a potential future expansion to other links, set
1741    /// the MAX capability to 10.
1742    ///
1743    /// Required.
1744    pub link_type: Option<String>,
1745    /// Preference level of radio link.
1746    ///
1747    /// Required.
1748    pub preference: Option<u8>,
1749    #[doc(hidden)]
1750    pub __source_breaking: fidl::marker::SourceBreaking,
1751}
1752
1753impl fidl::Persistable for RadioLinkInfo {}
1754
1755/// Represents the diagnostic information for a Thread Router.
1756#[derive(Clone, Debug, Default, PartialEq)]
1757pub struct RouterInfo {
1758    /// IEEE 802.15.4 Extended Address
1759    ///
1760    /// Required.
1761    pub extended_address: Option<Vec<u8>>,
1762    /// IEEE 802.15.4 short address of neighbor.
1763    ///
1764    /// Required.
1765    pub thread_rloc: Option<u16>,
1766    /// Router ID.
1767    ///
1768    /// Required.
1769    pub router_id: Option<u8>,
1770    /// Next hop to router.
1771    ///
1772    /// Required.
1773    pub next_hop: Option<u8>,
1774    /// Path cost to router.
1775    ///
1776    /// Required.
1777    pub path_cost: Option<u8>,
1778    /// Link Quality In.
1779    ///
1780    /// Required.
1781    pub link_quality_in: Option<u8>,
1782    /// Link Quality Out.
1783    ///
1784    /// Required.
1785    pub link_quality_out: Option<u8>,
1786    /// The router's age (duration since last heard).
1787    ///
1788    /// Required.
1789    pub age: Option<i64>,
1790    /// Whether link established with Router ID or not.
1791    ///
1792    /// Required.
1793    pub link_established: Option<bool>,
1794    #[doc(hidden)]
1795    pub __source_breaking: fidl::marker::SourceBreaking,
1796}
1797
1798impl fidl::Persistable for RouterInfo {}
1799
1800/// Represents the Thread Security Policy.
1801#[derive(Clone, Debug, Default, PartialEq)]
1802pub struct SecurityPolicy {
1803    /// Key Rotation time value, in uints of hours.
1804    ///
1805    /// Required.
1806    pub rotation_time: Option<u16>,
1807    /// Whether Obtaining the Network Key for out-of-band commissioning is enabled.
1808    ///
1809    /// Required.
1810    pub obtain_network_key_enabled: Option<bool>,
1811    /// Whether Native Commissioning using PSKc is allowed.
1812    ///
1813    /// Required.
1814    pub native_commissioning_enabled: Option<bool>,
1815    /// Whether Thread 1.0/1.1.x Routers are enabled.
1816    ///
1817    /// Required.
1818    pub routers_enabled: Option<bool>,
1819    /// Whether External Commissioner authentication is allowed.
1820    ///
1821    /// Required.
1822    pub external_commissioning_enabled: Option<bool>,
1823    /// Whether Autonomous Enrollment is enabled.
1824    ///
1825    /// Required.
1826    pub autonomous_enrollment_enabled: Option<bool>,
1827    /// Whether Network Key Provisioning is enabled.
1828    ///
1829    /// Required.
1830    pub network_key_provisioning_enabled: Option<bool>,
1831    /// Whether ToBLE link is enabled.
1832    ///
1833    /// Required.
1834    pub toble_link_enabled: Option<bool>,
1835    /// Whether Non-CCM Routers enabled.
1836    ///
1837    /// Required.
1838    pub nonccm_routers_enabled: Option<bool>,
1839    /// The Version-threshold for Routing.
1840    ///
1841    /// Required.
1842    pub version_threshold_for_routing: Option<u8>,
1843    #[doc(hidden)]
1844    pub __source_breaking: fidl::marker::SourceBreaking,
1845}
1846
1847impl fidl::Persistable for SecurityPolicy {}
1848
1849/// Represents a Server configuration.
1850///
1851/// Derived from `otServerConfig`(https://openthread.io/reference/struct/ot-server-config)
1852#[derive(Clone, Debug, Default, PartialEq)]
1853pub struct ServerConfig {
1854    /// Whether this config is considered Stable Network Data.
1855    ///
1856    /// Required.
1857    pub stable: Option<bool>,
1858    /// Length of server data.
1859    ///
1860    /// Required.
1861    pub server_data_length: Option<u8>,
1862    /// Server data bytes.
1863    ///
1864    /// Required.
1865    pub server_data: Option<Vec<u8>>,
1866    /// The Server RLOC16.
1867    ///
1868    /// Required.
1869    pub rloc16: Option<u16>,
1870    #[doc(hidden)]
1871    pub __source_breaking: fidl::marker::SourceBreaking,
1872}
1873
1874impl fidl::Persistable for ServerConfig {}
1875
1876/// Represents a Service configuration.
1877///
1878/// Derived from `otServiceConfig`(https://openthread.io/reference/struct/ot-service-config)
1879#[derive(Clone, Debug, Default, PartialEq)]
1880pub struct ServiceConfig {
1881    /// The service ID.
1882    ///
1883    /// Required.
1884    pub service_id: Option<u8>,
1885    /// IANA Enterprise Number.
1886    ///
1887    /// Required.
1888    pub enterprise_number: Option<u32>,
1889    /// Length of service data.
1890    ///
1891    /// Required.
1892    pub service_data_length: Option<u8>,
1893    /// Service data bytes.
1894    ///
1895    /// Required.
1896    pub service_data: Option<Vec<u8>>,
1897    /// The Server configuration.
1898    ///
1899    /// Required.
1900    pub server_config: Option<ServerConfig>,
1901    #[doc(hidden)]
1902    pub __source_breaking: fidl::marker::SourceBreaking,
1903}
1904
1905impl fidl::Persistable for ServiceConfig {}
1906
1907/// Represents a SRP service host.
1908#[derive(Clone, Debug, Default, PartialEq)]
1909pub struct SrpServerHost {
1910    /// The full name of host.
1911    ///
1912    /// Required.
1913    pub name: Option<String>,
1914    /// Whether the SRP service host has been deleted.
1915    ///
1916    /// Required.
1917    pub deleted: Option<bool>,
1918    /// The IPv6 addresses of the SPR service host.
1919    ///
1920    /// Required.
1921    pub addresses: Option<Vec<fidl_fuchsia_net_common::Ipv6Address>>,
1922    #[doc(hidden)]
1923    pub __source_breaking: fidl::marker::SourceBreaking,
1924}
1925
1926impl fidl::Persistable for SrpServerHost {}
1927
1928/// State information about the SRP server.
1929#[derive(Clone, Debug, Default, PartialEq)]
1930pub struct SrpServerInfo {
1931    /// The operational state of the SRP server.
1932    ///
1933    /// Required.
1934    pub state: Option<SrpServerState>,
1935    /// The port the SRP server is listening to.
1936    ///
1937    /// Optional. The port may be omitted when `state` is `DISABLED`.
1938    pub port: Option<u16>,
1939    /// The address mode of the SRP server.
1940    ///
1941    /// Required.
1942    pub address_mode: Option<SrpServerAddressMode>,
1943    /// The response counters of the SRP server.
1944    ///
1945    /// Required.
1946    pub response_counters: Option<SrpServerResponseCounters>,
1947    /// The registration information of SRP hosts.
1948    ///
1949    /// Required.
1950    pub hosts_registration: Option<SrpServerRegistration>,
1951    /// The registration information of SRP services.
1952    ///
1953    /// Required.
1954    pub services_registration: Option<SrpServerRegistration>,
1955    /// The detailed registration information of SRP hosts.
1956    ///
1957    /// Required.
1958    pub hosts: Option<Vec<SrpServerHost>>,
1959    /// The detailed registration information of SRP services.
1960    ///
1961    /// Required.
1962    pub services: Option<Vec<SrpServerService>>,
1963    #[doc(hidden)]
1964    pub __source_breaking: fidl::marker::SourceBreaking,
1965}
1966
1967impl fidl::Persistable for SrpServerInfo {}
1968
1969/// Registration information about the SRP server.
1970#[derive(Clone, Debug, Default, PartialEq)]
1971pub struct SrpServerRegistration {
1972    /// Number of hosts/services that have not been deleted.
1973    ///
1974    /// Required.
1975    pub fresh_count: Option<u32>,
1976    /// Number of hosts/services that have been deleted.
1977    ///
1978    /// Required.
1979    pub deleted_count: Option<u32>,
1980    /// Total lease time.
1981    ///
1982    /// Required.
1983    pub lease_time_total: Option<i64>,
1984    /// Total key lease time.
1985    ///
1986    /// Required.
1987    pub key_lease_time_total: Option<i64>,
1988    /// Total remaining lease time.
1989    ///
1990    /// Required.
1991    pub remaining_lease_time_total: Option<i64>,
1992    /// Total remaining key lease time.
1993    ///
1994    /// Required.
1995    pub remaining_key_lease_time_total: Option<i64>,
1996    #[doc(hidden)]
1997    pub __source_breaking: fidl::marker::SourceBreaking,
1998}
1999
2000impl fidl::Persistable for SrpServerRegistration {}
2001
2002#[derive(Clone, Debug, Default, PartialEq)]
2003pub struct SrpServerResponseCounters {
2004    /// The number of successful responses.
2005    ///
2006    /// Required.
2007    pub success_response: Option<u32>,
2008    /// The number of 'server failure' responses.
2009    ///
2010    /// Required.
2011    pub server_failure_response: Option<u32>,
2012    /// The number of 'format error' responses.
2013    ///
2014    /// Required.
2015    pub format_error_response: Option<u32>,
2016    /// The number of 'name exists' responses.
2017    ///
2018    /// Required.
2019    pub name_exists_response: Option<u32>,
2020    /// The number of 'refused' responses.
2021    ///
2022    /// Required.
2023    pub refused_response: Option<u32>,
2024    /// The number of 'other' responses.
2025    ///
2026    /// Required.
2027    pub other_response: Option<u32>,
2028    #[doc(hidden)]
2029    pub __source_breaking: fidl::marker::SourceBreaking,
2030}
2031
2032impl fidl::Persistable for SrpServerResponseCounters {}
2033
2034/// Represents a SRP service.
2035#[derive(Clone, Debug, Default, PartialEq)]
2036pub struct SrpServerService {
2037    /// The full service instance name of the service.
2038    ///
2039    /// Required.
2040    pub instance_name: Option<String>,
2041    /// Whether the SRP service host has been deleted.
2042    ///
2043    /// Required.
2044    pub deleted: Option<bool>,
2045    /// The sub-type service name (full name) of the service.
2046    ///
2047    /// The maximum number of service subtype labels in the SRP service is 6,
2048    /// see OPENTHREAD_CONFIG_SRP_CLIENT_BUFFERS_SERVICE_MAX_SUB_TYPES.
2049    ///
2050    /// The maximum length for a single DNS label (sub-type) is 63 characters.
2051    ///
2052    /// Required.
2053    pub subtypes: Option<Vec<String>>,
2054    /// The port of the service instance.
2055    ///
2056    /// Required.
2057    pub port: Option<u16>,
2058    /// The priority of the service instance.
2059    ///
2060    /// Required.
2061    pub priority: Option<u16>,
2062    /// The weight of the service instance.
2063    ///
2064    /// Required.
2065    pub weight: Option<u16>,
2066    /// The TTL of the service instance.
2067    ///
2068    /// Required.
2069    pub ttl: Option<i64>,
2070    /// The lease time of a service.
2071    ///
2072    /// Required.
2073    pub lease: Option<i64>,
2074    /// The key lease time of a host/service.
2075    ///
2076    /// Required.
2077    pub key_lease: Option<i64>,
2078    /// The TXT record data.
2079    ///
2080    /// Required.
2081    pub txt_data: Option<Vec<DnsTxtEntry>>,
2082    /// The information of a service host.
2083    ///
2084    /// Required.
2085    pub host: Option<SrpServerHost>,
2086    #[doc(hidden)]
2087    pub __source_breaking: fidl::marker::SourceBreaking,
2088}
2089
2090impl fidl::Persistable for SrpServerService {}
2091
2092/// LoWPAN Interface Telemetry Information.
2093///
2094/// The fields in this table are used for providing low-level telemetry and information about the
2095/// LoWPAN interface for debugging and statistics purposes.
2096///
2097/// All fields are optional.
2098#[derive(Clone, Debug, Default, PartialEq)]
2099pub struct Telemetry {
2100    /// The current RSSI of the radio.
2101    pub rssi: Option<i8>,
2102    /// The configured transmit power of the radio.
2103    pub tx_power: Option<i8>,
2104    /// The current channel index of the radio.
2105    pub channel_index: Option<u16>,
2106    /// The partition ID of the currently associated network partition.
2107    pub partition_id: Option<u32>,
2108    /// The version string describing the underlying mesh stack.
2109    pub stack_version: Option<String>,
2110    /// The version string describing the underlying radio control firmware.
2111    pub rcp_version: Option<String>,
2112    /// Thread link mode byte.
2113    ///
2114    /// Only present on Thread networks.
2115    ///
2116    /// Defined by section 4.5.2 of the Thread 1.1.1 specification ("Mode TLV").
2117    pub thread_link_mode: Option<u8>,
2118    /// The router ID of this device in the currently associated network.
2119    ///
2120    /// Only present on Thread networks.
2121    pub thread_router_id: Option<u8>,
2122    /// The current RLOC16 address of this node.
2123    ///
2124    /// Only present on Thread networks.
2125    pub thread_rloc: Option<u16>,
2126    /// The full network data version.
2127    ///
2128    /// Only present on Thread networks.
2129    pub thread_network_data_version: Option<u8>,
2130    /// The stable network data version.
2131    ///
2132    /// Only present on Thread networks.
2133    pub thread_stable_network_data_version: Option<u8>,
2134    /// The current Thread network data, in raw binary form, as defined in section 5.13 of
2135    /// the Thread 1.1.1 specification.
2136    ///
2137    /// Only present on Thread networks.
2138    pub thread_network_data: Option<Vec<u8>>,
2139    /// The current Thread stable network data, in raw binary form, as defined in section 5.13 of
2140    /// the Thread 1.1.1 specification.
2141    ///
2142    /// Only present on Thread networks.
2143    pub thread_stable_network_data: Option<Vec<u8>>,
2144    /// The counters associated with border routing messages.
2145    ///
2146    /// Only present on Thread networks.
2147    pub thread_border_routing_counters: Option<BorderRoutingCounters>,
2148    /// The SRP server information.
2149    ///
2150    /// Only present on Thread networks.
2151    pub srp_server_info: Option<SrpServerInfo>,
2152    /// The DNS-SD server counters.
2153    ///
2154    /// Only present on Thread networks.
2155    pub dnssd_counters: Option<DnssdCounters>,
2156    /// The data associated with the leader of the currently associated Thread network.
2157    ///
2158    /// Only present on Thread networks.
2159    pub leader_data: Option<LeaderData>,
2160    /// The uptime of the current instance.
2161    ///
2162    /// Required.
2163    pub uptime: Option<i64>,
2164    /// Information about the NAT64
2165    ///
2166    /// Only present on Thread networks.
2167    pub nat64_info: Option<Nat64Info>,
2168    /// Information about the TREL interface, if available.
2169    ///
2170    /// Only present on Thread networks.
2171    pub trel_counters: Option<TrelCounters>,
2172    /// Information about the TREL peers, if available.
2173    ///
2174    /// Only present on Thread networks.
2175    pub trel_peers_info: Option<TrelPeersInfo>,
2176    /// Information about the Upstream DNS feature, if available.
2177    ///
2178    /// Only present on Thread networks.
2179    pub upstream_dns_info: Option<UpstreamDnsInfo>,
2180    /// Information about the DHCPv6 PD feature, if available.
2181    ///
2182    /// Only present on Thread networks.
2183    pub dhcp6pd_info: Option<Dhcp6PdInfo>,
2184    /// Link Metrics Manager related info, if available.
2185    ///
2186    /// Only present on Thread networks.
2187    pub link_metrics_entries: Option<Vec<LinkMetricsEntry>>,
2188    /// Counters related to border agent functionality.
2189    ///
2190    /// Only present on Thread networks.
2191    pub border_agent_counters: Option<fidl_fuchsia_lowpan_device_common::BorderAgentCounters>,
2192    /// Whether multi-AIL (Adjacent Infrastructure Link) scenario is detected.
2193    ///
2194    /// Only present on Thread networks.
2195    pub multi_ail_detected: Option<bool>,
2196    /// The Extended PAN ID of the currently associated Thread network. This 8-byte unique
2197    /// identifier is used to distinguish different Thread networks.
2198    ///
2199    /// Only present on Thread networks.
2200    pub extended_pan_id: Option<u64>,
2201    /// Thread Border Routing peers information.
2202    ///
2203    /// Only present on Thread networks.
2204    pub border_routing_peers: Option<Vec<BorderRoutingPeer>>,
2205    /// Thread Border Routing discovered routers by Border Routing Manager on the infrastructure link.
2206    ///
2207    /// Only present on Thread networks.
2208    pub border_routing_routers: Option<Vec<BorderRoutingRouter>>,
2209    /// Thread Active Operational Dataset.
2210    ///
2211    /// Only present on Thread networks.
2212    pub active_dataset: Option<OperationalDataset>,
2213    /// The multi radio link information associated with a neighbor with a given Extended Address.
2214    ///
2215    /// Only present on Thread networks.
2216    pub multiradio_neighbor_info: Option<Vec<MultiRadioNeighborInfo>>,
2217    /// Information regarding all active routers within the Thread network.
2218    ///
2219    /// Only present on Thread networks.
2220    pub router_info: Option<Vec<RouterInfo>>,
2221    /// Full Network Data received from the Leader.
2222    ///
2223    /// Only present on Thread networks.
2224    pub network_data: Option<NetworkData>,
2225    /// Aggregates Thread network events histories from the History Tracker.
2226    ///
2227    /// Only present on Thread networks.
2228    pub history_report: Option<ThreadHistoryReport>,
2229    /// IPv6 unicast address list configured on a Thread interface.
2230    ///
2231    /// Only present on Thread Networks.
2232    pub ipaddrs: Option<Vec<NetifAddress>>,
2233    /// IPv6 multicast address list configured on a Thread interface.
2234    ///
2235    /// Only present on Thread Networks.
2236    pub ipmaddrs: Option<Vec<fidl_fuchsia_net_common::Ipv6Address>>,
2237    /// Thread Border Routing discovered prefixes by Border Routing Manager
2238    /// on the infrastructure link.
2239    ///
2240    /// Only present on Thread networks.
2241    pub border_routing_prefixes: Option<Vec<BorderRoutingPrefixTable>>,
2242    /// Thread Border Routing discovered Recursive DNS Server (RDNSS) by Border
2243    /// Routing Manager on the infrastructure link.
2244    ///
2245    /// Only present on Thread networks.
2246    pub border_routing_rdnsses: Option<Vec<BorderRoutingRdnss>>,
2247    /// The UDP Sockets information.
2248    ///
2249    /// Only present on Thread networks.
2250    pub netstat: Option<Vec<UdpSocket>>,
2251    /// The EID-to-RLOC cache entries.
2252    ///
2253    /// Only present on Thread networks.
2254    pub eid_cache_entries: Option<Vec<EidCacheEntry>>,
2255    /// CCA threshold in dBm measured at the antenna connector.
2256    ///
2257    /// Only present on Thread networks.
2258    pub cca_threshold: Option<i8>,
2259    #[doc(hidden)]
2260    pub __source_breaking: fidl::marker::SourceBreaking,
2261}
2262
2263impl fidl::Persistable for Telemetry {}
2264
2265/// Represents Thread network event histories from the History Tracker.
2266#[derive(Clone, Debug, Default, PartialEq)]
2267pub struct ThreadHistoryReport {
2268    /// Thread network info history.
2269    ///
2270    /// Required.
2271    pub net_info_history: Option<Vec<ThreadNetworkInfoEntry>>,
2272    /// Thread neighbor info history.
2273    ///
2274    /// Required.
2275    pub neighbor_info_history: Option<Vec<ThreadNeighborInfoEntry>>,
2276    /// Thread router table entry event history.
2277    ///
2278    /// Required.
2279    pub router_info_history: Option<Vec<ThreadRouterInfoEntry>>,
2280    /// Thread network data on-mesh prefix info history.
2281    ///
2282    /// Required.
2283    pub prefix_info_history: Option<Vec<ThreadNetDataPrefixInfoEntry>>,
2284    /// Thread network data external route info history.
2285    ///
2286    /// Required.
2287    pub route_info_history: Option<Vec<ThreadNetDataRouteInfoEntry>>,
2288    #[doc(hidden)]
2289    pub __source_breaking: fidl::marker::SourceBreaking,
2290}
2291
2292impl fidl::Persistable for ThreadHistoryReport {}
2293
2294/// Represents an MLE Link Mode configuration.
2295///
2296/// Derived from `otLinkModeConfig`(https://openthread.io/reference/struct/ot-link-mode-config)
2297#[derive(Clone, Debug, Default, PartialEq)]
2298pub struct ThreadLinkMode {
2299    /// Whether the sender has its receiver on when not transmitting.
2300    ///
2301    /// Required.
2302    pub rx_on_when_idle: Option<bool>,
2303    /// Whether the sender is an FTD.
2304    ///
2305    /// Required.
2306    pub device_type: Option<bool>,
2307    /// Whether the sender requires the full Network Data.
2308    ///
2309    /// Required.
2310    pub network_data: Option<bool>,
2311    #[doc(hidden)]
2312    pub __source_breaking: fidl::marker::SourceBreaking,
2313}
2314
2315impl fidl::Persistable for ThreadLinkMode {}
2316
2317/// Represents a single entry in the Thread Neighbor Table history.
2318#[derive(Clone, Debug, Default, PartialEq)]
2319pub struct ThreadNeighborInfoEntry {
2320    /// Time elapsed since the command was issued.
2321    ///
2322    /// Required.
2323    pub age: Option<i64>,
2324    /// Device type: either "Child" or "Router".
2325    ///
2326    /// Required.
2327    pub is_child: Option<bool>,
2328    /// Neighbor Event. Possible values:
2329    /// `otHistoryTrackerNeighborEvent::OT_HISTORY_TRACKER_NEIGHBOR_EVENT_ADDED`,
2330    /// `otHistoryTrackerNeighborEvent::OT_HISTORY_TRACKER_NEIGHBOR_EVENT_REMOVED`,
2331    /// `otHistoryTrackerNeighborEvent::OT_HISTORY_TRACKER_NEIGHBOR_EVENT_CHANGED`,
2332    /// `otHistoryTrackerNeighborEvent::OT_HISTORY_TRACKER_NEIGHBOR_EVENT_RESTORING`.
2333    ///
2334    /// Required.
2335    pub event: Option<HistoryTrackerNeighborEvent>,
2336    /// The extended address of this neighbor.
2337    ///
2338    /// Required.
2339    pub extended_address: Option<Vec<u8>>,
2340    /// Neighbor's RLOC16.
2341    ///
2342    /// Required.
2343    pub rloc16: Option<u16>,
2344    /// MLE link mode.
2345    ///
2346    /// Required.
2347    pub mode: Option<ThreadLinkMode>,
2348    /// Average received signal strength (in dBm) associated with the
2349    /// frames received from the neighbors.
2350    ///
2351    /// Required.
2352    pub avg_rssi: Option<i32>,
2353    #[doc(hidden)]
2354    pub __source_breaking: fidl::marker::SourceBreaking,
2355}
2356
2357impl fidl::Persistable for ThreadNeighborInfoEntry {}
2358
2359/// Represents a single entry for an on-mesh prefix in the Network Data history.
2360#[derive(Clone, Debug, Default, PartialEq)]
2361pub struct ThreadNetDataPrefixInfoEntry {
2362    /// Time elapsed since the command was issued.
2363    ///
2364    /// Required.
2365    pub age: Option<i64>,
2366    /// Net data event for this prefix. Possible values:
2367    /// `otHistoryTrackerNetDataEvent::OT_HISTORY_TRACKER_NET_DATA_ENTRY_ADDED`,
2368    /// `otHistoryTrackerNetDataEvent::OT_HISTORY_TRACKER_NET_DATA_ENTRY_REMOVED`.
2369    ///
2370    /// Required.
2371    pub event: Option<HistoryTrackerNetDataEvent>,
2372    /// Border Router configuration.
2373    ///
2374    /// Required.
2375    pub on_mesh_prefix: Option<BorderRouterConfig>,
2376    #[doc(hidden)]
2377    pub __source_breaking: fidl::marker::SourceBreaking,
2378}
2379
2380impl fidl::Persistable for ThreadNetDataPrefixInfoEntry {}
2381
2382/// Represents a single entry for an external route in the Network Data history.
2383#[derive(Clone, Debug, Default, PartialEq)]
2384pub struct ThreadNetDataRouteInfoEntry {
2385    /// Time elapsed since the command was issued.
2386    ///
2387    /// Required.
2388    pub age: Option<i64>,
2389    /// Net data event for this route. Possible values:
2390    /// `otHistoryTrackerNetDataEvent::OT_HISTORY_TRACKER_NET_DATA_ENTRY_ADDED`,
2391    /// `otHistoryTrackerNetDataEvent::OT_HISTORY_TRACKER_NET_DATA_ENTRY_REMOVED`.
2392    ///
2393    /// Required.
2394    pub event: Option<HistoryTrackerNetDataEvent>,
2395    /// External Route configuration.
2396    ///
2397    /// Required.
2398    pub external_route: Option<ExternalRouteConfig>,
2399    #[doc(hidden)]
2400    pub __source_breaking: fidl::marker::SourceBreaking,
2401}
2402
2403impl fidl::Persistable for ThreadNetDataRouteInfoEntry {}
2404
2405/// Represents a single entry in the Thread Network Information history.
2406#[derive(Clone, Debug, Default, PartialEq)]
2407pub struct ThreadNetworkInfoEntry {
2408    /// Time elapsed since the command was issued.
2409    ///
2410    /// Required.
2411    pub age: Option<i64>,
2412    /// Device role. Possible values:
2413    /// `otDeviceRole::OT_DEVICE_ROLE_DISABLED`,
2414    /// `otDeviceRole::OT_DEVICE_ROLE_DETACHED`,
2415    /// `otDeviceRole::OT_DEVICE_ROLE_CHILD`,
2416    /// `otDeviceRole::OT_DEVICE_ROLE_ROUTER`.
2417    ///
2418    /// Required.
2419    pub role: Option<fidl_fuchsia_lowpan_device_common::Role>,
2420    /// MLE link mode.
2421    ///
2422    /// Required.
2423    pub mode: Option<ThreadLinkMode>,
2424    /// The device RLOC16.
2425    ///
2426    /// Required.
2427    pub rloc16: Option<u16>,
2428    /// Thread Network Partition ID.
2429    ///
2430    /// Required.
2431    pub partition_id: Option<u32>,
2432    #[doc(hidden)]
2433    pub __source_breaking: fidl::marker::SourceBreaking,
2434}
2435
2436impl fidl::Persistable for ThreadNetworkInfoEntry {}
2437
2438/// Represents a single entry in the Thread Router Table history.
2439#[derive(Clone, Debug, Default, PartialEq)]
2440pub struct ThreadRouterInfoEntry {
2441    /// Time elapsed since the command was issued.
2442    ///
2443    /// Required.
2444    pub age: Option<i64>,
2445    /// Router Event. Possible values:
2446    /// `otHistoryTrackerRouterEvent::OT_HISTORY_TRACKER_ROUTER_EVENT_ADDED`,
2447    /// `otHistoryTrackerRouterEvent::OT_HISTORY_TRACKER_ROUTER_EVENT_REMOVED`,
2448    /// `otHistoryTrackerRouterEvent::OT_HISTORY_TRACKER_ROUTER_EVENT_NEXT_HOP_CHANGED`,
2449    /// `otHistoryTrackerRouterEvent::OT_HISTORY_TRACKER_ROUTER_EVENT_COST_CHANGED`.
2450    ///
2451    /// Required.
2452    pub event: Option<HistoryTrackerRouterEvent>,
2453    /// Router ID.
2454    ///
2455    /// Required.
2456    pub router_id: Option<u8>,
2457    /// Router's RLOC16.
2458    ///
2459    /// Required.
2460    pub router_rloc16: Option<u16>,
2461    /// Router ID of the next hop.
2462    ///
2463    /// Required.
2464    pub next_hop_id: Option<u8>,
2465    /// RLOC16 of the next hop.
2466    ///
2467    /// Required.
2468    pub next_hop_rloc16: Option<u16>,
2469    /// Old path cost to the router.
2470    ///
2471    /// Required.
2472    pub old_path_cost: Option<u8>,
2473    /// New path cost to the router.
2474    ///
2475    /// Required.
2476    pub new_path_cost: Option<u8>,
2477    #[doc(hidden)]
2478    pub __source_breaking: fidl::marker::SourceBreaking,
2479}
2480
2481impl fidl::Persistable for ThreadRouterInfoEntry {}
2482
2483/// Represents a group of TREL related counters in the platform layer.
2484///
2485/// Derived from [`otPlatTrelCounters`]
2486/// (https://openthread.io/reference/struct/ot-plat-trel-counters).
2487#[derive(Clone, Debug, Default, PartialEq)]
2488pub struct TrelCounters {
2489    /// Sum of size of packets received through TREL.
2490    pub rx_bytes: Option<u64>,
2491    /// Number of packets received through TREL.
2492    pub rx_packets: Option<u64>,
2493    /// Sum of size of packets successfully transmitted through TREL.
2494    pub tx_bytes: Option<u64>,
2495    /// Number of packet transmission failures through TREL.
2496    pub tx_failure: Option<u64>,
2497    /// Number of packets successfully transmitted through TREL.
2498    pub tx_packets: Option<u64>,
2499    #[doc(hidden)]
2500    pub __source_breaking: fidl::marker::SourceBreaking,
2501}
2502
2503impl fidl::Persistable for TrelCounters {}
2504
2505/// Represents a TREL peer.
2506///
2507/// Derived from [`otPlatTrelCounters`](https://openthread.io/reference/struct/ot-plat-trel-counters).
2508#[derive(Clone, Debug, Default, PartialEq)]
2509pub struct TrelPeer {
2510    /// The Extended MAC Address of TREL peer.
2511    ///
2512    /// Required.
2513    pub extended_address: Option<Vec<u8>>,
2514    /// The Extended PAN Identifier of TREL peer.
2515    ///
2516    /// Required.
2517    pub extended_pan_id: Option<Vec<u8>>,
2518    /// The IPv6 socket address of TREL peer.
2519    ///
2520    /// Required.
2521    pub sock_address: Option<String>,
2522    #[doc(hidden)]
2523    pub __source_breaking: fidl::marker::SourceBreaking,
2524}
2525
2526impl fidl::Persistable for TrelPeer {}
2527
2528/// Represents the TREL peer related info.
2529///
2530/// The info is available in OpenThread via https://openthread.io/reference/group/api-trel
2531/// More fields may be added per request.
2532#[derive(Clone, Debug, Default, PartialEq)]
2533pub struct TrelPeersInfo {
2534    /// Number of TREL peers for this Thread Border Router.
2535    ///
2536    /// Required.
2537    pub num_trel_peers: Option<u16>,
2538    /// Represents TREL peers of this Thread Border Router.
2539    ///
2540    /// Required.
2541    pub trel_peers: Option<Vec<TrelPeer>>,
2542    #[doc(hidden)]
2543    pub __source_breaking: fidl::marker::SourceBreaking,
2544}
2545
2546impl fidl::Persistable for TrelPeersInfo {}
2547
2548/// Represents a UDP socket.
2549#[derive(Clone, Debug, Default, PartialEq)]
2550pub struct UdpSocket {
2551    /// The local IPv6 socket address.
2552    ///
2553    /// Required.
2554    pub sock_name: Option<String>,
2555    /// The peer IPv6 socket address.
2556    ///
2557    /// Required.
2558    pub peer_name: Option<String>,
2559    #[doc(hidden)]
2560    pub __source_breaking: fidl::marker::SourceBreaking,
2561}
2562
2563impl fidl::Persistable for UdpSocket {}
2564
2565/// Represents the count of queries, responses, failures handled by upstream DNS server
2566///
2567/// Derived from `otUpstreamDnsCounters`(https://openthread.io/reference/group/api-dnssd-server)
2568#[derive(Clone, Debug, Default, PartialEq)]
2569pub struct UpstreamDnsCounters {
2570    /// The number of queries forwarded
2571    ///
2572    /// Required.
2573    pub queries: Option<u32>,
2574    /// The number of responses forwarded
2575    ///
2576    /// Required.
2577    pub responses: Option<u32>,
2578    /// The number of upstream DNS failures
2579    ///
2580    /// Required.
2581    pub failures: Option<u32>,
2582    #[doc(hidden)]
2583    pub __source_breaking: fidl::marker::SourceBreaking,
2584}
2585
2586impl fidl::Persistable for UpstreamDnsCounters {}
2587
2588/// Represents the Upstream DNS related info.
2589///
2590/// The info is available in OpenThread via https://openthread.io/reference/group/api-dnssd-server
2591/// More fields may be added per request.
2592#[derive(Clone, Debug, Default, PartialEq)]
2593pub struct UpstreamDnsInfo {
2594    /// State of upstream DNS query.
2595    ///
2596    /// Required.
2597    pub upstream_dns_query_state: Option<UpstreamDnsQueryState>,
2598    #[doc(hidden)]
2599    pub __source_breaking: fidl::marker::SourceBreaking,
2600}
2601
2602impl fidl::Persistable for UpstreamDnsInfo {}
2603
2604/// Parameters for DeviceExtra::JoinNetwork command.
2605#[derive(Clone, Debug)]
2606pub enum JoinParams {
2607    /// Attempts to find and join a known pre-existing network.
2608    ProvisioningParameter(fidl_fuchsia_lowpan_device_common::ProvisioningParams),
2609    /// Attempts to find and join an unknown pre-existing network
2610    /// that is configured to accept and provision devices with
2611    /// the given shared secret, or PSKd. This allows new devices to
2612    /// join existing networks without knowing the credentials for
2613    /// the specific network.
2614    JoinerParameter(JoinerCommissioningParams),
2615    #[doc(hidden)]
2616    __SourceBreaking { unknown_ordinal: u64 },
2617}
2618
2619/// Pattern that matches an unknown `JoinParams` member.
2620#[macro_export]
2621macro_rules! JoinParamsUnknown {
2622    () => {
2623        _
2624    };
2625}
2626
2627// Custom PartialEq so that unknown variants are not equal to themselves.
2628impl PartialEq for JoinParams {
2629    fn eq(&self, other: &Self) -> bool {
2630        match (self, other) {
2631            (Self::ProvisioningParameter(x), Self::ProvisioningParameter(y)) => *x == *y,
2632            (Self::JoinerParameter(x), Self::JoinerParameter(y)) => *x == *y,
2633            _ => false,
2634        }
2635    }
2636}
2637
2638impl JoinParams {
2639    #[inline]
2640    pub fn ordinal(&self) -> u64 {
2641        match *self {
2642            Self::ProvisioningParameter(_) => 1,
2643            Self::JoinerParameter(_) => 2,
2644            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
2645        }
2646    }
2647
2648    #[inline]
2649    pub fn unknown_variant_for_testing() -> Self {
2650        Self::__SourceBreaking { unknown_ordinal: 0 }
2651    }
2652
2653    #[inline]
2654    pub fn is_unknown(&self) -> bool {
2655        match self {
2656            Self::__SourceBreaking { .. } => true,
2657            _ => false,
2658        }
2659    }
2660}
2661
2662impl fidl::Persistable for JoinParams {}
2663
2664/// Indicates the current status of the form/join operation.
2665///
2666/// Returned by [`ProvisioningMonitor.WatchProgress`].
2667#[derive(Clone, Debug)]
2668pub enum ProvisioningProgress {
2669    /// Approximate percent complete indication for a user interface.
2670    Progress(f32),
2671    /// The final Identity when the operation has completed successfully.
2672    Identity(fidl_fuchsia_lowpan_device_common::Identity),
2673    #[doc(hidden)]
2674    __SourceBreaking { unknown_ordinal: u64 },
2675}
2676
2677/// Pattern that matches an unknown `ProvisioningProgress` member.
2678#[macro_export]
2679macro_rules! ProvisioningProgressUnknown {
2680    () => {
2681        _
2682    };
2683}
2684
2685// Custom PartialEq so that unknown variants are not equal to themselves.
2686impl PartialEq for ProvisioningProgress {
2687    fn eq(&self, other: &Self) -> bool {
2688        match (self, other) {
2689            (Self::Progress(x), Self::Progress(y)) => *x == *y,
2690            (Self::Identity(x), Self::Identity(y)) => *x == *y,
2691            _ => false,
2692        }
2693    }
2694}
2695
2696impl ProvisioningProgress {
2697    #[inline]
2698    pub fn ordinal(&self) -> u64 {
2699        match *self {
2700            Self::Progress(_) => 1,
2701            Self::Identity(_) => 2,
2702            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
2703        }
2704    }
2705
2706    #[inline]
2707    pub fn unknown_variant_for_testing() -> Self {
2708        Self::__SourceBreaking { unknown_ordinal: 0 }
2709    }
2710
2711    #[inline]
2712    pub fn is_unknown(&self) -> bool {
2713        match self {
2714            Self::__SourceBreaking { .. } => true,
2715            _ => false,
2716        }
2717    }
2718}
2719
2720impl fidl::Persistable for ProvisioningProgress {}
2721
2722pub mod beacon_info_stream_ordinals {
2723    pub const NEXT: u64 = 0x367a557363a340b6;
2724}
2725
2726pub mod device_ordinals {
2727    pub const GET_SUPPORTED_CHANNELS: u64 = 0x2d8b969a9bd70f23;
2728}
2729
2730pub mod device_connector_ordinals {
2731    pub const CONNECT: u64 = 0x296896c9304836cd;
2732}
2733
2734pub mod device_extra_ordinals {
2735    pub const FORM_NETWORK: u64 = 0x6a8135f84bfc90e;
2736    pub const JOIN_NETWORK: u64 = 0x3ea583bab79f81c0;
2737    pub const START_NETWORK_SCAN: u64 = 0x6288c73b79188b40;
2738}
2739
2740pub mod device_extra_connector_ordinals {
2741    pub const CONNECT: u64 = 0x3fcb37e4226c81e9;
2742}
2743
2744pub mod device_route_ordinals {
2745    pub const REGISTER_ON_MESH_PREFIX: u64 = 0x2c4135231eb97f61;
2746    pub const UNREGISTER_ON_MESH_PREFIX: u64 = 0x82d5184028b797f;
2747    pub const REGISTER_EXTERNAL_ROUTE: u64 = 0x75f70f0fc34a5a73;
2748    pub const UNREGISTER_EXTERNAL_ROUTE: u64 = 0x3769be353b1d7088;
2749}
2750
2751pub mod device_route_connector_ordinals {
2752    pub const CONNECT: u64 = 0x19cd5fdcb971f4ac;
2753}
2754
2755pub mod device_route_extra_ordinals {
2756    pub const GET_LOCAL_ON_MESH_PREFIXES: u64 = 0xf192c43311c811;
2757    pub const GET_LOCAL_EXTERNAL_ROUTES: u64 = 0x5a688c2e62c766a6;
2758}
2759
2760pub mod device_route_extra_connector_ordinals {
2761    pub const CONNECT: u64 = 0x12f72df7b1348fe2;
2762}
2763
2764pub mod legacy_joining_ordinals {
2765    pub const MAKE_JOINABLE: u64 = 0x1739a6ae36d5c5aa;
2766}
2767
2768pub mod legacy_joining_connector_ordinals {
2769    pub const CONNECT: u64 = 0x3c8dfeb943bb8d06;
2770}
2771
2772pub mod provisioning_monitor_ordinals {
2773    pub const WATCH_PROGRESS: u64 = 0xc35336fc43ac0c;
2774}
2775
2776pub mod telemetry_provider_ordinals {
2777    pub const GET_TELEMETRY: u64 = 0xc34f2fff7dacc41;
2778}
2779
2780pub mod telemetry_provider_connector_ordinals {
2781    pub const CONNECT: u64 = 0x24a5bf1be73e2fad;
2782}
2783
2784mod internal {
2785    use super::*;
2786    unsafe impl fidl::encoding::TypeMarker for AddressOrigin {
2787        type Owned = Self;
2788
2789        #[inline(always)]
2790        fn inline_align(_context: fidl::encoding::Context) -> usize {
2791            std::mem::align_of::<u8>()
2792        }
2793
2794        #[inline(always)]
2795        fn inline_size(_context: fidl::encoding::Context) -> usize {
2796            std::mem::size_of::<u8>()
2797        }
2798
2799        #[inline(always)]
2800        fn encode_is_copy() -> bool {
2801            true
2802        }
2803
2804        #[inline(always)]
2805        fn decode_is_copy() -> bool {
2806            false
2807        }
2808    }
2809
2810    impl fidl::encoding::ValueTypeMarker for AddressOrigin {
2811        type Borrowed<'a> = Self;
2812        #[inline(always)]
2813        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2814            *value
2815        }
2816    }
2817
2818    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for AddressOrigin {
2819        #[inline]
2820        unsafe fn encode(
2821            self,
2822            encoder: &mut fidl::encoding::Encoder<'_, D>,
2823            offset: usize,
2824            _depth: fidl::encoding::Depth,
2825        ) -> fidl::Result<()> {
2826            encoder.debug_check_bounds::<Self>(offset);
2827            encoder.write_num(self.into_primitive(), offset);
2828            Ok(())
2829        }
2830    }
2831
2832    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AddressOrigin {
2833        #[inline(always)]
2834        fn new_empty() -> Self {
2835            Self::Thread
2836        }
2837
2838        #[inline]
2839        unsafe fn decode(
2840            &mut self,
2841            decoder: &mut fidl::encoding::Decoder<'_, D>,
2842            offset: usize,
2843            _depth: fidl::encoding::Depth,
2844        ) -> fidl::Result<()> {
2845            decoder.debug_check_bounds::<Self>(offset);
2846            let prim = decoder.read_num::<u8>(offset);
2847
2848            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
2849            Ok(())
2850        }
2851    }
2852    unsafe impl fidl::encoding::TypeMarker for CacheEntryState {
2853        type Owned = Self;
2854
2855        #[inline(always)]
2856        fn inline_align(_context: fidl::encoding::Context) -> usize {
2857            std::mem::align_of::<u8>()
2858        }
2859
2860        #[inline(always)]
2861        fn inline_size(_context: fidl::encoding::Context) -> usize {
2862            std::mem::size_of::<u8>()
2863        }
2864
2865        #[inline(always)]
2866        fn encode_is_copy() -> bool {
2867            true
2868        }
2869
2870        #[inline(always)]
2871        fn decode_is_copy() -> bool {
2872            false
2873        }
2874    }
2875
2876    impl fidl::encoding::ValueTypeMarker for CacheEntryState {
2877        type Borrowed<'a> = Self;
2878        #[inline(always)]
2879        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2880            *value
2881        }
2882    }
2883
2884    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
2885        for CacheEntryState
2886    {
2887        #[inline]
2888        unsafe fn encode(
2889            self,
2890            encoder: &mut fidl::encoding::Encoder<'_, D>,
2891            offset: usize,
2892            _depth: fidl::encoding::Depth,
2893        ) -> fidl::Result<()> {
2894            encoder.debug_check_bounds::<Self>(offset);
2895            encoder.write_num(self.into_primitive(), offset);
2896            Ok(())
2897        }
2898    }
2899
2900    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for CacheEntryState {
2901        #[inline(always)]
2902        fn new_empty() -> Self {
2903            Self::Cached
2904        }
2905
2906        #[inline]
2907        unsafe fn decode(
2908            &mut self,
2909            decoder: &mut fidl::encoding::Decoder<'_, D>,
2910            offset: usize,
2911            _depth: fidl::encoding::Depth,
2912        ) -> fidl::Result<()> {
2913            decoder.debug_check_bounds::<Self>(offset);
2914            let prim = decoder.read_num::<u8>(offset);
2915
2916            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
2917            Ok(())
2918        }
2919    }
2920    unsafe impl fidl::encoding::TypeMarker for Dhcp6PdState {
2921        type Owned = Self;
2922
2923        #[inline(always)]
2924        fn inline_align(_context: fidl::encoding::Context) -> usize {
2925            std::mem::align_of::<u32>()
2926        }
2927
2928        #[inline(always)]
2929        fn inline_size(_context: fidl::encoding::Context) -> usize {
2930            std::mem::size_of::<u32>()
2931        }
2932
2933        #[inline(always)]
2934        fn encode_is_copy() -> bool {
2935            false
2936        }
2937
2938        #[inline(always)]
2939        fn decode_is_copy() -> bool {
2940            false
2941        }
2942    }
2943
2944    impl fidl::encoding::ValueTypeMarker for Dhcp6PdState {
2945        type Borrowed<'a> = Self;
2946        #[inline(always)]
2947        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2948            *value
2949        }
2950    }
2951
2952    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for Dhcp6PdState {
2953        #[inline]
2954        unsafe fn encode(
2955            self,
2956            encoder: &mut fidl::encoding::Encoder<'_, D>,
2957            offset: usize,
2958            _depth: fidl::encoding::Depth,
2959        ) -> fidl::Result<()> {
2960            encoder.debug_check_bounds::<Self>(offset);
2961            encoder.write_num(self.into_primitive(), offset);
2962            Ok(())
2963        }
2964    }
2965
2966    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Dhcp6PdState {
2967        #[inline(always)]
2968        fn new_empty() -> Self {
2969            Self::unknown()
2970        }
2971
2972        #[inline]
2973        unsafe fn decode(
2974            &mut self,
2975            decoder: &mut fidl::encoding::Decoder<'_, D>,
2976            offset: usize,
2977            _depth: fidl::encoding::Depth,
2978        ) -> fidl::Result<()> {
2979            decoder.debug_check_bounds::<Self>(offset);
2980            let prim = decoder.read_num::<u32>(offset);
2981
2982            *self = Self::from_primitive_allow_unknown(prim);
2983            Ok(())
2984        }
2985    }
2986    unsafe impl fidl::encoding::TypeMarker for HistoryTrackerNeighborEvent {
2987        type Owned = Self;
2988
2989        #[inline(always)]
2990        fn inline_align(_context: fidl::encoding::Context) -> usize {
2991            std::mem::align_of::<u8>()
2992        }
2993
2994        #[inline(always)]
2995        fn inline_size(_context: fidl::encoding::Context) -> usize {
2996            std::mem::size_of::<u8>()
2997        }
2998
2999        #[inline(always)]
3000        fn encode_is_copy() -> bool {
3001            true
3002        }
3003
3004        #[inline(always)]
3005        fn decode_is_copy() -> bool {
3006            false
3007        }
3008    }
3009
3010    impl fidl::encoding::ValueTypeMarker for HistoryTrackerNeighborEvent {
3011        type Borrowed<'a> = Self;
3012        #[inline(always)]
3013        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3014            *value
3015        }
3016    }
3017
3018    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
3019        for HistoryTrackerNeighborEvent
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::<Self>(offset);
3029            encoder.write_num(self.into_primitive(), offset);
3030            Ok(())
3031        }
3032    }
3033
3034    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
3035        for HistoryTrackerNeighborEvent
3036    {
3037        #[inline(always)]
3038        fn new_empty() -> Self {
3039            Self::Added
3040        }
3041
3042        #[inline]
3043        unsafe fn decode(
3044            &mut self,
3045            decoder: &mut fidl::encoding::Decoder<'_, D>,
3046            offset: usize,
3047            _depth: fidl::encoding::Depth,
3048        ) -> fidl::Result<()> {
3049            decoder.debug_check_bounds::<Self>(offset);
3050            let prim = decoder.read_num::<u8>(offset);
3051
3052            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
3053            Ok(())
3054        }
3055    }
3056    unsafe impl fidl::encoding::TypeMarker for HistoryTrackerNetDataEvent {
3057        type Owned = Self;
3058
3059        #[inline(always)]
3060        fn inline_align(_context: fidl::encoding::Context) -> usize {
3061            std::mem::align_of::<u8>()
3062        }
3063
3064        #[inline(always)]
3065        fn inline_size(_context: fidl::encoding::Context) -> usize {
3066            std::mem::size_of::<u8>()
3067        }
3068
3069        #[inline(always)]
3070        fn encode_is_copy() -> bool {
3071            true
3072        }
3073
3074        #[inline(always)]
3075        fn decode_is_copy() -> bool {
3076            false
3077        }
3078    }
3079
3080    impl fidl::encoding::ValueTypeMarker for HistoryTrackerNetDataEvent {
3081        type Borrowed<'a> = Self;
3082        #[inline(always)]
3083        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3084            *value
3085        }
3086    }
3087
3088    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
3089        for HistoryTrackerNetDataEvent
3090    {
3091        #[inline]
3092        unsafe fn encode(
3093            self,
3094            encoder: &mut fidl::encoding::Encoder<'_, D>,
3095            offset: usize,
3096            _depth: fidl::encoding::Depth,
3097        ) -> fidl::Result<()> {
3098            encoder.debug_check_bounds::<Self>(offset);
3099            encoder.write_num(self.into_primitive(), offset);
3100            Ok(())
3101        }
3102    }
3103
3104    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
3105        for HistoryTrackerNetDataEvent
3106    {
3107        #[inline(always)]
3108        fn new_empty() -> Self {
3109            Self::Added
3110        }
3111
3112        #[inline]
3113        unsafe fn decode(
3114            &mut self,
3115            decoder: &mut fidl::encoding::Decoder<'_, D>,
3116            offset: usize,
3117            _depth: fidl::encoding::Depth,
3118        ) -> fidl::Result<()> {
3119            decoder.debug_check_bounds::<Self>(offset);
3120            let prim = decoder.read_num::<u8>(offset);
3121
3122            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
3123            Ok(())
3124        }
3125    }
3126    unsafe impl fidl::encoding::TypeMarker for HistoryTrackerRouterEvent {
3127        type Owned = Self;
3128
3129        #[inline(always)]
3130        fn inline_align(_context: fidl::encoding::Context) -> usize {
3131            std::mem::align_of::<u8>()
3132        }
3133
3134        #[inline(always)]
3135        fn inline_size(_context: fidl::encoding::Context) -> usize {
3136            std::mem::size_of::<u8>()
3137        }
3138
3139        #[inline(always)]
3140        fn encode_is_copy() -> bool {
3141            true
3142        }
3143
3144        #[inline(always)]
3145        fn decode_is_copy() -> bool {
3146            false
3147        }
3148    }
3149
3150    impl fidl::encoding::ValueTypeMarker for HistoryTrackerRouterEvent {
3151        type Borrowed<'a> = Self;
3152        #[inline(always)]
3153        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3154            *value
3155        }
3156    }
3157
3158    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
3159        for HistoryTrackerRouterEvent
3160    {
3161        #[inline]
3162        unsafe fn encode(
3163            self,
3164            encoder: &mut fidl::encoding::Encoder<'_, D>,
3165            offset: usize,
3166            _depth: fidl::encoding::Depth,
3167        ) -> fidl::Result<()> {
3168            encoder.debug_check_bounds::<Self>(offset);
3169            encoder.write_num(self.into_primitive(), offset);
3170            Ok(())
3171        }
3172    }
3173
3174    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
3175        for HistoryTrackerRouterEvent
3176    {
3177        #[inline(always)]
3178        fn new_empty() -> Self {
3179            Self::Added
3180        }
3181
3182        #[inline]
3183        unsafe fn decode(
3184            &mut self,
3185            decoder: &mut fidl::encoding::Decoder<'_, D>,
3186            offset: usize,
3187            _depth: fidl::encoding::Depth,
3188        ) -> fidl::Result<()> {
3189            decoder.debug_check_bounds::<Self>(offset);
3190            let prim = decoder.read_num::<u8>(offset);
3191
3192            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
3193            Ok(())
3194        }
3195    }
3196    unsafe impl fidl::encoding::TypeMarker for Nat64State {
3197        type Owned = Self;
3198
3199        #[inline(always)]
3200        fn inline_align(_context: fidl::encoding::Context) -> usize {
3201            std::mem::align_of::<u32>()
3202        }
3203
3204        #[inline(always)]
3205        fn inline_size(_context: fidl::encoding::Context) -> usize {
3206            std::mem::size_of::<u32>()
3207        }
3208
3209        #[inline(always)]
3210        fn encode_is_copy() -> bool {
3211            false
3212        }
3213
3214        #[inline(always)]
3215        fn decode_is_copy() -> bool {
3216            false
3217        }
3218    }
3219
3220    impl fidl::encoding::ValueTypeMarker for Nat64State {
3221        type Borrowed<'a> = Self;
3222        #[inline(always)]
3223        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3224            *value
3225        }
3226    }
3227
3228    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for Nat64State {
3229        #[inline]
3230        unsafe fn encode(
3231            self,
3232            encoder: &mut fidl::encoding::Encoder<'_, D>,
3233            offset: usize,
3234            _depth: fidl::encoding::Depth,
3235        ) -> fidl::Result<()> {
3236            encoder.debug_check_bounds::<Self>(offset);
3237            encoder.write_num(self.into_primitive(), offset);
3238            Ok(())
3239        }
3240    }
3241
3242    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Nat64State {
3243        #[inline(always)]
3244        fn new_empty() -> Self {
3245            Self::unknown()
3246        }
3247
3248        #[inline]
3249        unsafe fn decode(
3250            &mut self,
3251            decoder: &mut fidl::encoding::Decoder<'_, D>,
3252            offset: usize,
3253            _depth: fidl::encoding::Depth,
3254        ) -> fidl::Result<()> {
3255            decoder.debug_check_bounds::<Self>(offset);
3256            let prim = decoder.read_num::<u32>(offset);
3257
3258            *self = Self::from_primitive_allow_unknown(prim);
3259            Ok(())
3260        }
3261    }
3262    unsafe impl fidl::encoding::TypeMarker for ProvisionError {
3263        type Owned = Self;
3264
3265        #[inline(always)]
3266        fn inline_align(_context: fidl::encoding::Context) -> usize {
3267            std::mem::align_of::<i32>()
3268        }
3269
3270        #[inline(always)]
3271        fn inline_size(_context: fidl::encoding::Context) -> usize {
3272            std::mem::size_of::<i32>()
3273        }
3274
3275        #[inline(always)]
3276        fn encode_is_copy() -> bool {
3277            false
3278        }
3279
3280        #[inline(always)]
3281        fn decode_is_copy() -> bool {
3282            false
3283        }
3284    }
3285
3286    impl fidl::encoding::ValueTypeMarker for ProvisionError {
3287        type Borrowed<'a> = Self;
3288        #[inline(always)]
3289        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3290            *value
3291        }
3292    }
3293
3294    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for ProvisionError {
3295        #[inline]
3296        unsafe fn encode(
3297            self,
3298            encoder: &mut fidl::encoding::Encoder<'_, D>,
3299            offset: usize,
3300            _depth: fidl::encoding::Depth,
3301        ) -> fidl::Result<()> {
3302            encoder.debug_check_bounds::<Self>(offset);
3303            encoder.write_num(self.into_primitive(), offset);
3304            Ok(())
3305        }
3306    }
3307
3308    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ProvisionError {
3309        #[inline(always)]
3310        fn new_empty() -> Self {
3311            Self::unknown()
3312        }
3313
3314        #[inline]
3315        unsafe fn decode(
3316            &mut self,
3317            decoder: &mut fidl::encoding::Decoder<'_, D>,
3318            offset: usize,
3319            _depth: fidl::encoding::Depth,
3320        ) -> fidl::Result<()> {
3321            decoder.debug_check_bounds::<Self>(offset);
3322            let prim = decoder.read_num::<i32>(offset);
3323
3324            *self = Self::from_primitive_allow_unknown(prim);
3325            Ok(())
3326        }
3327    }
3328    unsafe impl fidl::encoding::TypeMarker for RoutePreference {
3329        type Owned = Self;
3330
3331        #[inline(always)]
3332        fn inline_align(_context: fidl::encoding::Context) -> usize {
3333            std::mem::align_of::<i8>()
3334        }
3335
3336        #[inline(always)]
3337        fn inline_size(_context: fidl::encoding::Context) -> usize {
3338            std::mem::size_of::<i8>()
3339        }
3340
3341        #[inline(always)]
3342        fn encode_is_copy() -> bool {
3343            true
3344        }
3345
3346        #[inline(always)]
3347        fn decode_is_copy() -> bool {
3348            false
3349        }
3350    }
3351
3352    impl fidl::encoding::ValueTypeMarker for RoutePreference {
3353        type Borrowed<'a> = Self;
3354        #[inline(always)]
3355        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3356            *value
3357        }
3358    }
3359
3360    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
3361        for RoutePreference
3362    {
3363        #[inline]
3364        unsafe fn encode(
3365            self,
3366            encoder: &mut fidl::encoding::Encoder<'_, D>,
3367            offset: usize,
3368            _depth: fidl::encoding::Depth,
3369        ) -> fidl::Result<()> {
3370            encoder.debug_check_bounds::<Self>(offset);
3371            encoder.write_num(self.into_primitive(), offset);
3372            Ok(())
3373        }
3374    }
3375
3376    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for RoutePreference {
3377        #[inline(always)]
3378        fn new_empty() -> Self {
3379            Self::Low
3380        }
3381
3382        #[inline]
3383        unsafe fn decode(
3384            &mut self,
3385            decoder: &mut fidl::encoding::Decoder<'_, D>,
3386            offset: usize,
3387            _depth: fidl::encoding::Depth,
3388        ) -> fidl::Result<()> {
3389            decoder.debug_check_bounds::<Self>(offset);
3390            let prim = decoder.read_num::<i8>(offset);
3391
3392            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
3393            Ok(())
3394        }
3395    }
3396    unsafe impl fidl::encoding::TypeMarker for SrpServerAddressMode {
3397        type Owned = Self;
3398
3399        #[inline(always)]
3400        fn inline_align(_context: fidl::encoding::Context) -> usize {
3401            std::mem::align_of::<u32>()
3402        }
3403
3404        #[inline(always)]
3405        fn inline_size(_context: fidl::encoding::Context) -> usize {
3406            std::mem::size_of::<u32>()
3407        }
3408
3409        #[inline(always)]
3410        fn encode_is_copy() -> bool {
3411            true
3412        }
3413
3414        #[inline(always)]
3415        fn decode_is_copy() -> bool {
3416            false
3417        }
3418    }
3419
3420    impl fidl::encoding::ValueTypeMarker for SrpServerAddressMode {
3421        type Borrowed<'a> = Self;
3422        #[inline(always)]
3423        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3424            *value
3425        }
3426    }
3427
3428    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
3429        for SrpServerAddressMode
3430    {
3431        #[inline]
3432        unsafe fn encode(
3433            self,
3434            encoder: &mut fidl::encoding::Encoder<'_, D>,
3435            offset: usize,
3436            _depth: fidl::encoding::Depth,
3437        ) -> fidl::Result<()> {
3438            encoder.debug_check_bounds::<Self>(offset);
3439            encoder.write_num(self.into_primitive(), offset);
3440            Ok(())
3441        }
3442    }
3443
3444    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SrpServerAddressMode {
3445        #[inline(always)]
3446        fn new_empty() -> Self {
3447            Self::Unicast
3448        }
3449
3450        #[inline]
3451        unsafe fn decode(
3452            &mut self,
3453            decoder: &mut fidl::encoding::Decoder<'_, D>,
3454            offset: usize,
3455            _depth: fidl::encoding::Depth,
3456        ) -> fidl::Result<()> {
3457            decoder.debug_check_bounds::<Self>(offset);
3458            let prim = decoder.read_num::<u32>(offset);
3459
3460            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
3461            Ok(())
3462        }
3463    }
3464    unsafe impl fidl::encoding::TypeMarker for SrpServerState {
3465        type Owned = Self;
3466
3467        #[inline(always)]
3468        fn inline_align(_context: fidl::encoding::Context) -> usize {
3469            std::mem::align_of::<u32>()
3470        }
3471
3472        #[inline(always)]
3473        fn inline_size(_context: fidl::encoding::Context) -> usize {
3474            std::mem::size_of::<u32>()
3475        }
3476
3477        #[inline(always)]
3478        fn encode_is_copy() -> bool {
3479            true
3480        }
3481
3482        #[inline(always)]
3483        fn decode_is_copy() -> bool {
3484            false
3485        }
3486    }
3487
3488    impl fidl::encoding::ValueTypeMarker for SrpServerState {
3489        type Borrowed<'a> = Self;
3490        #[inline(always)]
3491        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3492            *value
3493        }
3494    }
3495
3496    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for SrpServerState {
3497        #[inline]
3498        unsafe fn encode(
3499            self,
3500            encoder: &mut fidl::encoding::Encoder<'_, D>,
3501            offset: usize,
3502            _depth: fidl::encoding::Depth,
3503        ) -> fidl::Result<()> {
3504            encoder.debug_check_bounds::<Self>(offset);
3505            encoder.write_num(self.into_primitive(), offset);
3506            Ok(())
3507        }
3508    }
3509
3510    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SrpServerState {
3511        #[inline(always)]
3512        fn new_empty() -> Self {
3513            Self::Disabled
3514        }
3515
3516        #[inline]
3517        unsafe fn decode(
3518            &mut self,
3519            decoder: &mut fidl::encoding::Decoder<'_, D>,
3520            offset: usize,
3521            _depth: fidl::encoding::Depth,
3522        ) -> fidl::Result<()> {
3523            decoder.debug_check_bounds::<Self>(offset);
3524            let prim = decoder.read_num::<u32>(offset);
3525
3526            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
3527            Ok(())
3528        }
3529    }
3530    unsafe impl fidl::encoding::TypeMarker for UpstreamDnsQueryState {
3531        type Owned = Self;
3532
3533        #[inline(always)]
3534        fn inline_align(_context: fidl::encoding::Context) -> usize {
3535            std::mem::align_of::<u32>()
3536        }
3537
3538        #[inline(always)]
3539        fn inline_size(_context: fidl::encoding::Context) -> usize {
3540            std::mem::size_of::<u32>()
3541        }
3542
3543        #[inline(always)]
3544        fn encode_is_copy() -> bool {
3545            false
3546        }
3547
3548        #[inline(always)]
3549        fn decode_is_copy() -> bool {
3550            false
3551        }
3552    }
3553
3554    impl fidl::encoding::ValueTypeMarker for UpstreamDnsQueryState {
3555        type Borrowed<'a> = Self;
3556        #[inline(always)]
3557        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3558            *value
3559        }
3560    }
3561
3562    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
3563        for UpstreamDnsQueryState
3564    {
3565        #[inline]
3566        unsafe fn encode(
3567            self,
3568            encoder: &mut fidl::encoding::Encoder<'_, D>,
3569            offset: usize,
3570            _depth: fidl::encoding::Depth,
3571        ) -> fidl::Result<()> {
3572            encoder.debug_check_bounds::<Self>(offset);
3573            encoder.write_num(self.into_primitive(), offset);
3574            Ok(())
3575        }
3576    }
3577
3578    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for UpstreamDnsQueryState {
3579        #[inline(always)]
3580        fn new_empty() -> Self {
3581            Self::unknown()
3582        }
3583
3584        #[inline]
3585        unsafe fn decode(
3586            &mut self,
3587            decoder: &mut fidl::encoding::Decoder<'_, D>,
3588            offset: usize,
3589            _depth: fidl::encoding::Depth,
3590        ) -> fidl::Result<()> {
3591            decoder.debug_check_bounds::<Self>(offset);
3592            let prim = decoder.read_num::<u32>(offset);
3593
3594            *self = Self::from_primitive_allow_unknown(prim);
3595            Ok(())
3596        }
3597    }
3598
3599    impl fidl::encoding::ValueTypeMarker for BeaconInfoStreamNextResponse {
3600        type Borrowed<'a> = &'a Self;
3601        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3602            value
3603        }
3604    }
3605
3606    unsafe impl fidl::encoding::TypeMarker for BeaconInfoStreamNextResponse {
3607        type Owned = Self;
3608
3609        #[inline(always)]
3610        fn inline_align(_context: fidl::encoding::Context) -> usize {
3611            8
3612        }
3613
3614        #[inline(always)]
3615        fn inline_size(_context: fidl::encoding::Context) -> usize {
3616            16
3617        }
3618    }
3619
3620    unsafe impl<D: fidl::encoding::ResourceDialect>
3621        fidl::encoding::Encode<BeaconInfoStreamNextResponse, D> for &BeaconInfoStreamNextResponse
3622    {
3623        #[inline]
3624        unsafe fn encode(
3625            self,
3626            encoder: &mut fidl::encoding::Encoder<'_, D>,
3627            offset: usize,
3628            _depth: fidl::encoding::Depth,
3629        ) -> fidl::Result<()> {
3630            encoder.debug_check_bounds::<BeaconInfoStreamNextResponse>(offset);
3631            // Delegate to tuple encoding.
3632            fidl::encoding::Encode::<BeaconInfoStreamNextResponse, D>::encode(
3633                (
3634                    <fidl::encoding::Vector<BeaconInfo, 32> as fidl::encoding::ValueTypeMarker>::borrow(&self.beacons),
3635                ),
3636                encoder, offset, _depth
3637            )
3638        }
3639    }
3640    unsafe impl<
3641        D: fidl::encoding::ResourceDialect,
3642        T0: fidl::encoding::Encode<fidl::encoding::Vector<BeaconInfo, 32>, D>,
3643    > fidl::encoding::Encode<BeaconInfoStreamNextResponse, D> for (T0,)
3644    {
3645        #[inline]
3646        unsafe fn encode(
3647            self,
3648            encoder: &mut fidl::encoding::Encoder<'_, D>,
3649            offset: usize,
3650            depth: fidl::encoding::Depth,
3651        ) -> fidl::Result<()> {
3652            encoder.debug_check_bounds::<BeaconInfoStreamNextResponse>(offset);
3653            // Zero out padding regions. There's no need to apply masks
3654            // because the unmasked parts will be overwritten by fields.
3655            // Write the fields.
3656            self.0.encode(encoder, offset + 0, depth)?;
3657            Ok(())
3658        }
3659    }
3660
3661    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
3662        for BeaconInfoStreamNextResponse
3663    {
3664        #[inline(always)]
3665        fn new_empty() -> Self {
3666            Self { beacons: fidl::new_empty!(fidl::encoding::Vector<BeaconInfo, 32>, D) }
3667        }
3668
3669        #[inline]
3670        unsafe fn decode(
3671            &mut self,
3672            decoder: &mut fidl::encoding::Decoder<'_, D>,
3673            offset: usize,
3674            _depth: fidl::encoding::Depth,
3675        ) -> fidl::Result<()> {
3676            decoder.debug_check_bounds::<Self>(offset);
3677            // Verify that padding bytes are zero.
3678            fidl::decode!(fidl::encoding::Vector<BeaconInfo, 32>, D, &mut self.beacons, decoder, offset + 0, _depth)?;
3679            Ok(())
3680        }
3681    }
3682
3683    impl fidl::encoding::ValueTypeMarker for DeviceGetSupportedChannelsResponse {
3684        type Borrowed<'a> = &'a Self;
3685        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3686            value
3687        }
3688    }
3689
3690    unsafe impl fidl::encoding::TypeMarker for DeviceGetSupportedChannelsResponse {
3691        type Owned = Self;
3692
3693        #[inline(always)]
3694        fn inline_align(_context: fidl::encoding::Context) -> usize {
3695            8
3696        }
3697
3698        #[inline(always)]
3699        fn inline_size(_context: fidl::encoding::Context) -> usize {
3700            16
3701        }
3702    }
3703
3704    unsafe impl<D: fidl::encoding::ResourceDialect>
3705        fidl::encoding::Encode<DeviceGetSupportedChannelsResponse, D>
3706        for &DeviceGetSupportedChannelsResponse
3707    {
3708        #[inline]
3709        unsafe fn encode(
3710            self,
3711            encoder: &mut fidl::encoding::Encoder<'_, D>,
3712            offset: usize,
3713            _depth: fidl::encoding::Depth,
3714        ) -> fidl::Result<()> {
3715            encoder.debug_check_bounds::<DeviceGetSupportedChannelsResponse>(offset);
3716            // Delegate to tuple encoding.
3717            fidl::encoding::Encode::<DeviceGetSupportedChannelsResponse, D>::encode(
3718                (
3719                    <fidl::encoding::Vector<ChannelInfo, 200> as fidl::encoding::ValueTypeMarker>::borrow(&self.channels_info),
3720                ),
3721                encoder, offset, _depth
3722            )
3723        }
3724    }
3725    unsafe impl<
3726        D: fidl::encoding::ResourceDialect,
3727        T0: fidl::encoding::Encode<fidl::encoding::Vector<ChannelInfo, 200>, D>,
3728    > fidl::encoding::Encode<DeviceGetSupportedChannelsResponse, D> for (T0,)
3729    {
3730        #[inline]
3731        unsafe fn encode(
3732            self,
3733            encoder: &mut fidl::encoding::Encoder<'_, D>,
3734            offset: usize,
3735            depth: fidl::encoding::Depth,
3736        ) -> fidl::Result<()> {
3737            encoder.debug_check_bounds::<DeviceGetSupportedChannelsResponse>(offset);
3738            // Zero out padding regions. There's no need to apply masks
3739            // because the unmasked parts will be overwritten by fields.
3740            // Write the fields.
3741            self.0.encode(encoder, offset + 0, depth)?;
3742            Ok(())
3743        }
3744    }
3745
3746    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
3747        for DeviceGetSupportedChannelsResponse
3748    {
3749        #[inline(always)]
3750        fn new_empty() -> Self {
3751            Self { channels_info: fidl::new_empty!(fidl::encoding::Vector<ChannelInfo, 200>, D) }
3752        }
3753
3754        #[inline]
3755        unsafe fn decode(
3756            &mut self,
3757            decoder: &mut fidl::encoding::Decoder<'_, D>,
3758            offset: usize,
3759            _depth: fidl::encoding::Depth,
3760        ) -> fidl::Result<()> {
3761            decoder.debug_check_bounds::<Self>(offset);
3762            // Verify that padding bytes are zero.
3763            fidl::decode!(fidl::encoding::Vector<ChannelInfo, 200>, D, &mut self.channels_info, decoder, offset + 0, _depth)?;
3764            Ok(())
3765        }
3766    }
3767
3768    impl fidl::encoding::ValueTypeMarker for DeviceRouteExtraGetLocalExternalRoutesResponse {
3769        type Borrowed<'a> = &'a Self;
3770        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3771            value
3772        }
3773    }
3774
3775    unsafe impl fidl::encoding::TypeMarker for DeviceRouteExtraGetLocalExternalRoutesResponse {
3776        type Owned = Self;
3777
3778        #[inline(always)]
3779        fn inline_align(_context: fidl::encoding::Context) -> usize {
3780            8
3781        }
3782
3783        #[inline(always)]
3784        fn inline_size(_context: fidl::encoding::Context) -> usize {
3785            16
3786        }
3787    }
3788
3789    unsafe impl<D: fidl::encoding::ResourceDialect>
3790        fidl::encoding::Encode<DeviceRouteExtraGetLocalExternalRoutesResponse, D>
3791        for &DeviceRouteExtraGetLocalExternalRoutesResponse
3792    {
3793        #[inline]
3794        unsafe fn encode(
3795            self,
3796            encoder: &mut fidl::encoding::Encoder<'_, D>,
3797            offset: usize,
3798            _depth: fidl::encoding::Depth,
3799        ) -> fidl::Result<()> {
3800            encoder.debug_check_bounds::<DeviceRouteExtraGetLocalExternalRoutesResponse>(offset);
3801            // Delegate to tuple encoding.
3802            fidl::encoding::Encode::<DeviceRouteExtraGetLocalExternalRoutesResponse, D>::encode(
3803                (
3804                    <fidl::encoding::Vector<ExternalRoute, 32> as fidl::encoding::ValueTypeMarker>::borrow(&self.external_routes),
3805                ),
3806                encoder, offset, _depth
3807            )
3808        }
3809    }
3810    unsafe impl<
3811        D: fidl::encoding::ResourceDialect,
3812        T0: fidl::encoding::Encode<fidl::encoding::Vector<ExternalRoute, 32>, D>,
3813    > fidl::encoding::Encode<DeviceRouteExtraGetLocalExternalRoutesResponse, D> for (T0,)
3814    {
3815        #[inline]
3816        unsafe fn encode(
3817            self,
3818            encoder: &mut fidl::encoding::Encoder<'_, D>,
3819            offset: usize,
3820            depth: fidl::encoding::Depth,
3821        ) -> fidl::Result<()> {
3822            encoder.debug_check_bounds::<DeviceRouteExtraGetLocalExternalRoutesResponse>(offset);
3823            // Zero out padding regions. There's no need to apply masks
3824            // because the unmasked parts will be overwritten by fields.
3825            // Write the fields.
3826            self.0.encode(encoder, offset + 0, depth)?;
3827            Ok(())
3828        }
3829    }
3830
3831    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
3832        for DeviceRouteExtraGetLocalExternalRoutesResponse
3833    {
3834        #[inline(always)]
3835        fn new_empty() -> Self {
3836            Self { external_routes: fidl::new_empty!(fidl::encoding::Vector<ExternalRoute, 32>, D) }
3837        }
3838
3839        #[inline]
3840        unsafe fn decode(
3841            &mut self,
3842            decoder: &mut fidl::encoding::Decoder<'_, D>,
3843            offset: usize,
3844            _depth: fidl::encoding::Depth,
3845        ) -> fidl::Result<()> {
3846            decoder.debug_check_bounds::<Self>(offset);
3847            // Verify that padding bytes are zero.
3848            fidl::decode!(fidl::encoding::Vector<ExternalRoute, 32>, D, &mut self.external_routes, decoder, offset + 0, _depth)?;
3849            Ok(())
3850        }
3851    }
3852
3853    impl fidl::encoding::ValueTypeMarker for DeviceRouteExtraGetLocalOnMeshPrefixesResponse {
3854        type Borrowed<'a> = &'a Self;
3855        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3856            value
3857        }
3858    }
3859
3860    unsafe impl fidl::encoding::TypeMarker for DeviceRouteExtraGetLocalOnMeshPrefixesResponse {
3861        type Owned = Self;
3862
3863        #[inline(always)]
3864        fn inline_align(_context: fidl::encoding::Context) -> usize {
3865            8
3866        }
3867
3868        #[inline(always)]
3869        fn inline_size(_context: fidl::encoding::Context) -> usize {
3870            16
3871        }
3872    }
3873
3874    unsafe impl<D: fidl::encoding::ResourceDialect>
3875        fidl::encoding::Encode<DeviceRouteExtraGetLocalOnMeshPrefixesResponse, D>
3876        for &DeviceRouteExtraGetLocalOnMeshPrefixesResponse
3877    {
3878        #[inline]
3879        unsafe fn encode(
3880            self,
3881            encoder: &mut fidl::encoding::Encoder<'_, D>,
3882            offset: usize,
3883            _depth: fidl::encoding::Depth,
3884        ) -> fidl::Result<()> {
3885            encoder.debug_check_bounds::<DeviceRouteExtraGetLocalOnMeshPrefixesResponse>(offset);
3886            // Delegate to tuple encoding.
3887            fidl::encoding::Encode::<DeviceRouteExtraGetLocalOnMeshPrefixesResponse, D>::encode(
3888                (
3889                    <fidl::encoding::Vector<OnMeshPrefix, 32> as fidl::encoding::ValueTypeMarker>::borrow(&self.prefixes),
3890                ),
3891                encoder, offset, _depth
3892            )
3893        }
3894    }
3895    unsafe impl<
3896        D: fidl::encoding::ResourceDialect,
3897        T0: fidl::encoding::Encode<fidl::encoding::Vector<OnMeshPrefix, 32>, D>,
3898    > fidl::encoding::Encode<DeviceRouteExtraGetLocalOnMeshPrefixesResponse, D> for (T0,)
3899    {
3900        #[inline]
3901        unsafe fn encode(
3902            self,
3903            encoder: &mut fidl::encoding::Encoder<'_, D>,
3904            offset: usize,
3905            depth: fidl::encoding::Depth,
3906        ) -> fidl::Result<()> {
3907            encoder.debug_check_bounds::<DeviceRouteExtraGetLocalOnMeshPrefixesResponse>(offset);
3908            // Zero out padding regions. There's no need to apply masks
3909            // because the unmasked parts will be overwritten by fields.
3910            // Write the fields.
3911            self.0.encode(encoder, offset + 0, depth)?;
3912            Ok(())
3913        }
3914    }
3915
3916    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
3917        for DeviceRouteExtraGetLocalOnMeshPrefixesResponse
3918    {
3919        #[inline(always)]
3920        fn new_empty() -> Self {
3921            Self { prefixes: fidl::new_empty!(fidl::encoding::Vector<OnMeshPrefix, 32>, D) }
3922        }
3923
3924        #[inline]
3925        unsafe fn decode(
3926            &mut self,
3927            decoder: &mut fidl::encoding::Decoder<'_, D>,
3928            offset: usize,
3929            _depth: fidl::encoding::Depth,
3930        ) -> fidl::Result<()> {
3931            decoder.debug_check_bounds::<Self>(offset);
3932            // Verify that padding bytes are zero.
3933            fidl::decode!(fidl::encoding::Vector<OnMeshPrefix, 32>, D, &mut self.prefixes, decoder, offset + 0, _depth)?;
3934            Ok(())
3935        }
3936    }
3937
3938    impl fidl::encoding::ValueTypeMarker for DeviceRouteRegisterExternalRouteRequest {
3939        type Borrowed<'a> = &'a Self;
3940        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3941            value
3942        }
3943    }
3944
3945    unsafe impl fidl::encoding::TypeMarker for DeviceRouteRegisterExternalRouteRequest {
3946        type Owned = Self;
3947
3948        #[inline(always)]
3949        fn inline_align(_context: fidl::encoding::Context) -> usize {
3950            8
3951        }
3952
3953        #[inline(always)]
3954        fn inline_size(_context: fidl::encoding::Context) -> usize {
3955            16
3956        }
3957    }
3958
3959    unsafe impl<D: fidl::encoding::ResourceDialect>
3960        fidl::encoding::Encode<DeviceRouteRegisterExternalRouteRequest, D>
3961        for &DeviceRouteRegisterExternalRouteRequest
3962    {
3963        #[inline]
3964        unsafe fn encode(
3965            self,
3966            encoder: &mut fidl::encoding::Encoder<'_, D>,
3967            offset: usize,
3968            _depth: fidl::encoding::Depth,
3969        ) -> fidl::Result<()> {
3970            encoder.debug_check_bounds::<DeviceRouteRegisterExternalRouteRequest>(offset);
3971            // Delegate to tuple encoding.
3972            fidl::encoding::Encode::<DeviceRouteRegisterExternalRouteRequest, D>::encode(
3973                (<ExternalRoute as fidl::encoding::ValueTypeMarker>::borrow(&self.external_route),),
3974                encoder,
3975                offset,
3976                _depth,
3977            )
3978        }
3979    }
3980    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<ExternalRoute, D>>
3981        fidl::encoding::Encode<DeviceRouteRegisterExternalRouteRequest, D> for (T0,)
3982    {
3983        #[inline]
3984        unsafe fn encode(
3985            self,
3986            encoder: &mut fidl::encoding::Encoder<'_, D>,
3987            offset: usize,
3988            depth: fidl::encoding::Depth,
3989        ) -> fidl::Result<()> {
3990            encoder.debug_check_bounds::<DeviceRouteRegisterExternalRouteRequest>(offset);
3991            // Zero out padding regions. There's no need to apply masks
3992            // because the unmasked parts will be overwritten by fields.
3993            // Write the fields.
3994            self.0.encode(encoder, offset + 0, depth)?;
3995            Ok(())
3996        }
3997    }
3998
3999    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
4000        for DeviceRouteRegisterExternalRouteRequest
4001    {
4002        #[inline(always)]
4003        fn new_empty() -> Self {
4004            Self { external_route: fidl::new_empty!(ExternalRoute, D) }
4005        }
4006
4007        #[inline]
4008        unsafe fn decode(
4009            &mut self,
4010            decoder: &mut fidl::encoding::Decoder<'_, D>,
4011            offset: usize,
4012            _depth: fidl::encoding::Depth,
4013        ) -> fidl::Result<()> {
4014            decoder.debug_check_bounds::<Self>(offset);
4015            // Verify that padding bytes are zero.
4016            fidl::decode!(ExternalRoute, D, &mut self.external_route, decoder, offset + 0, _depth)?;
4017            Ok(())
4018        }
4019    }
4020
4021    impl fidl::encoding::ValueTypeMarker for DeviceRouteRegisterOnMeshPrefixRequest {
4022        type Borrowed<'a> = &'a Self;
4023        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4024            value
4025        }
4026    }
4027
4028    unsafe impl fidl::encoding::TypeMarker for DeviceRouteRegisterOnMeshPrefixRequest {
4029        type Owned = Self;
4030
4031        #[inline(always)]
4032        fn inline_align(_context: fidl::encoding::Context) -> usize {
4033            8
4034        }
4035
4036        #[inline(always)]
4037        fn inline_size(_context: fidl::encoding::Context) -> usize {
4038            16
4039        }
4040    }
4041
4042    unsafe impl<D: fidl::encoding::ResourceDialect>
4043        fidl::encoding::Encode<DeviceRouteRegisterOnMeshPrefixRequest, D>
4044        for &DeviceRouteRegisterOnMeshPrefixRequest
4045    {
4046        #[inline]
4047        unsafe fn encode(
4048            self,
4049            encoder: &mut fidl::encoding::Encoder<'_, D>,
4050            offset: usize,
4051            _depth: fidl::encoding::Depth,
4052        ) -> fidl::Result<()> {
4053            encoder.debug_check_bounds::<DeviceRouteRegisterOnMeshPrefixRequest>(offset);
4054            // Delegate to tuple encoding.
4055            fidl::encoding::Encode::<DeviceRouteRegisterOnMeshPrefixRequest, D>::encode(
4056                (<OnMeshPrefix as fidl::encoding::ValueTypeMarker>::borrow(&self.prefix),),
4057                encoder,
4058                offset,
4059                _depth,
4060            )
4061        }
4062    }
4063    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<OnMeshPrefix, D>>
4064        fidl::encoding::Encode<DeviceRouteRegisterOnMeshPrefixRequest, D> for (T0,)
4065    {
4066        #[inline]
4067        unsafe fn encode(
4068            self,
4069            encoder: &mut fidl::encoding::Encoder<'_, D>,
4070            offset: usize,
4071            depth: fidl::encoding::Depth,
4072        ) -> fidl::Result<()> {
4073            encoder.debug_check_bounds::<DeviceRouteRegisterOnMeshPrefixRequest>(offset);
4074            // Zero out padding regions. There's no need to apply masks
4075            // because the unmasked parts will be overwritten by fields.
4076            // Write the fields.
4077            self.0.encode(encoder, offset + 0, depth)?;
4078            Ok(())
4079        }
4080    }
4081
4082    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
4083        for DeviceRouteRegisterOnMeshPrefixRequest
4084    {
4085        #[inline(always)]
4086        fn new_empty() -> Self {
4087            Self { prefix: fidl::new_empty!(OnMeshPrefix, D) }
4088        }
4089
4090        #[inline]
4091        unsafe fn decode(
4092            &mut self,
4093            decoder: &mut fidl::encoding::Decoder<'_, D>,
4094            offset: usize,
4095            _depth: fidl::encoding::Depth,
4096        ) -> fidl::Result<()> {
4097            decoder.debug_check_bounds::<Self>(offset);
4098            // Verify that padding bytes are zero.
4099            fidl::decode!(OnMeshPrefix, D, &mut self.prefix, decoder, offset + 0, _depth)?;
4100            Ok(())
4101        }
4102    }
4103
4104    impl fidl::encoding::ValueTypeMarker for DeviceRouteUnregisterExternalRouteRequest {
4105        type Borrowed<'a> = &'a Self;
4106        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4107            value
4108        }
4109    }
4110
4111    unsafe impl fidl::encoding::TypeMarker for DeviceRouteUnregisterExternalRouteRequest {
4112        type Owned = Self;
4113
4114        #[inline(always)]
4115        fn inline_align(_context: fidl::encoding::Context) -> usize {
4116            1
4117        }
4118
4119        #[inline(always)]
4120        fn inline_size(_context: fidl::encoding::Context) -> usize {
4121            17
4122        }
4123    }
4124
4125    unsafe impl<D: fidl::encoding::ResourceDialect>
4126        fidl::encoding::Encode<DeviceRouteUnregisterExternalRouteRequest, D>
4127        for &DeviceRouteUnregisterExternalRouteRequest
4128    {
4129        #[inline]
4130        unsafe fn encode(
4131            self,
4132            encoder: &mut fidl::encoding::Encoder<'_, D>,
4133            offset: usize,
4134            _depth: fidl::encoding::Depth,
4135        ) -> fidl::Result<()> {
4136            encoder.debug_check_bounds::<DeviceRouteUnregisterExternalRouteRequest>(offset);
4137            // Delegate to tuple encoding.
4138            fidl::encoding::Encode::<DeviceRouteUnregisterExternalRouteRequest, D>::encode(
4139                (
4140                    <fidl_fuchsia_net_common::Ipv6AddressWithPrefix as fidl::encoding::ValueTypeMarker>::borrow(&self.subnet),
4141                ),
4142                encoder, offset, _depth
4143            )
4144        }
4145    }
4146    unsafe impl<
4147        D: fidl::encoding::ResourceDialect,
4148        T0: fidl::encoding::Encode<fidl_fuchsia_net_common::Ipv6AddressWithPrefix, D>,
4149    > fidl::encoding::Encode<DeviceRouteUnregisterExternalRouteRequest, D> for (T0,)
4150    {
4151        #[inline]
4152        unsafe fn encode(
4153            self,
4154            encoder: &mut fidl::encoding::Encoder<'_, D>,
4155            offset: usize,
4156            depth: fidl::encoding::Depth,
4157        ) -> fidl::Result<()> {
4158            encoder.debug_check_bounds::<DeviceRouteUnregisterExternalRouteRequest>(offset);
4159            // Zero out padding regions. There's no need to apply masks
4160            // because the unmasked parts will be overwritten by fields.
4161            // Write the fields.
4162            self.0.encode(encoder, offset + 0, depth)?;
4163            Ok(())
4164        }
4165    }
4166
4167    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
4168        for DeviceRouteUnregisterExternalRouteRequest
4169    {
4170        #[inline(always)]
4171        fn new_empty() -> Self {
4172            Self { subnet: fidl::new_empty!(fidl_fuchsia_net_common::Ipv6AddressWithPrefix, D) }
4173        }
4174
4175        #[inline]
4176        unsafe fn decode(
4177            &mut self,
4178            decoder: &mut fidl::encoding::Decoder<'_, D>,
4179            offset: usize,
4180            _depth: fidl::encoding::Depth,
4181        ) -> fidl::Result<()> {
4182            decoder.debug_check_bounds::<Self>(offset);
4183            // Verify that padding bytes are zero.
4184            fidl::decode!(
4185                fidl_fuchsia_net_common::Ipv6AddressWithPrefix,
4186                D,
4187                &mut self.subnet,
4188                decoder,
4189                offset + 0,
4190                _depth
4191            )?;
4192            Ok(())
4193        }
4194    }
4195
4196    impl fidl::encoding::ValueTypeMarker for DeviceRouteUnregisterOnMeshPrefixRequest {
4197        type Borrowed<'a> = &'a Self;
4198        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4199            value
4200        }
4201    }
4202
4203    unsafe impl fidl::encoding::TypeMarker for DeviceRouteUnregisterOnMeshPrefixRequest {
4204        type Owned = Self;
4205
4206        #[inline(always)]
4207        fn inline_align(_context: fidl::encoding::Context) -> usize {
4208            1
4209        }
4210
4211        #[inline(always)]
4212        fn inline_size(_context: fidl::encoding::Context) -> usize {
4213            17
4214        }
4215    }
4216
4217    unsafe impl<D: fidl::encoding::ResourceDialect>
4218        fidl::encoding::Encode<DeviceRouteUnregisterOnMeshPrefixRequest, D>
4219        for &DeviceRouteUnregisterOnMeshPrefixRequest
4220    {
4221        #[inline]
4222        unsafe fn encode(
4223            self,
4224            encoder: &mut fidl::encoding::Encoder<'_, D>,
4225            offset: usize,
4226            _depth: fidl::encoding::Depth,
4227        ) -> fidl::Result<()> {
4228            encoder.debug_check_bounds::<DeviceRouteUnregisterOnMeshPrefixRequest>(offset);
4229            // Delegate to tuple encoding.
4230            fidl::encoding::Encode::<DeviceRouteUnregisterOnMeshPrefixRequest, D>::encode(
4231                (
4232                    <fidl_fuchsia_net_common::Ipv6AddressWithPrefix as fidl::encoding::ValueTypeMarker>::borrow(&self.subnet),
4233                ),
4234                encoder, offset, _depth
4235            )
4236        }
4237    }
4238    unsafe impl<
4239        D: fidl::encoding::ResourceDialect,
4240        T0: fidl::encoding::Encode<fidl_fuchsia_net_common::Ipv6AddressWithPrefix, D>,
4241    > fidl::encoding::Encode<DeviceRouteUnregisterOnMeshPrefixRequest, D> for (T0,)
4242    {
4243        #[inline]
4244        unsafe fn encode(
4245            self,
4246            encoder: &mut fidl::encoding::Encoder<'_, D>,
4247            offset: usize,
4248            depth: fidl::encoding::Depth,
4249        ) -> fidl::Result<()> {
4250            encoder.debug_check_bounds::<DeviceRouteUnregisterOnMeshPrefixRequest>(offset);
4251            // Zero out padding regions. There's no need to apply masks
4252            // because the unmasked parts will be overwritten by fields.
4253            // Write the fields.
4254            self.0.encode(encoder, offset + 0, depth)?;
4255            Ok(())
4256        }
4257    }
4258
4259    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
4260        for DeviceRouteUnregisterOnMeshPrefixRequest
4261    {
4262        #[inline(always)]
4263        fn new_empty() -> Self {
4264            Self { subnet: fidl::new_empty!(fidl_fuchsia_net_common::Ipv6AddressWithPrefix, D) }
4265        }
4266
4267        #[inline]
4268        unsafe fn decode(
4269            &mut self,
4270            decoder: &mut fidl::encoding::Decoder<'_, D>,
4271            offset: usize,
4272            _depth: fidl::encoding::Depth,
4273        ) -> fidl::Result<()> {
4274            decoder.debug_check_bounds::<Self>(offset);
4275            // Verify that padding bytes are zero.
4276            fidl::decode!(
4277                fidl_fuchsia_net_common::Ipv6AddressWithPrefix,
4278                D,
4279                &mut self.subnet,
4280                decoder,
4281                offset + 0,
4282                _depth
4283            )?;
4284            Ok(())
4285        }
4286    }
4287
4288    impl fidl::encoding::ValueTypeMarker for LegacyJoiningMakeJoinableRequest {
4289        type Borrowed<'a> = &'a Self;
4290        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4291            value
4292        }
4293    }
4294
4295    unsafe impl fidl::encoding::TypeMarker for LegacyJoiningMakeJoinableRequest {
4296        type Owned = Self;
4297
4298        #[inline(always)]
4299        fn inline_align(_context: fidl::encoding::Context) -> usize {
4300            8
4301        }
4302
4303        #[inline(always)]
4304        fn inline_size(_context: fidl::encoding::Context) -> usize {
4305            16
4306        }
4307    }
4308
4309    unsafe impl<D: fidl::encoding::ResourceDialect>
4310        fidl::encoding::Encode<LegacyJoiningMakeJoinableRequest, D>
4311        for &LegacyJoiningMakeJoinableRequest
4312    {
4313        #[inline]
4314        unsafe fn encode(
4315            self,
4316            encoder: &mut fidl::encoding::Encoder<'_, D>,
4317            offset: usize,
4318            _depth: fidl::encoding::Depth,
4319        ) -> fidl::Result<()> {
4320            encoder.debug_check_bounds::<LegacyJoiningMakeJoinableRequest>(offset);
4321            unsafe {
4322                // Copy the object into the buffer.
4323                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
4324                (buf_ptr as *mut LegacyJoiningMakeJoinableRequest)
4325                    .write_unaligned((self as *const LegacyJoiningMakeJoinableRequest).read());
4326                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
4327                // done second because the memcpy will write garbage to these bytes.
4328                let padding_ptr = buf_ptr.offset(8) as *mut u64;
4329                let padding_mask = 0xffffffffffff0000u64;
4330                padding_ptr.write_unaligned(padding_ptr.read_unaligned() & !padding_mask);
4331            }
4332            Ok(())
4333        }
4334    }
4335    unsafe impl<
4336        D: fidl::encoding::ResourceDialect,
4337        T0: fidl::encoding::Encode<i64, D>,
4338        T1: fidl::encoding::Encode<u16, D>,
4339    > fidl::encoding::Encode<LegacyJoiningMakeJoinableRequest, D> for (T0, T1)
4340    {
4341        #[inline]
4342        unsafe fn encode(
4343            self,
4344            encoder: &mut fidl::encoding::Encoder<'_, D>,
4345            offset: usize,
4346            depth: fidl::encoding::Depth,
4347        ) -> fidl::Result<()> {
4348            encoder.debug_check_bounds::<LegacyJoiningMakeJoinableRequest>(offset);
4349            // Zero out padding regions. There's no need to apply masks
4350            // because the unmasked parts will be overwritten by fields.
4351            unsafe {
4352                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(8);
4353                (ptr as *mut u64).write_unaligned(0);
4354            }
4355            // Write the fields.
4356            self.0.encode(encoder, offset + 0, depth)?;
4357            self.1.encode(encoder, offset + 8, depth)?;
4358            Ok(())
4359        }
4360    }
4361
4362    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
4363        for LegacyJoiningMakeJoinableRequest
4364    {
4365        #[inline(always)]
4366        fn new_empty() -> Self {
4367            Self { duration: fidl::new_empty!(i64, D), port: fidl::new_empty!(u16, D) }
4368        }
4369
4370        #[inline]
4371        unsafe fn decode(
4372            &mut self,
4373            decoder: &mut fidl::encoding::Decoder<'_, D>,
4374            offset: usize,
4375            _depth: fidl::encoding::Depth,
4376        ) -> fidl::Result<()> {
4377            decoder.debug_check_bounds::<Self>(offset);
4378            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
4379            // Verify that padding bytes are zero.
4380            let ptr = unsafe { buf_ptr.offset(8) };
4381            let padval = unsafe { (ptr as *const u64).read_unaligned() };
4382            let mask = 0xffffffffffff0000u64;
4383            let maskedval = padval & mask;
4384            if maskedval != 0 {
4385                return Err(fidl::Error::NonZeroPadding {
4386                    padding_start: offset + 8 + ((mask as u64).trailing_zeros() / 8) as usize,
4387                });
4388            }
4389            // Copy from the buffer into the object.
4390            unsafe {
4391                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 16);
4392            }
4393            Ok(())
4394        }
4395    }
4396
4397    impl fidl::encoding::ValueTypeMarker for ProvisioningMonitorWatchProgressResponse {
4398        type Borrowed<'a> = &'a Self;
4399        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4400            value
4401        }
4402    }
4403
4404    unsafe impl fidl::encoding::TypeMarker for ProvisioningMonitorWatchProgressResponse {
4405        type Owned = Self;
4406
4407        #[inline(always)]
4408        fn inline_align(_context: fidl::encoding::Context) -> usize {
4409            8
4410        }
4411
4412        #[inline(always)]
4413        fn inline_size(_context: fidl::encoding::Context) -> usize {
4414            16
4415        }
4416    }
4417
4418    unsafe impl<D: fidl::encoding::ResourceDialect>
4419        fidl::encoding::Encode<ProvisioningMonitorWatchProgressResponse, D>
4420        for &ProvisioningMonitorWatchProgressResponse
4421    {
4422        #[inline]
4423        unsafe fn encode(
4424            self,
4425            encoder: &mut fidl::encoding::Encoder<'_, D>,
4426            offset: usize,
4427            _depth: fidl::encoding::Depth,
4428        ) -> fidl::Result<()> {
4429            encoder.debug_check_bounds::<ProvisioningMonitorWatchProgressResponse>(offset);
4430            // Delegate to tuple encoding.
4431            fidl::encoding::Encode::<ProvisioningMonitorWatchProgressResponse, D>::encode(
4432                (<ProvisioningProgress as fidl::encoding::ValueTypeMarker>::borrow(&self.progress),),
4433                encoder,
4434                offset,
4435                _depth,
4436            )
4437        }
4438    }
4439    unsafe impl<
4440        D: fidl::encoding::ResourceDialect,
4441        T0: fidl::encoding::Encode<ProvisioningProgress, D>,
4442    > fidl::encoding::Encode<ProvisioningMonitorWatchProgressResponse, D> for (T0,)
4443    {
4444        #[inline]
4445        unsafe fn encode(
4446            self,
4447            encoder: &mut fidl::encoding::Encoder<'_, D>,
4448            offset: usize,
4449            depth: fidl::encoding::Depth,
4450        ) -> fidl::Result<()> {
4451            encoder.debug_check_bounds::<ProvisioningMonitorWatchProgressResponse>(offset);
4452            // Zero out padding regions. There's no need to apply masks
4453            // because the unmasked parts will be overwritten by fields.
4454            // Write the fields.
4455            self.0.encode(encoder, offset + 0, depth)?;
4456            Ok(())
4457        }
4458    }
4459
4460    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
4461        for ProvisioningMonitorWatchProgressResponse
4462    {
4463        #[inline(always)]
4464        fn new_empty() -> Self {
4465            Self { progress: fidl::new_empty!(ProvisioningProgress, D) }
4466        }
4467
4468        #[inline]
4469        unsafe fn decode(
4470            &mut self,
4471            decoder: &mut fidl::encoding::Decoder<'_, D>,
4472            offset: usize,
4473            _depth: fidl::encoding::Depth,
4474        ) -> fidl::Result<()> {
4475            decoder.debug_check_bounds::<Self>(offset);
4476            // Verify that padding bytes are zero.
4477            fidl::decode!(
4478                ProvisioningProgress,
4479                D,
4480                &mut self.progress,
4481                decoder,
4482                offset + 0,
4483                _depth
4484            )?;
4485            Ok(())
4486        }
4487    }
4488
4489    impl fidl::encoding::ValueTypeMarker for TelemetryProviderGetTelemetryResponse {
4490        type Borrowed<'a> = &'a Self;
4491        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4492            value
4493        }
4494    }
4495
4496    unsafe impl fidl::encoding::TypeMarker for TelemetryProviderGetTelemetryResponse {
4497        type Owned = Self;
4498
4499        #[inline(always)]
4500        fn inline_align(_context: fidl::encoding::Context) -> usize {
4501            8
4502        }
4503
4504        #[inline(always)]
4505        fn inline_size(_context: fidl::encoding::Context) -> usize {
4506            16
4507        }
4508    }
4509
4510    unsafe impl<D: fidl::encoding::ResourceDialect>
4511        fidl::encoding::Encode<TelemetryProviderGetTelemetryResponse, D>
4512        for &TelemetryProviderGetTelemetryResponse
4513    {
4514        #[inline]
4515        unsafe fn encode(
4516            self,
4517            encoder: &mut fidl::encoding::Encoder<'_, D>,
4518            offset: usize,
4519            _depth: fidl::encoding::Depth,
4520        ) -> fidl::Result<()> {
4521            encoder.debug_check_bounds::<TelemetryProviderGetTelemetryResponse>(offset);
4522            // Delegate to tuple encoding.
4523            fidl::encoding::Encode::<TelemetryProviderGetTelemetryResponse, D>::encode(
4524                (<Telemetry as fidl::encoding::ValueTypeMarker>::borrow(&self.telemetry),),
4525                encoder,
4526                offset,
4527                _depth,
4528            )
4529        }
4530    }
4531    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<Telemetry, D>>
4532        fidl::encoding::Encode<TelemetryProviderGetTelemetryResponse, D> for (T0,)
4533    {
4534        #[inline]
4535        unsafe fn encode(
4536            self,
4537            encoder: &mut fidl::encoding::Encoder<'_, D>,
4538            offset: usize,
4539            depth: fidl::encoding::Depth,
4540        ) -> fidl::Result<()> {
4541            encoder.debug_check_bounds::<TelemetryProviderGetTelemetryResponse>(offset);
4542            // Zero out padding regions. There's no need to apply masks
4543            // because the unmasked parts will be overwritten by fields.
4544            // Write the fields.
4545            self.0.encode(encoder, offset + 0, depth)?;
4546            Ok(())
4547        }
4548    }
4549
4550    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
4551        for TelemetryProviderGetTelemetryResponse
4552    {
4553        #[inline(always)]
4554        fn new_empty() -> Self {
4555            Self { telemetry: fidl::new_empty!(Telemetry, D) }
4556        }
4557
4558        #[inline]
4559        unsafe fn decode(
4560            &mut self,
4561            decoder: &mut fidl::encoding::Decoder<'_, D>,
4562            offset: usize,
4563            _depth: fidl::encoding::Depth,
4564        ) -> fidl::Result<()> {
4565            decoder.debug_check_bounds::<Self>(offset);
4566            // Verify that padding bytes are zero.
4567            fidl::decode!(Telemetry, D, &mut self.telemetry, decoder, offset + 0, _depth)?;
4568            Ok(())
4569        }
4570    }
4571
4572    impl BeaconInfo {
4573        #[inline(always)]
4574        fn max_ordinal_present(&self) -> u64 {
4575            if let Some(_) = self.lqi {
4576                return 4;
4577            }
4578            if let Some(_) = self.rssi {
4579                return 3;
4580            }
4581            if let Some(_) = self.identity {
4582                return 2;
4583            }
4584            if let Some(_) = self.address {
4585                return 1;
4586            }
4587            0
4588        }
4589    }
4590
4591    impl fidl::encoding::ValueTypeMarker for BeaconInfo {
4592        type Borrowed<'a> = &'a Self;
4593        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4594            value
4595        }
4596    }
4597
4598    unsafe impl fidl::encoding::TypeMarker for BeaconInfo {
4599        type Owned = Self;
4600
4601        #[inline(always)]
4602        fn inline_align(_context: fidl::encoding::Context) -> usize {
4603            8
4604        }
4605
4606        #[inline(always)]
4607        fn inline_size(_context: fidl::encoding::Context) -> usize {
4608            16
4609        }
4610    }
4611
4612    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<BeaconInfo, D>
4613        for &BeaconInfo
4614    {
4615        unsafe fn encode(
4616            self,
4617            encoder: &mut fidl::encoding::Encoder<'_, D>,
4618            offset: usize,
4619            mut depth: fidl::encoding::Depth,
4620        ) -> fidl::Result<()> {
4621            encoder.debug_check_bounds::<BeaconInfo>(offset);
4622            // Vector header
4623            let max_ordinal: u64 = self.max_ordinal_present();
4624            encoder.write_num(max_ordinal, offset);
4625            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
4626            // Calling encoder.out_of_line_offset(0) is not allowed.
4627            if max_ordinal == 0 {
4628                return Ok(());
4629            }
4630            depth.increment()?;
4631            let envelope_size = 8;
4632            let bytes_len = max_ordinal as usize * envelope_size;
4633            #[allow(unused_variables)]
4634            let offset = encoder.out_of_line_offset(bytes_len);
4635            let mut _prev_end_offset: usize = 0;
4636            if 1 > max_ordinal {
4637                return Ok(());
4638            }
4639
4640            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4641            // are envelope_size bytes.
4642            let cur_offset: usize = (1 - 1) * envelope_size;
4643
4644            // Zero reserved fields.
4645            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4646
4647            // Safety:
4648            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4649            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4650            //   envelope_size bytes, there is always sufficient room.
4651            fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_lowpan_common::MacAddress, D>(
4652            self.address.as_ref().map(<fidl_fuchsia_lowpan_common::MacAddress as fidl::encoding::ValueTypeMarker>::borrow),
4653            encoder, offset + cur_offset, depth
4654        )?;
4655
4656            _prev_end_offset = cur_offset + envelope_size;
4657            if 2 > max_ordinal {
4658                return Ok(());
4659            }
4660
4661            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4662            // are envelope_size bytes.
4663            let cur_offset: usize = (2 - 1) * envelope_size;
4664
4665            // Zero reserved fields.
4666            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4667
4668            // Safety:
4669            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4670            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4671            //   envelope_size bytes, there is always sufficient room.
4672            fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_lowpan_device_common::Identity, D>(
4673            self.identity.as_ref().map(<fidl_fuchsia_lowpan_device_common::Identity as fidl::encoding::ValueTypeMarker>::borrow),
4674            encoder, offset + cur_offset, depth
4675        )?;
4676
4677            _prev_end_offset = cur_offset + envelope_size;
4678            if 3 > max_ordinal {
4679                return Ok(());
4680            }
4681
4682            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4683            // are envelope_size bytes.
4684            let cur_offset: usize = (3 - 1) * envelope_size;
4685
4686            // Zero reserved fields.
4687            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4688
4689            // Safety:
4690            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4691            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4692            //   envelope_size bytes, there is always sufficient room.
4693            fidl::encoding::encode_in_envelope_optional::<i8, D>(
4694                self.rssi.as_ref().map(<i8 as fidl::encoding::ValueTypeMarker>::borrow),
4695                encoder,
4696                offset + cur_offset,
4697                depth,
4698            )?;
4699
4700            _prev_end_offset = cur_offset + envelope_size;
4701            if 4 > max_ordinal {
4702                return Ok(());
4703            }
4704
4705            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4706            // are envelope_size bytes.
4707            let cur_offset: usize = (4 - 1) * envelope_size;
4708
4709            // Zero reserved fields.
4710            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4711
4712            // Safety:
4713            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4714            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4715            //   envelope_size bytes, there is always sufficient room.
4716            fidl::encoding::encode_in_envelope_optional::<u8, D>(
4717                self.lqi.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
4718                encoder,
4719                offset + cur_offset,
4720                depth,
4721            )?;
4722
4723            _prev_end_offset = cur_offset + envelope_size;
4724
4725            Ok(())
4726        }
4727    }
4728
4729    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for BeaconInfo {
4730        #[inline(always)]
4731        fn new_empty() -> Self {
4732            Self::default()
4733        }
4734
4735        unsafe fn decode(
4736            &mut self,
4737            decoder: &mut fidl::encoding::Decoder<'_, D>,
4738            offset: usize,
4739            mut depth: fidl::encoding::Depth,
4740        ) -> fidl::Result<()> {
4741            decoder.debug_check_bounds::<Self>(offset);
4742            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
4743                None => return Err(fidl::Error::NotNullable),
4744                Some(len) => len,
4745            };
4746            // Calling decoder.out_of_line_offset(0) is not allowed.
4747            if len == 0 {
4748                return Ok(());
4749            };
4750            depth.increment()?;
4751            let envelope_size = 8;
4752            let bytes_len = len * envelope_size;
4753            let offset = decoder.out_of_line_offset(bytes_len)?;
4754            // Decode the envelope for each type.
4755            let mut _next_ordinal_to_read = 0;
4756            let mut next_offset = offset;
4757            let end_offset = offset + bytes_len;
4758            _next_ordinal_to_read += 1;
4759            if next_offset >= end_offset {
4760                return Ok(());
4761            }
4762
4763            // Decode unknown envelopes for gaps in ordinals.
4764            while _next_ordinal_to_read < 1 {
4765                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4766                _next_ordinal_to_read += 1;
4767                next_offset += envelope_size;
4768            }
4769
4770            let next_out_of_line = decoder.next_out_of_line();
4771            let handles_before = decoder.remaining_handles();
4772            if let Some((inlined, num_bytes, num_handles)) =
4773                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4774            {
4775                let member_inline_size = <fidl_fuchsia_lowpan_common::MacAddress as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4776                if inlined != (member_inline_size <= 4) {
4777                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4778                }
4779                let inner_offset;
4780                let mut inner_depth = depth.clone();
4781                if inlined {
4782                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4783                    inner_offset = next_offset;
4784                } else {
4785                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4786                    inner_depth.increment()?;
4787                }
4788                let val_ref = self.address.get_or_insert_with(|| {
4789                    fidl::new_empty!(fidl_fuchsia_lowpan_common::MacAddress, D)
4790                });
4791                fidl::decode!(
4792                    fidl_fuchsia_lowpan_common::MacAddress,
4793                    D,
4794                    val_ref,
4795                    decoder,
4796                    inner_offset,
4797                    inner_depth
4798                )?;
4799                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4800                {
4801                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4802                }
4803                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4804                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4805                }
4806            }
4807
4808            next_offset += envelope_size;
4809            _next_ordinal_to_read += 1;
4810            if next_offset >= end_offset {
4811                return Ok(());
4812            }
4813
4814            // Decode unknown envelopes for gaps in ordinals.
4815            while _next_ordinal_to_read < 2 {
4816                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4817                _next_ordinal_to_read += 1;
4818                next_offset += envelope_size;
4819            }
4820
4821            let next_out_of_line = decoder.next_out_of_line();
4822            let handles_before = decoder.remaining_handles();
4823            if let Some((inlined, num_bytes, num_handles)) =
4824                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4825            {
4826                let member_inline_size = <fidl_fuchsia_lowpan_device_common::Identity as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4827                if inlined != (member_inline_size <= 4) {
4828                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4829                }
4830                let inner_offset;
4831                let mut inner_depth = depth.clone();
4832                if inlined {
4833                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4834                    inner_offset = next_offset;
4835                } else {
4836                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4837                    inner_depth.increment()?;
4838                }
4839                let val_ref = self.identity.get_or_insert_with(|| {
4840                    fidl::new_empty!(fidl_fuchsia_lowpan_device_common::Identity, D)
4841                });
4842                fidl::decode!(
4843                    fidl_fuchsia_lowpan_device_common::Identity,
4844                    D,
4845                    val_ref,
4846                    decoder,
4847                    inner_offset,
4848                    inner_depth
4849                )?;
4850                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4851                {
4852                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4853                }
4854                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4855                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4856                }
4857            }
4858
4859            next_offset += envelope_size;
4860            _next_ordinal_to_read += 1;
4861            if next_offset >= end_offset {
4862                return Ok(());
4863            }
4864
4865            // Decode unknown envelopes for gaps in ordinals.
4866            while _next_ordinal_to_read < 3 {
4867                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4868                _next_ordinal_to_read += 1;
4869                next_offset += envelope_size;
4870            }
4871
4872            let next_out_of_line = decoder.next_out_of_line();
4873            let handles_before = decoder.remaining_handles();
4874            if let Some((inlined, num_bytes, num_handles)) =
4875                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4876            {
4877                let member_inline_size =
4878                    <i8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4879                if inlined != (member_inline_size <= 4) {
4880                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4881                }
4882                let inner_offset;
4883                let mut inner_depth = depth.clone();
4884                if inlined {
4885                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4886                    inner_offset = next_offset;
4887                } else {
4888                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4889                    inner_depth.increment()?;
4890                }
4891                let val_ref = self.rssi.get_or_insert_with(|| fidl::new_empty!(i8, D));
4892                fidl::decode!(i8, D, val_ref, decoder, inner_offset, inner_depth)?;
4893                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4894                {
4895                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4896                }
4897                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4898                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4899                }
4900            }
4901
4902            next_offset += envelope_size;
4903            _next_ordinal_to_read += 1;
4904            if next_offset >= end_offset {
4905                return Ok(());
4906            }
4907
4908            // Decode unknown envelopes for gaps in ordinals.
4909            while _next_ordinal_to_read < 4 {
4910                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4911                _next_ordinal_to_read += 1;
4912                next_offset += envelope_size;
4913            }
4914
4915            let next_out_of_line = decoder.next_out_of_line();
4916            let handles_before = decoder.remaining_handles();
4917            if let Some((inlined, num_bytes, num_handles)) =
4918                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4919            {
4920                let member_inline_size =
4921                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4922                if inlined != (member_inline_size <= 4) {
4923                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4924                }
4925                let inner_offset;
4926                let mut inner_depth = depth.clone();
4927                if inlined {
4928                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4929                    inner_offset = next_offset;
4930                } else {
4931                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4932                    inner_depth.increment()?;
4933                }
4934                let val_ref = self.lqi.get_or_insert_with(|| fidl::new_empty!(u8, D));
4935                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
4936                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4937                {
4938                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4939                }
4940                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4941                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4942                }
4943            }
4944
4945            next_offset += envelope_size;
4946
4947            // Decode the remaining unknown envelopes.
4948            while next_offset < end_offset {
4949                _next_ordinal_to_read += 1;
4950                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4951                next_offset += envelope_size;
4952            }
4953
4954            Ok(())
4955        }
4956    }
4957
4958    impl BorderRouterConfig {
4959        #[inline(always)]
4960        fn max_ordinal_present(&self) -> u64 {
4961            if let Some(_) = self.rloc16 {
4962                return 12;
4963            }
4964            if let Some(_) = self.dp {
4965                return 11;
4966            }
4967            if let Some(_) = self.nd_dns {
4968                return 10;
4969            }
4970            if let Some(_) = self.stable {
4971                return 9;
4972            }
4973            if let Some(_) = self.on_mesh {
4974                return 8;
4975            }
4976            if let Some(_) = self.default_route {
4977                return 7;
4978            }
4979            if let Some(_) = self.configure {
4980                return 6;
4981            }
4982            if let Some(_) = self.dhcp {
4983                return 5;
4984            }
4985            if let Some(_) = self.slaac {
4986                return 4;
4987            }
4988            if let Some(_) = self.preferred {
4989                return 3;
4990            }
4991            if let Some(_) = self.preference {
4992                return 2;
4993            }
4994            if let Some(_) = self.prefix {
4995                return 1;
4996            }
4997            0
4998        }
4999    }
5000
5001    impl fidl::encoding::ValueTypeMarker for BorderRouterConfig {
5002        type Borrowed<'a> = &'a Self;
5003        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5004            value
5005        }
5006    }
5007
5008    unsafe impl fidl::encoding::TypeMarker for BorderRouterConfig {
5009        type Owned = Self;
5010
5011        #[inline(always)]
5012        fn inline_align(_context: fidl::encoding::Context) -> usize {
5013            8
5014        }
5015
5016        #[inline(always)]
5017        fn inline_size(_context: fidl::encoding::Context) -> usize {
5018            16
5019        }
5020    }
5021
5022    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<BorderRouterConfig, D>
5023        for &BorderRouterConfig
5024    {
5025        unsafe fn encode(
5026            self,
5027            encoder: &mut fidl::encoding::Encoder<'_, D>,
5028            offset: usize,
5029            mut depth: fidl::encoding::Depth,
5030        ) -> fidl::Result<()> {
5031            encoder.debug_check_bounds::<BorderRouterConfig>(offset);
5032            // Vector header
5033            let max_ordinal: u64 = self.max_ordinal_present();
5034            encoder.write_num(max_ordinal, offset);
5035            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
5036            // Calling encoder.out_of_line_offset(0) is not allowed.
5037            if max_ordinal == 0 {
5038                return Ok(());
5039            }
5040            depth.increment()?;
5041            let envelope_size = 8;
5042            let bytes_len = max_ordinal as usize * envelope_size;
5043            #[allow(unused_variables)]
5044            let offset = encoder.out_of_line_offset(bytes_len);
5045            let mut _prev_end_offset: usize = 0;
5046            if 1 > max_ordinal {
5047                return Ok(());
5048            }
5049
5050            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5051            // are envelope_size bytes.
5052            let cur_offset: usize = (1 - 1) * envelope_size;
5053
5054            // Zero reserved fields.
5055            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5056
5057            // Safety:
5058            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5059            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5060            //   envelope_size bytes, there is always sufficient room.
5061            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<64>, D>(
5062                self.prefix.as_ref().map(
5063                    <fidl::encoding::BoundedString<64> as fidl::encoding::ValueTypeMarker>::borrow,
5064                ),
5065                encoder,
5066                offset + cur_offset,
5067                depth,
5068            )?;
5069
5070            _prev_end_offset = cur_offset + envelope_size;
5071            if 2 > max_ordinal {
5072                return Ok(());
5073            }
5074
5075            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5076            // are envelope_size bytes.
5077            let cur_offset: usize = (2 - 1) * envelope_size;
5078
5079            // Zero reserved fields.
5080            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5081
5082            // Safety:
5083            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5084            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5085            //   envelope_size bytes, there is always sufficient room.
5086            fidl::encoding::encode_in_envelope_optional::<i8, D>(
5087                self.preference.as_ref().map(<i8 as fidl::encoding::ValueTypeMarker>::borrow),
5088                encoder,
5089                offset + cur_offset,
5090                depth,
5091            )?;
5092
5093            _prev_end_offset = cur_offset + envelope_size;
5094            if 3 > max_ordinal {
5095                return Ok(());
5096            }
5097
5098            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5099            // are envelope_size bytes.
5100            let cur_offset: usize = (3 - 1) * envelope_size;
5101
5102            // Zero reserved fields.
5103            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5104
5105            // Safety:
5106            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5107            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5108            //   envelope_size bytes, there is always sufficient room.
5109            fidl::encoding::encode_in_envelope_optional::<bool, D>(
5110                self.preferred.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
5111                encoder,
5112                offset + cur_offset,
5113                depth,
5114            )?;
5115
5116            _prev_end_offset = cur_offset + envelope_size;
5117            if 4 > max_ordinal {
5118                return Ok(());
5119            }
5120
5121            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5122            // are envelope_size bytes.
5123            let cur_offset: usize = (4 - 1) * envelope_size;
5124
5125            // Zero reserved fields.
5126            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5127
5128            // Safety:
5129            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5130            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5131            //   envelope_size bytes, there is always sufficient room.
5132            fidl::encoding::encode_in_envelope_optional::<bool, D>(
5133                self.slaac.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
5134                encoder,
5135                offset + cur_offset,
5136                depth,
5137            )?;
5138
5139            _prev_end_offset = cur_offset + envelope_size;
5140            if 5 > max_ordinal {
5141                return Ok(());
5142            }
5143
5144            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5145            // are envelope_size bytes.
5146            let cur_offset: usize = (5 - 1) * envelope_size;
5147
5148            // Zero reserved fields.
5149            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5150
5151            // Safety:
5152            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5153            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5154            //   envelope_size bytes, there is always sufficient room.
5155            fidl::encoding::encode_in_envelope_optional::<bool, D>(
5156                self.dhcp.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
5157                encoder,
5158                offset + cur_offset,
5159                depth,
5160            )?;
5161
5162            _prev_end_offset = cur_offset + envelope_size;
5163            if 6 > max_ordinal {
5164                return Ok(());
5165            }
5166
5167            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5168            // are envelope_size bytes.
5169            let cur_offset: usize = (6 - 1) * envelope_size;
5170
5171            // Zero reserved fields.
5172            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5173
5174            // Safety:
5175            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5176            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5177            //   envelope_size bytes, there is always sufficient room.
5178            fidl::encoding::encode_in_envelope_optional::<bool, D>(
5179                self.configure.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
5180                encoder,
5181                offset + cur_offset,
5182                depth,
5183            )?;
5184
5185            _prev_end_offset = cur_offset + envelope_size;
5186            if 7 > max_ordinal {
5187                return Ok(());
5188            }
5189
5190            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5191            // are envelope_size bytes.
5192            let cur_offset: usize = (7 - 1) * envelope_size;
5193
5194            // Zero reserved fields.
5195            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5196
5197            // Safety:
5198            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5199            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5200            //   envelope_size bytes, there is always sufficient room.
5201            fidl::encoding::encode_in_envelope_optional::<bool, D>(
5202                self.default_route.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
5203                encoder,
5204                offset + cur_offset,
5205                depth,
5206            )?;
5207
5208            _prev_end_offset = cur_offset + envelope_size;
5209            if 8 > max_ordinal {
5210                return Ok(());
5211            }
5212
5213            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5214            // are envelope_size bytes.
5215            let cur_offset: usize = (8 - 1) * envelope_size;
5216
5217            // Zero reserved fields.
5218            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5219
5220            // Safety:
5221            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5222            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5223            //   envelope_size bytes, there is always sufficient room.
5224            fidl::encoding::encode_in_envelope_optional::<bool, D>(
5225                self.on_mesh.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
5226                encoder,
5227                offset + cur_offset,
5228                depth,
5229            )?;
5230
5231            _prev_end_offset = cur_offset + envelope_size;
5232            if 9 > max_ordinal {
5233                return Ok(());
5234            }
5235
5236            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5237            // are envelope_size bytes.
5238            let cur_offset: usize = (9 - 1) * envelope_size;
5239
5240            // Zero reserved fields.
5241            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5242
5243            // Safety:
5244            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5245            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5246            //   envelope_size bytes, there is always sufficient room.
5247            fidl::encoding::encode_in_envelope_optional::<bool, D>(
5248                self.stable.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
5249                encoder,
5250                offset + cur_offset,
5251                depth,
5252            )?;
5253
5254            _prev_end_offset = cur_offset + envelope_size;
5255            if 10 > max_ordinal {
5256                return Ok(());
5257            }
5258
5259            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5260            // are envelope_size bytes.
5261            let cur_offset: usize = (10 - 1) * envelope_size;
5262
5263            // Zero reserved fields.
5264            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5265
5266            // Safety:
5267            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5268            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5269            //   envelope_size bytes, there is always sufficient room.
5270            fidl::encoding::encode_in_envelope_optional::<bool, D>(
5271                self.nd_dns.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
5272                encoder,
5273                offset + cur_offset,
5274                depth,
5275            )?;
5276
5277            _prev_end_offset = cur_offset + envelope_size;
5278            if 11 > max_ordinal {
5279                return Ok(());
5280            }
5281
5282            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5283            // are envelope_size bytes.
5284            let cur_offset: usize = (11 - 1) * envelope_size;
5285
5286            // Zero reserved fields.
5287            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5288
5289            // Safety:
5290            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5291            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5292            //   envelope_size bytes, there is always sufficient room.
5293            fidl::encoding::encode_in_envelope_optional::<bool, D>(
5294                self.dp.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
5295                encoder,
5296                offset + cur_offset,
5297                depth,
5298            )?;
5299
5300            _prev_end_offset = cur_offset + envelope_size;
5301            if 12 > max_ordinal {
5302                return Ok(());
5303            }
5304
5305            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5306            // are envelope_size bytes.
5307            let cur_offset: usize = (12 - 1) * envelope_size;
5308
5309            // Zero reserved fields.
5310            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5311
5312            // Safety:
5313            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5314            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5315            //   envelope_size bytes, there is always sufficient room.
5316            fidl::encoding::encode_in_envelope_optional::<u16, D>(
5317                self.rloc16.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
5318                encoder,
5319                offset + cur_offset,
5320                depth,
5321            )?;
5322
5323            _prev_end_offset = cur_offset + envelope_size;
5324
5325            Ok(())
5326        }
5327    }
5328
5329    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for BorderRouterConfig {
5330        #[inline(always)]
5331        fn new_empty() -> Self {
5332            Self::default()
5333        }
5334
5335        unsafe fn decode(
5336            &mut self,
5337            decoder: &mut fidl::encoding::Decoder<'_, D>,
5338            offset: usize,
5339            mut depth: fidl::encoding::Depth,
5340        ) -> fidl::Result<()> {
5341            decoder.debug_check_bounds::<Self>(offset);
5342            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
5343                None => return Err(fidl::Error::NotNullable),
5344                Some(len) => len,
5345            };
5346            // Calling decoder.out_of_line_offset(0) is not allowed.
5347            if len == 0 {
5348                return Ok(());
5349            };
5350            depth.increment()?;
5351            let envelope_size = 8;
5352            let bytes_len = len * envelope_size;
5353            let offset = decoder.out_of_line_offset(bytes_len)?;
5354            // Decode the envelope for each type.
5355            let mut _next_ordinal_to_read = 0;
5356            let mut next_offset = offset;
5357            let end_offset = offset + bytes_len;
5358            _next_ordinal_to_read += 1;
5359            if next_offset >= end_offset {
5360                return Ok(());
5361            }
5362
5363            // Decode unknown envelopes for gaps in ordinals.
5364            while _next_ordinal_to_read < 1 {
5365                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5366                _next_ordinal_to_read += 1;
5367                next_offset += envelope_size;
5368            }
5369
5370            let next_out_of_line = decoder.next_out_of_line();
5371            let handles_before = decoder.remaining_handles();
5372            if let Some((inlined, num_bytes, num_handles)) =
5373                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5374            {
5375                let member_inline_size =
5376                    <fidl::encoding::BoundedString<64> as fidl::encoding::TypeMarker>::inline_size(
5377                        decoder.context,
5378                    );
5379                if inlined != (member_inline_size <= 4) {
5380                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5381                }
5382                let inner_offset;
5383                let mut inner_depth = depth.clone();
5384                if inlined {
5385                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5386                    inner_offset = next_offset;
5387                } else {
5388                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5389                    inner_depth.increment()?;
5390                }
5391                let val_ref = self
5392                    .prefix
5393                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<64>, D));
5394                fidl::decode!(
5395                    fidl::encoding::BoundedString<64>,
5396                    D,
5397                    val_ref,
5398                    decoder,
5399                    inner_offset,
5400                    inner_depth
5401                )?;
5402                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5403                {
5404                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5405                }
5406                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5407                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5408                }
5409            }
5410
5411            next_offset += envelope_size;
5412            _next_ordinal_to_read += 1;
5413            if next_offset >= end_offset {
5414                return Ok(());
5415            }
5416
5417            // Decode unknown envelopes for gaps in ordinals.
5418            while _next_ordinal_to_read < 2 {
5419                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5420                _next_ordinal_to_read += 1;
5421                next_offset += envelope_size;
5422            }
5423
5424            let next_out_of_line = decoder.next_out_of_line();
5425            let handles_before = decoder.remaining_handles();
5426            if let Some((inlined, num_bytes, num_handles)) =
5427                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5428            {
5429                let member_inline_size =
5430                    <i8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5431                if inlined != (member_inline_size <= 4) {
5432                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5433                }
5434                let inner_offset;
5435                let mut inner_depth = depth.clone();
5436                if inlined {
5437                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5438                    inner_offset = next_offset;
5439                } else {
5440                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5441                    inner_depth.increment()?;
5442                }
5443                let val_ref = self.preference.get_or_insert_with(|| fidl::new_empty!(i8, D));
5444                fidl::decode!(i8, D, val_ref, decoder, inner_offset, inner_depth)?;
5445                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5446                {
5447                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5448                }
5449                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5450                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5451                }
5452            }
5453
5454            next_offset += envelope_size;
5455            _next_ordinal_to_read += 1;
5456            if next_offset >= end_offset {
5457                return Ok(());
5458            }
5459
5460            // Decode unknown envelopes for gaps in ordinals.
5461            while _next_ordinal_to_read < 3 {
5462                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5463                _next_ordinal_to_read += 1;
5464                next_offset += envelope_size;
5465            }
5466
5467            let next_out_of_line = decoder.next_out_of_line();
5468            let handles_before = decoder.remaining_handles();
5469            if let Some((inlined, num_bytes, num_handles)) =
5470                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5471            {
5472                let member_inline_size =
5473                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5474                if inlined != (member_inline_size <= 4) {
5475                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5476                }
5477                let inner_offset;
5478                let mut inner_depth = depth.clone();
5479                if inlined {
5480                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5481                    inner_offset = next_offset;
5482                } else {
5483                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5484                    inner_depth.increment()?;
5485                }
5486                let val_ref = self.preferred.get_or_insert_with(|| fidl::new_empty!(bool, D));
5487                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
5488                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5489                {
5490                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5491                }
5492                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5493                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5494                }
5495            }
5496
5497            next_offset += envelope_size;
5498            _next_ordinal_to_read += 1;
5499            if next_offset >= end_offset {
5500                return Ok(());
5501            }
5502
5503            // Decode unknown envelopes for gaps in ordinals.
5504            while _next_ordinal_to_read < 4 {
5505                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5506                _next_ordinal_to_read += 1;
5507                next_offset += envelope_size;
5508            }
5509
5510            let next_out_of_line = decoder.next_out_of_line();
5511            let handles_before = decoder.remaining_handles();
5512            if let Some((inlined, num_bytes, num_handles)) =
5513                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5514            {
5515                let member_inline_size =
5516                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5517                if inlined != (member_inline_size <= 4) {
5518                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5519                }
5520                let inner_offset;
5521                let mut inner_depth = depth.clone();
5522                if inlined {
5523                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5524                    inner_offset = next_offset;
5525                } else {
5526                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5527                    inner_depth.increment()?;
5528                }
5529                let val_ref = self.slaac.get_or_insert_with(|| fidl::new_empty!(bool, D));
5530                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
5531                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5532                {
5533                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5534                }
5535                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5536                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5537                }
5538            }
5539
5540            next_offset += envelope_size;
5541            _next_ordinal_to_read += 1;
5542            if next_offset >= end_offset {
5543                return Ok(());
5544            }
5545
5546            // Decode unknown envelopes for gaps in ordinals.
5547            while _next_ordinal_to_read < 5 {
5548                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5549                _next_ordinal_to_read += 1;
5550                next_offset += envelope_size;
5551            }
5552
5553            let next_out_of_line = decoder.next_out_of_line();
5554            let handles_before = decoder.remaining_handles();
5555            if let Some((inlined, num_bytes, num_handles)) =
5556                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5557            {
5558                let member_inline_size =
5559                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5560                if inlined != (member_inline_size <= 4) {
5561                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5562                }
5563                let inner_offset;
5564                let mut inner_depth = depth.clone();
5565                if inlined {
5566                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5567                    inner_offset = next_offset;
5568                } else {
5569                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5570                    inner_depth.increment()?;
5571                }
5572                let val_ref = self.dhcp.get_or_insert_with(|| fidl::new_empty!(bool, D));
5573                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
5574                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5575                {
5576                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5577                }
5578                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5579                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5580                }
5581            }
5582
5583            next_offset += envelope_size;
5584            _next_ordinal_to_read += 1;
5585            if next_offset >= end_offset {
5586                return Ok(());
5587            }
5588
5589            // Decode unknown envelopes for gaps in ordinals.
5590            while _next_ordinal_to_read < 6 {
5591                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5592                _next_ordinal_to_read += 1;
5593                next_offset += envelope_size;
5594            }
5595
5596            let next_out_of_line = decoder.next_out_of_line();
5597            let handles_before = decoder.remaining_handles();
5598            if let Some((inlined, num_bytes, num_handles)) =
5599                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5600            {
5601                let member_inline_size =
5602                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5603                if inlined != (member_inline_size <= 4) {
5604                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5605                }
5606                let inner_offset;
5607                let mut inner_depth = depth.clone();
5608                if inlined {
5609                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5610                    inner_offset = next_offset;
5611                } else {
5612                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5613                    inner_depth.increment()?;
5614                }
5615                let val_ref = self.configure.get_or_insert_with(|| fidl::new_empty!(bool, D));
5616                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
5617                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5618                {
5619                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5620                }
5621                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5622                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5623                }
5624            }
5625
5626            next_offset += envelope_size;
5627            _next_ordinal_to_read += 1;
5628            if next_offset >= end_offset {
5629                return Ok(());
5630            }
5631
5632            // Decode unknown envelopes for gaps in ordinals.
5633            while _next_ordinal_to_read < 7 {
5634                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5635                _next_ordinal_to_read += 1;
5636                next_offset += envelope_size;
5637            }
5638
5639            let next_out_of_line = decoder.next_out_of_line();
5640            let handles_before = decoder.remaining_handles();
5641            if let Some((inlined, num_bytes, num_handles)) =
5642                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5643            {
5644                let member_inline_size =
5645                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5646                if inlined != (member_inline_size <= 4) {
5647                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5648                }
5649                let inner_offset;
5650                let mut inner_depth = depth.clone();
5651                if inlined {
5652                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5653                    inner_offset = next_offset;
5654                } else {
5655                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5656                    inner_depth.increment()?;
5657                }
5658                let val_ref = self.default_route.get_or_insert_with(|| fidl::new_empty!(bool, D));
5659                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
5660                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5661                {
5662                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5663                }
5664                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5665                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5666                }
5667            }
5668
5669            next_offset += envelope_size;
5670            _next_ordinal_to_read += 1;
5671            if next_offset >= end_offset {
5672                return Ok(());
5673            }
5674
5675            // Decode unknown envelopes for gaps in ordinals.
5676            while _next_ordinal_to_read < 8 {
5677                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5678                _next_ordinal_to_read += 1;
5679                next_offset += envelope_size;
5680            }
5681
5682            let next_out_of_line = decoder.next_out_of_line();
5683            let handles_before = decoder.remaining_handles();
5684            if let Some((inlined, num_bytes, num_handles)) =
5685                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5686            {
5687                let member_inline_size =
5688                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5689                if inlined != (member_inline_size <= 4) {
5690                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5691                }
5692                let inner_offset;
5693                let mut inner_depth = depth.clone();
5694                if inlined {
5695                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5696                    inner_offset = next_offset;
5697                } else {
5698                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5699                    inner_depth.increment()?;
5700                }
5701                let val_ref = self.on_mesh.get_or_insert_with(|| fidl::new_empty!(bool, D));
5702                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
5703                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5704                {
5705                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5706                }
5707                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5708                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5709                }
5710            }
5711
5712            next_offset += envelope_size;
5713            _next_ordinal_to_read += 1;
5714            if next_offset >= end_offset {
5715                return Ok(());
5716            }
5717
5718            // Decode unknown envelopes for gaps in ordinals.
5719            while _next_ordinal_to_read < 9 {
5720                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5721                _next_ordinal_to_read += 1;
5722                next_offset += envelope_size;
5723            }
5724
5725            let next_out_of_line = decoder.next_out_of_line();
5726            let handles_before = decoder.remaining_handles();
5727            if let Some((inlined, num_bytes, num_handles)) =
5728                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5729            {
5730                let member_inline_size =
5731                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5732                if inlined != (member_inline_size <= 4) {
5733                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5734                }
5735                let inner_offset;
5736                let mut inner_depth = depth.clone();
5737                if inlined {
5738                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5739                    inner_offset = next_offset;
5740                } else {
5741                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5742                    inner_depth.increment()?;
5743                }
5744                let val_ref = self.stable.get_or_insert_with(|| fidl::new_empty!(bool, D));
5745                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
5746                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5747                {
5748                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5749                }
5750                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5751                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5752                }
5753            }
5754
5755            next_offset += envelope_size;
5756            _next_ordinal_to_read += 1;
5757            if next_offset >= end_offset {
5758                return Ok(());
5759            }
5760
5761            // Decode unknown envelopes for gaps in ordinals.
5762            while _next_ordinal_to_read < 10 {
5763                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5764                _next_ordinal_to_read += 1;
5765                next_offset += envelope_size;
5766            }
5767
5768            let next_out_of_line = decoder.next_out_of_line();
5769            let handles_before = decoder.remaining_handles();
5770            if let Some((inlined, num_bytes, num_handles)) =
5771                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5772            {
5773                let member_inline_size =
5774                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5775                if inlined != (member_inline_size <= 4) {
5776                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5777                }
5778                let inner_offset;
5779                let mut inner_depth = depth.clone();
5780                if inlined {
5781                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5782                    inner_offset = next_offset;
5783                } else {
5784                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5785                    inner_depth.increment()?;
5786                }
5787                let val_ref = self.nd_dns.get_or_insert_with(|| fidl::new_empty!(bool, D));
5788                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
5789                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5790                {
5791                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5792                }
5793                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5794                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5795                }
5796            }
5797
5798            next_offset += envelope_size;
5799            _next_ordinal_to_read += 1;
5800            if next_offset >= end_offset {
5801                return Ok(());
5802            }
5803
5804            // Decode unknown envelopes for gaps in ordinals.
5805            while _next_ordinal_to_read < 11 {
5806                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5807                _next_ordinal_to_read += 1;
5808                next_offset += envelope_size;
5809            }
5810
5811            let next_out_of_line = decoder.next_out_of_line();
5812            let handles_before = decoder.remaining_handles();
5813            if let Some((inlined, num_bytes, num_handles)) =
5814                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5815            {
5816                let member_inline_size =
5817                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5818                if inlined != (member_inline_size <= 4) {
5819                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5820                }
5821                let inner_offset;
5822                let mut inner_depth = depth.clone();
5823                if inlined {
5824                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5825                    inner_offset = next_offset;
5826                } else {
5827                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5828                    inner_depth.increment()?;
5829                }
5830                let val_ref = self.dp.get_or_insert_with(|| fidl::new_empty!(bool, D));
5831                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
5832                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5833                {
5834                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5835                }
5836                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5837                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5838                }
5839            }
5840
5841            next_offset += envelope_size;
5842            _next_ordinal_to_read += 1;
5843            if next_offset >= end_offset {
5844                return Ok(());
5845            }
5846
5847            // Decode unknown envelopes for gaps in ordinals.
5848            while _next_ordinal_to_read < 12 {
5849                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5850                _next_ordinal_to_read += 1;
5851                next_offset += envelope_size;
5852            }
5853
5854            let next_out_of_line = decoder.next_out_of_line();
5855            let handles_before = decoder.remaining_handles();
5856            if let Some((inlined, num_bytes, num_handles)) =
5857                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5858            {
5859                let member_inline_size =
5860                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5861                if inlined != (member_inline_size <= 4) {
5862                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5863                }
5864                let inner_offset;
5865                let mut inner_depth = depth.clone();
5866                if inlined {
5867                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5868                    inner_offset = next_offset;
5869                } else {
5870                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5871                    inner_depth.increment()?;
5872                }
5873                let val_ref = self.rloc16.get_or_insert_with(|| fidl::new_empty!(u16, D));
5874                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
5875                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5876                {
5877                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5878                }
5879                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5880                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5881                }
5882            }
5883
5884            next_offset += envelope_size;
5885
5886            // Decode the remaining unknown envelopes.
5887            while next_offset < end_offset {
5888                _next_ordinal_to_read += 1;
5889                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5890                next_offset += envelope_size;
5891            }
5892
5893            Ok(())
5894        }
5895    }
5896
5897    impl BorderRoutingCounters {
5898        #[inline(always)]
5899        fn max_ordinal_present(&self) -> u64 {
5900            if let Some(_) = self.outbound_internet_bytes {
5901                return 18;
5902            }
5903            if let Some(_) = self.outbound_internet_packets {
5904                return 17;
5905            }
5906            if let Some(_) = self.inbound_internet_bytes {
5907                return 16;
5908            }
5909            if let Some(_) = self.inbound_internet_packets {
5910                return 15;
5911            }
5912            if let Some(_) = self.rs_tx_failure {
5913                return 14;
5914            }
5915            if let Some(_) = self.rs_tx_success {
5916                return 13;
5917            }
5918            if let Some(_) = self.rs_rx {
5919                return 12;
5920            }
5921            if let Some(_) = self.ra_tx_failure {
5922                return 11;
5923            }
5924            if let Some(_) = self.ra_tx_success {
5925                return 10;
5926            }
5927            if let Some(_) = self.ra_rx {
5928                return 9;
5929            }
5930            if let Some(_) = self.outbound_multicast_bytes {
5931                return 8;
5932            }
5933            if let Some(_) = self.outbound_multicast_packets {
5934                return 7;
5935            }
5936            if let Some(_) = self.outbound_unicast_bytes {
5937                return 6;
5938            }
5939            if let Some(_) = self.outbound_unicast_packets {
5940                return 5;
5941            }
5942            if let Some(_) = self.inbound_multicast_bytes {
5943                return 4;
5944            }
5945            if let Some(_) = self.inbound_multicast_packets {
5946                return 3;
5947            }
5948            if let Some(_) = self.inbound_unicast_bytes {
5949                return 2;
5950            }
5951            if let Some(_) = self.inbound_unicast_packets {
5952                return 1;
5953            }
5954            0
5955        }
5956    }
5957
5958    impl fidl::encoding::ValueTypeMarker for BorderRoutingCounters {
5959        type Borrowed<'a> = &'a Self;
5960        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5961            value
5962        }
5963    }
5964
5965    unsafe impl fidl::encoding::TypeMarker for BorderRoutingCounters {
5966        type Owned = Self;
5967
5968        #[inline(always)]
5969        fn inline_align(_context: fidl::encoding::Context) -> usize {
5970            8
5971        }
5972
5973        #[inline(always)]
5974        fn inline_size(_context: fidl::encoding::Context) -> usize {
5975            16
5976        }
5977    }
5978
5979    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<BorderRoutingCounters, D>
5980        for &BorderRoutingCounters
5981    {
5982        unsafe fn encode(
5983            self,
5984            encoder: &mut fidl::encoding::Encoder<'_, D>,
5985            offset: usize,
5986            mut depth: fidl::encoding::Depth,
5987        ) -> fidl::Result<()> {
5988            encoder.debug_check_bounds::<BorderRoutingCounters>(offset);
5989            // Vector header
5990            let max_ordinal: u64 = self.max_ordinal_present();
5991            encoder.write_num(max_ordinal, offset);
5992            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
5993            // Calling encoder.out_of_line_offset(0) is not allowed.
5994            if max_ordinal == 0 {
5995                return Ok(());
5996            }
5997            depth.increment()?;
5998            let envelope_size = 8;
5999            let bytes_len = max_ordinal as usize * envelope_size;
6000            #[allow(unused_variables)]
6001            let offset = encoder.out_of_line_offset(bytes_len);
6002            let mut _prev_end_offset: usize = 0;
6003            if 1 > max_ordinal {
6004                return Ok(());
6005            }
6006
6007            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6008            // are envelope_size bytes.
6009            let cur_offset: usize = (1 - 1) * envelope_size;
6010
6011            // Zero reserved fields.
6012            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6013
6014            // Safety:
6015            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6016            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6017            //   envelope_size bytes, there is always sufficient room.
6018            fidl::encoding::encode_in_envelope_optional::<u64, D>(
6019                self.inbound_unicast_packets
6020                    .as_ref()
6021                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
6022                encoder,
6023                offset + cur_offset,
6024                depth,
6025            )?;
6026
6027            _prev_end_offset = cur_offset + envelope_size;
6028            if 2 > max_ordinal {
6029                return Ok(());
6030            }
6031
6032            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6033            // are envelope_size bytes.
6034            let cur_offset: usize = (2 - 1) * envelope_size;
6035
6036            // Zero reserved fields.
6037            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6038
6039            // Safety:
6040            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6041            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6042            //   envelope_size bytes, there is always sufficient room.
6043            fidl::encoding::encode_in_envelope_optional::<u64, D>(
6044                self.inbound_unicast_bytes
6045                    .as_ref()
6046                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
6047                encoder,
6048                offset + cur_offset,
6049                depth,
6050            )?;
6051
6052            _prev_end_offset = cur_offset + envelope_size;
6053            if 3 > max_ordinal {
6054                return Ok(());
6055            }
6056
6057            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6058            // are envelope_size bytes.
6059            let cur_offset: usize = (3 - 1) * envelope_size;
6060
6061            // Zero reserved fields.
6062            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6063
6064            // Safety:
6065            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6066            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6067            //   envelope_size bytes, there is always sufficient room.
6068            fidl::encoding::encode_in_envelope_optional::<u64, D>(
6069                self.inbound_multicast_packets
6070                    .as_ref()
6071                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
6072                encoder,
6073                offset + cur_offset,
6074                depth,
6075            )?;
6076
6077            _prev_end_offset = cur_offset + envelope_size;
6078            if 4 > max_ordinal {
6079                return Ok(());
6080            }
6081
6082            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6083            // are envelope_size bytes.
6084            let cur_offset: usize = (4 - 1) * envelope_size;
6085
6086            // Zero reserved fields.
6087            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6088
6089            // Safety:
6090            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6091            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6092            //   envelope_size bytes, there is always sufficient room.
6093            fidl::encoding::encode_in_envelope_optional::<u64, D>(
6094                self.inbound_multicast_bytes
6095                    .as_ref()
6096                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
6097                encoder,
6098                offset + cur_offset,
6099                depth,
6100            )?;
6101
6102            _prev_end_offset = cur_offset + envelope_size;
6103            if 5 > max_ordinal {
6104                return Ok(());
6105            }
6106
6107            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6108            // are envelope_size bytes.
6109            let cur_offset: usize = (5 - 1) * envelope_size;
6110
6111            // Zero reserved fields.
6112            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6113
6114            // Safety:
6115            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6116            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6117            //   envelope_size bytes, there is always sufficient room.
6118            fidl::encoding::encode_in_envelope_optional::<u64, D>(
6119                self.outbound_unicast_packets
6120                    .as_ref()
6121                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
6122                encoder,
6123                offset + cur_offset,
6124                depth,
6125            )?;
6126
6127            _prev_end_offset = cur_offset + envelope_size;
6128            if 6 > max_ordinal {
6129                return Ok(());
6130            }
6131
6132            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6133            // are envelope_size bytes.
6134            let cur_offset: usize = (6 - 1) * envelope_size;
6135
6136            // Zero reserved fields.
6137            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6138
6139            // Safety:
6140            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6141            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6142            //   envelope_size bytes, there is always sufficient room.
6143            fidl::encoding::encode_in_envelope_optional::<u64, D>(
6144                self.outbound_unicast_bytes
6145                    .as_ref()
6146                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
6147                encoder,
6148                offset + cur_offset,
6149                depth,
6150            )?;
6151
6152            _prev_end_offset = cur_offset + envelope_size;
6153            if 7 > max_ordinal {
6154                return Ok(());
6155            }
6156
6157            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6158            // are envelope_size bytes.
6159            let cur_offset: usize = (7 - 1) * envelope_size;
6160
6161            // Zero reserved fields.
6162            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6163
6164            // Safety:
6165            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6166            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6167            //   envelope_size bytes, there is always sufficient room.
6168            fidl::encoding::encode_in_envelope_optional::<u64, D>(
6169                self.outbound_multicast_packets
6170                    .as_ref()
6171                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
6172                encoder,
6173                offset + cur_offset,
6174                depth,
6175            )?;
6176
6177            _prev_end_offset = cur_offset + envelope_size;
6178            if 8 > max_ordinal {
6179                return Ok(());
6180            }
6181
6182            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6183            // are envelope_size bytes.
6184            let cur_offset: usize = (8 - 1) * envelope_size;
6185
6186            // Zero reserved fields.
6187            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6188
6189            // Safety:
6190            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6191            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6192            //   envelope_size bytes, there is always sufficient room.
6193            fidl::encoding::encode_in_envelope_optional::<u64, D>(
6194                self.outbound_multicast_bytes
6195                    .as_ref()
6196                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
6197                encoder,
6198                offset + cur_offset,
6199                depth,
6200            )?;
6201
6202            _prev_end_offset = cur_offset + envelope_size;
6203            if 9 > max_ordinal {
6204                return Ok(());
6205            }
6206
6207            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6208            // are envelope_size bytes.
6209            let cur_offset: usize = (9 - 1) * envelope_size;
6210
6211            // Zero reserved fields.
6212            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6213
6214            // Safety:
6215            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6216            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6217            //   envelope_size bytes, there is always sufficient room.
6218            fidl::encoding::encode_in_envelope_optional::<u32, D>(
6219                self.ra_rx.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
6220                encoder,
6221                offset + cur_offset,
6222                depth,
6223            )?;
6224
6225            _prev_end_offset = cur_offset + envelope_size;
6226            if 10 > max_ordinal {
6227                return Ok(());
6228            }
6229
6230            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6231            // are envelope_size bytes.
6232            let cur_offset: usize = (10 - 1) * envelope_size;
6233
6234            // Zero reserved fields.
6235            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6236
6237            // Safety:
6238            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6239            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6240            //   envelope_size bytes, there is always sufficient room.
6241            fidl::encoding::encode_in_envelope_optional::<u32, D>(
6242                self.ra_tx_success.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
6243                encoder,
6244                offset + cur_offset,
6245                depth,
6246            )?;
6247
6248            _prev_end_offset = cur_offset + envelope_size;
6249            if 11 > max_ordinal {
6250                return Ok(());
6251            }
6252
6253            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6254            // are envelope_size bytes.
6255            let cur_offset: usize = (11 - 1) * envelope_size;
6256
6257            // Zero reserved fields.
6258            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6259
6260            // Safety:
6261            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6262            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6263            //   envelope_size bytes, there is always sufficient room.
6264            fidl::encoding::encode_in_envelope_optional::<u32, D>(
6265                self.ra_tx_failure.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
6266                encoder,
6267                offset + cur_offset,
6268                depth,
6269            )?;
6270
6271            _prev_end_offset = cur_offset + envelope_size;
6272            if 12 > max_ordinal {
6273                return Ok(());
6274            }
6275
6276            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6277            // are envelope_size bytes.
6278            let cur_offset: usize = (12 - 1) * envelope_size;
6279
6280            // Zero reserved fields.
6281            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6282
6283            // Safety:
6284            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6285            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6286            //   envelope_size bytes, there is always sufficient room.
6287            fidl::encoding::encode_in_envelope_optional::<u32, D>(
6288                self.rs_rx.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
6289                encoder,
6290                offset + cur_offset,
6291                depth,
6292            )?;
6293
6294            _prev_end_offset = cur_offset + envelope_size;
6295            if 13 > max_ordinal {
6296                return Ok(());
6297            }
6298
6299            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6300            // are envelope_size bytes.
6301            let cur_offset: usize = (13 - 1) * envelope_size;
6302
6303            // Zero reserved fields.
6304            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6305
6306            // Safety:
6307            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6308            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6309            //   envelope_size bytes, there is always sufficient room.
6310            fidl::encoding::encode_in_envelope_optional::<u32, D>(
6311                self.rs_tx_success.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
6312                encoder,
6313                offset + cur_offset,
6314                depth,
6315            )?;
6316
6317            _prev_end_offset = cur_offset + envelope_size;
6318            if 14 > max_ordinal {
6319                return Ok(());
6320            }
6321
6322            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6323            // are envelope_size bytes.
6324            let cur_offset: usize = (14 - 1) * envelope_size;
6325
6326            // Zero reserved fields.
6327            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6328
6329            // Safety:
6330            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6331            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6332            //   envelope_size bytes, there is always sufficient room.
6333            fidl::encoding::encode_in_envelope_optional::<u32, D>(
6334                self.rs_tx_failure.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
6335                encoder,
6336                offset + cur_offset,
6337                depth,
6338            )?;
6339
6340            _prev_end_offset = cur_offset + envelope_size;
6341            if 15 > max_ordinal {
6342                return Ok(());
6343            }
6344
6345            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6346            // are envelope_size bytes.
6347            let cur_offset: usize = (15 - 1) * envelope_size;
6348
6349            // Zero reserved fields.
6350            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6351
6352            // Safety:
6353            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6354            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6355            //   envelope_size bytes, there is always sufficient room.
6356            fidl::encoding::encode_in_envelope_optional::<u64, D>(
6357                self.inbound_internet_packets
6358                    .as_ref()
6359                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
6360                encoder,
6361                offset + cur_offset,
6362                depth,
6363            )?;
6364
6365            _prev_end_offset = cur_offset + envelope_size;
6366            if 16 > max_ordinal {
6367                return Ok(());
6368            }
6369
6370            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6371            // are envelope_size bytes.
6372            let cur_offset: usize = (16 - 1) * envelope_size;
6373
6374            // Zero reserved fields.
6375            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6376
6377            // Safety:
6378            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6379            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6380            //   envelope_size bytes, there is always sufficient room.
6381            fidl::encoding::encode_in_envelope_optional::<u64, D>(
6382                self.inbound_internet_bytes
6383                    .as_ref()
6384                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
6385                encoder,
6386                offset + cur_offset,
6387                depth,
6388            )?;
6389
6390            _prev_end_offset = cur_offset + envelope_size;
6391            if 17 > max_ordinal {
6392                return Ok(());
6393            }
6394
6395            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6396            // are envelope_size bytes.
6397            let cur_offset: usize = (17 - 1) * envelope_size;
6398
6399            // Zero reserved fields.
6400            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6401
6402            // Safety:
6403            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6404            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6405            //   envelope_size bytes, there is always sufficient room.
6406            fidl::encoding::encode_in_envelope_optional::<u64, D>(
6407                self.outbound_internet_packets
6408                    .as_ref()
6409                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
6410                encoder,
6411                offset + cur_offset,
6412                depth,
6413            )?;
6414
6415            _prev_end_offset = cur_offset + envelope_size;
6416            if 18 > max_ordinal {
6417                return Ok(());
6418            }
6419
6420            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6421            // are envelope_size bytes.
6422            let cur_offset: usize = (18 - 1) * envelope_size;
6423
6424            // Zero reserved fields.
6425            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6426
6427            // Safety:
6428            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6429            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6430            //   envelope_size bytes, there is always sufficient room.
6431            fidl::encoding::encode_in_envelope_optional::<u64, D>(
6432                self.outbound_internet_bytes
6433                    .as_ref()
6434                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
6435                encoder,
6436                offset + cur_offset,
6437                depth,
6438            )?;
6439
6440            _prev_end_offset = cur_offset + envelope_size;
6441
6442            Ok(())
6443        }
6444    }
6445
6446    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for BorderRoutingCounters {
6447        #[inline(always)]
6448        fn new_empty() -> Self {
6449            Self::default()
6450        }
6451
6452        unsafe fn decode(
6453            &mut self,
6454            decoder: &mut fidl::encoding::Decoder<'_, D>,
6455            offset: usize,
6456            mut depth: fidl::encoding::Depth,
6457        ) -> fidl::Result<()> {
6458            decoder.debug_check_bounds::<Self>(offset);
6459            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
6460                None => return Err(fidl::Error::NotNullable),
6461                Some(len) => len,
6462            };
6463            // Calling decoder.out_of_line_offset(0) is not allowed.
6464            if len == 0 {
6465                return Ok(());
6466            };
6467            depth.increment()?;
6468            let envelope_size = 8;
6469            let bytes_len = len * envelope_size;
6470            let offset = decoder.out_of_line_offset(bytes_len)?;
6471            // Decode the envelope for each type.
6472            let mut _next_ordinal_to_read = 0;
6473            let mut next_offset = offset;
6474            let end_offset = offset + bytes_len;
6475            _next_ordinal_to_read += 1;
6476            if next_offset >= end_offset {
6477                return Ok(());
6478            }
6479
6480            // Decode unknown envelopes for gaps in ordinals.
6481            while _next_ordinal_to_read < 1 {
6482                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6483                _next_ordinal_to_read += 1;
6484                next_offset += envelope_size;
6485            }
6486
6487            let next_out_of_line = decoder.next_out_of_line();
6488            let handles_before = decoder.remaining_handles();
6489            if let Some((inlined, num_bytes, num_handles)) =
6490                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6491            {
6492                let member_inline_size =
6493                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6494                if inlined != (member_inline_size <= 4) {
6495                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6496                }
6497                let inner_offset;
6498                let mut inner_depth = depth.clone();
6499                if inlined {
6500                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6501                    inner_offset = next_offset;
6502                } else {
6503                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6504                    inner_depth.increment()?;
6505                }
6506                let val_ref =
6507                    self.inbound_unicast_packets.get_or_insert_with(|| fidl::new_empty!(u64, D));
6508                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
6509                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6510                {
6511                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6512                }
6513                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6514                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6515                }
6516            }
6517
6518            next_offset += envelope_size;
6519            _next_ordinal_to_read += 1;
6520            if next_offset >= end_offset {
6521                return Ok(());
6522            }
6523
6524            // Decode unknown envelopes for gaps in ordinals.
6525            while _next_ordinal_to_read < 2 {
6526                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6527                _next_ordinal_to_read += 1;
6528                next_offset += envelope_size;
6529            }
6530
6531            let next_out_of_line = decoder.next_out_of_line();
6532            let handles_before = decoder.remaining_handles();
6533            if let Some((inlined, num_bytes, num_handles)) =
6534                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6535            {
6536                let member_inline_size =
6537                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6538                if inlined != (member_inline_size <= 4) {
6539                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6540                }
6541                let inner_offset;
6542                let mut inner_depth = depth.clone();
6543                if inlined {
6544                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6545                    inner_offset = next_offset;
6546                } else {
6547                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6548                    inner_depth.increment()?;
6549                }
6550                let val_ref =
6551                    self.inbound_unicast_bytes.get_or_insert_with(|| fidl::new_empty!(u64, D));
6552                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
6553                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6554                {
6555                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6556                }
6557                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6558                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6559                }
6560            }
6561
6562            next_offset += envelope_size;
6563            _next_ordinal_to_read += 1;
6564            if next_offset >= end_offset {
6565                return Ok(());
6566            }
6567
6568            // Decode unknown envelopes for gaps in ordinals.
6569            while _next_ordinal_to_read < 3 {
6570                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6571                _next_ordinal_to_read += 1;
6572                next_offset += envelope_size;
6573            }
6574
6575            let next_out_of_line = decoder.next_out_of_line();
6576            let handles_before = decoder.remaining_handles();
6577            if let Some((inlined, num_bytes, num_handles)) =
6578                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6579            {
6580                let member_inline_size =
6581                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6582                if inlined != (member_inline_size <= 4) {
6583                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6584                }
6585                let inner_offset;
6586                let mut inner_depth = depth.clone();
6587                if inlined {
6588                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6589                    inner_offset = next_offset;
6590                } else {
6591                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6592                    inner_depth.increment()?;
6593                }
6594                let val_ref =
6595                    self.inbound_multicast_packets.get_or_insert_with(|| fidl::new_empty!(u64, D));
6596                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
6597                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6598                {
6599                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6600                }
6601                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6602                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6603                }
6604            }
6605
6606            next_offset += envelope_size;
6607            _next_ordinal_to_read += 1;
6608            if next_offset >= end_offset {
6609                return Ok(());
6610            }
6611
6612            // Decode unknown envelopes for gaps in ordinals.
6613            while _next_ordinal_to_read < 4 {
6614                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6615                _next_ordinal_to_read += 1;
6616                next_offset += envelope_size;
6617            }
6618
6619            let next_out_of_line = decoder.next_out_of_line();
6620            let handles_before = decoder.remaining_handles();
6621            if let Some((inlined, num_bytes, num_handles)) =
6622                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6623            {
6624                let member_inline_size =
6625                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6626                if inlined != (member_inline_size <= 4) {
6627                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6628                }
6629                let inner_offset;
6630                let mut inner_depth = depth.clone();
6631                if inlined {
6632                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6633                    inner_offset = next_offset;
6634                } else {
6635                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6636                    inner_depth.increment()?;
6637                }
6638                let val_ref =
6639                    self.inbound_multicast_bytes.get_or_insert_with(|| fidl::new_empty!(u64, D));
6640                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
6641                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6642                {
6643                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6644                }
6645                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6646                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6647                }
6648            }
6649
6650            next_offset += envelope_size;
6651            _next_ordinal_to_read += 1;
6652            if next_offset >= end_offset {
6653                return Ok(());
6654            }
6655
6656            // Decode unknown envelopes for gaps in ordinals.
6657            while _next_ordinal_to_read < 5 {
6658                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6659                _next_ordinal_to_read += 1;
6660                next_offset += envelope_size;
6661            }
6662
6663            let next_out_of_line = decoder.next_out_of_line();
6664            let handles_before = decoder.remaining_handles();
6665            if let Some((inlined, num_bytes, num_handles)) =
6666                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6667            {
6668                let member_inline_size =
6669                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6670                if inlined != (member_inline_size <= 4) {
6671                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6672                }
6673                let inner_offset;
6674                let mut inner_depth = depth.clone();
6675                if inlined {
6676                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6677                    inner_offset = next_offset;
6678                } else {
6679                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6680                    inner_depth.increment()?;
6681                }
6682                let val_ref =
6683                    self.outbound_unicast_packets.get_or_insert_with(|| fidl::new_empty!(u64, D));
6684                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
6685                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6686                {
6687                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6688                }
6689                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6690                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6691                }
6692            }
6693
6694            next_offset += envelope_size;
6695            _next_ordinal_to_read += 1;
6696            if next_offset >= end_offset {
6697                return Ok(());
6698            }
6699
6700            // Decode unknown envelopes for gaps in ordinals.
6701            while _next_ordinal_to_read < 6 {
6702                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6703                _next_ordinal_to_read += 1;
6704                next_offset += envelope_size;
6705            }
6706
6707            let next_out_of_line = decoder.next_out_of_line();
6708            let handles_before = decoder.remaining_handles();
6709            if let Some((inlined, num_bytes, num_handles)) =
6710                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6711            {
6712                let member_inline_size =
6713                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6714                if inlined != (member_inline_size <= 4) {
6715                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6716                }
6717                let inner_offset;
6718                let mut inner_depth = depth.clone();
6719                if inlined {
6720                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6721                    inner_offset = next_offset;
6722                } else {
6723                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6724                    inner_depth.increment()?;
6725                }
6726                let val_ref =
6727                    self.outbound_unicast_bytes.get_or_insert_with(|| fidl::new_empty!(u64, D));
6728                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
6729                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6730                {
6731                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6732                }
6733                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6734                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6735                }
6736            }
6737
6738            next_offset += envelope_size;
6739            _next_ordinal_to_read += 1;
6740            if next_offset >= end_offset {
6741                return Ok(());
6742            }
6743
6744            // Decode unknown envelopes for gaps in ordinals.
6745            while _next_ordinal_to_read < 7 {
6746                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6747                _next_ordinal_to_read += 1;
6748                next_offset += envelope_size;
6749            }
6750
6751            let next_out_of_line = decoder.next_out_of_line();
6752            let handles_before = decoder.remaining_handles();
6753            if let Some((inlined, num_bytes, num_handles)) =
6754                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6755            {
6756                let member_inline_size =
6757                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6758                if inlined != (member_inline_size <= 4) {
6759                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6760                }
6761                let inner_offset;
6762                let mut inner_depth = depth.clone();
6763                if inlined {
6764                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6765                    inner_offset = next_offset;
6766                } else {
6767                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6768                    inner_depth.increment()?;
6769                }
6770                let val_ref =
6771                    self.outbound_multicast_packets.get_or_insert_with(|| fidl::new_empty!(u64, D));
6772                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
6773                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6774                {
6775                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6776                }
6777                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6778                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6779                }
6780            }
6781
6782            next_offset += envelope_size;
6783            _next_ordinal_to_read += 1;
6784            if next_offset >= end_offset {
6785                return Ok(());
6786            }
6787
6788            // Decode unknown envelopes for gaps in ordinals.
6789            while _next_ordinal_to_read < 8 {
6790                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6791                _next_ordinal_to_read += 1;
6792                next_offset += envelope_size;
6793            }
6794
6795            let next_out_of_line = decoder.next_out_of_line();
6796            let handles_before = decoder.remaining_handles();
6797            if let Some((inlined, num_bytes, num_handles)) =
6798                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6799            {
6800                let member_inline_size =
6801                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6802                if inlined != (member_inline_size <= 4) {
6803                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6804                }
6805                let inner_offset;
6806                let mut inner_depth = depth.clone();
6807                if inlined {
6808                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6809                    inner_offset = next_offset;
6810                } else {
6811                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6812                    inner_depth.increment()?;
6813                }
6814                let val_ref =
6815                    self.outbound_multicast_bytes.get_or_insert_with(|| fidl::new_empty!(u64, D));
6816                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
6817                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6818                {
6819                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6820                }
6821                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6822                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6823                }
6824            }
6825
6826            next_offset += envelope_size;
6827            _next_ordinal_to_read += 1;
6828            if next_offset >= end_offset {
6829                return Ok(());
6830            }
6831
6832            // Decode unknown envelopes for gaps in ordinals.
6833            while _next_ordinal_to_read < 9 {
6834                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6835                _next_ordinal_to_read += 1;
6836                next_offset += envelope_size;
6837            }
6838
6839            let next_out_of_line = decoder.next_out_of_line();
6840            let handles_before = decoder.remaining_handles();
6841            if let Some((inlined, num_bytes, num_handles)) =
6842                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6843            {
6844                let member_inline_size =
6845                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6846                if inlined != (member_inline_size <= 4) {
6847                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6848                }
6849                let inner_offset;
6850                let mut inner_depth = depth.clone();
6851                if inlined {
6852                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6853                    inner_offset = next_offset;
6854                } else {
6855                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6856                    inner_depth.increment()?;
6857                }
6858                let val_ref = self.ra_rx.get_or_insert_with(|| fidl::new_empty!(u32, D));
6859                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
6860                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6861                {
6862                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6863                }
6864                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6865                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6866                }
6867            }
6868
6869            next_offset += envelope_size;
6870            _next_ordinal_to_read += 1;
6871            if next_offset >= end_offset {
6872                return Ok(());
6873            }
6874
6875            // Decode unknown envelopes for gaps in ordinals.
6876            while _next_ordinal_to_read < 10 {
6877                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6878                _next_ordinal_to_read += 1;
6879                next_offset += envelope_size;
6880            }
6881
6882            let next_out_of_line = decoder.next_out_of_line();
6883            let handles_before = decoder.remaining_handles();
6884            if let Some((inlined, num_bytes, num_handles)) =
6885                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6886            {
6887                let member_inline_size =
6888                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6889                if inlined != (member_inline_size <= 4) {
6890                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6891                }
6892                let inner_offset;
6893                let mut inner_depth = depth.clone();
6894                if inlined {
6895                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6896                    inner_offset = next_offset;
6897                } else {
6898                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6899                    inner_depth.increment()?;
6900                }
6901                let val_ref = self.ra_tx_success.get_or_insert_with(|| fidl::new_empty!(u32, D));
6902                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
6903                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6904                {
6905                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6906                }
6907                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6908                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6909                }
6910            }
6911
6912            next_offset += envelope_size;
6913            _next_ordinal_to_read += 1;
6914            if next_offset >= end_offset {
6915                return Ok(());
6916            }
6917
6918            // Decode unknown envelopes for gaps in ordinals.
6919            while _next_ordinal_to_read < 11 {
6920                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6921                _next_ordinal_to_read += 1;
6922                next_offset += envelope_size;
6923            }
6924
6925            let next_out_of_line = decoder.next_out_of_line();
6926            let handles_before = decoder.remaining_handles();
6927            if let Some((inlined, num_bytes, num_handles)) =
6928                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6929            {
6930                let member_inline_size =
6931                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6932                if inlined != (member_inline_size <= 4) {
6933                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6934                }
6935                let inner_offset;
6936                let mut inner_depth = depth.clone();
6937                if inlined {
6938                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6939                    inner_offset = next_offset;
6940                } else {
6941                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6942                    inner_depth.increment()?;
6943                }
6944                let val_ref = self.ra_tx_failure.get_or_insert_with(|| fidl::new_empty!(u32, D));
6945                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
6946                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6947                {
6948                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6949                }
6950                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6951                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6952                }
6953            }
6954
6955            next_offset += envelope_size;
6956            _next_ordinal_to_read += 1;
6957            if next_offset >= end_offset {
6958                return Ok(());
6959            }
6960
6961            // Decode unknown envelopes for gaps in ordinals.
6962            while _next_ordinal_to_read < 12 {
6963                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6964                _next_ordinal_to_read += 1;
6965                next_offset += envelope_size;
6966            }
6967
6968            let next_out_of_line = decoder.next_out_of_line();
6969            let handles_before = decoder.remaining_handles();
6970            if let Some((inlined, num_bytes, num_handles)) =
6971                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6972            {
6973                let member_inline_size =
6974                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6975                if inlined != (member_inline_size <= 4) {
6976                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6977                }
6978                let inner_offset;
6979                let mut inner_depth = depth.clone();
6980                if inlined {
6981                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6982                    inner_offset = next_offset;
6983                } else {
6984                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6985                    inner_depth.increment()?;
6986                }
6987                let val_ref = self.rs_rx.get_or_insert_with(|| fidl::new_empty!(u32, D));
6988                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
6989                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6990                {
6991                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6992                }
6993                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6994                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6995                }
6996            }
6997
6998            next_offset += envelope_size;
6999            _next_ordinal_to_read += 1;
7000            if next_offset >= end_offset {
7001                return Ok(());
7002            }
7003
7004            // Decode unknown envelopes for gaps in ordinals.
7005            while _next_ordinal_to_read < 13 {
7006                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7007                _next_ordinal_to_read += 1;
7008                next_offset += envelope_size;
7009            }
7010
7011            let next_out_of_line = decoder.next_out_of_line();
7012            let handles_before = decoder.remaining_handles();
7013            if let Some((inlined, num_bytes, num_handles)) =
7014                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7015            {
7016                let member_inline_size =
7017                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7018                if inlined != (member_inline_size <= 4) {
7019                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7020                }
7021                let inner_offset;
7022                let mut inner_depth = depth.clone();
7023                if inlined {
7024                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7025                    inner_offset = next_offset;
7026                } else {
7027                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7028                    inner_depth.increment()?;
7029                }
7030                let val_ref = self.rs_tx_success.get_or_insert_with(|| fidl::new_empty!(u32, D));
7031                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
7032                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7033                {
7034                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7035                }
7036                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7037                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7038                }
7039            }
7040
7041            next_offset += envelope_size;
7042            _next_ordinal_to_read += 1;
7043            if next_offset >= end_offset {
7044                return Ok(());
7045            }
7046
7047            // Decode unknown envelopes for gaps in ordinals.
7048            while _next_ordinal_to_read < 14 {
7049                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7050                _next_ordinal_to_read += 1;
7051                next_offset += envelope_size;
7052            }
7053
7054            let next_out_of_line = decoder.next_out_of_line();
7055            let handles_before = decoder.remaining_handles();
7056            if let Some((inlined, num_bytes, num_handles)) =
7057                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7058            {
7059                let member_inline_size =
7060                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7061                if inlined != (member_inline_size <= 4) {
7062                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7063                }
7064                let inner_offset;
7065                let mut inner_depth = depth.clone();
7066                if inlined {
7067                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7068                    inner_offset = next_offset;
7069                } else {
7070                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7071                    inner_depth.increment()?;
7072                }
7073                let val_ref = self.rs_tx_failure.get_or_insert_with(|| fidl::new_empty!(u32, D));
7074                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
7075                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7076                {
7077                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7078                }
7079                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7080                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7081                }
7082            }
7083
7084            next_offset += envelope_size;
7085            _next_ordinal_to_read += 1;
7086            if next_offset >= end_offset {
7087                return Ok(());
7088            }
7089
7090            // Decode unknown envelopes for gaps in ordinals.
7091            while _next_ordinal_to_read < 15 {
7092                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7093                _next_ordinal_to_read += 1;
7094                next_offset += envelope_size;
7095            }
7096
7097            let next_out_of_line = decoder.next_out_of_line();
7098            let handles_before = decoder.remaining_handles();
7099            if let Some((inlined, num_bytes, num_handles)) =
7100                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7101            {
7102                let member_inline_size =
7103                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7104                if inlined != (member_inline_size <= 4) {
7105                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7106                }
7107                let inner_offset;
7108                let mut inner_depth = depth.clone();
7109                if inlined {
7110                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7111                    inner_offset = next_offset;
7112                } else {
7113                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7114                    inner_depth.increment()?;
7115                }
7116                let val_ref =
7117                    self.inbound_internet_packets.get_or_insert_with(|| fidl::new_empty!(u64, D));
7118                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
7119                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7120                {
7121                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7122                }
7123                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7124                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7125                }
7126            }
7127
7128            next_offset += envelope_size;
7129            _next_ordinal_to_read += 1;
7130            if next_offset >= end_offset {
7131                return Ok(());
7132            }
7133
7134            // Decode unknown envelopes for gaps in ordinals.
7135            while _next_ordinal_to_read < 16 {
7136                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7137                _next_ordinal_to_read += 1;
7138                next_offset += envelope_size;
7139            }
7140
7141            let next_out_of_line = decoder.next_out_of_line();
7142            let handles_before = decoder.remaining_handles();
7143            if let Some((inlined, num_bytes, num_handles)) =
7144                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7145            {
7146                let member_inline_size =
7147                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7148                if inlined != (member_inline_size <= 4) {
7149                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7150                }
7151                let inner_offset;
7152                let mut inner_depth = depth.clone();
7153                if inlined {
7154                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7155                    inner_offset = next_offset;
7156                } else {
7157                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7158                    inner_depth.increment()?;
7159                }
7160                let val_ref =
7161                    self.inbound_internet_bytes.get_or_insert_with(|| fidl::new_empty!(u64, D));
7162                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
7163                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7164                {
7165                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7166                }
7167                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7168                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7169                }
7170            }
7171
7172            next_offset += envelope_size;
7173            _next_ordinal_to_read += 1;
7174            if next_offset >= end_offset {
7175                return Ok(());
7176            }
7177
7178            // Decode unknown envelopes for gaps in ordinals.
7179            while _next_ordinal_to_read < 17 {
7180                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7181                _next_ordinal_to_read += 1;
7182                next_offset += envelope_size;
7183            }
7184
7185            let next_out_of_line = decoder.next_out_of_line();
7186            let handles_before = decoder.remaining_handles();
7187            if let Some((inlined, num_bytes, num_handles)) =
7188                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7189            {
7190                let member_inline_size =
7191                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7192                if inlined != (member_inline_size <= 4) {
7193                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7194                }
7195                let inner_offset;
7196                let mut inner_depth = depth.clone();
7197                if inlined {
7198                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7199                    inner_offset = next_offset;
7200                } else {
7201                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7202                    inner_depth.increment()?;
7203                }
7204                let val_ref =
7205                    self.outbound_internet_packets.get_or_insert_with(|| fidl::new_empty!(u64, D));
7206                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
7207                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7208                {
7209                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7210                }
7211                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7212                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7213                }
7214            }
7215
7216            next_offset += envelope_size;
7217            _next_ordinal_to_read += 1;
7218            if next_offset >= end_offset {
7219                return Ok(());
7220            }
7221
7222            // Decode unknown envelopes for gaps in ordinals.
7223            while _next_ordinal_to_read < 18 {
7224                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7225                _next_ordinal_to_read += 1;
7226                next_offset += envelope_size;
7227            }
7228
7229            let next_out_of_line = decoder.next_out_of_line();
7230            let handles_before = decoder.remaining_handles();
7231            if let Some((inlined, num_bytes, num_handles)) =
7232                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7233            {
7234                let member_inline_size =
7235                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7236                if inlined != (member_inline_size <= 4) {
7237                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7238                }
7239                let inner_offset;
7240                let mut inner_depth = depth.clone();
7241                if inlined {
7242                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7243                    inner_offset = next_offset;
7244                } else {
7245                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7246                    inner_depth.increment()?;
7247                }
7248                let val_ref =
7249                    self.outbound_internet_bytes.get_or_insert_with(|| fidl::new_empty!(u64, D));
7250                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
7251                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7252                {
7253                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7254                }
7255                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7256                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7257                }
7258            }
7259
7260            next_offset += envelope_size;
7261
7262            // Decode the remaining unknown envelopes.
7263            while next_offset < end_offset {
7264                _next_ordinal_to_read += 1;
7265                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7266                next_offset += envelope_size;
7267            }
7268
7269            Ok(())
7270        }
7271    }
7272
7273    impl BorderRoutingNat64State {
7274        #[inline(always)]
7275        fn max_ordinal_present(&self) -> u64 {
7276            if let Some(_) = self.translator_state {
7277                return 2;
7278            }
7279            if let Some(_) = self.prefix_manager_state {
7280                return 1;
7281            }
7282            0
7283        }
7284    }
7285
7286    impl fidl::encoding::ValueTypeMarker for BorderRoutingNat64State {
7287        type Borrowed<'a> = &'a Self;
7288        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
7289            value
7290        }
7291    }
7292
7293    unsafe impl fidl::encoding::TypeMarker for BorderRoutingNat64State {
7294        type Owned = Self;
7295
7296        #[inline(always)]
7297        fn inline_align(_context: fidl::encoding::Context) -> usize {
7298            8
7299        }
7300
7301        #[inline(always)]
7302        fn inline_size(_context: fidl::encoding::Context) -> usize {
7303            16
7304        }
7305    }
7306
7307    unsafe impl<D: fidl::encoding::ResourceDialect>
7308        fidl::encoding::Encode<BorderRoutingNat64State, D> for &BorderRoutingNat64State
7309    {
7310        unsafe fn encode(
7311            self,
7312            encoder: &mut fidl::encoding::Encoder<'_, D>,
7313            offset: usize,
7314            mut depth: fidl::encoding::Depth,
7315        ) -> fidl::Result<()> {
7316            encoder.debug_check_bounds::<BorderRoutingNat64State>(offset);
7317            // Vector header
7318            let max_ordinal: u64 = self.max_ordinal_present();
7319            encoder.write_num(max_ordinal, offset);
7320            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
7321            // Calling encoder.out_of_line_offset(0) is not allowed.
7322            if max_ordinal == 0 {
7323                return Ok(());
7324            }
7325            depth.increment()?;
7326            let envelope_size = 8;
7327            let bytes_len = max_ordinal as usize * envelope_size;
7328            #[allow(unused_variables)]
7329            let offset = encoder.out_of_line_offset(bytes_len);
7330            let mut _prev_end_offset: usize = 0;
7331            if 1 > max_ordinal {
7332                return Ok(());
7333            }
7334
7335            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7336            // are envelope_size bytes.
7337            let cur_offset: usize = (1 - 1) * envelope_size;
7338
7339            // Zero reserved fields.
7340            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7341
7342            // Safety:
7343            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7344            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7345            //   envelope_size bytes, there is always sufficient room.
7346            fidl::encoding::encode_in_envelope_optional::<Nat64State, D>(
7347                self.prefix_manager_state
7348                    .as_ref()
7349                    .map(<Nat64State as fidl::encoding::ValueTypeMarker>::borrow),
7350                encoder,
7351                offset + cur_offset,
7352                depth,
7353            )?;
7354
7355            _prev_end_offset = cur_offset + envelope_size;
7356            if 2 > max_ordinal {
7357                return Ok(());
7358            }
7359
7360            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7361            // are envelope_size bytes.
7362            let cur_offset: usize = (2 - 1) * envelope_size;
7363
7364            // Zero reserved fields.
7365            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7366
7367            // Safety:
7368            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7369            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7370            //   envelope_size bytes, there is always sufficient room.
7371            fidl::encoding::encode_in_envelope_optional::<Nat64State, D>(
7372                self.translator_state
7373                    .as_ref()
7374                    .map(<Nat64State as fidl::encoding::ValueTypeMarker>::borrow),
7375                encoder,
7376                offset + cur_offset,
7377                depth,
7378            )?;
7379
7380            _prev_end_offset = cur_offset + envelope_size;
7381
7382            Ok(())
7383        }
7384    }
7385
7386    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
7387        for BorderRoutingNat64State
7388    {
7389        #[inline(always)]
7390        fn new_empty() -> Self {
7391            Self::default()
7392        }
7393
7394        unsafe fn decode(
7395            &mut self,
7396            decoder: &mut fidl::encoding::Decoder<'_, D>,
7397            offset: usize,
7398            mut depth: fidl::encoding::Depth,
7399        ) -> fidl::Result<()> {
7400            decoder.debug_check_bounds::<Self>(offset);
7401            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
7402                None => return Err(fidl::Error::NotNullable),
7403                Some(len) => len,
7404            };
7405            // Calling decoder.out_of_line_offset(0) is not allowed.
7406            if len == 0 {
7407                return Ok(());
7408            };
7409            depth.increment()?;
7410            let envelope_size = 8;
7411            let bytes_len = len * envelope_size;
7412            let offset = decoder.out_of_line_offset(bytes_len)?;
7413            // Decode the envelope for each type.
7414            let mut _next_ordinal_to_read = 0;
7415            let mut next_offset = offset;
7416            let end_offset = offset + bytes_len;
7417            _next_ordinal_to_read += 1;
7418            if next_offset >= end_offset {
7419                return Ok(());
7420            }
7421
7422            // Decode unknown envelopes for gaps in ordinals.
7423            while _next_ordinal_to_read < 1 {
7424                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7425                _next_ordinal_to_read += 1;
7426                next_offset += envelope_size;
7427            }
7428
7429            let next_out_of_line = decoder.next_out_of_line();
7430            let handles_before = decoder.remaining_handles();
7431            if let Some((inlined, num_bytes, num_handles)) =
7432                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7433            {
7434                let member_inline_size =
7435                    <Nat64State as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7436                if inlined != (member_inline_size <= 4) {
7437                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7438                }
7439                let inner_offset;
7440                let mut inner_depth = depth.clone();
7441                if inlined {
7442                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7443                    inner_offset = next_offset;
7444                } else {
7445                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7446                    inner_depth.increment()?;
7447                }
7448                let val_ref = self
7449                    .prefix_manager_state
7450                    .get_or_insert_with(|| fidl::new_empty!(Nat64State, D));
7451                fidl::decode!(Nat64State, D, val_ref, decoder, inner_offset, inner_depth)?;
7452                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7453                {
7454                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7455                }
7456                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7457                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7458                }
7459            }
7460
7461            next_offset += envelope_size;
7462            _next_ordinal_to_read += 1;
7463            if next_offset >= end_offset {
7464                return Ok(());
7465            }
7466
7467            // Decode unknown envelopes for gaps in ordinals.
7468            while _next_ordinal_to_read < 2 {
7469                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7470                _next_ordinal_to_read += 1;
7471                next_offset += envelope_size;
7472            }
7473
7474            let next_out_of_line = decoder.next_out_of_line();
7475            let handles_before = decoder.remaining_handles();
7476            if let Some((inlined, num_bytes, num_handles)) =
7477                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7478            {
7479                let member_inline_size =
7480                    <Nat64State as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7481                if inlined != (member_inline_size <= 4) {
7482                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7483                }
7484                let inner_offset;
7485                let mut inner_depth = depth.clone();
7486                if inlined {
7487                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7488                    inner_offset = next_offset;
7489                } else {
7490                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7491                    inner_depth.increment()?;
7492                }
7493                let val_ref =
7494                    self.translator_state.get_or_insert_with(|| fidl::new_empty!(Nat64State, D));
7495                fidl::decode!(Nat64State, D, val_ref, decoder, inner_offset, inner_depth)?;
7496                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7497                {
7498                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7499                }
7500                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7501                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7502                }
7503            }
7504
7505            next_offset += envelope_size;
7506
7507            // Decode the remaining unknown envelopes.
7508            while next_offset < end_offset {
7509                _next_ordinal_to_read += 1;
7510                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7511                next_offset += envelope_size;
7512            }
7513
7514            Ok(())
7515        }
7516    }
7517
7518    impl BorderRoutingPeer {
7519        #[inline(always)]
7520        fn max_ordinal_present(&self) -> u64 {
7521            if let Some(_) = self.age {
7522                return 2;
7523            }
7524            if let Some(_) = self.thread_rloc {
7525                return 1;
7526            }
7527            0
7528        }
7529    }
7530
7531    impl fidl::encoding::ValueTypeMarker for BorderRoutingPeer {
7532        type Borrowed<'a> = &'a Self;
7533        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
7534            value
7535        }
7536    }
7537
7538    unsafe impl fidl::encoding::TypeMarker for BorderRoutingPeer {
7539        type Owned = Self;
7540
7541        #[inline(always)]
7542        fn inline_align(_context: fidl::encoding::Context) -> usize {
7543            8
7544        }
7545
7546        #[inline(always)]
7547        fn inline_size(_context: fidl::encoding::Context) -> usize {
7548            16
7549        }
7550    }
7551
7552    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<BorderRoutingPeer, D>
7553        for &BorderRoutingPeer
7554    {
7555        unsafe fn encode(
7556            self,
7557            encoder: &mut fidl::encoding::Encoder<'_, D>,
7558            offset: usize,
7559            mut depth: fidl::encoding::Depth,
7560        ) -> fidl::Result<()> {
7561            encoder.debug_check_bounds::<BorderRoutingPeer>(offset);
7562            // Vector header
7563            let max_ordinal: u64 = self.max_ordinal_present();
7564            encoder.write_num(max_ordinal, offset);
7565            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
7566            // Calling encoder.out_of_line_offset(0) is not allowed.
7567            if max_ordinal == 0 {
7568                return Ok(());
7569            }
7570            depth.increment()?;
7571            let envelope_size = 8;
7572            let bytes_len = max_ordinal as usize * envelope_size;
7573            #[allow(unused_variables)]
7574            let offset = encoder.out_of_line_offset(bytes_len);
7575            let mut _prev_end_offset: usize = 0;
7576            if 1 > max_ordinal {
7577                return Ok(());
7578            }
7579
7580            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7581            // are envelope_size bytes.
7582            let cur_offset: usize = (1 - 1) * envelope_size;
7583
7584            // Zero reserved fields.
7585            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7586
7587            // Safety:
7588            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7589            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7590            //   envelope_size bytes, there is always sufficient room.
7591            fidl::encoding::encode_in_envelope_optional::<u16, D>(
7592                self.thread_rloc.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
7593                encoder,
7594                offset + cur_offset,
7595                depth,
7596            )?;
7597
7598            _prev_end_offset = cur_offset + envelope_size;
7599            if 2 > max_ordinal {
7600                return Ok(());
7601            }
7602
7603            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7604            // are envelope_size bytes.
7605            let cur_offset: usize = (2 - 1) * envelope_size;
7606
7607            // Zero reserved fields.
7608            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7609
7610            // Safety:
7611            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7612            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7613            //   envelope_size bytes, there is always sufficient room.
7614            fidl::encoding::encode_in_envelope_optional::<i64, D>(
7615                self.age.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
7616                encoder,
7617                offset + cur_offset,
7618                depth,
7619            )?;
7620
7621            _prev_end_offset = cur_offset + envelope_size;
7622
7623            Ok(())
7624        }
7625    }
7626
7627    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for BorderRoutingPeer {
7628        #[inline(always)]
7629        fn new_empty() -> Self {
7630            Self::default()
7631        }
7632
7633        unsafe fn decode(
7634            &mut self,
7635            decoder: &mut fidl::encoding::Decoder<'_, D>,
7636            offset: usize,
7637            mut depth: fidl::encoding::Depth,
7638        ) -> fidl::Result<()> {
7639            decoder.debug_check_bounds::<Self>(offset);
7640            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
7641                None => return Err(fidl::Error::NotNullable),
7642                Some(len) => len,
7643            };
7644            // Calling decoder.out_of_line_offset(0) is not allowed.
7645            if len == 0 {
7646                return Ok(());
7647            };
7648            depth.increment()?;
7649            let envelope_size = 8;
7650            let bytes_len = len * envelope_size;
7651            let offset = decoder.out_of_line_offset(bytes_len)?;
7652            // Decode the envelope for each type.
7653            let mut _next_ordinal_to_read = 0;
7654            let mut next_offset = offset;
7655            let end_offset = offset + bytes_len;
7656            _next_ordinal_to_read += 1;
7657            if next_offset >= end_offset {
7658                return Ok(());
7659            }
7660
7661            // Decode unknown envelopes for gaps in ordinals.
7662            while _next_ordinal_to_read < 1 {
7663                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7664                _next_ordinal_to_read += 1;
7665                next_offset += envelope_size;
7666            }
7667
7668            let next_out_of_line = decoder.next_out_of_line();
7669            let handles_before = decoder.remaining_handles();
7670            if let Some((inlined, num_bytes, num_handles)) =
7671                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7672            {
7673                let member_inline_size =
7674                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7675                if inlined != (member_inline_size <= 4) {
7676                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7677                }
7678                let inner_offset;
7679                let mut inner_depth = depth.clone();
7680                if inlined {
7681                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7682                    inner_offset = next_offset;
7683                } else {
7684                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7685                    inner_depth.increment()?;
7686                }
7687                let val_ref = self.thread_rloc.get_or_insert_with(|| fidl::new_empty!(u16, D));
7688                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
7689                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7690                {
7691                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7692                }
7693                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7694                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7695                }
7696            }
7697
7698            next_offset += envelope_size;
7699            _next_ordinal_to_read += 1;
7700            if next_offset >= end_offset {
7701                return Ok(());
7702            }
7703
7704            // Decode unknown envelopes for gaps in ordinals.
7705            while _next_ordinal_to_read < 2 {
7706                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7707                _next_ordinal_to_read += 1;
7708                next_offset += envelope_size;
7709            }
7710
7711            let next_out_of_line = decoder.next_out_of_line();
7712            let handles_before = decoder.remaining_handles();
7713            if let Some((inlined, num_bytes, num_handles)) =
7714                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7715            {
7716                let member_inline_size =
7717                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7718                if inlined != (member_inline_size <= 4) {
7719                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7720                }
7721                let inner_offset;
7722                let mut inner_depth = depth.clone();
7723                if inlined {
7724                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7725                    inner_offset = next_offset;
7726                } else {
7727                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7728                    inner_depth.increment()?;
7729                }
7730                let val_ref = self.age.get_or_insert_with(|| fidl::new_empty!(i64, D));
7731                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
7732                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7733                {
7734                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7735                }
7736                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7737                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7738                }
7739            }
7740
7741            next_offset += envelope_size;
7742
7743            // Decode the remaining unknown envelopes.
7744            while next_offset < end_offset {
7745                _next_ordinal_to_read += 1;
7746                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7747                next_offset += envelope_size;
7748            }
7749
7750            Ok(())
7751        }
7752    }
7753
7754    impl BorderRoutingPrefixTable {
7755        #[inline(always)]
7756        fn max_ordinal_present(&self) -> u64 {
7757            if let Some(_) = self.preferred_lifetime {
7758                return 7;
7759            }
7760            if let Some(_) = self.preference {
7761                return 6;
7762            }
7763            if let Some(_) = self.valid_lifetime {
7764                return 5;
7765            }
7766            if let Some(_) = self.duration_since_last_update {
7767                return 4;
7768            }
7769            if let Some(_) = self.is_on_link {
7770                return 3;
7771            }
7772            if let Some(_) = self.prefix {
7773                return 2;
7774            }
7775            if let Some(_) = self.router {
7776                return 1;
7777            }
7778            0
7779        }
7780    }
7781
7782    impl fidl::encoding::ValueTypeMarker for BorderRoutingPrefixTable {
7783        type Borrowed<'a> = &'a Self;
7784        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
7785            value
7786        }
7787    }
7788
7789    unsafe impl fidl::encoding::TypeMarker for BorderRoutingPrefixTable {
7790        type Owned = Self;
7791
7792        #[inline(always)]
7793        fn inline_align(_context: fidl::encoding::Context) -> usize {
7794            8
7795        }
7796
7797        #[inline(always)]
7798        fn inline_size(_context: fidl::encoding::Context) -> usize {
7799            16
7800        }
7801    }
7802
7803    unsafe impl<D: fidl::encoding::ResourceDialect>
7804        fidl::encoding::Encode<BorderRoutingPrefixTable, D> for &BorderRoutingPrefixTable
7805    {
7806        unsafe fn encode(
7807            self,
7808            encoder: &mut fidl::encoding::Encoder<'_, D>,
7809            offset: usize,
7810            mut depth: fidl::encoding::Depth,
7811        ) -> fidl::Result<()> {
7812            encoder.debug_check_bounds::<BorderRoutingPrefixTable>(offset);
7813            // Vector header
7814            let max_ordinal: u64 = self.max_ordinal_present();
7815            encoder.write_num(max_ordinal, offset);
7816            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
7817            // Calling encoder.out_of_line_offset(0) is not allowed.
7818            if max_ordinal == 0 {
7819                return Ok(());
7820            }
7821            depth.increment()?;
7822            let envelope_size = 8;
7823            let bytes_len = max_ordinal as usize * envelope_size;
7824            #[allow(unused_variables)]
7825            let offset = encoder.out_of_line_offset(bytes_len);
7826            let mut _prev_end_offset: usize = 0;
7827            if 1 > max_ordinal {
7828                return Ok(());
7829            }
7830
7831            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7832            // are envelope_size bytes.
7833            let cur_offset: usize = (1 - 1) * envelope_size;
7834
7835            // Zero reserved fields.
7836            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7837
7838            // Safety:
7839            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7840            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7841            //   envelope_size bytes, there is always sufficient room.
7842            fidl::encoding::encode_in_envelope_optional::<BorderRoutingRouter, D>(
7843                self.router
7844                    .as_ref()
7845                    .map(<BorderRoutingRouter as fidl::encoding::ValueTypeMarker>::borrow),
7846                encoder,
7847                offset + cur_offset,
7848                depth,
7849            )?;
7850
7851            _prev_end_offset = cur_offset + envelope_size;
7852            if 2 > max_ordinal {
7853                return Ok(());
7854            }
7855
7856            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7857            // are envelope_size bytes.
7858            let cur_offset: usize = (2 - 1) * envelope_size;
7859
7860            // Zero reserved fields.
7861            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7862
7863            // Safety:
7864            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7865            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7866            //   envelope_size bytes, there is always sufficient room.
7867            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<64>, D>(
7868                self.prefix.as_ref().map(
7869                    <fidl::encoding::BoundedString<64> as fidl::encoding::ValueTypeMarker>::borrow,
7870                ),
7871                encoder,
7872                offset + cur_offset,
7873                depth,
7874            )?;
7875
7876            _prev_end_offset = cur_offset + envelope_size;
7877            if 3 > max_ordinal {
7878                return Ok(());
7879            }
7880
7881            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7882            // are envelope_size bytes.
7883            let cur_offset: usize = (3 - 1) * envelope_size;
7884
7885            // Zero reserved fields.
7886            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7887
7888            // Safety:
7889            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7890            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7891            //   envelope_size bytes, there is always sufficient room.
7892            fidl::encoding::encode_in_envelope_optional::<bool, D>(
7893                self.is_on_link.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
7894                encoder,
7895                offset + cur_offset,
7896                depth,
7897            )?;
7898
7899            _prev_end_offset = cur_offset + envelope_size;
7900            if 4 > max_ordinal {
7901                return Ok(());
7902            }
7903
7904            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7905            // are envelope_size bytes.
7906            let cur_offset: usize = (4 - 1) * envelope_size;
7907
7908            // Zero reserved fields.
7909            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7910
7911            // Safety:
7912            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7913            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7914            //   envelope_size bytes, there is always sufficient room.
7915            fidl::encoding::encode_in_envelope_optional::<i64, D>(
7916                self.duration_since_last_update
7917                    .as_ref()
7918                    .map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
7919                encoder,
7920                offset + cur_offset,
7921                depth,
7922            )?;
7923
7924            _prev_end_offset = cur_offset + envelope_size;
7925            if 5 > max_ordinal {
7926                return Ok(());
7927            }
7928
7929            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7930            // are envelope_size bytes.
7931            let cur_offset: usize = (5 - 1) * envelope_size;
7932
7933            // Zero reserved fields.
7934            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7935
7936            // Safety:
7937            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7938            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7939            //   envelope_size bytes, there is always sufficient room.
7940            fidl::encoding::encode_in_envelope_optional::<u32, D>(
7941                self.valid_lifetime.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
7942                encoder,
7943                offset + cur_offset,
7944                depth,
7945            )?;
7946
7947            _prev_end_offset = cur_offset + envelope_size;
7948            if 6 > max_ordinal {
7949                return Ok(());
7950            }
7951
7952            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7953            // are envelope_size bytes.
7954            let cur_offset: usize = (6 - 1) * envelope_size;
7955
7956            // Zero reserved fields.
7957            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7958
7959            // Safety:
7960            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7961            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7962            //   envelope_size bytes, there is always sufficient room.
7963            fidl::encoding::encode_in_envelope_optional::<i8, D>(
7964                self.preference.as_ref().map(<i8 as fidl::encoding::ValueTypeMarker>::borrow),
7965                encoder,
7966                offset + cur_offset,
7967                depth,
7968            )?;
7969
7970            _prev_end_offset = cur_offset + envelope_size;
7971            if 7 > max_ordinal {
7972                return Ok(());
7973            }
7974
7975            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7976            // are envelope_size bytes.
7977            let cur_offset: usize = (7 - 1) * envelope_size;
7978
7979            // Zero reserved fields.
7980            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7981
7982            // Safety:
7983            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7984            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7985            //   envelope_size bytes, there is always sufficient room.
7986            fidl::encoding::encode_in_envelope_optional::<u32, D>(
7987                self.preferred_lifetime
7988                    .as_ref()
7989                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
7990                encoder,
7991                offset + cur_offset,
7992                depth,
7993            )?;
7994
7995            _prev_end_offset = cur_offset + envelope_size;
7996
7997            Ok(())
7998        }
7999    }
8000
8001    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
8002        for BorderRoutingPrefixTable
8003    {
8004        #[inline(always)]
8005        fn new_empty() -> Self {
8006            Self::default()
8007        }
8008
8009        unsafe fn decode(
8010            &mut self,
8011            decoder: &mut fidl::encoding::Decoder<'_, D>,
8012            offset: usize,
8013            mut depth: fidl::encoding::Depth,
8014        ) -> fidl::Result<()> {
8015            decoder.debug_check_bounds::<Self>(offset);
8016            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
8017                None => return Err(fidl::Error::NotNullable),
8018                Some(len) => len,
8019            };
8020            // Calling decoder.out_of_line_offset(0) is not allowed.
8021            if len == 0 {
8022                return Ok(());
8023            };
8024            depth.increment()?;
8025            let envelope_size = 8;
8026            let bytes_len = len * envelope_size;
8027            let offset = decoder.out_of_line_offset(bytes_len)?;
8028            // Decode the envelope for each type.
8029            let mut _next_ordinal_to_read = 0;
8030            let mut next_offset = offset;
8031            let end_offset = offset + bytes_len;
8032            _next_ordinal_to_read += 1;
8033            if next_offset >= end_offset {
8034                return Ok(());
8035            }
8036
8037            // Decode unknown envelopes for gaps in ordinals.
8038            while _next_ordinal_to_read < 1 {
8039                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8040                _next_ordinal_to_read += 1;
8041                next_offset += envelope_size;
8042            }
8043
8044            let next_out_of_line = decoder.next_out_of_line();
8045            let handles_before = decoder.remaining_handles();
8046            if let Some((inlined, num_bytes, num_handles)) =
8047                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8048            {
8049                let member_inline_size =
8050                    <BorderRoutingRouter as fidl::encoding::TypeMarker>::inline_size(
8051                        decoder.context,
8052                    );
8053                if inlined != (member_inline_size <= 4) {
8054                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8055                }
8056                let inner_offset;
8057                let mut inner_depth = depth.clone();
8058                if inlined {
8059                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8060                    inner_offset = next_offset;
8061                } else {
8062                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8063                    inner_depth.increment()?;
8064                }
8065                let val_ref =
8066                    self.router.get_or_insert_with(|| fidl::new_empty!(BorderRoutingRouter, D));
8067                fidl::decode!(BorderRoutingRouter, D, val_ref, decoder, inner_offset, inner_depth)?;
8068                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8069                {
8070                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8071                }
8072                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8073                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8074                }
8075            }
8076
8077            next_offset += envelope_size;
8078            _next_ordinal_to_read += 1;
8079            if next_offset >= end_offset {
8080                return Ok(());
8081            }
8082
8083            // Decode unknown envelopes for gaps in ordinals.
8084            while _next_ordinal_to_read < 2 {
8085                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8086                _next_ordinal_to_read += 1;
8087                next_offset += envelope_size;
8088            }
8089
8090            let next_out_of_line = decoder.next_out_of_line();
8091            let handles_before = decoder.remaining_handles();
8092            if let Some((inlined, num_bytes, num_handles)) =
8093                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8094            {
8095                let member_inline_size =
8096                    <fidl::encoding::BoundedString<64> as fidl::encoding::TypeMarker>::inline_size(
8097                        decoder.context,
8098                    );
8099                if inlined != (member_inline_size <= 4) {
8100                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8101                }
8102                let inner_offset;
8103                let mut inner_depth = depth.clone();
8104                if inlined {
8105                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8106                    inner_offset = next_offset;
8107                } else {
8108                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8109                    inner_depth.increment()?;
8110                }
8111                let val_ref = self
8112                    .prefix
8113                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<64>, D));
8114                fidl::decode!(
8115                    fidl::encoding::BoundedString<64>,
8116                    D,
8117                    val_ref,
8118                    decoder,
8119                    inner_offset,
8120                    inner_depth
8121                )?;
8122                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8123                {
8124                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8125                }
8126                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8127                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8128                }
8129            }
8130
8131            next_offset += envelope_size;
8132            _next_ordinal_to_read += 1;
8133            if next_offset >= end_offset {
8134                return Ok(());
8135            }
8136
8137            // Decode unknown envelopes for gaps in ordinals.
8138            while _next_ordinal_to_read < 3 {
8139                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8140                _next_ordinal_to_read += 1;
8141                next_offset += envelope_size;
8142            }
8143
8144            let next_out_of_line = decoder.next_out_of_line();
8145            let handles_before = decoder.remaining_handles();
8146            if let Some((inlined, num_bytes, num_handles)) =
8147                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8148            {
8149                let member_inline_size =
8150                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
8151                if inlined != (member_inline_size <= 4) {
8152                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8153                }
8154                let inner_offset;
8155                let mut inner_depth = depth.clone();
8156                if inlined {
8157                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8158                    inner_offset = next_offset;
8159                } else {
8160                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8161                    inner_depth.increment()?;
8162                }
8163                let val_ref = self.is_on_link.get_or_insert_with(|| fidl::new_empty!(bool, D));
8164                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
8165                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8166                {
8167                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8168                }
8169                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8170                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8171                }
8172            }
8173
8174            next_offset += envelope_size;
8175            _next_ordinal_to_read += 1;
8176            if next_offset >= end_offset {
8177                return Ok(());
8178            }
8179
8180            // Decode unknown envelopes for gaps in ordinals.
8181            while _next_ordinal_to_read < 4 {
8182                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8183                _next_ordinal_to_read += 1;
8184                next_offset += envelope_size;
8185            }
8186
8187            let next_out_of_line = decoder.next_out_of_line();
8188            let handles_before = decoder.remaining_handles();
8189            if let Some((inlined, num_bytes, num_handles)) =
8190                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8191            {
8192                let member_inline_size =
8193                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
8194                if inlined != (member_inline_size <= 4) {
8195                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8196                }
8197                let inner_offset;
8198                let mut inner_depth = depth.clone();
8199                if inlined {
8200                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8201                    inner_offset = next_offset;
8202                } else {
8203                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8204                    inner_depth.increment()?;
8205                }
8206                let val_ref =
8207                    self.duration_since_last_update.get_or_insert_with(|| fidl::new_empty!(i64, D));
8208                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
8209                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8210                {
8211                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8212                }
8213                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8214                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8215                }
8216            }
8217
8218            next_offset += envelope_size;
8219            _next_ordinal_to_read += 1;
8220            if next_offset >= end_offset {
8221                return Ok(());
8222            }
8223
8224            // Decode unknown envelopes for gaps in ordinals.
8225            while _next_ordinal_to_read < 5 {
8226                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8227                _next_ordinal_to_read += 1;
8228                next_offset += envelope_size;
8229            }
8230
8231            let next_out_of_line = decoder.next_out_of_line();
8232            let handles_before = decoder.remaining_handles();
8233            if let Some((inlined, num_bytes, num_handles)) =
8234                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8235            {
8236                let member_inline_size =
8237                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
8238                if inlined != (member_inline_size <= 4) {
8239                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8240                }
8241                let inner_offset;
8242                let mut inner_depth = depth.clone();
8243                if inlined {
8244                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8245                    inner_offset = next_offset;
8246                } else {
8247                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8248                    inner_depth.increment()?;
8249                }
8250                let val_ref = self.valid_lifetime.get_or_insert_with(|| fidl::new_empty!(u32, D));
8251                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
8252                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8253                {
8254                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8255                }
8256                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8257                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8258                }
8259            }
8260
8261            next_offset += envelope_size;
8262            _next_ordinal_to_read += 1;
8263            if next_offset >= end_offset {
8264                return Ok(());
8265            }
8266
8267            // Decode unknown envelopes for gaps in ordinals.
8268            while _next_ordinal_to_read < 6 {
8269                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8270                _next_ordinal_to_read += 1;
8271                next_offset += envelope_size;
8272            }
8273
8274            let next_out_of_line = decoder.next_out_of_line();
8275            let handles_before = decoder.remaining_handles();
8276            if let Some((inlined, num_bytes, num_handles)) =
8277                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8278            {
8279                let member_inline_size =
8280                    <i8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
8281                if inlined != (member_inline_size <= 4) {
8282                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8283                }
8284                let inner_offset;
8285                let mut inner_depth = depth.clone();
8286                if inlined {
8287                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8288                    inner_offset = next_offset;
8289                } else {
8290                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8291                    inner_depth.increment()?;
8292                }
8293                let val_ref = self.preference.get_or_insert_with(|| fidl::new_empty!(i8, D));
8294                fidl::decode!(i8, D, val_ref, decoder, inner_offset, inner_depth)?;
8295                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8296                {
8297                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8298                }
8299                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8300                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8301                }
8302            }
8303
8304            next_offset += envelope_size;
8305            _next_ordinal_to_read += 1;
8306            if next_offset >= end_offset {
8307                return Ok(());
8308            }
8309
8310            // Decode unknown envelopes for gaps in ordinals.
8311            while _next_ordinal_to_read < 7 {
8312                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8313                _next_ordinal_to_read += 1;
8314                next_offset += envelope_size;
8315            }
8316
8317            let next_out_of_line = decoder.next_out_of_line();
8318            let handles_before = decoder.remaining_handles();
8319            if let Some((inlined, num_bytes, num_handles)) =
8320                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8321            {
8322                let member_inline_size =
8323                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
8324                if inlined != (member_inline_size <= 4) {
8325                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8326                }
8327                let inner_offset;
8328                let mut inner_depth = depth.clone();
8329                if inlined {
8330                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8331                    inner_offset = next_offset;
8332                } else {
8333                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8334                    inner_depth.increment()?;
8335                }
8336                let val_ref =
8337                    self.preferred_lifetime.get_or_insert_with(|| fidl::new_empty!(u32, D));
8338                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
8339                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8340                {
8341                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8342                }
8343                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8344                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8345                }
8346            }
8347
8348            next_offset += envelope_size;
8349
8350            // Decode the remaining unknown envelopes.
8351            while next_offset < end_offset {
8352                _next_ordinal_to_read += 1;
8353                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8354                next_offset += envelope_size;
8355            }
8356
8357            Ok(())
8358        }
8359    }
8360
8361    impl BorderRoutingRdnss {
8362        #[inline(always)]
8363        fn max_ordinal_present(&self) -> u64 {
8364            if let Some(_) = self.lifetime {
8365                return 4;
8366            }
8367            if let Some(_) = self.duration_since_last_update {
8368                return 3;
8369            }
8370            if let Some(_) = self.address {
8371                return 2;
8372            }
8373            if let Some(_) = self.router {
8374                return 1;
8375            }
8376            0
8377        }
8378    }
8379
8380    impl fidl::encoding::ValueTypeMarker for BorderRoutingRdnss {
8381        type Borrowed<'a> = &'a Self;
8382        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
8383            value
8384        }
8385    }
8386
8387    unsafe impl fidl::encoding::TypeMarker for BorderRoutingRdnss {
8388        type Owned = Self;
8389
8390        #[inline(always)]
8391        fn inline_align(_context: fidl::encoding::Context) -> usize {
8392            8
8393        }
8394
8395        #[inline(always)]
8396        fn inline_size(_context: fidl::encoding::Context) -> usize {
8397            16
8398        }
8399    }
8400
8401    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<BorderRoutingRdnss, D>
8402        for &BorderRoutingRdnss
8403    {
8404        unsafe fn encode(
8405            self,
8406            encoder: &mut fidl::encoding::Encoder<'_, D>,
8407            offset: usize,
8408            mut depth: fidl::encoding::Depth,
8409        ) -> fidl::Result<()> {
8410            encoder.debug_check_bounds::<BorderRoutingRdnss>(offset);
8411            // Vector header
8412            let max_ordinal: u64 = self.max_ordinal_present();
8413            encoder.write_num(max_ordinal, offset);
8414            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
8415            // Calling encoder.out_of_line_offset(0) is not allowed.
8416            if max_ordinal == 0 {
8417                return Ok(());
8418            }
8419            depth.increment()?;
8420            let envelope_size = 8;
8421            let bytes_len = max_ordinal as usize * envelope_size;
8422            #[allow(unused_variables)]
8423            let offset = encoder.out_of_line_offset(bytes_len);
8424            let mut _prev_end_offset: usize = 0;
8425            if 1 > max_ordinal {
8426                return Ok(());
8427            }
8428
8429            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8430            // are envelope_size bytes.
8431            let cur_offset: usize = (1 - 1) * envelope_size;
8432
8433            // Zero reserved fields.
8434            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8435
8436            // Safety:
8437            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8438            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8439            //   envelope_size bytes, there is always sufficient room.
8440            fidl::encoding::encode_in_envelope_optional::<BorderRoutingRouter, D>(
8441                self.router
8442                    .as_ref()
8443                    .map(<BorderRoutingRouter as fidl::encoding::ValueTypeMarker>::borrow),
8444                encoder,
8445                offset + cur_offset,
8446                depth,
8447            )?;
8448
8449            _prev_end_offset = cur_offset + envelope_size;
8450            if 2 > max_ordinal {
8451                return Ok(());
8452            }
8453
8454            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8455            // are envelope_size bytes.
8456            let cur_offset: usize = (2 - 1) * envelope_size;
8457
8458            // Zero reserved fields.
8459            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8460
8461            // Safety:
8462            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8463            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8464            //   envelope_size bytes, there is always sufficient room.
8465            fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_net_common::Ipv6Address, D>(
8466            self.address.as_ref().map(<fidl_fuchsia_net_common::Ipv6Address as fidl::encoding::ValueTypeMarker>::borrow),
8467            encoder, offset + cur_offset, depth
8468        )?;
8469
8470            _prev_end_offset = cur_offset + envelope_size;
8471            if 3 > max_ordinal {
8472                return Ok(());
8473            }
8474
8475            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8476            // are envelope_size bytes.
8477            let cur_offset: usize = (3 - 1) * envelope_size;
8478
8479            // Zero reserved fields.
8480            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8481
8482            // Safety:
8483            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8484            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8485            //   envelope_size bytes, there is always sufficient room.
8486            fidl::encoding::encode_in_envelope_optional::<i64, D>(
8487                self.duration_since_last_update
8488                    .as_ref()
8489                    .map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
8490                encoder,
8491                offset + cur_offset,
8492                depth,
8493            )?;
8494
8495            _prev_end_offset = cur_offset + envelope_size;
8496            if 4 > max_ordinal {
8497                return Ok(());
8498            }
8499
8500            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8501            // are envelope_size bytes.
8502            let cur_offset: usize = (4 - 1) * envelope_size;
8503
8504            // Zero reserved fields.
8505            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8506
8507            // Safety:
8508            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8509            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8510            //   envelope_size bytes, there is always sufficient room.
8511            fidl::encoding::encode_in_envelope_optional::<u32, D>(
8512                self.lifetime.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
8513                encoder,
8514                offset + cur_offset,
8515                depth,
8516            )?;
8517
8518            _prev_end_offset = cur_offset + envelope_size;
8519
8520            Ok(())
8521        }
8522    }
8523
8524    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for BorderRoutingRdnss {
8525        #[inline(always)]
8526        fn new_empty() -> Self {
8527            Self::default()
8528        }
8529
8530        unsafe fn decode(
8531            &mut self,
8532            decoder: &mut fidl::encoding::Decoder<'_, D>,
8533            offset: usize,
8534            mut depth: fidl::encoding::Depth,
8535        ) -> fidl::Result<()> {
8536            decoder.debug_check_bounds::<Self>(offset);
8537            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
8538                None => return Err(fidl::Error::NotNullable),
8539                Some(len) => len,
8540            };
8541            // Calling decoder.out_of_line_offset(0) is not allowed.
8542            if len == 0 {
8543                return Ok(());
8544            };
8545            depth.increment()?;
8546            let envelope_size = 8;
8547            let bytes_len = len * envelope_size;
8548            let offset = decoder.out_of_line_offset(bytes_len)?;
8549            // Decode the envelope for each type.
8550            let mut _next_ordinal_to_read = 0;
8551            let mut next_offset = offset;
8552            let end_offset = offset + bytes_len;
8553            _next_ordinal_to_read += 1;
8554            if next_offset >= end_offset {
8555                return Ok(());
8556            }
8557
8558            // Decode unknown envelopes for gaps in ordinals.
8559            while _next_ordinal_to_read < 1 {
8560                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8561                _next_ordinal_to_read += 1;
8562                next_offset += envelope_size;
8563            }
8564
8565            let next_out_of_line = decoder.next_out_of_line();
8566            let handles_before = decoder.remaining_handles();
8567            if let Some((inlined, num_bytes, num_handles)) =
8568                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8569            {
8570                let member_inline_size =
8571                    <BorderRoutingRouter as fidl::encoding::TypeMarker>::inline_size(
8572                        decoder.context,
8573                    );
8574                if inlined != (member_inline_size <= 4) {
8575                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8576                }
8577                let inner_offset;
8578                let mut inner_depth = depth.clone();
8579                if inlined {
8580                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8581                    inner_offset = next_offset;
8582                } else {
8583                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8584                    inner_depth.increment()?;
8585                }
8586                let val_ref =
8587                    self.router.get_or_insert_with(|| fidl::new_empty!(BorderRoutingRouter, D));
8588                fidl::decode!(BorderRoutingRouter, D, val_ref, decoder, inner_offset, inner_depth)?;
8589                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8590                {
8591                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8592                }
8593                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8594                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8595                }
8596            }
8597
8598            next_offset += envelope_size;
8599            _next_ordinal_to_read += 1;
8600            if next_offset >= end_offset {
8601                return Ok(());
8602            }
8603
8604            // Decode unknown envelopes for gaps in ordinals.
8605            while _next_ordinal_to_read < 2 {
8606                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8607                _next_ordinal_to_read += 1;
8608                next_offset += envelope_size;
8609            }
8610
8611            let next_out_of_line = decoder.next_out_of_line();
8612            let handles_before = decoder.remaining_handles();
8613            if let Some((inlined, num_bytes, num_handles)) =
8614                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8615            {
8616                let member_inline_size = <fidl_fuchsia_net_common::Ipv6Address as fidl::encoding::TypeMarker>::inline_size(decoder.context);
8617                if inlined != (member_inline_size <= 4) {
8618                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8619                }
8620                let inner_offset;
8621                let mut inner_depth = depth.clone();
8622                if inlined {
8623                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8624                    inner_offset = next_offset;
8625                } else {
8626                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8627                    inner_depth.increment()?;
8628                }
8629                let val_ref = self.address.get_or_insert_with(|| {
8630                    fidl::new_empty!(fidl_fuchsia_net_common::Ipv6Address, D)
8631                });
8632                fidl::decode!(
8633                    fidl_fuchsia_net_common::Ipv6Address,
8634                    D,
8635                    val_ref,
8636                    decoder,
8637                    inner_offset,
8638                    inner_depth
8639                )?;
8640                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8641                {
8642                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8643                }
8644                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8645                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8646                }
8647            }
8648
8649            next_offset += envelope_size;
8650            _next_ordinal_to_read += 1;
8651            if next_offset >= end_offset {
8652                return Ok(());
8653            }
8654
8655            // Decode unknown envelopes for gaps in ordinals.
8656            while _next_ordinal_to_read < 3 {
8657                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8658                _next_ordinal_to_read += 1;
8659                next_offset += envelope_size;
8660            }
8661
8662            let next_out_of_line = decoder.next_out_of_line();
8663            let handles_before = decoder.remaining_handles();
8664            if let Some((inlined, num_bytes, num_handles)) =
8665                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8666            {
8667                let member_inline_size =
8668                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
8669                if inlined != (member_inline_size <= 4) {
8670                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8671                }
8672                let inner_offset;
8673                let mut inner_depth = depth.clone();
8674                if inlined {
8675                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8676                    inner_offset = next_offset;
8677                } else {
8678                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8679                    inner_depth.increment()?;
8680                }
8681                let val_ref =
8682                    self.duration_since_last_update.get_or_insert_with(|| fidl::new_empty!(i64, D));
8683                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
8684                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8685                {
8686                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8687                }
8688                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8689                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8690                }
8691            }
8692
8693            next_offset += envelope_size;
8694            _next_ordinal_to_read += 1;
8695            if next_offset >= end_offset {
8696                return Ok(());
8697            }
8698
8699            // Decode unknown envelopes for gaps in ordinals.
8700            while _next_ordinal_to_read < 4 {
8701                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8702                _next_ordinal_to_read += 1;
8703                next_offset += envelope_size;
8704            }
8705
8706            let next_out_of_line = decoder.next_out_of_line();
8707            let handles_before = decoder.remaining_handles();
8708            if let Some((inlined, num_bytes, num_handles)) =
8709                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8710            {
8711                let member_inline_size =
8712                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
8713                if inlined != (member_inline_size <= 4) {
8714                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8715                }
8716                let inner_offset;
8717                let mut inner_depth = depth.clone();
8718                if inlined {
8719                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8720                    inner_offset = next_offset;
8721                } else {
8722                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8723                    inner_depth.increment()?;
8724                }
8725                let val_ref = self.lifetime.get_or_insert_with(|| fidl::new_empty!(u32, D));
8726                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
8727                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8728                {
8729                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8730                }
8731                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8732                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8733                }
8734            }
8735
8736            next_offset += envelope_size;
8737
8738            // Decode the remaining unknown envelopes.
8739            while next_offset < end_offset {
8740                _next_ordinal_to_read += 1;
8741                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8742                next_offset += envelope_size;
8743            }
8744
8745            Ok(())
8746        }
8747    }
8748
8749    impl BorderRoutingRouter {
8750        #[inline(always)]
8751        fn max_ordinal_present(&self) -> u64 {
8752            if let Some(_) = self.is_peer_br {
8753                return 9;
8754            }
8755            if let Some(_) = self.is_reachable {
8756                return 8;
8757            }
8758            if let Some(_) = self.is_local_device {
8759                return 7;
8760            }
8761            if let Some(_) = self.snac_router_flag {
8762                return 6;
8763            }
8764            if let Some(_) = self.other_config_flag {
8765                return 5;
8766            }
8767            if let Some(_) = self.managed_address_config_flag {
8768                return 4;
8769            }
8770            if let Some(_) = self.age {
8771                return 3;
8772            }
8773            if let Some(_) = self.duration_since_last_update {
8774                return 2;
8775            }
8776            if let Some(_) = self.address {
8777                return 1;
8778            }
8779            0
8780        }
8781    }
8782
8783    impl fidl::encoding::ValueTypeMarker for BorderRoutingRouter {
8784        type Borrowed<'a> = &'a Self;
8785        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
8786            value
8787        }
8788    }
8789
8790    unsafe impl fidl::encoding::TypeMarker for BorderRoutingRouter {
8791        type Owned = Self;
8792
8793        #[inline(always)]
8794        fn inline_align(_context: fidl::encoding::Context) -> usize {
8795            8
8796        }
8797
8798        #[inline(always)]
8799        fn inline_size(_context: fidl::encoding::Context) -> usize {
8800            16
8801        }
8802    }
8803
8804    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<BorderRoutingRouter, D>
8805        for &BorderRoutingRouter
8806    {
8807        unsafe fn encode(
8808            self,
8809            encoder: &mut fidl::encoding::Encoder<'_, D>,
8810            offset: usize,
8811            mut depth: fidl::encoding::Depth,
8812        ) -> fidl::Result<()> {
8813            encoder.debug_check_bounds::<BorderRoutingRouter>(offset);
8814            // Vector header
8815            let max_ordinal: u64 = self.max_ordinal_present();
8816            encoder.write_num(max_ordinal, offset);
8817            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
8818            // Calling encoder.out_of_line_offset(0) is not allowed.
8819            if max_ordinal == 0 {
8820                return Ok(());
8821            }
8822            depth.increment()?;
8823            let envelope_size = 8;
8824            let bytes_len = max_ordinal as usize * envelope_size;
8825            #[allow(unused_variables)]
8826            let offset = encoder.out_of_line_offset(bytes_len);
8827            let mut _prev_end_offset: usize = 0;
8828            if 1 > max_ordinal {
8829                return Ok(());
8830            }
8831
8832            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8833            // are envelope_size bytes.
8834            let cur_offset: usize = (1 - 1) * envelope_size;
8835
8836            // Zero reserved fields.
8837            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8838
8839            // Safety:
8840            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8841            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8842            //   envelope_size bytes, there is always sufficient room.
8843            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<64>, D>(
8844                self.address.as_ref().map(
8845                    <fidl::encoding::BoundedString<64> as fidl::encoding::ValueTypeMarker>::borrow,
8846                ),
8847                encoder,
8848                offset + cur_offset,
8849                depth,
8850            )?;
8851
8852            _prev_end_offset = cur_offset + envelope_size;
8853            if 2 > max_ordinal {
8854                return Ok(());
8855            }
8856
8857            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8858            // are envelope_size bytes.
8859            let cur_offset: usize = (2 - 1) * envelope_size;
8860
8861            // Zero reserved fields.
8862            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8863
8864            // Safety:
8865            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8866            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8867            //   envelope_size bytes, there is always sufficient room.
8868            fidl::encoding::encode_in_envelope_optional::<i64, D>(
8869                self.duration_since_last_update
8870                    .as_ref()
8871                    .map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
8872                encoder,
8873                offset + cur_offset,
8874                depth,
8875            )?;
8876
8877            _prev_end_offset = cur_offset + envelope_size;
8878            if 3 > max_ordinal {
8879                return Ok(());
8880            }
8881
8882            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8883            // are envelope_size bytes.
8884            let cur_offset: usize = (3 - 1) * envelope_size;
8885
8886            // Zero reserved fields.
8887            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8888
8889            // Safety:
8890            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8891            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8892            //   envelope_size bytes, there is always sufficient room.
8893            fidl::encoding::encode_in_envelope_optional::<i64, D>(
8894                self.age.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
8895                encoder,
8896                offset + cur_offset,
8897                depth,
8898            )?;
8899
8900            _prev_end_offset = cur_offset + envelope_size;
8901            if 4 > max_ordinal {
8902                return Ok(());
8903            }
8904
8905            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8906            // are envelope_size bytes.
8907            let cur_offset: usize = (4 - 1) * envelope_size;
8908
8909            // Zero reserved fields.
8910            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8911
8912            // Safety:
8913            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8914            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8915            //   envelope_size bytes, there is always sufficient room.
8916            fidl::encoding::encode_in_envelope_optional::<bool, D>(
8917                self.managed_address_config_flag
8918                    .as_ref()
8919                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
8920                encoder,
8921                offset + cur_offset,
8922                depth,
8923            )?;
8924
8925            _prev_end_offset = cur_offset + envelope_size;
8926            if 5 > max_ordinal {
8927                return Ok(());
8928            }
8929
8930            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8931            // are envelope_size bytes.
8932            let cur_offset: usize = (5 - 1) * envelope_size;
8933
8934            // Zero reserved fields.
8935            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8936
8937            // Safety:
8938            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8939            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8940            //   envelope_size bytes, there is always sufficient room.
8941            fidl::encoding::encode_in_envelope_optional::<bool, D>(
8942                self.other_config_flag
8943                    .as_ref()
8944                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
8945                encoder,
8946                offset + cur_offset,
8947                depth,
8948            )?;
8949
8950            _prev_end_offset = cur_offset + envelope_size;
8951            if 6 > max_ordinal {
8952                return Ok(());
8953            }
8954
8955            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8956            // are envelope_size bytes.
8957            let cur_offset: usize = (6 - 1) * envelope_size;
8958
8959            // Zero reserved fields.
8960            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8961
8962            // Safety:
8963            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8964            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8965            //   envelope_size bytes, there is always sufficient room.
8966            fidl::encoding::encode_in_envelope_optional::<bool, D>(
8967                self.snac_router_flag
8968                    .as_ref()
8969                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
8970                encoder,
8971                offset + cur_offset,
8972                depth,
8973            )?;
8974
8975            _prev_end_offset = cur_offset + envelope_size;
8976            if 7 > max_ordinal {
8977                return Ok(());
8978            }
8979
8980            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8981            // are envelope_size bytes.
8982            let cur_offset: usize = (7 - 1) * envelope_size;
8983
8984            // Zero reserved fields.
8985            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8986
8987            // Safety:
8988            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8989            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8990            //   envelope_size bytes, there is always sufficient room.
8991            fidl::encoding::encode_in_envelope_optional::<bool, D>(
8992                self.is_local_device
8993                    .as_ref()
8994                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
8995                encoder,
8996                offset + cur_offset,
8997                depth,
8998            )?;
8999
9000            _prev_end_offset = cur_offset + envelope_size;
9001            if 8 > max_ordinal {
9002                return Ok(());
9003            }
9004
9005            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9006            // are envelope_size bytes.
9007            let cur_offset: usize = (8 - 1) * envelope_size;
9008
9009            // Zero reserved fields.
9010            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9011
9012            // Safety:
9013            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9014            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9015            //   envelope_size bytes, there is always sufficient room.
9016            fidl::encoding::encode_in_envelope_optional::<bool, D>(
9017                self.is_reachable.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
9018                encoder,
9019                offset + cur_offset,
9020                depth,
9021            )?;
9022
9023            _prev_end_offset = cur_offset + envelope_size;
9024            if 9 > max_ordinal {
9025                return Ok(());
9026            }
9027
9028            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9029            // are envelope_size bytes.
9030            let cur_offset: usize = (9 - 1) * envelope_size;
9031
9032            // Zero reserved fields.
9033            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9034
9035            // Safety:
9036            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9037            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9038            //   envelope_size bytes, there is always sufficient room.
9039            fidl::encoding::encode_in_envelope_optional::<bool, D>(
9040                self.is_peer_br.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
9041                encoder,
9042                offset + cur_offset,
9043                depth,
9044            )?;
9045
9046            _prev_end_offset = cur_offset + envelope_size;
9047
9048            Ok(())
9049        }
9050    }
9051
9052    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for BorderRoutingRouter {
9053        #[inline(always)]
9054        fn new_empty() -> Self {
9055            Self::default()
9056        }
9057
9058        unsafe fn decode(
9059            &mut self,
9060            decoder: &mut fidl::encoding::Decoder<'_, D>,
9061            offset: usize,
9062            mut depth: fidl::encoding::Depth,
9063        ) -> fidl::Result<()> {
9064            decoder.debug_check_bounds::<Self>(offset);
9065            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
9066                None => return Err(fidl::Error::NotNullable),
9067                Some(len) => len,
9068            };
9069            // Calling decoder.out_of_line_offset(0) is not allowed.
9070            if len == 0 {
9071                return Ok(());
9072            };
9073            depth.increment()?;
9074            let envelope_size = 8;
9075            let bytes_len = len * envelope_size;
9076            let offset = decoder.out_of_line_offset(bytes_len)?;
9077            // Decode the envelope for each type.
9078            let mut _next_ordinal_to_read = 0;
9079            let mut next_offset = offset;
9080            let end_offset = offset + bytes_len;
9081            _next_ordinal_to_read += 1;
9082            if next_offset >= end_offset {
9083                return Ok(());
9084            }
9085
9086            // Decode unknown envelopes for gaps in ordinals.
9087            while _next_ordinal_to_read < 1 {
9088                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9089                _next_ordinal_to_read += 1;
9090                next_offset += envelope_size;
9091            }
9092
9093            let next_out_of_line = decoder.next_out_of_line();
9094            let handles_before = decoder.remaining_handles();
9095            if let Some((inlined, num_bytes, num_handles)) =
9096                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9097            {
9098                let member_inline_size =
9099                    <fidl::encoding::BoundedString<64> as fidl::encoding::TypeMarker>::inline_size(
9100                        decoder.context,
9101                    );
9102                if inlined != (member_inline_size <= 4) {
9103                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9104                }
9105                let inner_offset;
9106                let mut inner_depth = depth.clone();
9107                if inlined {
9108                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9109                    inner_offset = next_offset;
9110                } else {
9111                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9112                    inner_depth.increment()?;
9113                }
9114                let val_ref = self
9115                    .address
9116                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<64>, D));
9117                fidl::decode!(
9118                    fidl::encoding::BoundedString<64>,
9119                    D,
9120                    val_ref,
9121                    decoder,
9122                    inner_offset,
9123                    inner_depth
9124                )?;
9125                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9126                {
9127                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9128                }
9129                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9130                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9131                }
9132            }
9133
9134            next_offset += envelope_size;
9135            _next_ordinal_to_read += 1;
9136            if next_offset >= end_offset {
9137                return Ok(());
9138            }
9139
9140            // Decode unknown envelopes for gaps in ordinals.
9141            while _next_ordinal_to_read < 2 {
9142                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9143                _next_ordinal_to_read += 1;
9144                next_offset += envelope_size;
9145            }
9146
9147            let next_out_of_line = decoder.next_out_of_line();
9148            let handles_before = decoder.remaining_handles();
9149            if let Some((inlined, num_bytes, num_handles)) =
9150                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9151            {
9152                let member_inline_size =
9153                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
9154                if inlined != (member_inline_size <= 4) {
9155                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9156                }
9157                let inner_offset;
9158                let mut inner_depth = depth.clone();
9159                if inlined {
9160                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9161                    inner_offset = next_offset;
9162                } else {
9163                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9164                    inner_depth.increment()?;
9165                }
9166                let val_ref =
9167                    self.duration_since_last_update.get_or_insert_with(|| fidl::new_empty!(i64, D));
9168                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
9169                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9170                {
9171                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9172                }
9173                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9174                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9175                }
9176            }
9177
9178            next_offset += envelope_size;
9179            _next_ordinal_to_read += 1;
9180            if next_offset >= end_offset {
9181                return Ok(());
9182            }
9183
9184            // Decode unknown envelopes for gaps in ordinals.
9185            while _next_ordinal_to_read < 3 {
9186                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9187                _next_ordinal_to_read += 1;
9188                next_offset += envelope_size;
9189            }
9190
9191            let next_out_of_line = decoder.next_out_of_line();
9192            let handles_before = decoder.remaining_handles();
9193            if let Some((inlined, num_bytes, num_handles)) =
9194                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9195            {
9196                let member_inline_size =
9197                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
9198                if inlined != (member_inline_size <= 4) {
9199                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9200                }
9201                let inner_offset;
9202                let mut inner_depth = depth.clone();
9203                if inlined {
9204                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9205                    inner_offset = next_offset;
9206                } else {
9207                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9208                    inner_depth.increment()?;
9209                }
9210                let val_ref = self.age.get_or_insert_with(|| fidl::new_empty!(i64, D));
9211                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
9212                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9213                {
9214                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9215                }
9216                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9217                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9218                }
9219            }
9220
9221            next_offset += envelope_size;
9222            _next_ordinal_to_read += 1;
9223            if next_offset >= end_offset {
9224                return Ok(());
9225            }
9226
9227            // Decode unknown envelopes for gaps in ordinals.
9228            while _next_ordinal_to_read < 4 {
9229                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9230                _next_ordinal_to_read += 1;
9231                next_offset += envelope_size;
9232            }
9233
9234            let next_out_of_line = decoder.next_out_of_line();
9235            let handles_before = decoder.remaining_handles();
9236            if let Some((inlined, num_bytes, num_handles)) =
9237                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9238            {
9239                let member_inline_size =
9240                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
9241                if inlined != (member_inline_size <= 4) {
9242                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9243                }
9244                let inner_offset;
9245                let mut inner_depth = depth.clone();
9246                if inlined {
9247                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9248                    inner_offset = next_offset;
9249                } else {
9250                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9251                    inner_depth.increment()?;
9252                }
9253                let val_ref = self
9254                    .managed_address_config_flag
9255                    .get_or_insert_with(|| fidl::new_empty!(bool, D));
9256                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
9257                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9258                {
9259                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9260                }
9261                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9262                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9263                }
9264            }
9265
9266            next_offset += envelope_size;
9267            _next_ordinal_to_read += 1;
9268            if next_offset >= end_offset {
9269                return Ok(());
9270            }
9271
9272            // Decode unknown envelopes for gaps in ordinals.
9273            while _next_ordinal_to_read < 5 {
9274                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9275                _next_ordinal_to_read += 1;
9276                next_offset += envelope_size;
9277            }
9278
9279            let next_out_of_line = decoder.next_out_of_line();
9280            let handles_before = decoder.remaining_handles();
9281            if let Some((inlined, num_bytes, num_handles)) =
9282                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9283            {
9284                let member_inline_size =
9285                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
9286                if inlined != (member_inline_size <= 4) {
9287                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9288                }
9289                let inner_offset;
9290                let mut inner_depth = depth.clone();
9291                if inlined {
9292                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9293                    inner_offset = next_offset;
9294                } else {
9295                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9296                    inner_depth.increment()?;
9297                }
9298                let val_ref =
9299                    self.other_config_flag.get_or_insert_with(|| fidl::new_empty!(bool, D));
9300                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
9301                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9302                {
9303                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9304                }
9305                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9306                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9307                }
9308            }
9309
9310            next_offset += envelope_size;
9311            _next_ordinal_to_read += 1;
9312            if next_offset >= end_offset {
9313                return Ok(());
9314            }
9315
9316            // Decode unknown envelopes for gaps in ordinals.
9317            while _next_ordinal_to_read < 6 {
9318                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9319                _next_ordinal_to_read += 1;
9320                next_offset += envelope_size;
9321            }
9322
9323            let next_out_of_line = decoder.next_out_of_line();
9324            let handles_before = decoder.remaining_handles();
9325            if let Some((inlined, num_bytes, num_handles)) =
9326                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9327            {
9328                let member_inline_size =
9329                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
9330                if inlined != (member_inline_size <= 4) {
9331                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9332                }
9333                let inner_offset;
9334                let mut inner_depth = depth.clone();
9335                if inlined {
9336                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9337                    inner_offset = next_offset;
9338                } else {
9339                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9340                    inner_depth.increment()?;
9341                }
9342                let val_ref =
9343                    self.snac_router_flag.get_or_insert_with(|| fidl::new_empty!(bool, D));
9344                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
9345                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9346                {
9347                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9348                }
9349                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9350                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9351                }
9352            }
9353
9354            next_offset += envelope_size;
9355            _next_ordinal_to_read += 1;
9356            if next_offset >= end_offset {
9357                return Ok(());
9358            }
9359
9360            // Decode unknown envelopes for gaps in ordinals.
9361            while _next_ordinal_to_read < 7 {
9362                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9363                _next_ordinal_to_read += 1;
9364                next_offset += envelope_size;
9365            }
9366
9367            let next_out_of_line = decoder.next_out_of_line();
9368            let handles_before = decoder.remaining_handles();
9369            if let Some((inlined, num_bytes, num_handles)) =
9370                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9371            {
9372                let member_inline_size =
9373                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
9374                if inlined != (member_inline_size <= 4) {
9375                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9376                }
9377                let inner_offset;
9378                let mut inner_depth = depth.clone();
9379                if inlined {
9380                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9381                    inner_offset = next_offset;
9382                } else {
9383                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9384                    inner_depth.increment()?;
9385                }
9386                let val_ref = self.is_local_device.get_or_insert_with(|| fidl::new_empty!(bool, D));
9387                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
9388                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9389                {
9390                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9391                }
9392                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9393                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9394                }
9395            }
9396
9397            next_offset += envelope_size;
9398            _next_ordinal_to_read += 1;
9399            if next_offset >= end_offset {
9400                return Ok(());
9401            }
9402
9403            // Decode unknown envelopes for gaps in ordinals.
9404            while _next_ordinal_to_read < 8 {
9405                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9406                _next_ordinal_to_read += 1;
9407                next_offset += envelope_size;
9408            }
9409
9410            let next_out_of_line = decoder.next_out_of_line();
9411            let handles_before = decoder.remaining_handles();
9412            if let Some((inlined, num_bytes, num_handles)) =
9413                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9414            {
9415                let member_inline_size =
9416                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
9417                if inlined != (member_inline_size <= 4) {
9418                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9419                }
9420                let inner_offset;
9421                let mut inner_depth = depth.clone();
9422                if inlined {
9423                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9424                    inner_offset = next_offset;
9425                } else {
9426                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9427                    inner_depth.increment()?;
9428                }
9429                let val_ref = self.is_reachable.get_or_insert_with(|| fidl::new_empty!(bool, D));
9430                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
9431                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9432                {
9433                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9434                }
9435                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9436                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9437                }
9438            }
9439
9440            next_offset += envelope_size;
9441            _next_ordinal_to_read += 1;
9442            if next_offset >= end_offset {
9443                return Ok(());
9444            }
9445
9446            // Decode unknown envelopes for gaps in ordinals.
9447            while _next_ordinal_to_read < 9 {
9448                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9449                _next_ordinal_to_read += 1;
9450                next_offset += envelope_size;
9451            }
9452
9453            let next_out_of_line = decoder.next_out_of_line();
9454            let handles_before = decoder.remaining_handles();
9455            if let Some((inlined, num_bytes, num_handles)) =
9456                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9457            {
9458                let member_inline_size =
9459                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
9460                if inlined != (member_inline_size <= 4) {
9461                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9462                }
9463                let inner_offset;
9464                let mut inner_depth = depth.clone();
9465                if inlined {
9466                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9467                    inner_offset = next_offset;
9468                } else {
9469                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9470                    inner_depth.increment()?;
9471                }
9472                let val_ref = self.is_peer_br.get_or_insert_with(|| fidl::new_empty!(bool, D));
9473                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
9474                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9475                {
9476                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9477                }
9478                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9479                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9480                }
9481            }
9482
9483            next_offset += envelope_size;
9484
9485            // Decode the remaining unknown envelopes.
9486            while next_offset < end_offset {
9487                _next_ordinal_to_read += 1;
9488                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9489                next_offset += envelope_size;
9490            }
9491
9492            Ok(())
9493        }
9494    }
9495
9496    impl ChannelInfo {
9497        #[inline(always)]
9498        fn max_ordinal_present(&self) -> u64 {
9499            if let Some(_) = self.masked_by_regulatory_domain {
9500                return 6;
9501            }
9502            if let Some(_) = self.spectrum_bandwidth_hz {
9503                return 5;
9504            }
9505            if let Some(_) = self.spectrum_center_frequency_hz {
9506                return 4;
9507            }
9508            if let Some(_) = self.max_transmit_power_dbm {
9509                return 3;
9510            }
9511            if let Some(_) = self.id {
9512                return 2;
9513            }
9514            if let Some(_) = self.index {
9515                return 1;
9516            }
9517            0
9518        }
9519    }
9520
9521    impl fidl::encoding::ValueTypeMarker for ChannelInfo {
9522        type Borrowed<'a> = &'a Self;
9523        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
9524            value
9525        }
9526    }
9527
9528    unsafe impl fidl::encoding::TypeMarker for ChannelInfo {
9529        type Owned = Self;
9530
9531        #[inline(always)]
9532        fn inline_align(_context: fidl::encoding::Context) -> usize {
9533            8
9534        }
9535
9536        #[inline(always)]
9537        fn inline_size(_context: fidl::encoding::Context) -> usize {
9538            16
9539        }
9540    }
9541
9542    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<ChannelInfo, D>
9543        for &ChannelInfo
9544    {
9545        unsafe fn encode(
9546            self,
9547            encoder: &mut fidl::encoding::Encoder<'_, D>,
9548            offset: usize,
9549            mut depth: fidl::encoding::Depth,
9550        ) -> fidl::Result<()> {
9551            encoder.debug_check_bounds::<ChannelInfo>(offset);
9552            // Vector header
9553            let max_ordinal: u64 = self.max_ordinal_present();
9554            encoder.write_num(max_ordinal, offset);
9555            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
9556            // Calling encoder.out_of_line_offset(0) is not allowed.
9557            if max_ordinal == 0 {
9558                return Ok(());
9559            }
9560            depth.increment()?;
9561            let envelope_size = 8;
9562            let bytes_len = max_ordinal as usize * envelope_size;
9563            #[allow(unused_variables)]
9564            let offset = encoder.out_of_line_offset(bytes_len);
9565            let mut _prev_end_offset: usize = 0;
9566            if 1 > max_ordinal {
9567                return Ok(());
9568            }
9569
9570            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9571            // are envelope_size bytes.
9572            let cur_offset: usize = (1 - 1) * envelope_size;
9573
9574            // Zero reserved fields.
9575            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9576
9577            // Safety:
9578            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9579            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9580            //   envelope_size bytes, there is always sufficient room.
9581            fidl::encoding::encode_in_envelope_optional::<u16, D>(
9582                self.index.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
9583                encoder,
9584                offset + cur_offset,
9585                depth,
9586            )?;
9587
9588            _prev_end_offset = cur_offset + envelope_size;
9589            if 2 > max_ordinal {
9590                return Ok(());
9591            }
9592
9593            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9594            // are envelope_size bytes.
9595            let cur_offset: usize = (2 - 1) * envelope_size;
9596
9597            // Zero reserved fields.
9598            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9599
9600            // Safety:
9601            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9602            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9603            //   envelope_size bytes, there is always sufficient room.
9604            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<16>, D>(
9605                self.id.as_ref().map(
9606                    <fidl::encoding::BoundedString<16> as fidl::encoding::ValueTypeMarker>::borrow,
9607                ),
9608                encoder,
9609                offset + cur_offset,
9610                depth,
9611            )?;
9612
9613            _prev_end_offset = cur_offset + envelope_size;
9614            if 3 > max_ordinal {
9615                return Ok(());
9616            }
9617
9618            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9619            // are envelope_size bytes.
9620            let cur_offset: usize = (3 - 1) * envelope_size;
9621
9622            // Zero reserved fields.
9623            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9624
9625            // Safety:
9626            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9627            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9628            //   envelope_size bytes, there is always sufficient room.
9629            fidl::encoding::encode_in_envelope_optional::<i8, D>(
9630                self.max_transmit_power_dbm
9631                    .as_ref()
9632                    .map(<i8 as fidl::encoding::ValueTypeMarker>::borrow),
9633                encoder,
9634                offset + cur_offset,
9635                depth,
9636            )?;
9637
9638            _prev_end_offset = cur_offset + envelope_size;
9639            if 4 > max_ordinal {
9640                return Ok(());
9641            }
9642
9643            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9644            // are envelope_size bytes.
9645            let cur_offset: usize = (4 - 1) * envelope_size;
9646
9647            // Zero reserved fields.
9648            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9649
9650            // Safety:
9651            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9652            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9653            //   envelope_size bytes, there is always sufficient room.
9654            fidl::encoding::encode_in_envelope_optional::<u64, D>(
9655                self.spectrum_center_frequency_hz
9656                    .as_ref()
9657                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
9658                encoder,
9659                offset + cur_offset,
9660                depth,
9661            )?;
9662
9663            _prev_end_offset = cur_offset + envelope_size;
9664            if 5 > max_ordinal {
9665                return Ok(());
9666            }
9667
9668            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9669            // are envelope_size bytes.
9670            let cur_offset: usize = (5 - 1) * envelope_size;
9671
9672            // Zero reserved fields.
9673            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9674
9675            // Safety:
9676            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9677            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9678            //   envelope_size bytes, there is always sufficient room.
9679            fidl::encoding::encode_in_envelope_optional::<u64, D>(
9680                self.spectrum_bandwidth_hz
9681                    .as_ref()
9682                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
9683                encoder,
9684                offset + cur_offset,
9685                depth,
9686            )?;
9687
9688            _prev_end_offset = cur_offset + envelope_size;
9689            if 6 > max_ordinal {
9690                return Ok(());
9691            }
9692
9693            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9694            // are envelope_size bytes.
9695            let cur_offset: usize = (6 - 1) * envelope_size;
9696
9697            // Zero reserved fields.
9698            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9699
9700            // Safety:
9701            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9702            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9703            //   envelope_size bytes, there is always sufficient room.
9704            fidl::encoding::encode_in_envelope_optional::<bool, D>(
9705                self.masked_by_regulatory_domain
9706                    .as_ref()
9707                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
9708                encoder,
9709                offset + cur_offset,
9710                depth,
9711            )?;
9712
9713            _prev_end_offset = cur_offset + envelope_size;
9714
9715            Ok(())
9716        }
9717    }
9718
9719    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ChannelInfo {
9720        #[inline(always)]
9721        fn new_empty() -> Self {
9722            Self::default()
9723        }
9724
9725        unsafe fn decode(
9726            &mut self,
9727            decoder: &mut fidl::encoding::Decoder<'_, D>,
9728            offset: usize,
9729            mut depth: fidl::encoding::Depth,
9730        ) -> fidl::Result<()> {
9731            decoder.debug_check_bounds::<Self>(offset);
9732            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
9733                None => return Err(fidl::Error::NotNullable),
9734                Some(len) => len,
9735            };
9736            // Calling decoder.out_of_line_offset(0) is not allowed.
9737            if len == 0 {
9738                return Ok(());
9739            };
9740            depth.increment()?;
9741            let envelope_size = 8;
9742            let bytes_len = len * envelope_size;
9743            let offset = decoder.out_of_line_offset(bytes_len)?;
9744            // Decode the envelope for each type.
9745            let mut _next_ordinal_to_read = 0;
9746            let mut next_offset = offset;
9747            let end_offset = offset + bytes_len;
9748            _next_ordinal_to_read += 1;
9749            if next_offset >= end_offset {
9750                return Ok(());
9751            }
9752
9753            // Decode unknown envelopes for gaps in ordinals.
9754            while _next_ordinal_to_read < 1 {
9755                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9756                _next_ordinal_to_read += 1;
9757                next_offset += envelope_size;
9758            }
9759
9760            let next_out_of_line = decoder.next_out_of_line();
9761            let handles_before = decoder.remaining_handles();
9762            if let Some((inlined, num_bytes, num_handles)) =
9763                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9764            {
9765                let member_inline_size =
9766                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
9767                if inlined != (member_inline_size <= 4) {
9768                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9769                }
9770                let inner_offset;
9771                let mut inner_depth = depth.clone();
9772                if inlined {
9773                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9774                    inner_offset = next_offset;
9775                } else {
9776                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9777                    inner_depth.increment()?;
9778                }
9779                let val_ref = self.index.get_or_insert_with(|| fidl::new_empty!(u16, D));
9780                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
9781                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9782                {
9783                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9784                }
9785                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9786                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9787                }
9788            }
9789
9790            next_offset += envelope_size;
9791            _next_ordinal_to_read += 1;
9792            if next_offset >= end_offset {
9793                return Ok(());
9794            }
9795
9796            // Decode unknown envelopes for gaps in ordinals.
9797            while _next_ordinal_to_read < 2 {
9798                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9799                _next_ordinal_to_read += 1;
9800                next_offset += envelope_size;
9801            }
9802
9803            let next_out_of_line = decoder.next_out_of_line();
9804            let handles_before = decoder.remaining_handles();
9805            if let Some((inlined, num_bytes, num_handles)) =
9806                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9807            {
9808                let member_inline_size =
9809                    <fidl::encoding::BoundedString<16> as fidl::encoding::TypeMarker>::inline_size(
9810                        decoder.context,
9811                    );
9812                if inlined != (member_inline_size <= 4) {
9813                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9814                }
9815                let inner_offset;
9816                let mut inner_depth = depth.clone();
9817                if inlined {
9818                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9819                    inner_offset = next_offset;
9820                } else {
9821                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9822                    inner_depth.increment()?;
9823                }
9824                let val_ref = self
9825                    .id
9826                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<16>, D));
9827                fidl::decode!(
9828                    fidl::encoding::BoundedString<16>,
9829                    D,
9830                    val_ref,
9831                    decoder,
9832                    inner_offset,
9833                    inner_depth
9834                )?;
9835                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9836                {
9837                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9838                }
9839                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9840                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9841                }
9842            }
9843
9844            next_offset += envelope_size;
9845            _next_ordinal_to_read += 1;
9846            if next_offset >= end_offset {
9847                return Ok(());
9848            }
9849
9850            // Decode unknown envelopes for gaps in ordinals.
9851            while _next_ordinal_to_read < 3 {
9852                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9853                _next_ordinal_to_read += 1;
9854                next_offset += envelope_size;
9855            }
9856
9857            let next_out_of_line = decoder.next_out_of_line();
9858            let handles_before = decoder.remaining_handles();
9859            if let Some((inlined, num_bytes, num_handles)) =
9860                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9861            {
9862                let member_inline_size =
9863                    <i8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
9864                if inlined != (member_inline_size <= 4) {
9865                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9866                }
9867                let inner_offset;
9868                let mut inner_depth = depth.clone();
9869                if inlined {
9870                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9871                    inner_offset = next_offset;
9872                } else {
9873                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9874                    inner_depth.increment()?;
9875                }
9876                let val_ref =
9877                    self.max_transmit_power_dbm.get_or_insert_with(|| fidl::new_empty!(i8, D));
9878                fidl::decode!(i8, D, val_ref, decoder, inner_offset, inner_depth)?;
9879                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9880                {
9881                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9882                }
9883                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9884                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9885                }
9886            }
9887
9888            next_offset += envelope_size;
9889            _next_ordinal_to_read += 1;
9890            if next_offset >= end_offset {
9891                return Ok(());
9892            }
9893
9894            // Decode unknown envelopes for gaps in ordinals.
9895            while _next_ordinal_to_read < 4 {
9896                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9897                _next_ordinal_to_read += 1;
9898                next_offset += envelope_size;
9899            }
9900
9901            let next_out_of_line = decoder.next_out_of_line();
9902            let handles_before = decoder.remaining_handles();
9903            if let Some((inlined, num_bytes, num_handles)) =
9904                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9905            {
9906                let member_inline_size =
9907                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
9908                if inlined != (member_inline_size <= 4) {
9909                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9910                }
9911                let inner_offset;
9912                let mut inner_depth = depth.clone();
9913                if inlined {
9914                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9915                    inner_offset = next_offset;
9916                } else {
9917                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9918                    inner_depth.increment()?;
9919                }
9920                let val_ref = self
9921                    .spectrum_center_frequency_hz
9922                    .get_or_insert_with(|| fidl::new_empty!(u64, D));
9923                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
9924                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9925                {
9926                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9927                }
9928                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9929                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9930                }
9931            }
9932
9933            next_offset += envelope_size;
9934            _next_ordinal_to_read += 1;
9935            if next_offset >= end_offset {
9936                return Ok(());
9937            }
9938
9939            // Decode unknown envelopes for gaps in ordinals.
9940            while _next_ordinal_to_read < 5 {
9941                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9942                _next_ordinal_to_read += 1;
9943                next_offset += envelope_size;
9944            }
9945
9946            let next_out_of_line = decoder.next_out_of_line();
9947            let handles_before = decoder.remaining_handles();
9948            if let Some((inlined, num_bytes, num_handles)) =
9949                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9950            {
9951                let member_inline_size =
9952                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
9953                if inlined != (member_inline_size <= 4) {
9954                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9955                }
9956                let inner_offset;
9957                let mut inner_depth = depth.clone();
9958                if inlined {
9959                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9960                    inner_offset = next_offset;
9961                } else {
9962                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9963                    inner_depth.increment()?;
9964                }
9965                let val_ref =
9966                    self.spectrum_bandwidth_hz.get_or_insert_with(|| fidl::new_empty!(u64, D));
9967                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
9968                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9969                {
9970                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9971                }
9972                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9973                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9974                }
9975            }
9976
9977            next_offset += envelope_size;
9978            _next_ordinal_to_read += 1;
9979            if next_offset >= end_offset {
9980                return Ok(());
9981            }
9982
9983            // Decode unknown envelopes for gaps in ordinals.
9984            while _next_ordinal_to_read < 6 {
9985                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9986                _next_ordinal_to_read += 1;
9987                next_offset += envelope_size;
9988            }
9989
9990            let next_out_of_line = decoder.next_out_of_line();
9991            let handles_before = decoder.remaining_handles();
9992            if let Some((inlined, num_bytes, num_handles)) =
9993                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9994            {
9995                let member_inline_size =
9996                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
9997                if inlined != (member_inline_size <= 4) {
9998                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9999                }
10000                let inner_offset;
10001                let mut inner_depth = depth.clone();
10002                if inlined {
10003                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10004                    inner_offset = next_offset;
10005                } else {
10006                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10007                    inner_depth.increment()?;
10008                }
10009                let val_ref = self
10010                    .masked_by_regulatory_domain
10011                    .get_or_insert_with(|| fidl::new_empty!(bool, D));
10012                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
10013                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10014                {
10015                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10016                }
10017                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10018                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10019                }
10020            }
10021
10022            next_offset += envelope_size;
10023
10024            // Decode the remaining unknown envelopes.
10025            while next_offset < end_offset {
10026                _next_ordinal_to_read += 1;
10027                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10028                next_offset += envelope_size;
10029            }
10030
10031            Ok(())
10032        }
10033    }
10034
10035    impl CommissioningDataset {
10036        #[inline(always)]
10037        fn max_ordinal_present(&self) -> u64 {
10038            if let Some(_) = self.has_extra_tlv {
10039                return 9;
10040            }
10041            if let Some(_) = self.is_joiner_udp_port_set {
10042                return 8;
10043            }
10044            if let Some(_) = self.is_steering_data_set {
10045                return 7;
10046            }
10047            if let Some(_) = self.is_session_id_set {
10048                return 6;
10049            }
10050            if let Some(_) = self.is_locator_set {
10051                return 5;
10052            }
10053            if let Some(_) = self.joiner_udp_port {
10054                return 4;
10055            }
10056            if let Some(_) = self.steering_data {
10057                return 3;
10058            }
10059            if let Some(_) = self.session_id {
10060                return 2;
10061            }
10062            if let Some(_) = self.locator {
10063                return 1;
10064            }
10065            0
10066        }
10067    }
10068
10069    impl fidl::encoding::ValueTypeMarker for CommissioningDataset {
10070        type Borrowed<'a> = &'a Self;
10071        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
10072            value
10073        }
10074    }
10075
10076    unsafe impl fidl::encoding::TypeMarker for CommissioningDataset {
10077        type Owned = Self;
10078
10079        #[inline(always)]
10080        fn inline_align(_context: fidl::encoding::Context) -> usize {
10081            8
10082        }
10083
10084        #[inline(always)]
10085        fn inline_size(_context: fidl::encoding::Context) -> usize {
10086            16
10087        }
10088    }
10089
10090    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<CommissioningDataset, D>
10091        for &CommissioningDataset
10092    {
10093        unsafe fn encode(
10094            self,
10095            encoder: &mut fidl::encoding::Encoder<'_, D>,
10096            offset: usize,
10097            mut depth: fidl::encoding::Depth,
10098        ) -> fidl::Result<()> {
10099            encoder.debug_check_bounds::<CommissioningDataset>(offset);
10100            // Vector header
10101            let max_ordinal: u64 = self.max_ordinal_present();
10102            encoder.write_num(max_ordinal, offset);
10103            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
10104            // Calling encoder.out_of_line_offset(0) is not allowed.
10105            if max_ordinal == 0 {
10106                return Ok(());
10107            }
10108            depth.increment()?;
10109            let envelope_size = 8;
10110            let bytes_len = max_ordinal as usize * envelope_size;
10111            #[allow(unused_variables)]
10112            let offset = encoder.out_of_line_offset(bytes_len);
10113            let mut _prev_end_offset: usize = 0;
10114            if 1 > max_ordinal {
10115                return Ok(());
10116            }
10117
10118            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10119            // are envelope_size bytes.
10120            let cur_offset: usize = (1 - 1) * envelope_size;
10121
10122            // Zero reserved fields.
10123            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10124
10125            // Safety:
10126            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10127            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10128            //   envelope_size bytes, there is always sufficient room.
10129            fidl::encoding::encode_in_envelope_optional::<u16, D>(
10130                self.locator.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
10131                encoder,
10132                offset + cur_offset,
10133                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::<u16, D>(
10153                self.session_id.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
10154                encoder,
10155                offset + cur_offset,
10156                depth,
10157            )?;
10158
10159            _prev_end_offset = cur_offset + envelope_size;
10160            if 3 > max_ordinal {
10161                return Ok(());
10162            }
10163
10164            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10165            // are envelope_size bytes.
10166            let cur_offset: usize = (3 - 1) * envelope_size;
10167
10168            // Zero reserved fields.
10169            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10170
10171            // Safety:
10172            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10173            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10174            //   envelope_size bytes, there is always sufficient room.
10175            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u8, 16>, D>(
10176                self.steering_data.as_ref().map(
10177                    <fidl::encoding::Vector<u8, 16> as fidl::encoding::ValueTypeMarker>::borrow,
10178                ),
10179                encoder,
10180                offset + cur_offset,
10181                depth,
10182            )?;
10183
10184            _prev_end_offset = cur_offset + envelope_size;
10185            if 4 > max_ordinal {
10186                return Ok(());
10187            }
10188
10189            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10190            // are envelope_size bytes.
10191            let cur_offset: usize = (4 - 1) * envelope_size;
10192
10193            // Zero reserved fields.
10194            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10195
10196            // Safety:
10197            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10198            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10199            //   envelope_size bytes, there is always sufficient room.
10200            fidl::encoding::encode_in_envelope_optional::<u16, D>(
10201                self.joiner_udp_port.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
10202                encoder,
10203                offset + cur_offset,
10204                depth,
10205            )?;
10206
10207            _prev_end_offset = cur_offset + envelope_size;
10208            if 5 > max_ordinal {
10209                return Ok(());
10210            }
10211
10212            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10213            // are envelope_size bytes.
10214            let cur_offset: usize = (5 - 1) * envelope_size;
10215
10216            // Zero reserved fields.
10217            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10218
10219            // Safety:
10220            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10221            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10222            //   envelope_size bytes, there is always sufficient room.
10223            fidl::encoding::encode_in_envelope_optional::<bool, D>(
10224                self.is_locator_set.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
10225                encoder,
10226                offset + cur_offset,
10227                depth,
10228            )?;
10229
10230            _prev_end_offset = cur_offset + envelope_size;
10231            if 6 > max_ordinal {
10232                return Ok(());
10233            }
10234
10235            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10236            // are envelope_size bytes.
10237            let cur_offset: usize = (6 - 1) * envelope_size;
10238
10239            // Zero reserved fields.
10240            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10241
10242            // Safety:
10243            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10244            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10245            //   envelope_size bytes, there is always sufficient room.
10246            fidl::encoding::encode_in_envelope_optional::<bool, D>(
10247                self.is_session_id_set
10248                    .as_ref()
10249                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
10250                encoder,
10251                offset + cur_offset,
10252                depth,
10253            )?;
10254
10255            _prev_end_offset = cur_offset + envelope_size;
10256            if 7 > max_ordinal {
10257                return Ok(());
10258            }
10259
10260            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10261            // are envelope_size bytes.
10262            let cur_offset: usize = (7 - 1) * envelope_size;
10263
10264            // Zero reserved fields.
10265            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10266
10267            // Safety:
10268            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10269            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10270            //   envelope_size bytes, there is always sufficient room.
10271            fidl::encoding::encode_in_envelope_optional::<bool, D>(
10272                self.is_steering_data_set
10273                    .as_ref()
10274                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
10275                encoder,
10276                offset + cur_offset,
10277                depth,
10278            )?;
10279
10280            _prev_end_offset = cur_offset + envelope_size;
10281            if 8 > max_ordinal {
10282                return Ok(());
10283            }
10284
10285            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10286            // are envelope_size bytes.
10287            let cur_offset: usize = (8 - 1) * envelope_size;
10288
10289            // Zero reserved fields.
10290            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10291
10292            // Safety:
10293            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10294            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10295            //   envelope_size bytes, there is always sufficient room.
10296            fidl::encoding::encode_in_envelope_optional::<bool, D>(
10297                self.is_joiner_udp_port_set
10298                    .as_ref()
10299                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
10300                encoder,
10301                offset + cur_offset,
10302                depth,
10303            )?;
10304
10305            _prev_end_offset = cur_offset + envelope_size;
10306            if 9 > max_ordinal {
10307                return Ok(());
10308            }
10309
10310            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10311            // are envelope_size bytes.
10312            let cur_offset: usize = (9 - 1) * envelope_size;
10313
10314            // Zero reserved fields.
10315            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10316
10317            // Safety:
10318            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10319            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10320            //   envelope_size bytes, there is always sufficient room.
10321            fidl::encoding::encode_in_envelope_optional::<bool, D>(
10322                self.has_extra_tlv.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
10323                encoder,
10324                offset + cur_offset,
10325                depth,
10326            )?;
10327
10328            _prev_end_offset = cur_offset + envelope_size;
10329
10330            Ok(())
10331        }
10332    }
10333
10334    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for CommissioningDataset {
10335        #[inline(always)]
10336        fn new_empty() -> Self {
10337            Self::default()
10338        }
10339
10340        unsafe fn decode(
10341            &mut self,
10342            decoder: &mut fidl::encoding::Decoder<'_, D>,
10343            offset: usize,
10344            mut depth: fidl::encoding::Depth,
10345        ) -> fidl::Result<()> {
10346            decoder.debug_check_bounds::<Self>(offset);
10347            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
10348                None => return Err(fidl::Error::NotNullable),
10349                Some(len) => len,
10350            };
10351            // Calling decoder.out_of_line_offset(0) is not allowed.
10352            if len == 0 {
10353                return Ok(());
10354            };
10355            depth.increment()?;
10356            let envelope_size = 8;
10357            let bytes_len = len * envelope_size;
10358            let offset = decoder.out_of_line_offset(bytes_len)?;
10359            // Decode the envelope for each type.
10360            let mut _next_ordinal_to_read = 0;
10361            let mut next_offset = offset;
10362            let end_offset = offset + bytes_len;
10363            _next_ordinal_to_read += 1;
10364            if next_offset >= end_offset {
10365                return Ok(());
10366            }
10367
10368            // Decode unknown envelopes for gaps in ordinals.
10369            while _next_ordinal_to_read < 1 {
10370                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10371                _next_ordinal_to_read += 1;
10372                next_offset += envelope_size;
10373            }
10374
10375            let next_out_of_line = decoder.next_out_of_line();
10376            let handles_before = decoder.remaining_handles();
10377            if let Some((inlined, num_bytes, num_handles)) =
10378                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10379            {
10380                let member_inline_size =
10381                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
10382                if inlined != (member_inline_size <= 4) {
10383                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10384                }
10385                let inner_offset;
10386                let mut inner_depth = depth.clone();
10387                if inlined {
10388                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10389                    inner_offset = next_offset;
10390                } else {
10391                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10392                    inner_depth.increment()?;
10393                }
10394                let val_ref = self.locator.get_or_insert_with(|| fidl::new_empty!(u16, D));
10395                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
10396                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10397                {
10398                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10399                }
10400                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10401                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10402                }
10403            }
10404
10405            next_offset += envelope_size;
10406            _next_ordinal_to_read += 1;
10407            if next_offset >= end_offset {
10408                return Ok(());
10409            }
10410
10411            // Decode unknown envelopes for gaps in ordinals.
10412            while _next_ordinal_to_read < 2 {
10413                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10414                _next_ordinal_to_read += 1;
10415                next_offset += envelope_size;
10416            }
10417
10418            let next_out_of_line = decoder.next_out_of_line();
10419            let handles_before = decoder.remaining_handles();
10420            if let Some((inlined, num_bytes, num_handles)) =
10421                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10422            {
10423                let member_inline_size =
10424                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
10425                if inlined != (member_inline_size <= 4) {
10426                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10427                }
10428                let inner_offset;
10429                let mut inner_depth = depth.clone();
10430                if inlined {
10431                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10432                    inner_offset = next_offset;
10433                } else {
10434                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10435                    inner_depth.increment()?;
10436                }
10437                let val_ref = self.session_id.get_or_insert_with(|| fidl::new_empty!(u16, D));
10438                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
10439                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10440                {
10441                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10442                }
10443                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10444                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10445                }
10446            }
10447
10448            next_offset += envelope_size;
10449            _next_ordinal_to_read += 1;
10450            if next_offset >= end_offset {
10451                return Ok(());
10452            }
10453
10454            // Decode unknown envelopes for gaps in ordinals.
10455            while _next_ordinal_to_read < 3 {
10456                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10457                _next_ordinal_to_read += 1;
10458                next_offset += envelope_size;
10459            }
10460
10461            let next_out_of_line = decoder.next_out_of_line();
10462            let handles_before = decoder.remaining_handles();
10463            if let Some((inlined, num_bytes, num_handles)) =
10464                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10465            {
10466                let member_inline_size =
10467                    <fidl::encoding::Vector<u8, 16> as fidl::encoding::TypeMarker>::inline_size(
10468                        decoder.context,
10469                    );
10470                if inlined != (member_inline_size <= 4) {
10471                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10472                }
10473                let inner_offset;
10474                let mut inner_depth = depth.clone();
10475                if inlined {
10476                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10477                    inner_offset = next_offset;
10478                } else {
10479                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10480                    inner_depth.increment()?;
10481                }
10482                let val_ref = self
10483                    .steering_data
10484                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u8, 16>, D));
10485                fidl::decode!(fidl::encoding::Vector<u8, 16>, D, val_ref, decoder, inner_offset, inner_depth)?;
10486                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10487                {
10488                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10489                }
10490                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10491                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10492                }
10493            }
10494
10495            next_offset += envelope_size;
10496            _next_ordinal_to_read += 1;
10497            if next_offset >= end_offset {
10498                return Ok(());
10499            }
10500
10501            // Decode unknown envelopes for gaps in ordinals.
10502            while _next_ordinal_to_read < 4 {
10503                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10504                _next_ordinal_to_read += 1;
10505                next_offset += envelope_size;
10506            }
10507
10508            let next_out_of_line = decoder.next_out_of_line();
10509            let handles_before = decoder.remaining_handles();
10510            if let Some((inlined, num_bytes, num_handles)) =
10511                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10512            {
10513                let member_inline_size =
10514                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
10515                if inlined != (member_inline_size <= 4) {
10516                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10517                }
10518                let inner_offset;
10519                let mut inner_depth = depth.clone();
10520                if inlined {
10521                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10522                    inner_offset = next_offset;
10523                } else {
10524                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10525                    inner_depth.increment()?;
10526                }
10527                let val_ref = self.joiner_udp_port.get_or_insert_with(|| fidl::new_empty!(u16, D));
10528                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
10529                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10530                {
10531                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10532                }
10533                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10534                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10535                }
10536            }
10537
10538            next_offset += envelope_size;
10539            _next_ordinal_to_read += 1;
10540            if next_offset >= end_offset {
10541                return Ok(());
10542            }
10543
10544            // Decode unknown envelopes for gaps in ordinals.
10545            while _next_ordinal_to_read < 5 {
10546                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10547                _next_ordinal_to_read += 1;
10548                next_offset += envelope_size;
10549            }
10550
10551            let next_out_of_line = decoder.next_out_of_line();
10552            let handles_before = decoder.remaining_handles();
10553            if let Some((inlined, num_bytes, num_handles)) =
10554                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10555            {
10556                let member_inline_size =
10557                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
10558                if inlined != (member_inline_size <= 4) {
10559                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10560                }
10561                let inner_offset;
10562                let mut inner_depth = depth.clone();
10563                if inlined {
10564                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10565                    inner_offset = next_offset;
10566                } else {
10567                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10568                    inner_depth.increment()?;
10569                }
10570                let val_ref = self.is_locator_set.get_or_insert_with(|| fidl::new_empty!(bool, D));
10571                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
10572                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10573                {
10574                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10575                }
10576                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10577                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10578                }
10579            }
10580
10581            next_offset += envelope_size;
10582            _next_ordinal_to_read += 1;
10583            if next_offset >= end_offset {
10584                return Ok(());
10585            }
10586
10587            // Decode unknown envelopes for gaps in ordinals.
10588            while _next_ordinal_to_read < 6 {
10589                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10590                _next_ordinal_to_read += 1;
10591                next_offset += envelope_size;
10592            }
10593
10594            let next_out_of_line = decoder.next_out_of_line();
10595            let handles_before = decoder.remaining_handles();
10596            if let Some((inlined, num_bytes, num_handles)) =
10597                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10598            {
10599                let member_inline_size =
10600                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
10601                if inlined != (member_inline_size <= 4) {
10602                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10603                }
10604                let inner_offset;
10605                let mut inner_depth = depth.clone();
10606                if inlined {
10607                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10608                    inner_offset = next_offset;
10609                } else {
10610                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10611                    inner_depth.increment()?;
10612                }
10613                let val_ref =
10614                    self.is_session_id_set.get_or_insert_with(|| fidl::new_empty!(bool, D));
10615                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
10616                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10617                {
10618                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10619                }
10620                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10621                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10622                }
10623            }
10624
10625            next_offset += envelope_size;
10626            _next_ordinal_to_read += 1;
10627            if next_offset >= end_offset {
10628                return Ok(());
10629            }
10630
10631            // Decode unknown envelopes for gaps in ordinals.
10632            while _next_ordinal_to_read < 7 {
10633                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10634                _next_ordinal_to_read += 1;
10635                next_offset += envelope_size;
10636            }
10637
10638            let next_out_of_line = decoder.next_out_of_line();
10639            let handles_before = decoder.remaining_handles();
10640            if let Some((inlined, num_bytes, num_handles)) =
10641                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10642            {
10643                let member_inline_size =
10644                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
10645                if inlined != (member_inline_size <= 4) {
10646                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10647                }
10648                let inner_offset;
10649                let mut inner_depth = depth.clone();
10650                if inlined {
10651                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10652                    inner_offset = next_offset;
10653                } else {
10654                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10655                    inner_depth.increment()?;
10656                }
10657                let val_ref =
10658                    self.is_steering_data_set.get_or_insert_with(|| fidl::new_empty!(bool, D));
10659                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
10660                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10661                {
10662                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10663                }
10664                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10665                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10666                }
10667            }
10668
10669            next_offset += envelope_size;
10670            _next_ordinal_to_read += 1;
10671            if next_offset >= end_offset {
10672                return Ok(());
10673            }
10674
10675            // Decode unknown envelopes for gaps in ordinals.
10676            while _next_ordinal_to_read < 8 {
10677                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10678                _next_ordinal_to_read += 1;
10679                next_offset += envelope_size;
10680            }
10681
10682            let next_out_of_line = decoder.next_out_of_line();
10683            let handles_before = decoder.remaining_handles();
10684            if let Some((inlined, num_bytes, num_handles)) =
10685                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10686            {
10687                let member_inline_size =
10688                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
10689                if inlined != (member_inline_size <= 4) {
10690                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10691                }
10692                let inner_offset;
10693                let mut inner_depth = depth.clone();
10694                if inlined {
10695                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10696                    inner_offset = next_offset;
10697                } else {
10698                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10699                    inner_depth.increment()?;
10700                }
10701                let val_ref =
10702                    self.is_joiner_udp_port_set.get_or_insert_with(|| fidl::new_empty!(bool, D));
10703                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
10704                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10705                {
10706                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10707                }
10708                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10709                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10710                }
10711            }
10712
10713            next_offset += envelope_size;
10714            _next_ordinal_to_read += 1;
10715            if next_offset >= end_offset {
10716                return Ok(());
10717            }
10718
10719            // Decode unknown envelopes for gaps in ordinals.
10720            while _next_ordinal_to_read < 9 {
10721                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10722                _next_ordinal_to_read += 1;
10723                next_offset += envelope_size;
10724            }
10725
10726            let next_out_of_line = decoder.next_out_of_line();
10727            let handles_before = decoder.remaining_handles();
10728            if let Some((inlined, num_bytes, num_handles)) =
10729                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10730            {
10731                let member_inline_size =
10732                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
10733                if inlined != (member_inline_size <= 4) {
10734                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10735                }
10736                let inner_offset;
10737                let mut inner_depth = depth.clone();
10738                if inlined {
10739                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10740                    inner_offset = next_offset;
10741                } else {
10742                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10743                    inner_depth.increment()?;
10744                }
10745                let val_ref = self.has_extra_tlv.get_or_insert_with(|| fidl::new_empty!(bool, D));
10746                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
10747                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10748                {
10749                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10750                }
10751                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10752                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10753                }
10754            }
10755
10756            next_offset += envelope_size;
10757
10758            // Decode the remaining unknown envelopes.
10759            while next_offset < end_offset {
10760                _next_ordinal_to_read += 1;
10761                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10762                next_offset += envelope_size;
10763            }
10764
10765            Ok(())
10766        }
10767    }
10768
10769    impl Dhcp6PdInfo {
10770        #[inline(always)]
10771        fn max_ordinal_present(&self) -> u64 {
10772            if let Some(_) = self.hashed_pd_prefix {
10773                return 3;
10774            }
10775            if let Some(_) = self.pd_processed_ra_info {
10776                return 2;
10777            }
10778            if let Some(_) = self.dhcp6pd_state {
10779                return 1;
10780            }
10781            0
10782        }
10783    }
10784
10785    impl fidl::encoding::ValueTypeMarker for Dhcp6PdInfo {
10786        type Borrowed<'a> = &'a Self;
10787        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
10788            value
10789        }
10790    }
10791
10792    unsafe impl fidl::encoding::TypeMarker for Dhcp6PdInfo {
10793        type Owned = Self;
10794
10795        #[inline(always)]
10796        fn inline_align(_context: fidl::encoding::Context) -> usize {
10797            8
10798        }
10799
10800        #[inline(always)]
10801        fn inline_size(_context: fidl::encoding::Context) -> usize {
10802            16
10803        }
10804    }
10805
10806    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Dhcp6PdInfo, D>
10807        for &Dhcp6PdInfo
10808    {
10809        unsafe fn encode(
10810            self,
10811            encoder: &mut fidl::encoding::Encoder<'_, D>,
10812            offset: usize,
10813            mut depth: fidl::encoding::Depth,
10814        ) -> fidl::Result<()> {
10815            encoder.debug_check_bounds::<Dhcp6PdInfo>(offset);
10816            // Vector header
10817            let max_ordinal: u64 = self.max_ordinal_present();
10818            encoder.write_num(max_ordinal, offset);
10819            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
10820            // Calling encoder.out_of_line_offset(0) is not allowed.
10821            if max_ordinal == 0 {
10822                return Ok(());
10823            }
10824            depth.increment()?;
10825            let envelope_size = 8;
10826            let bytes_len = max_ordinal as usize * envelope_size;
10827            #[allow(unused_variables)]
10828            let offset = encoder.out_of_line_offset(bytes_len);
10829            let mut _prev_end_offset: usize = 0;
10830            if 1 > max_ordinal {
10831                return Ok(());
10832            }
10833
10834            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10835            // are envelope_size bytes.
10836            let cur_offset: usize = (1 - 1) * envelope_size;
10837
10838            // Zero reserved fields.
10839            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10840
10841            // Safety:
10842            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10843            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10844            //   envelope_size bytes, there is always sufficient room.
10845            fidl::encoding::encode_in_envelope_optional::<Dhcp6PdState, D>(
10846                self.dhcp6pd_state
10847                    .as_ref()
10848                    .map(<Dhcp6PdState as fidl::encoding::ValueTypeMarker>::borrow),
10849                encoder,
10850                offset + cur_offset,
10851                depth,
10852            )?;
10853
10854            _prev_end_offset = cur_offset + envelope_size;
10855            if 2 > max_ordinal {
10856                return Ok(());
10857            }
10858
10859            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10860            // are envelope_size bytes.
10861            let cur_offset: usize = (2 - 1) * envelope_size;
10862
10863            // Zero reserved fields.
10864            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10865
10866            // Safety:
10867            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10868            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10869            //   envelope_size bytes, there is always sufficient room.
10870            fidl::encoding::encode_in_envelope_optional::<PdProcessedRaInfo, D>(
10871                self.pd_processed_ra_info
10872                    .as_ref()
10873                    .map(<PdProcessedRaInfo as fidl::encoding::ValueTypeMarker>::borrow),
10874                encoder,
10875                offset + cur_offset,
10876                depth,
10877            )?;
10878
10879            _prev_end_offset = cur_offset + envelope_size;
10880            if 3 > max_ordinal {
10881                return Ok(());
10882            }
10883
10884            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10885            // are envelope_size bytes.
10886            let cur_offset: usize = (3 - 1) * envelope_size;
10887
10888            // Zero reserved fields.
10889            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10890
10891            // Safety:
10892            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10893            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10894            //   envelope_size bytes, there is always sufficient room.
10895            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u8, 32>, D>(
10896                self.hashed_pd_prefix.as_ref().map(
10897                    <fidl::encoding::Vector<u8, 32> as fidl::encoding::ValueTypeMarker>::borrow,
10898                ),
10899                encoder,
10900                offset + cur_offset,
10901                depth,
10902            )?;
10903
10904            _prev_end_offset = cur_offset + envelope_size;
10905
10906            Ok(())
10907        }
10908    }
10909
10910    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Dhcp6PdInfo {
10911        #[inline(always)]
10912        fn new_empty() -> Self {
10913            Self::default()
10914        }
10915
10916        unsafe fn decode(
10917            &mut self,
10918            decoder: &mut fidl::encoding::Decoder<'_, D>,
10919            offset: usize,
10920            mut depth: fidl::encoding::Depth,
10921        ) -> fidl::Result<()> {
10922            decoder.debug_check_bounds::<Self>(offset);
10923            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
10924                None => return Err(fidl::Error::NotNullable),
10925                Some(len) => len,
10926            };
10927            // Calling decoder.out_of_line_offset(0) is not allowed.
10928            if len == 0 {
10929                return Ok(());
10930            };
10931            depth.increment()?;
10932            let envelope_size = 8;
10933            let bytes_len = len * envelope_size;
10934            let offset = decoder.out_of_line_offset(bytes_len)?;
10935            // Decode the envelope for each type.
10936            let mut _next_ordinal_to_read = 0;
10937            let mut next_offset = offset;
10938            let end_offset = offset + bytes_len;
10939            _next_ordinal_to_read += 1;
10940            if next_offset >= end_offset {
10941                return Ok(());
10942            }
10943
10944            // Decode unknown envelopes for gaps in ordinals.
10945            while _next_ordinal_to_read < 1 {
10946                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10947                _next_ordinal_to_read += 1;
10948                next_offset += envelope_size;
10949            }
10950
10951            let next_out_of_line = decoder.next_out_of_line();
10952            let handles_before = decoder.remaining_handles();
10953            if let Some((inlined, num_bytes, num_handles)) =
10954                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10955            {
10956                let member_inline_size =
10957                    <Dhcp6PdState as fidl::encoding::TypeMarker>::inline_size(decoder.context);
10958                if inlined != (member_inline_size <= 4) {
10959                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10960                }
10961                let inner_offset;
10962                let mut inner_depth = depth.clone();
10963                if inlined {
10964                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10965                    inner_offset = next_offset;
10966                } else {
10967                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10968                    inner_depth.increment()?;
10969                }
10970                let val_ref =
10971                    self.dhcp6pd_state.get_or_insert_with(|| fidl::new_empty!(Dhcp6PdState, D));
10972                fidl::decode!(Dhcp6PdState, D, val_ref, decoder, inner_offset, inner_depth)?;
10973                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10974                {
10975                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10976                }
10977                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10978                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10979                }
10980            }
10981
10982            next_offset += envelope_size;
10983            _next_ordinal_to_read += 1;
10984            if next_offset >= end_offset {
10985                return Ok(());
10986            }
10987
10988            // Decode unknown envelopes for gaps in ordinals.
10989            while _next_ordinal_to_read < 2 {
10990                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10991                _next_ordinal_to_read += 1;
10992                next_offset += envelope_size;
10993            }
10994
10995            let next_out_of_line = decoder.next_out_of_line();
10996            let handles_before = decoder.remaining_handles();
10997            if let Some((inlined, num_bytes, num_handles)) =
10998                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10999            {
11000                let member_inline_size =
11001                    <PdProcessedRaInfo as fidl::encoding::TypeMarker>::inline_size(decoder.context);
11002                if inlined != (member_inline_size <= 4) {
11003                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11004                }
11005                let inner_offset;
11006                let mut inner_depth = depth.clone();
11007                if inlined {
11008                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11009                    inner_offset = next_offset;
11010                } else {
11011                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11012                    inner_depth.increment()?;
11013                }
11014                let val_ref = self
11015                    .pd_processed_ra_info
11016                    .get_or_insert_with(|| fidl::new_empty!(PdProcessedRaInfo, D));
11017                fidl::decode!(PdProcessedRaInfo, D, val_ref, decoder, inner_offset, inner_depth)?;
11018                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11019                {
11020                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11021                }
11022                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11023                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11024                }
11025            }
11026
11027            next_offset += envelope_size;
11028            _next_ordinal_to_read += 1;
11029            if next_offset >= end_offset {
11030                return Ok(());
11031            }
11032
11033            // Decode unknown envelopes for gaps in ordinals.
11034            while _next_ordinal_to_read < 3 {
11035                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11036                _next_ordinal_to_read += 1;
11037                next_offset += envelope_size;
11038            }
11039
11040            let next_out_of_line = decoder.next_out_of_line();
11041            let handles_before = decoder.remaining_handles();
11042            if let Some((inlined, num_bytes, num_handles)) =
11043                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11044            {
11045                let member_inline_size =
11046                    <fidl::encoding::Vector<u8, 32> as fidl::encoding::TypeMarker>::inline_size(
11047                        decoder.context,
11048                    );
11049                if inlined != (member_inline_size <= 4) {
11050                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11051                }
11052                let inner_offset;
11053                let mut inner_depth = depth.clone();
11054                if inlined {
11055                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11056                    inner_offset = next_offset;
11057                } else {
11058                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11059                    inner_depth.increment()?;
11060                }
11061                let val_ref = self
11062                    .hashed_pd_prefix
11063                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u8, 32>, D));
11064                fidl::decode!(fidl::encoding::Vector<u8, 32>, D, val_ref, decoder, inner_offset, inner_depth)?;
11065                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11066                {
11067                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11068                }
11069                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11070                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11071                }
11072            }
11073
11074            next_offset += envelope_size;
11075
11076            // Decode the remaining unknown envelopes.
11077            while next_offset < end_offset {
11078                _next_ordinal_to_read += 1;
11079                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11080                next_offset += envelope_size;
11081            }
11082
11083            Ok(())
11084        }
11085    }
11086
11087    impl DnsTxtEntry {
11088        #[inline(always)]
11089        fn max_ordinal_present(&self) -> u64 {
11090            if let Some(_) = self.value {
11091                return 2;
11092            }
11093            if let Some(_) = self.key {
11094                return 1;
11095            }
11096            0
11097        }
11098    }
11099
11100    impl fidl::encoding::ValueTypeMarker for DnsTxtEntry {
11101        type Borrowed<'a> = &'a Self;
11102        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
11103            value
11104        }
11105    }
11106
11107    unsafe impl fidl::encoding::TypeMarker for DnsTxtEntry {
11108        type Owned = Self;
11109
11110        #[inline(always)]
11111        fn inline_align(_context: fidl::encoding::Context) -> usize {
11112            8
11113        }
11114
11115        #[inline(always)]
11116        fn inline_size(_context: fidl::encoding::Context) -> usize {
11117            16
11118        }
11119    }
11120
11121    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<DnsTxtEntry, D>
11122        for &DnsTxtEntry
11123    {
11124        unsafe fn encode(
11125            self,
11126            encoder: &mut fidl::encoding::Encoder<'_, D>,
11127            offset: usize,
11128            mut depth: fidl::encoding::Depth,
11129        ) -> fidl::Result<()> {
11130            encoder.debug_check_bounds::<DnsTxtEntry>(offset);
11131            // Vector header
11132            let max_ordinal: u64 = self.max_ordinal_present();
11133            encoder.write_num(max_ordinal, offset);
11134            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
11135            // Calling encoder.out_of_line_offset(0) is not allowed.
11136            if max_ordinal == 0 {
11137                return Ok(());
11138            }
11139            depth.increment()?;
11140            let envelope_size = 8;
11141            let bytes_len = max_ordinal as usize * envelope_size;
11142            #[allow(unused_variables)]
11143            let offset = encoder.out_of_line_offset(bytes_len);
11144            let mut _prev_end_offset: usize = 0;
11145            if 1 > max_ordinal {
11146                return Ok(());
11147            }
11148
11149            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11150            // are envelope_size bytes.
11151            let cur_offset: usize = (1 - 1) * envelope_size;
11152
11153            // Zero reserved fields.
11154            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11155
11156            // Safety:
11157            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11158            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11159            //   envelope_size bytes, there is always sufficient room.
11160            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<64>, D>(
11161                self.key.as_ref().map(
11162                    <fidl::encoding::BoundedString<64> as fidl::encoding::ValueTypeMarker>::borrow,
11163                ),
11164                encoder,
11165                offset + cur_offset,
11166                depth,
11167            )?;
11168
11169            _prev_end_offset = cur_offset + envelope_size;
11170            if 2 > max_ordinal {
11171                return Ok(());
11172            }
11173
11174            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11175            // are envelope_size bytes.
11176            let cur_offset: usize = (2 - 1) * envelope_size;
11177
11178            // Zero reserved fields.
11179            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11180
11181            // Safety:
11182            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11183            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11184            //   envelope_size bytes, there is always sufficient room.
11185            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u8, 253>, D>(
11186                self.value.as_ref().map(
11187                    <fidl::encoding::Vector<u8, 253> as fidl::encoding::ValueTypeMarker>::borrow,
11188                ),
11189                encoder,
11190                offset + cur_offset,
11191                depth,
11192            )?;
11193
11194            _prev_end_offset = cur_offset + envelope_size;
11195
11196            Ok(())
11197        }
11198    }
11199
11200    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DnsTxtEntry {
11201        #[inline(always)]
11202        fn new_empty() -> Self {
11203            Self::default()
11204        }
11205
11206        unsafe fn decode(
11207            &mut self,
11208            decoder: &mut fidl::encoding::Decoder<'_, D>,
11209            offset: usize,
11210            mut depth: fidl::encoding::Depth,
11211        ) -> fidl::Result<()> {
11212            decoder.debug_check_bounds::<Self>(offset);
11213            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
11214                None => return Err(fidl::Error::NotNullable),
11215                Some(len) => len,
11216            };
11217            // Calling decoder.out_of_line_offset(0) is not allowed.
11218            if len == 0 {
11219                return Ok(());
11220            };
11221            depth.increment()?;
11222            let envelope_size = 8;
11223            let bytes_len = len * envelope_size;
11224            let offset = decoder.out_of_line_offset(bytes_len)?;
11225            // Decode the envelope for each type.
11226            let mut _next_ordinal_to_read = 0;
11227            let mut next_offset = offset;
11228            let end_offset = offset + bytes_len;
11229            _next_ordinal_to_read += 1;
11230            if next_offset >= end_offset {
11231                return Ok(());
11232            }
11233
11234            // Decode unknown envelopes for gaps in ordinals.
11235            while _next_ordinal_to_read < 1 {
11236                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11237                _next_ordinal_to_read += 1;
11238                next_offset += envelope_size;
11239            }
11240
11241            let next_out_of_line = decoder.next_out_of_line();
11242            let handles_before = decoder.remaining_handles();
11243            if let Some((inlined, num_bytes, num_handles)) =
11244                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11245            {
11246                let member_inline_size =
11247                    <fidl::encoding::BoundedString<64> as fidl::encoding::TypeMarker>::inline_size(
11248                        decoder.context,
11249                    );
11250                if inlined != (member_inline_size <= 4) {
11251                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11252                }
11253                let inner_offset;
11254                let mut inner_depth = depth.clone();
11255                if inlined {
11256                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11257                    inner_offset = next_offset;
11258                } else {
11259                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11260                    inner_depth.increment()?;
11261                }
11262                let val_ref = self
11263                    .key
11264                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<64>, D));
11265                fidl::decode!(
11266                    fidl::encoding::BoundedString<64>,
11267                    D,
11268                    val_ref,
11269                    decoder,
11270                    inner_offset,
11271                    inner_depth
11272                )?;
11273                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11274                {
11275                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11276                }
11277                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11278                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11279                }
11280            }
11281
11282            next_offset += envelope_size;
11283            _next_ordinal_to_read += 1;
11284            if next_offset >= end_offset {
11285                return Ok(());
11286            }
11287
11288            // Decode unknown envelopes for gaps in ordinals.
11289            while _next_ordinal_to_read < 2 {
11290                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11291                _next_ordinal_to_read += 1;
11292                next_offset += envelope_size;
11293            }
11294
11295            let next_out_of_line = decoder.next_out_of_line();
11296            let handles_before = decoder.remaining_handles();
11297            if let Some((inlined, num_bytes, num_handles)) =
11298                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11299            {
11300                let member_inline_size =
11301                    <fidl::encoding::Vector<u8, 253> as fidl::encoding::TypeMarker>::inline_size(
11302                        decoder.context,
11303                    );
11304                if inlined != (member_inline_size <= 4) {
11305                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11306                }
11307                let inner_offset;
11308                let mut inner_depth = depth.clone();
11309                if inlined {
11310                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11311                    inner_offset = next_offset;
11312                } else {
11313                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11314                    inner_depth.increment()?;
11315                }
11316                let val_ref = self
11317                    .value
11318                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u8, 253>, D));
11319                fidl::decode!(fidl::encoding::Vector<u8, 253>, D, val_ref, decoder, inner_offset, inner_depth)?;
11320                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11321                {
11322                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11323                }
11324                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11325                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11326                }
11327            }
11328
11329            next_offset += envelope_size;
11330
11331            // Decode the remaining unknown envelopes.
11332            while next_offset < end_offset {
11333                _next_ordinal_to_read += 1;
11334                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11335                next_offset += envelope_size;
11336            }
11337
11338            Ok(())
11339        }
11340    }
11341
11342    impl DnssdCounters {
11343        #[inline(always)]
11344        fn max_ordinal_present(&self) -> u64 {
11345            if let Some(_) = self.upstream_dns_counters {
11346                return 8;
11347            }
11348            if let Some(_) = self.resolved_by_srp {
11349                return 7;
11350            }
11351            if let Some(_) = self.other_response {
11352                return 6;
11353            }
11354            if let Some(_) = self.not_implemented_response {
11355                return 5;
11356            }
11357            if let Some(_) = self.name_error_response {
11358                return 4;
11359            }
11360            if let Some(_) = self.format_error_response {
11361                return 3;
11362            }
11363            if let Some(_) = self.server_failure_response {
11364                return 2;
11365            }
11366            if let Some(_) = self.success_response {
11367                return 1;
11368            }
11369            0
11370        }
11371    }
11372
11373    impl fidl::encoding::ValueTypeMarker for DnssdCounters {
11374        type Borrowed<'a> = &'a Self;
11375        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
11376            value
11377        }
11378    }
11379
11380    unsafe impl fidl::encoding::TypeMarker for DnssdCounters {
11381        type Owned = Self;
11382
11383        #[inline(always)]
11384        fn inline_align(_context: fidl::encoding::Context) -> usize {
11385            8
11386        }
11387
11388        #[inline(always)]
11389        fn inline_size(_context: fidl::encoding::Context) -> usize {
11390            16
11391        }
11392    }
11393
11394    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<DnssdCounters, D>
11395        for &DnssdCounters
11396    {
11397        unsafe fn encode(
11398            self,
11399            encoder: &mut fidl::encoding::Encoder<'_, D>,
11400            offset: usize,
11401            mut depth: fidl::encoding::Depth,
11402        ) -> fidl::Result<()> {
11403            encoder.debug_check_bounds::<DnssdCounters>(offset);
11404            // Vector header
11405            let max_ordinal: u64 = self.max_ordinal_present();
11406            encoder.write_num(max_ordinal, offset);
11407            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
11408            // Calling encoder.out_of_line_offset(0) is not allowed.
11409            if max_ordinal == 0 {
11410                return Ok(());
11411            }
11412            depth.increment()?;
11413            let envelope_size = 8;
11414            let bytes_len = max_ordinal as usize * envelope_size;
11415            #[allow(unused_variables)]
11416            let offset = encoder.out_of_line_offset(bytes_len);
11417            let mut _prev_end_offset: usize = 0;
11418            if 1 > max_ordinal {
11419                return Ok(());
11420            }
11421
11422            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11423            // are envelope_size bytes.
11424            let cur_offset: usize = (1 - 1) * envelope_size;
11425
11426            // Zero reserved fields.
11427            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11428
11429            // Safety:
11430            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11431            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11432            //   envelope_size bytes, there is always sufficient room.
11433            fidl::encoding::encode_in_envelope_optional::<u32, D>(
11434                self.success_response
11435                    .as_ref()
11436                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
11437                encoder,
11438                offset + cur_offset,
11439                depth,
11440            )?;
11441
11442            _prev_end_offset = cur_offset + envelope_size;
11443            if 2 > max_ordinal {
11444                return Ok(());
11445            }
11446
11447            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11448            // are envelope_size bytes.
11449            let cur_offset: usize = (2 - 1) * envelope_size;
11450
11451            // Zero reserved fields.
11452            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11453
11454            // Safety:
11455            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11456            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11457            //   envelope_size bytes, there is always sufficient room.
11458            fidl::encoding::encode_in_envelope_optional::<u32, D>(
11459                self.server_failure_response
11460                    .as_ref()
11461                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
11462                encoder,
11463                offset + cur_offset,
11464                depth,
11465            )?;
11466
11467            _prev_end_offset = cur_offset + envelope_size;
11468            if 3 > max_ordinal {
11469                return Ok(());
11470            }
11471
11472            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11473            // are envelope_size bytes.
11474            let cur_offset: usize = (3 - 1) * envelope_size;
11475
11476            // Zero reserved fields.
11477            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11478
11479            // Safety:
11480            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11481            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11482            //   envelope_size bytes, there is always sufficient room.
11483            fidl::encoding::encode_in_envelope_optional::<u32, D>(
11484                self.format_error_response
11485                    .as_ref()
11486                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
11487                encoder,
11488                offset + cur_offset,
11489                depth,
11490            )?;
11491
11492            _prev_end_offset = cur_offset + envelope_size;
11493            if 4 > max_ordinal {
11494                return Ok(());
11495            }
11496
11497            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11498            // are envelope_size bytes.
11499            let cur_offset: usize = (4 - 1) * envelope_size;
11500
11501            // Zero reserved fields.
11502            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11503
11504            // Safety:
11505            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11506            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11507            //   envelope_size bytes, there is always sufficient room.
11508            fidl::encoding::encode_in_envelope_optional::<u32, D>(
11509                self.name_error_response
11510                    .as_ref()
11511                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
11512                encoder,
11513                offset + cur_offset,
11514                depth,
11515            )?;
11516
11517            _prev_end_offset = cur_offset + envelope_size;
11518            if 5 > max_ordinal {
11519                return Ok(());
11520            }
11521
11522            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11523            // are envelope_size bytes.
11524            let cur_offset: usize = (5 - 1) * envelope_size;
11525
11526            // Zero reserved fields.
11527            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11528
11529            // Safety:
11530            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11531            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11532            //   envelope_size bytes, there is always sufficient room.
11533            fidl::encoding::encode_in_envelope_optional::<u32, D>(
11534                self.not_implemented_response
11535                    .as_ref()
11536                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
11537                encoder,
11538                offset + cur_offset,
11539                depth,
11540            )?;
11541
11542            _prev_end_offset = cur_offset + envelope_size;
11543            if 6 > max_ordinal {
11544                return Ok(());
11545            }
11546
11547            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11548            // are envelope_size bytes.
11549            let cur_offset: usize = (6 - 1) * envelope_size;
11550
11551            // Zero reserved fields.
11552            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11553
11554            // Safety:
11555            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11556            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11557            //   envelope_size bytes, there is always sufficient room.
11558            fidl::encoding::encode_in_envelope_optional::<u32, D>(
11559                self.other_response.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
11560                encoder,
11561                offset + cur_offset,
11562                depth,
11563            )?;
11564
11565            _prev_end_offset = cur_offset + envelope_size;
11566            if 7 > max_ordinal {
11567                return Ok(());
11568            }
11569
11570            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11571            // are envelope_size bytes.
11572            let cur_offset: usize = (7 - 1) * envelope_size;
11573
11574            // Zero reserved fields.
11575            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11576
11577            // Safety:
11578            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11579            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11580            //   envelope_size bytes, there is always sufficient room.
11581            fidl::encoding::encode_in_envelope_optional::<u32, D>(
11582                self.resolved_by_srp.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
11583                encoder,
11584                offset + cur_offset,
11585                depth,
11586            )?;
11587
11588            _prev_end_offset = cur_offset + envelope_size;
11589            if 8 > max_ordinal {
11590                return Ok(());
11591            }
11592
11593            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11594            // are envelope_size bytes.
11595            let cur_offset: usize = (8 - 1) * envelope_size;
11596
11597            // Zero reserved fields.
11598            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11599
11600            // Safety:
11601            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11602            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11603            //   envelope_size bytes, there is always sufficient room.
11604            fidl::encoding::encode_in_envelope_optional::<UpstreamDnsCounters, D>(
11605                self.upstream_dns_counters
11606                    .as_ref()
11607                    .map(<UpstreamDnsCounters as fidl::encoding::ValueTypeMarker>::borrow),
11608                encoder,
11609                offset + cur_offset,
11610                depth,
11611            )?;
11612
11613            _prev_end_offset = cur_offset + envelope_size;
11614
11615            Ok(())
11616        }
11617    }
11618
11619    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DnssdCounters {
11620        #[inline(always)]
11621        fn new_empty() -> Self {
11622            Self::default()
11623        }
11624
11625        unsafe fn decode(
11626            &mut self,
11627            decoder: &mut fidl::encoding::Decoder<'_, D>,
11628            offset: usize,
11629            mut depth: fidl::encoding::Depth,
11630        ) -> fidl::Result<()> {
11631            decoder.debug_check_bounds::<Self>(offset);
11632            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
11633                None => return Err(fidl::Error::NotNullable),
11634                Some(len) => len,
11635            };
11636            // Calling decoder.out_of_line_offset(0) is not allowed.
11637            if len == 0 {
11638                return Ok(());
11639            };
11640            depth.increment()?;
11641            let envelope_size = 8;
11642            let bytes_len = len * envelope_size;
11643            let offset = decoder.out_of_line_offset(bytes_len)?;
11644            // Decode the envelope for each type.
11645            let mut _next_ordinal_to_read = 0;
11646            let mut next_offset = offset;
11647            let end_offset = offset + bytes_len;
11648            _next_ordinal_to_read += 1;
11649            if next_offset >= end_offset {
11650                return Ok(());
11651            }
11652
11653            // Decode unknown envelopes for gaps in ordinals.
11654            while _next_ordinal_to_read < 1 {
11655                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11656                _next_ordinal_to_read += 1;
11657                next_offset += envelope_size;
11658            }
11659
11660            let next_out_of_line = decoder.next_out_of_line();
11661            let handles_before = decoder.remaining_handles();
11662            if let Some((inlined, num_bytes, num_handles)) =
11663                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11664            {
11665                let member_inline_size =
11666                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
11667                if inlined != (member_inline_size <= 4) {
11668                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11669                }
11670                let inner_offset;
11671                let mut inner_depth = depth.clone();
11672                if inlined {
11673                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11674                    inner_offset = next_offset;
11675                } else {
11676                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11677                    inner_depth.increment()?;
11678                }
11679                let val_ref = self.success_response.get_or_insert_with(|| fidl::new_empty!(u32, D));
11680                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
11681                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11682                {
11683                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11684                }
11685                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11686                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11687                }
11688            }
11689
11690            next_offset += envelope_size;
11691            _next_ordinal_to_read += 1;
11692            if next_offset >= end_offset {
11693                return Ok(());
11694            }
11695
11696            // Decode unknown envelopes for gaps in ordinals.
11697            while _next_ordinal_to_read < 2 {
11698                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11699                _next_ordinal_to_read += 1;
11700                next_offset += envelope_size;
11701            }
11702
11703            let next_out_of_line = decoder.next_out_of_line();
11704            let handles_before = decoder.remaining_handles();
11705            if let Some((inlined, num_bytes, num_handles)) =
11706                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11707            {
11708                let member_inline_size =
11709                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
11710                if inlined != (member_inline_size <= 4) {
11711                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11712                }
11713                let inner_offset;
11714                let mut inner_depth = depth.clone();
11715                if inlined {
11716                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11717                    inner_offset = next_offset;
11718                } else {
11719                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11720                    inner_depth.increment()?;
11721                }
11722                let val_ref =
11723                    self.server_failure_response.get_or_insert_with(|| fidl::new_empty!(u32, D));
11724                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
11725                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11726                {
11727                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11728                }
11729                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11730                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11731                }
11732            }
11733
11734            next_offset += envelope_size;
11735            _next_ordinal_to_read += 1;
11736            if next_offset >= end_offset {
11737                return Ok(());
11738            }
11739
11740            // Decode unknown envelopes for gaps in ordinals.
11741            while _next_ordinal_to_read < 3 {
11742                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11743                _next_ordinal_to_read += 1;
11744                next_offset += envelope_size;
11745            }
11746
11747            let next_out_of_line = decoder.next_out_of_line();
11748            let handles_before = decoder.remaining_handles();
11749            if let Some((inlined, num_bytes, num_handles)) =
11750                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11751            {
11752                let member_inline_size =
11753                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
11754                if inlined != (member_inline_size <= 4) {
11755                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11756                }
11757                let inner_offset;
11758                let mut inner_depth = depth.clone();
11759                if inlined {
11760                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11761                    inner_offset = next_offset;
11762                } else {
11763                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11764                    inner_depth.increment()?;
11765                }
11766                let val_ref =
11767                    self.format_error_response.get_or_insert_with(|| fidl::new_empty!(u32, D));
11768                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
11769                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11770                {
11771                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11772                }
11773                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11774                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11775                }
11776            }
11777
11778            next_offset += envelope_size;
11779            _next_ordinal_to_read += 1;
11780            if next_offset >= end_offset {
11781                return Ok(());
11782            }
11783
11784            // Decode unknown envelopes for gaps in ordinals.
11785            while _next_ordinal_to_read < 4 {
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 =
11811                    self.name_error_response.get_or_insert_with(|| fidl::new_empty!(u32, D));
11812                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
11813                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11814                {
11815                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11816                }
11817                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11818                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11819                }
11820            }
11821
11822            next_offset += envelope_size;
11823            _next_ordinal_to_read += 1;
11824            if next_offset >= end_offset {
11825                return Ok(());
11826            }
11827
11828            // Decode unknown envelopes for gaps in ordinals.
11829            while _next_ordinal_to_read < 5 {
11830                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11831                _next_ordinal_to_read += 1;
11832                next_offset += envelope_size;
11833            }
11834
11835            let next_out_of_line = decoder.next_out_of_line();
11836            let handles_before = decoder.remaining_handles();
11837            if let Some((inlined, num_bytes, num_handles)) =
11838                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11839            {
11840                let member_inline_size =
11841                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
11842                if inlined != (member_inline_size <= 4) {
11843                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11844                }
11845                let inner_offset;
11846                let mut inner_depth = depth.clone();
11847                if inlined {
11848                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11849                    inner_offset = next_offset;
11850                } else {
11851                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11852                    inner_depth.increment()?;
11853                }
11854                let val_ref =
11855                    self.not_implemented_response.get_or_insert_with(|| fidl::new_empty!(u32, D));
11856                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
11857                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11858                {
11859                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11860                }
11861                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11862                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11863                }
11864            }
11865
11866            next_offset += envelope_size;
11867            _next_ordinal_to_read += 1;
11868            if next_offset >= end_offset {
11869                return Ok(());
11870            }
11871
11872            // Decode unknown envelopes for gaps in ordinals.
11873            while _next_ordinal_to_read < 6 {
11874                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11875                _next_ordinal_to_read += 1;
11876                next_offset += envelope_size;
11877            }
11878
11879            let next_out_of_line = decoder.next_out_of_line();
11880            let handles_before = decoder.remaining_handles();
11881            if let Some((inlined, num_bytes, num_handles)) =
11882                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11883            {
11884                let member_inline_size =
11885                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
11886                if inlined != (member_inline_size <= 4) {
11887                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11888                }
11889                let inner_offset;
11890                let mut inner_depth = depth.clone();
11891                if inlined {
11892                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11893                    inner_offset = next_offset;
11894                } else {
11895                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11896                    inner_depth.increment()?;
11897                }
11898                let val_ref = self.other_response.get_or_insert_with(|| fidl::new_empty!(u32, D));
11899                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
11900                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11901                {
11902                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11903                }
11904                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11905                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11906                }
11907            }
11908
11909            next_offset += envelope_size;
11910            _next_ordinal_to_read += 1;
11911            if next_offset >= end_offset {
11912                return Ok(());
11913            }
11914
11915            // Decode unknown envelopes for gaps in ordinals.
11916            while _next_ordinal_to_read < 7 {
11917                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11918                _next_ordinal_to_read += 1;
11919                next_offset += envelope_size;
11920            }
11921
11922            let next_out_of_line = decoder.next_out_of_line();
11923            let handles_before = decoder.remaining_handles();
11924            if let Some((inlined, num_bytes, num_handles)) =
11925                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11926            {
11927                let member_inline_size =
11928                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
11929                if inlined != (member_inline_size <= 4) {
11930                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11931                }
11932                let inner_offset;
11933                let mut inner_depth = depth.clone();
11934                if inlined {
11935                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11936                    inner_offset = next_offset;
11937                } else {
11938                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11939                    inner_depth.increment()?;
11940                }
11941                let val_ref = self.resolved_by_srp.get_or_insert_with(|| fidl::new_empty!(u32, D));
11942                fidl::decode!(u32, 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 < 8 {
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                    <UpstreamDnsCounters as fidl::encoding::TypeMarker>::inline_size(
11972                        decoder.context,
11973                    );
11974                if inlined != (member_inline_size <= 4) {
11975                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11976                }
11977                let inner_offset;
11978                let mut inner_depth = depth.clone();
11979                if inlined {
11980                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11981                    inner_offset = next_offset;
11982                } else {
11983                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11984                    inner_depth.increment()?;
11985                }
11986                let val_ref = self
11987                    .upstream_dns_counters
11988                    .get_or_insert_with(|| fidl::new_empty!(UpstreamDnsCounters, D));
11989                fidl::decode!(UpstreamDnsCounters, D, val_ref, decoder, inner_offset, inner_depth)?;
11990                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11991                {
11992                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11993                }
11994                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11995                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11996                }
11997            }
11998
11999            next_offset += envelope_size;
12000
12001            // Decode the remaining unknown envelopes.
12002            while next_offset < end_offset {
12003                _next_ordinal_to_read += 1;
12004                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12005                next_offset += envelope_size;
12006            }
12007
12008            Ok(())
12009        }
12010    }
12011
12012    impl EidCacheEntry {
12013        #[inline(always)]
12014        fn max_ordinal_present(&self) -> u64 {
12015            if let Some(_) = self.retry_delay {
12016                return 10;
12017            }
12018            if let Some(_) = self.timeout {
12019                return 9;
12020            }
12021            if let Some(_) = self.mesh_local_eid {
12022                return 8;
12023            }
12024            if let Some(_) = self.last_trans_time {
12025                return 7;
12026            }
12027            if let Some(_) = self.valid_last_trans {
12028                return 6;
12029            }
12030            if let Some(_) = self.ramp_down {
12031                return 5;
12032            }
12033            if let Some(_) = self.can_evict {
12034                return 4;
12035            }
12036            if let Some(_) = self.state {
12037                return 3;
12038            }
12039            if let Some(_) = self.rloc16 {
12040                return 2;
12041            }
12042            if let Some(_) = self.target {
12043                return 1;
12044            }
12045            0
12046        }
12047    }
12048
12049    impl fidl::encoding::ValueTypeMarker for EidCacheEntry {
12050        type Borrowed<'a> = &'a Self;
12051        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
12052            value
12053        }
12054    }
12055
12056    unsafe impl fidl::encoding::TypeMarker for EidCacheEntry {
12057        type Owned = Self;
12058
12059        #[inline(always)]
12060        fn inline_align(_context: fidl::encoding::Context) -> usize {
12061            8
12062        }
12063
12064        #[inline(always)]
12065        fn inline_size(_context: fidl::encoding::Context) -> usize {
12066            16
12067        }
12068    }
12069
12070    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<EidCacheEntry, D>
12071        for &EidCacheEntry
12072    {
12073        unsafe fn encode(
12074            self,
12075            encoder: &mut fidl::encoding::Encoder<'_, D>,
12076            offset: usize,
12077            mut depth: fidl::encoding::Depth,
12078        ) -> fidl::Result<()> {
12079            encoder.debug_check_bounds::<EidCacheEntry>(offset);
12080            // Vector header
12081            let max_ordinal: u64 = self.max_ordinal_present();
12082            encoder.write_num(max_ordinal, offset);
12083            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
12084            // Calling encoder.out_of_line_offset(0) is not allowed.
12085            if max_ordinal == 0 {
12086                return Ok(());
12087            }
12088            depth.increment()?;
12089            let envelope_size = 8;
12090            let bytes_len = max_ordinal as usize * envelope_size;
12091            #[allow(unused_variables)]
12092            let offset = encoder.out_of_line_offset(bytes_len);
12093            let mut _prev_end_offset: usize = 0;
12094            if 1 > max_ordinal {
12095                return Ok(());
12096            }
12097
12098            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
12099            // are envelope_size bytes.
12100            let cur_offset: usize = (1 - 1) * envelope_size;
12101
12102            // Zero reserved fields.
12103            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
12104
12105            // Safety:
12106            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
12107            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
12108            //   envelope_size bytes, there is always sufficient room.
12109            fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_net_common::Ipv6Address, D>(
12110            self.target.as_ref().map(<fidl_fuchsia_net_common::Ipv6Address as fidl::encoding::ValueTypeMarker>::borrow),
12111            encoder, offset + cur_offset, depth
12112        )?;
12113
12114            _prev_end_offset = cur_offset + envelope_size;
12115            if 2 > max_ordinal {
12116                return Ok(());
12117            }
12118
12119            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
12120            // are envelope_size bytes.
12121            let cur_offset: usize = (2 - 1) * envelope_size;
12122
12123            // Zero reserved fields.
12124            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
12125
12126            // Safety:
12127            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
12128            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
12129            //   envelope_size bytes, there is always sufficient room.
12130            fidl::encoding::encode_in_envelope_optional::<u16, D>(
12131                self.rloc16.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
12132                encoder,
12133                offset + cur_offset,
12134                depth,
12135            )?;
12136
12137            _prev_end_offset = cur_offset + envelope_size;
12138            if 3 > max_ordinal {
12139                return Ok(());
12140            }
12141
12142            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
12143            // are envelope_size bytes.
12144            let cur_offset: usize = (3 - 1) * envelope_size;
12145
12146            // Zero reserved fields.
12147            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
12148
12149            // Safety:
12150            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
12151            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
12152            //   envelope_size bytes, there is always sufficient room.
12153            fidl::encoding::encode_in_envelope_optional::<CacheEntryState, D>(
12154                self.state
12155                    .as_ref()
12156                    .map(<CacheEntryState as fidl::encoding::ValueTypeMarker>::borrow),
12157                encoder,
12158                offset + cur_offset,
12159                depth,
12160            )?;
12161
12162            _prev_end_offset = cur_offset + envelope_size;
12163            if 4 > max_ordinal {
12164                return Ok(());
12165            }
12166
12167            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
12168            // are envelope_size bytes.
12169            let cur_offset: usize = (4 - 1) * envelope_size;
12170
12171            // Zero reserved fields.
12172            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
12173
12174            // Safety:
12175            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
12176            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
12177            //   envelope_size bytes, there is always sufficient room.
12178            fidl::encoding::encode_in_envelope_optional::<bool, D>(
12179                self.can_evict.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
12180                encoder,
12181                offset + cur_offset,
12182                depth,
12183            )?;
12184
12185            _prev_end_offset = cur_offset + envelope_size;
12186            if 5 > max_ordinal {
12187                return Ok(());
12188            }
12189
12190            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
12191            // are envelope_size bytes.
12192            let cur_offset: usize = (5 - 1) * envelope_size;
12193
12194            // Zero reserved fields.
12195            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
12196
12197            // Safety:
12198            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
12199            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
12200            //   envelope_size bytes, there is always sufficient room.
12201            fidl::encoding::encode_in_envelope_optional::<bool, D>(
12202                self.ramp_down.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
12203                encoder,
12204                offset + cur_offset,
12205                depth,
12206            )?;
12207
12208            _prev_end_offset = cur_offset + envelope_size;
12209            if 6 > max_ordinal {
12210                return Ok(());
12211            }
12212
12213            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
12214            // are envelope_size bytes.
12215            let cur_offset: usize = (6 - 1) * envelope_size;
12216
12217            // Zero reserved fields.
12218            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
12219
12220            // Safety:
12221            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
12222            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
12223            //   envelope_size bytes, there is always sufficient room.
12224            fidl::encoding::encode_in_envelope_optional::<bool, D>(
12225                self.valid_last_trans
12226                    .as_ref()
12227                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
12228                encoder,
12229                offset + cur_offset,
12230                depth,
12231            )?;
12232
12233            _prev_end_offset = cur_offset + envelope_size;
12234            if 7 > max_ordinal {
12235                return Ok(());
12236            }
12237
12238            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
12239            // are envelope_size bytes.
12240            let cur_offset: usize = (7 - 1) * envelope_size;
12241
12242            // Zero reserved fields.
12243            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
12244
12245            // Safety:
12246            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
12247            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
12248            //   envelope_size bytes, there is always sufficient room.
12249            fidl::encoding::encode_in_envelope_optional::<i64, D>(
12250                self.last_trans_time.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
12251                encoder,
12252                offset + cur_offset,
12253                depth,
12254            )?;
12255
12256            _prev_end_offset = cur_offset + envelope_size;
12257            if 8 > max_ordinal {
12258                return Ok(());
12259            }
12260
12261            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
12262            // are envelope_size bytes.
12263            let cur_offset: usize = (8 - 1) * envelope_size;
12264
12265            // Zero reserved fields.
12266            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
12267
12268            // Safety:
12269            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
12270            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
12271            //   envelope_size bytes, there is always sufficient room.
12272            fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_net_common::Ipv6Address, D>(
12273            self.mesh_local_eid.as_ref().map(<fidl_fuchsia_net_common::Ipv6Address as fidl::encoding::ValueTypeMarker>::borrow),
12274            encoder, offset + cur_offset, depth
12275        )?;
12276
12277            _prev_end_offset = cur_offset + envelope_size;
12278            if 9 > max_ordinal {
12279                return Ok(());
12280            }
12281
12282            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
12283            // are envelope_size bytes.
12284            let cur_offset: usize = (9 - 1) * envelope_size;
12285
12286            // Zero reserved fields.
12287            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
12288
12289            // Safety:
12290            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
12291            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
12292            //   envelope_size bytes, there is always sufficient room.
12293            fidl::encoding::encode_in_envelope_optional::<i64, D>(
12294                self.timeout.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
12295                encoder,
12296                offset + cur_offset,
12297                depth,
12298            )?;
12299
12300            _prev_end_offset = cur_offset + envelope_size;
12301            if 10 > max_ordinal {
12302                return Ok(());
12303            }
12304
12305            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
12306            // are envelope_size bytes.
12307            let cur_offset: usize = (10 - 1) * envelope_size;
12308
12309            // Zero reserved fields.
12310            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
12311
12312            // Safety:
12313            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
12314            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
12315            //   envelope_size bytes, there is always sufficient room.
12316            fidl::encoding::encode_in_envelope_optional::<i64, D>(
12317                self.retry_delay.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
12318                encoder,
12319                offset + cur_offset,
12320                depth,
12321            )?;
12322
12323            _prev_end_offset = cur_offset + envelope_size;
12324
12325            Ok(())
12326        }
12327    }
12328
12329    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for EidCacheEntry {
12330        #[inline(always)]
12331        fn new_empty() -> Self {
12332            Self::default()
12333        }
12334
12335        unsafe fn decode(
12336            &mut self,
12337            decoder: &mut fidl::encoding::Decoder<'_, D>,
12338            offset: usize,
12339            mut depth: fidl::encoding::Depth,
12340        ) -> fidl::Result<()> {
12341            decoder.debug_check_bounds::<Self>(offset);
12342            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
12343                None => return Err(fidl::Error::NotNullable),
12344                Some(len) => len,
12345            };
12346            // Calling decoder.out_of_line_offset(0) is not allowed.
12347            if len == 0 {
12348                return Ok(());
12349            };
12350            depth.increment()?;
12351            let envelope_size = 8;
12352            let bytes_len = len * envelope_size;
12353            let offset = decoder.out_of_line_offset(bytes_len)?;
12354            // Decode the envelope for each type.
12355            let mut _next_ordinal_to_read = 0;
12356            let mut next_offset = offset;
12357            let end_offset = offset + bytes_len;
12358            _next_ordinal_to_read += 1;
12359            if next_offset >= end_offset {
12360                return Ok(());
12361            }
12362
12363            // Decode unknown envelopes for gaps in ordinals.
12364            while _next_ordinal_to_read < 1 {
12365                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12366                _next_ordinal_to_read += 1;
12367                next_offset += envelope_size;
12368            }
12369
12370            let next_out_of_line = decoder.next_out_of_line();
12371            let handles_before = decoder.remaining_handles();
12372            if let Some((inlined, num_bytes, num_handles)) =
12373                fidl::encoding::decode_envelope_header(decoder, next_offset)?
12374            {
12375                let member_inline_size = <fidl_fuchsia_net_common::Ipv6Address as fidl::encoding::TypeMarker>::inline_size(decoder.context);
12376                if inlined != (member_inline_size <= 4) {
12377                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
12378                }
12379                let inner_offset;
12380                let mut inner_depth = depth.clone();
12381                if inlined {
12382                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
12383                    inner_offset = next_offset;
12384                } else {
12385                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
12386                    inner_depth.increment()?;
12387                }
12388                let val_ref = self.target.get_or_insert_with(|| {
12389                    fidl::new_empty!(fidl_fuchsia_net_common::Ipv6Address, D)
12390                });
12391                fidl::decode!(
12392                    fidl_fuchsia_net_common::Ipv6Address,
12393                    D,
12394                    val_ref,
12395                    decoder,
12396                    inner_offset,
12397                    inner_depth
12398                )?;
12399                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
12400                {
12401                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
12402                }
12403                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
12404                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
12405                }
12406            }
12407
12408            next_offset += envelope_size;
12409            _next_ordinal_to_read += 1;
12410            if next_offset >= end_offset {
12411                return Ok(());
12412            }
12413
12414            // Decode unknown envelopes for gaps in ordinals.
12415            while _next_ordinal_to_read < 2 {
12416                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12417                _next_ordinal_to_read += 1;
12418                next_offset += envelope_size;
12419            }
12420
12421            let next_out_of_line = decoder.next_out_of_line();
12422            let handles_before = decoder.remaining_handles();
12423            if let Some((inlined, num_bytes, num_handles)) =
12424                fidl::encoding::decode_envelope_header(decoder, next_offset)?
12425            {
12426                let member_inline_size =
12427                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
12428                if inlined != (member_inline_size <= 4) {
12429                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
12430                }
12431                let inner_offset;
12432                let mut inner_depth = depth.clone();
12433                if inlined {
12434                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
12435                    inner_offset = next_offset;
12436                } else {
12437                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
12438                    inner_depth.increment()?;
12439                }
12440                let val_ref = self.rloc16.get_or_insert_with(|| fidl::new_empty!(u16, D));
12441                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
12442                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
12443                {
12444                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
12445                }
12446                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
12447                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
12448                }
12449            }
12450
12451            next_offset += envelope_size;
12452            _next_ordinal_to_read += 1;
12453            if next_offset >= end_offset {
12454                return Ok(());
12455            }
12456
12457            // Decode unknown envelopes for gaps in ordinals.
12458            while _next_ordinal_to_read < 3 {
12459                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12460                _next_ordinal_to_read += 1;
12461                next_offset += envelope_size;
12462            }
12463
12464            let next_out_of_line = decoder.next_out_of_line();
12465            let handles_before = decoder.remaining_handles();
12466            if let Some((inlined, num_bytes, num_handles)) =
12467                fidl::encoding::decode_envelope_header(decoder, next_offset)?
12468            {
12469                let member_inline_size =
12470                    <CacheEntryState as fidl::encoding::TypeMarker>::inline_size(decoder.context);
12471                if inlined != (member_inline_size <= 4) {
12472                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
12473                }
12474                let inner_offset;
12475                let mut inner_depth = depth.clone();
12476                if inlined {
12477                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
12478                    inner_offset = next_offset;
12479                } else {
12480                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
12481                    inner_depth.increment()?;
12482                }
12483                let val_ref =
12484                    self.state.get_or_insert_with(|| fidl::new_empty!(CacheEntryState, D));
12485                fidl::decode!(CacheEntryState, D, val_ref, decoder, inner_offset, inner_depth)?;
12486                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
12487                {
12488                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
12489                }
12490                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
12491                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
12492                }
12493            }
12494
12495            next_offset += envelope_size;
12496            _next_ordinal_to_read += 1;
12497            if next_offset >= end_offset {
12498                return Ok(());
12499            }
12500
12501            // Decode unknown envelopes for gaps in ordinals.
12502            while _next_ordinal_to_read < 4 {
12503                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12504                _next_ordinal_to_read += 1;
12505                next_offset += envelope_size;
12506            }
12507
12508            let next_out_of_line = decoder.next_out_of_line();
12509            let handles_before = decoder.remaining_handles();
12510            if let Some((inlined, num_bytes, num_handles)) =
12511                fidl::encoding::decode_envelope_header(decoder, next_offset)?
12512            {
12513                let member_inline_size =
12514                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
12515                if inlined != (member_inline_size <= 4) {
12516                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
12517                }
12518                let inner_offset;
12519                let mut inner_depth = depth.clone();
12520                if inlined {
12521                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
12522                    inner_offset = next_offset;
12523                } else {
12524                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
12525                    inner_depth.increment()?;
12526                }
12527                let val_ref = self.can_evict.get_or_insert_with(|| fidl::new_empty!(bool, D));
12528                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
12529                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
12530                {
12531                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
12532                }
12533                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
12534                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
12535                }
12536            }
12537
12538            next_offset += envelope_size;
12539            _next_ordinal_to_read += 1;
12540            if next_offset >= end_offset {
12541                return Ok(());
12542            }
12543
12544            // Decode unknown envelopes for gaps in ordinals.
12545            while _next_ordinal_to_read < 5 {
12546                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12547                _next_ordinal_to_read += 1;
12548                next_offset += envelope_size;
12549            }
12550
12551            let next_out_of_line = decoder.next_out_of_line();
12552            let handles_before = decoder.remaining_handles();
12553            if let Some((inlined, num_bytes, num_handles)) =
12554                fidl::encoding::decode_envelope_header(decoder, next_offset)?
12555            {
12556                let member_inline_size =
12557                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
12558                if inlined != (member_inline_size <= 4) {
12559                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
12560                }
12561                let inner_offset;
12562                let mut inner_depth = depth.clone();
12563                if inlined {
12564                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
12565                    inner_offset = next_offset;
12566                } else {
12567                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
12568                    inner_depth.increment()?;
12569                }
12570                let val_ref = self.ramp_down.get_or_insert_with(|| fidl::new_empty!(bool, D));
12571                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
12572                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
12573                {
12574                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
12575                }
12576                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
12577                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
12578                }
12579            }
12580
12581            next_offset += envelope_size;
12582            _next_ordinal_to_read += 1;
12583            if next_offset >= end_offset {
12584                return Ok(());
12585            }
12586
12587            // Decode unknown envelopes for gaps in ordinals.
12588            while _next_ordinal_to_read < 6 {
12589                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12590                _next_ordinal_to_read += 1;
12591                next_offset += envelope_size;
12592            }
12593
12594            let next_out_of_line = decoder.next_out_of_line();
12595            let handles_before = decoder.remaining_handles();
12596            if let Some((inlined, num_bytes, num_handles)) =
12597                fidl::encoding::decode_envelope_header(decoder, next_offset)?
12598            {
12599                let member_inline_size =
12600                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
12601                if inlined != (member_inline_size <= 4) {
12602                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
12603                }
12604                let inner_offset;
12605                let mut inner_depth = depth.clone();
12606                if inlined {
12607                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
12608                    inner_offset = next_offset;
12609                } else {
12610                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
12611                    inner_depth.increment()?;
12612                }
12613                let val_ref =
12614                    self.valid_last_trans.get_or_insert_with(|| fidl::new_empty!(bool, D));
12615                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
12616                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
12617                {
12618                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
12619                }
12620                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
12621                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
12622                }
12623            }
12624
12625            next_offset += envelope_size;
12626            _next_ordinal_to_read += 1;
12627            if next_offset >= end_offset {
12628                return Ok(());
12629            }
12630
12631            // Decode unknown envelopes for gaps in ordinals.
12632            while _next_ordinal_to_read < 7 {
12633                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12634                _next_ordinal_to_read += 1;
12635                next_offset += envelope_size;
12636            }
12637
12638            let next_out_of_line = decoder.next_out_of_line();
12639            let handles_before = decoder.remaining_handles();
12640            if let Some((inlined, num_bytes, num_handles)) =
12641                fidl::encoding::decode_envelope_header(decoder, next_offset)?
12642            {
12643                let member_inline_size =
12644                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
12645                if inlined != (member_inline_size <= 4) {
12646                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
12647                }
12648                let inner_offset;
12649                let mut inner_depth = depth.clone();
12650                if inlined {
12651                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
12652                    inner_offset = next_offset;
12653                } else {
12654                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
12655                    inner_depth.increment()?;
12656                }
12657                let val_ref = self.last_trans_time.get_or_insert_with(|| fidl::new_empty!(i64, D));
12658                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
12659                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
12660                {
12661                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
12662                }
12663                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
12664                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
12665                }
12666            }
12667
12668            next_offset += envelope_size;
12669            _next_ordinal_to_read += 1;
12670            if next_offset >= end_offset {
12671                return Ok(());
12672            }
12673
12674            // Decode unknown envelopes for gaps in ordinals.
12675            while _next_ordinal_to_read < 8 {
12676                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12677                _next_ordinal_to_read += 1;
12678                next_offset += envelope_size;
12679            }
12680
12681            let next_out_of_line = decoder.next_out_of_line();
12682            let handles_before = decoder.remaining_handles();
12683            if let Some((inlined, num_bytes, num_handles)) =
12684                fidl::encoding::decode_envelope_header(decoder, next_offset)?
12685            {
12686                let member_inline_size = <fidl_fuchsia_net_common::Ipv6Address as fidl::encoding::TypeMarker>::inline_size(decoder.context);
12687                if inlined != (member_inline_size <= 4) {
12688                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
12689                }
12690                let inner_offset;
12691                let mut inner_depth = depth.clone();
12692                if inlined {
12693                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
12694                    inner_offset = next_offset;
12695                } else {
12696                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
12697                    inner_depth.increment()?;
12698                }
12699                let val_ref = self.mesh_local_eid.get_or_insert_with(|| {
12700                    fidl::new_empty!(fidl_fuchsia_net_common::Ipv6Address, D)
12701                });
12702                fidl::decode!(
12703                    fidl_fuchsia_net_common::Ipv6Address,
12704                    D,
12705                    val_ref,
12706                    decoder,
12707                    inner_offset,
12708                    inner_depth
12709                )?;
12710                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
12711                {
12712                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
12713                }
12714                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
12715                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
12716                }
12717            }
12718
12719            next_offset += envelope_size;
12720            _next_ordinal_to_read += 1;
12721            if next_offset >= end_offset {
12722                return Ok(());
12723            }
12724
12725            // Decode unknown envelopes for gaps in ordinals.
12726            while _next_ordinal_to_read < 9 {
12727                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12728                _next_ordinal_to_read += 1;
12729                next_offset += envelope_size;
12730            }
12731
12732            let next_out_of_line = decoder.next_out_of_line();
12733            let handles_before = decoder.remaining_handles();
12734            if let Some((inlined, num_bytes, num_handles)) =
12735                fidl::encoding::decode_envelope_header(decoder, next_offset)?
12736            {
12737                let member_inline_size =
12738                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
12739                if inlined != (member_inline_size <= 4) {
12740                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
12741                }
12742                let inner_offset;
12743                let mut inner_depth = depth.clone();
12744                if inlined {
12745                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
12746                    inner_offset = next_offset;
12747                } else {
12748                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
12749                    inner_depth.increment()?;
12750                }
12751                let val_ref = self.timeout.get_or_insert_with(|| fidl::new_empty!(i64, D));
12752                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
12753                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
12754                {
12755                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
12756                }
12757                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
12758                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
12759                }
12760            }
12761
12762            next_offset += envelope_size;
12763            _next_ordinal_to_read += 1;
12764            if next_offset >= end_offset {
12765                return Ok(());
12766            }
12767
12768            // Decode unknown envelopes for gaps in ordinals.
12769            while _next_ordinal_to_read < 10 {
12770                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12771                _next_ordinal_to_read += 1;
12772                next_offset += envelope_size;
12773            }
12774
12775            let next_out_of_line = decoder.next_out_of_line();
12776            let handles_before = decoder.remaining_handles();
12777            if let Some((inlined, num_bytes, num_handles)) =
12778                fidl::encoding::decode_envelope_header(decoder, next_offset)?
12779            {
12780                let member_inline_size =
12781                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
12782                if inlined != (member_inline_size <= 4) {
12783                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
12784                }
12785                let inner_offset;
12786                let mut inner_depth = depth.clone();
12787                if inlined {
12788                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
12789                    inner_offset = next_offset;
12790                } else {
12791                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
12792                    inner_depth.increment()?;
12793                }
12794                let val_ref = self.retry_delay.get_or_insert_with(|| fidl::new_empty!(i64, D));
12795                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
12796                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
12797                {
12798                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
12799                }
12800                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
12801                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
12802                }
12803            }
12804
12805            next_offset += envelope_size;
12806
12807            // Decode the remaining unknown envelopes.
12808            while next_offset < end_offset {
12809                _next_ordinal_to_read += 1;
12810                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12811                next_offset += envelope_size;
12812            }
12813
12814            Ok(())
12815        }
12816    }
12817
12818    impl ExternalRoute {
12819        #[inline(always)]
12820        fn max_ordinal_present(&self) -> u64 {
12821            if let Some(_) = self.stable {
12822                return 3;
12823            }
12824            if let Some(_) = self.route_preference {
12825                return 2;
12826            }
12827            if let Some(_) = self.subnet {
12828                return 1;
12829            }
12830            0
12831        }
12832    }
12833
12834    impl fidl::encoding::ValueTypeMarker for ExternalRoute {
12835        type Borrowed<'a> = &'a Self;
12836        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
12837            value
12838        }
12839    }
12840
12841    unsafe impl fidl::encoding::TypeMarker for ExternalRoute {
12842        type Owned = Self;
12843
12844        #[inline(always)]
12845        fn inline_align(_context: fidl::encoding::Context) -> usize {
12846            8
12847        }
12848
12849        #[inline(always)]
12850        fn inline_size(_context: fidl::encoding::Context) -> usize {
12851            16
12852        }
12853    }
12854
12855    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<ExternalRoute, D>
12856        for &ExternalRoute
12857    {
12858        unsafe fn encode(
12859            self,
12860            encoder: &mut fidl::encoding::Encoder<'_, D>,
12861            offset: usize,
12862            mut depth: fidl::encoding::Depth,
12863        ) -> fidl::Result<()> {
12864            encoder.debug_check_bounds::<ExternalRoute>(offset);
12865            // Vector header
12866            let max_ordinal: u64 = self.max_ordinal_present();
12867            encoder.write_num(max_ordinal, offset);
12868            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
12869            // Calling encoder.out_of_line_offset(0) is not allowed.
12870            if max_ordinal == 0 {
12871                return Ok(());
12872            }
12873            depth.increment()?;
12874            let envelope_size = 8;
12875            let bytes_len = max_ordinal as usize * envelope_size;
12876            #[allow(unused_variables)]
12877            let offset = encoder.out_of_line_offset(bytes_len);
12878            let mut _prev_end_offset: usize = 0;
12879            if 1 > max_ordinal {
12880                return Ok(());
12881            }
12882
12883            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
12884            // are envelope_size bytes.
12885            let cur_offset: usize = (1 - 1) * envelope_size;
12886
12887            // Zero reserved fields.
12888            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
12889
12890            // Safety:
12891            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
12892            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
12893            //   envelope_size bytes, there is always sufficient room.
12894            fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_net_common::Ipv6AddressWithPrefix, D>(
12895            self.subnet.as_ref().map(<fidl_fuchsia_net_common::Ipv6AddressWithPrefix as fidl::encoding::ValueTypeMarker>::borrow),
12896            encoder, offset + cur_offset, depth
12897        )?;
12898
12899            _prev_end_offset = cur_offset + envelope_size;
12900            if 2 > max_ordinal {
12901                return Ok(());
12902            }
12903
12904            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
12905            // are envelope_size bytes.
12906            let cur_offset: usize = (2 - 1) * envelope_size;
12907
12908            // Zero reserved fields.
12909            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
12910
12911            // Safety:
12912            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
12913            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
12914            //   envelope_size bytes, there is always sufficient room.
12915            fidl::encoding::encode_in_envelope_optional::<RoutePreference, D>(
12916                self.route_preference
12917                    .as_ref()
12918                    .map(<RoutePreference as fidl::encoding::ValueTypeMarker>::borrow),
12919                encoder,
12920                offset + cur_offset,
12921                depth,
12922            )?;
12923
12924            _prev_end_offset = cur_offset + envelope_size;
12925            if 3 > max_ordinal {
12926                return Ok(());
12927            }
12928
12929            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
12930            // are envelope_size bytes.
12931            let cur_offset: usize = (3 - 1) * envelope_size;
12932
12933            // Zero reserved fields.
12934            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
12935
12936            // Safety:
12937            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
12938            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
12939            //   envelope_size bytes, there is always sufficient room.
12940            fidl::encoding::encode_in_envelope_optional::<bool, D>(
12941                self.stable.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
12942                encoder,
12943                offset + cur_offset,
12944                depth,
12945            )?;
12946
12947            _prev_end_offset = cur_offset + envelope_size;
12948
12949            Ok(())
12950        }
12951    }
12952
12953    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ExternalRoute {
12954        #[inline(always)]
12955        fn new_empty() -> Self {
12956            Self::default()
12957        }
12958
12959        unsafe fn decode(
12960            &mut self,
12961            decoder: &mut fidl::encoding::Decoder<'_, D>,
12962            offset: usize,
12963            mut depth: fidl::encoding::Depth,
12964        ) -> fidl::Result<()> {
12965            decoder.debug_check_bounds::<Self>(offset);
12966            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
12967                None => return Err(fidl::Error::NotNullable),
12968                Some(len) => len,
12969            };
12970            // Calling decoder.out_of_line_offset(0) is not allowed.
12971            if len == 0 {
12972                return Ok(());
12973            };
12974            depth.increment()?;
12975            let envelope_size = 8;
12976            let bytes_len = len * envelope_size;
12977            let offset = decoder.out_of_line_offset(bytes_len)?;
12978            // Decode the envelope for each type.
12979            let mut _next_ordinal_to_read = 0;
12980            let mut next_offset = offset;
12981            let end_offset = offset + bytes_len;
12982            _next_ordinal_to_read += 1;
12983            if next_offset >= end_offset {
12984                return Ok(());
12985            }
12986
12987            // Decode unknown envelopes for gaps in ordinals.
12988            while _next_ordinal_to_read < 1 {
12989                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12990                _next_ordinal_to_read += 1;
12991                next_offset += envelope_size;
12992            }
12993
12994            let next_out_of_line = decoder.next_out_of_line();
12995            let handles_before = decoder.remaining_handles();
12996            if let Some((inlined, num_bytes, num_handles)) =
12997                fidl::encoding::decode_envelope_header(decoder, next_offset)?
12998            {
12999                let member_inline_size = <fidl_fuchsia_net_common::Ipv6AddressWithPrefix as fidl::encoding::TypeMarker>::inline_size(decoder.context);
13000                if inlined != (member_inline_size <= 4) {
13001                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
13002                }
13003                let inner_offset;
13004                let mut inner_depth = depth.clone();
13005                if inlined {
13006                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
13007                    inner_offset = next_offset;
13008                } else {
13009                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
13010                    inner_depth.increment()?;
13011                }
13012                let val_ref = self.subnet.get_or_insert_with(|| {
13013                    fidl::new_empty!(fidl_fuchsia_net_common::Ipv6AddressWithPrefix, D)
13014                });
13015                fidl::decode!(
13016                    fidl_fuchsia_net_common::Ipv6AddressWithPrefix,
13017                    D,
13018                    val_ref,
13019                    decoder,
13020                    inner_offset,
13021                    inner_depth
13022                )?;
13023                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
13024                {
13025                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
13026                }
13027                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
13028                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
13029                }
13030            }
13031
13032            next_offset += envelope_size;
13033            _next_ordinal_to_read += 1;
13034            if next_offset >= end_offset {
13035                return Ok(());
13036            }
13037
13038            // Decode unknown envelopes for gaps in ordinals.
13039            while _next_ordinal_to_read < 2 {
13040                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
13041                _next_ordinal_to_read += 1;
13042                next_offset += envelope_size;
13043            }
13044
13045            let next_out_of_line = decoder.next_out_of_line();
13046            let handles_before = decoder.remaining_handles();
13047            if let Some((inlined, num_bytes, num_handles)) =
13048                fidl::encoding::decode_envelope_header(decoder, next_offset)?
13049            {
13050                let member_inline_size =
13051                    <RoutePreference as fidl::encoding::TypeMarker>::inline_size(decoder.context);
13052                if inlined != (member_inline_size <= 4) {
13053                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
13054                }
13055                let inner_offset;
13056                let mut inner_depth = depth.clone();
13057                if inlined {
13058                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
13059                    inner_offset = next_offset;
13060                } else {
13061                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
13062                    inner_depth.increment()?;
13063                }
13064                let val_ref = self
13065                    .route_preference
13066                    .get_or_insert_with(|| fidl::new_empty!(RoutePreference, D));
13067                fidl::decode!(RoutePreference, D, val_ref, decoder, inner_offset, inner_depth)?;
13068                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
13069                {
13070                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
13071                }
13072                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
13073                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
13074                }
13075            }
13076
13077            next_offset += envelope_size;
13078            _next_ordinal_to_read += 1;
13079            if next_offset >= end_offset {
13080                return Ok(());
13081            }
13082
13083            // Decode unknown envelopes for gaps in ordinals.
13084            while _next_ordinal_to_read < 3 {
13085                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
13086                _next_ordinal_to_read += 1;
13087                next_offset += envelope_size;
13088            }
13089
13090            let next_out_of_line = decoder.next_out_of_line();
13091            let handles_before = decoder.remaining_handles();
13092            if let Some((inlined, num_bytes, num_handles)) =
13093                fidl::encoding::decode_envelope_header(decoder, next_offset)?
13094            {
13095                let member_inline_size =
13096                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
13097                if inlined != (member_inline_size <= 4) {
13098                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
13099                }
13100                let inner_offset;
13101                let mut inner_depth = depth.clone();
13102                if inlined {
13103                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
13104                    inner_offset = next_offset;
13105                } else {
13106                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
13107                    inner_depth.increment()?;
13108                }
13109                let val_ref = self.stable.get_or_insert_with(|| fidl::new_empty!(bool, D));
13110                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
13111                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
13112                {
13113                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
13114                }
13115                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
13116                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
13117                }
13118            }
13119
13120            next_offset += envelope_size;
13121
13122            // Decode the remaining unknown envelopes.
13123            while next_offset < end_offset {
13124                _next_ordinal_to_read += 1;
13125                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
13126                next_offset += envelope_size;
13127            }
13128
13129            Ok(())
13130        }
13131    }
13132
13133    impl ExternalRouteConfig {
13134        #[inline(always)]
13135        fn max_ordinal_present(&self) -> u64 {
13136            if let Some(_) = self.adv_pio {
13137                return 7;
13138            }
13139            if let Some(_) = self.next_hop_is_this_device {
13140                return 6;
13141            }
13142            if let Some(_) = self.stable {
13143                return 5;
13144            }
13145            if let Some(_) = self.nat64 {
13146                return 4;
13147            }
13148            if let Some(_) = self.preference {
13149                return 3;
13150            }
13151            if let Some(_) = self.rloc16 {
13152                return 2;
13153            }
13154            if let Some(_) = self.prefix {
13155                return 1;
13156            }
13157            0
13158        }
13159    }
13160
13161    impl fidl::encoding::ValueTypeMarker for ExternalRouteConfig {
13162        type Borrowed<'a> = &'a Self;
13163        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
13164            value
13165        }
13166    }
13167
13168    unsafe impl fidl::encoding::TypeMarker for ExternalRouteConfig {
13169        type Owned = Self;
13170
13171        #[inline(always)]
13172        fn inline_align(_context: fidl::encoding::Context) -> usize {
13173            8
13174        }
13175
13176        #[inline(always)]
13177        fn inline_size(_context: fidl::encoding::Context) -> usize {
13178            16
13179        }
13180    }
13181
13182    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<ExternalRouteConfig, D>
13183        for &ExternalRouteConfig
13184    {
13185        unsafe fn encode(
13186            self,
13187            encoder: &mut fidl::encoding::Encoder<'_, D>,
13188            offset: usize,
13189            mut depth: fidl::encoding::Depth,
13190        ) -> fidl::Result<()> {
13191            encoder.debug_check_bounds::<ExternalRouteConfig>(offset);
13192            // Vector header
13193            let max_ordinal: u64 = self.max_ordinal_present();
13194            encoder.write_num(max_ordinal, offset);
13195            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
13196            // Calling encoder.out_of_line_offset(0) is not allowed.
13197            if max_ordinal == 0 {
13198                return Ok(());
13199            }
13200            depth.increment()?;
13201            let envelope_size = 8;
13202            let bytes_len = max_ordinal as usize * envelope_size;
13203            #[allow(unused_variables)]
13204            let offset = encoder.out_of_line_offset(bytes_len);
13205            let mut _prev_end_offset: usize = 0;
13206            if 1 > max_ordinal {
13207                return Ok(());
13208            }
13209
13210            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13211            // are envelope_size bytes.
13212            let cur_offset: usize = (1 - 1) * envelope_size;
13213
13214            // Zero reserved fields.
13215            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13216
13217            // Safety:
13218            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13219            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13220            //   envelope_size bytes, there is always sufficient room.
13221            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<64>, D>(
13222                self.prefix.as_ref().map(
13223                    <fidl::encoding::BoundedString<64> as fidl::encoding::ValueTypeMarker>::borrow,
13224                ),
13225                encoder,
13226                offset + cur_offset,
13227                depth,
13228            )?;
13229
13230            _prev_end_offset = cur_offset + envelope_size;
13231            if 2 > max_ordinal {
13232                return Ok(());
13233            }
13234
13235            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13236            // are envelope_size bytes.
13237            let cur_offset: usize = (2 - 1) * envelope_size;
13238
13239            // Zero reserved fields.
13240            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13241
13242            // Safety:
13243            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13244            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13245            //   envelope_size bytes, there is always sufficient room.
13246            fidl::encoding::encode_in_envelope_optional::<u16, D>(
13247                self.rloc16.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
13248                encoder,
13249                offset + cur_offset,
13250                depth,
13251            )?;
13252
13253            _prev_end_offset = cur_offset + envelope_size;
13254            if 3 > max_ordinal {
13255                return Ok(());
13256            }
13257
13258            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13259            // are envelope_size bytes.
13260            let cur_offset: usize = (3 - 1) * envelope_size;
13261
13262            // Zero reserved fields.
13263            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13264
13265            // Safety:
13266            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13267            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13268            //   envelope_size bytes, there is always sufficient room.
13269            fidl::encoding::encode_in_envelope_optional::<i8, D>(
13270                self.preference.as_ref().map(<i8 as fidl::encoding::ValueTypeMarker>::borrow),
13271                encoder,
13272                offset + cur_offset,
13273                depth,
13274            )?;
13275
13276            _prev_end_offset = cur_offset + envelope_size;
13277            if 4 > max_ordinal {
13278                return Ok(());
13279            }
13280
13281            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13282            // are envelope_size bytes.
13283            let cur_offset: usize = (4 - 1) * envelope_size;
13284
13285            // Zero reserved fields.
13286            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13287
13288            // Safety:
13289            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13290            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13291            //   envelope_size bytes, there is always sufficient room.
13292            fidl::encoding::encode_in_envelope_optional::<bool, D>(
13293                self.nat64.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
13294                encoder,
13295                offset + cur_offset,
13296                depth,
13297            )?;
13298
13299            _prev_end_offset = cur_offset + envelope_size;
13300            if 5 > max_ordinal {
13301                return Ok(());
13302            }
13303
13304            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13305            // are envelope_size bytes.
13306            let cur_offset: usize = (5 - 1) * envelope_size;
13307
13308            // Zero reserved fields.
13309            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13310
13311            // Safety:
13312            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13313            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13314            //   envelope_size bytes, there is always sufficient room.
13315            fidl::encoding::encode_in_envelope_optional::<bool, D>(
13316                self.stable.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
13317                encoder,
13318                offset + cur_offset,
13319                depth,
13320            )?;
13321
13322            _prev_end_offset = cur_offset + envelope_size;
13323            if 6 > max_ordinal {
13324                return Ok(());
13325            }
13326
13327            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13328            // are envelope_size bytes.
13329            let cur_offset: usize = (6 - 1) * envelope_size;
13330
13331            // Zero reserved fields.
13332            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13333
13334            // Safety:
13335            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13336            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13337            //   envelope_size bytes, there is always sufficient room.
13338            fidl::encoding::encode_in_envelope_optional::<bool, D>(
13339                self.next_hop_is_this_device
13340                    .as_ref()
13341                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
13342                encoder,
13343                offset + cur_offset,
13344                depth,
13345            )?;
13346
13347            _prev_end_offset = cur_offset + envelope_size;
13348            if 7 > max_ordinal {
13349                return Ok(());
13350            }
13351
13352            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13353            // are envelope_size bytes.
13354            let cur_offset: usize = (7 - 1) * envelope_size;
13355
13356            // Zero reserved fields.
13357            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13358
13359            // Safety:
13360            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13361            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13362            //   envelope_size bytes, there is always sufficient room.
13363            fidl::encoding::encode_in_envelope_optional::<bool, D>(
13364                self.adv_pio.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
13365                encoder,
13366                offset + cur_offset,
13367                depth,
13368            )?;
13369
13370            _prev_end_offset = cur_offset + envelope_size;
13371
13372            Ok(())
13373        }
13374    }
13375
13376    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ExternalRouteConfig {
13377        #[inline(always)]
13378        fn new_empty() -> Self {
13379            Self::default()
13380        }
13381
13382        unsafe fn decode(
13383            &mut self,
13384            decoder: &mut fidl::encoding::Decoder<'_, D>,
13385            offset: usize,
13386            mut depth: fidl::encoding::Depth,
13387        ) -> fidl::Result<()> {
13388            decoder.debug_check_bounds::<Self>(offset);
13389            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
13390                None => return Err(fidl::Error::NotNullable),
13391                Some(len) => len,
13392            };
13393            // Calling decoder.out_of_line_offset(0) is not allowed.
13394            if len == 0 {
13395                return Ok(());
13396            };
13397            depth.increment()?;
13398            let envelope_size = 8;
13399            let bytes_len = len * envelope_size;
13400            let offset = decoder.out_of_line_offset(bytes_len)?;
13401            // Decode the envelope for each type.
13402            let mut _next_ordinal_to_read = 0;
13403            let mut next_offset = offset;
13404            let end_offset = offset + bytes_len;
13405            _next_ordinal_to_read += 1;
13406            if next_offset >= end_offset {
13407                return Ok(());
13408            }
13409
13410            // Decode unknown envelopes for gaps in ordinals.
13411            while _next_ordinal_to_read < 1 {
13412                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
13413                _next_ordinal_to_read += 1;
13414                next_offset += envelope_size;
13415            }
13416
13417            let next_out_of_line = decoder.next_out_of_line();
13418            let handles_before = decoder.remaining_handles();
13419            if let Some((inlined, num_bytes, num_handles)) =
13420                fidl::encoding::decode_envelope_header(decoder, next_offset)?
13421            {
13422                let member_inline_size =
13423                    <fidl::encoding::BoundedString<64> as fidl::encoding::TypeMarker>::inline_size(
13424                        decoder.context,
13425                    );
13426                if inlined != (member_inline_size <= 4) {
13427                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
13428                }
13429                let inner_offset;
13430                let mut inner_depth = depth.clone();
13431                if inlined {
13432                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
13433                    inner_offset = next_offset;
13434                } else {
13435                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
13436                    inner_depth.increment()?;
13437                }
13438                let val_ref = self
13439                    .prefix
13440                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<64>, D));
13441                fidl::decode!(
13442                    fidl::encoding::BoundedString<64>,
13443                    D,
13444                    val_ref,
13445                    decoder,
13446                    inner_offset,
13447                    inner_depth
13448                )?;
13449                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
13450                {
13451                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
13452                }
13453                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
13454                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
13455                }
13456            }
13457
13458            next_offset += envelope_size;
13459            _next_ordinal_to_read += 1;
13460            if next_offset >= end_offset {
13461                return Ok(());
13462            }
13463
13464            // Decode unknown envelopes for gaps in ordinals.
13465            while _next_ordinal_to_read < 2 {
13466                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
13467                _next_ordinal_to_read += 1;
13468                next_offset += envelope_size;
13469            }
13470
13471            let next_out_of_line = decoder.next_out_of_line();
13472            let handles_before = decoder.remaining_handles();
13473            if let Some((inlined, num_bytes, num_handles)) =
13474                fidl::encoding::decode_envelope_header(decoder, next_offset)?
13475            {
13476                let member_inline_size =
13477                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
13478                if inlined != (member_inline_size <= 4) {
13479                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
13480                }
13481                let inner_offset;
13482                let mut inner_depth = depth.clone();
13483                if inlined {
13484                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
13485                    inner_offset = next_offset;
13486                } else {
13487                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
13488                    inner_depth.increment()?;
13489                }
13490                let val_ref = self.rloc16.get_or_insert_with(|| fidl::new_empty!(u16, D));
13491                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
13492                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
13493                {
13494                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
13495                }
13496                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
13497                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
13498                }
13499            }
13500
13501            next_offset += envelope_size;
13502            _next_ordinal_to_read += 1;
13503            if next_offset >= end_offset {
13504                return Ok(());
13505            }
13506
13507            // Decode unknown envelopes for gaps in ordinals.
13508            while _next_ordinal_to_read < 3 {
13509                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
13510                _next_ordinal_to_read += 1;
13511                next_offset += envelope_size;
13512            }
13513
13514            let next_out_of_line = decoder.next_out_of_line();
13515            let handles_before = decoder.remaining_handles();
13516            if let Some((inlined, num_bytes, num_handles)) =
13517                fidl::encoding::decode_envelope_header(decoder, next_offset)?
13518            {
13519                let member_inline_size =
13520                    <i8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
13521                if inlined != (member_inline_size <= 4) {
13522                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
13523                }
13524                let inner_offset;
13525                let mut inner_depth = depth.clone();
13526                if inlined {
13527                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
13528                    inner_offset = next_offset;
13529                } else {
13530                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
13531                    inner_depth.increment()?;
13532                }
13533                let val_ref = self.preference.get_or_insert_with(|| fidl::new_empty!(i8, D));
13534                fidl::decode!(i8, D, val_ref, decoder, inner_offset, inner_depth)?;
13535                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
13536                {
13537                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
13538                }
13539                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
13540                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
13541                }
13542            }
13543
13544            next_offset += envelope_size;
13545            _next_ordinal_to_read += 1;
13546            if next_offset >= end_offset {
13547                return Ok(());
13548            }
13549
13550            // Decode unknown envelopes for gaps in ordinals.
13551            while _next_ordinal_to_read < 4 {
13552                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
13553                _next_ordinal_to_read += 1;
13554                next_offset += envelope_size;
13555            }
13556
13557            let next_out_of_line = decoder.next_out_of_line();
13558            let handles_before = decoder.remaining_handles();
13559            if let Some((inlined, num_bytes, num_handles)) =
13560                fidl::encoding::decode_envelope_header(decoder, next_offset)?
13561            {
13562                let member_inline_size =
13563                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
13564                if inlined != (member_inline_size <= 4) {
13565                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
13566                }
13567                let inner_offset;
13568                let mut inner_depth = depth.clone();
13569                if inlined {
13570                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
13571                    inner_offset = next_offset;
13572                } else {
13573                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
13574                    inner_depth.increment()?;
13575                }
13576                let val_ref = self.nat64.get_or_insert_with(|| fidl::new_empty!(bool, D));
13577                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
13578                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
13579                {
13580                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
13581                }
13582                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
13583                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
13584                }
13585            }
13586
13587            next_offset += envelope_size;
13588            _next_ordinal_to_read += 1;
13589            if next_offset >= end_offset {
13590                return Ok(());
13591            }
13592
13593            // Decode unknown envelopes for gaps in ordinals.
13594            while _next_ordinal_to_read < 5 {
13595                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
13596                _next_ordinal_to_read += 1;
13597                next_offset += envelope_size;
13598            }
13599
13600            let next_out_of_line = decoder.next_out_of_line();
13601            let handles_before = decoder.remaining_handles();
13602            if let Some((inlined, num_bytes, num_handles)) =
13603                fidl::encoding::decode_envelope_header(decoder, next_offset)?
13604            {
13605                let member_inline_size =
13606                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
13607                if inlined != (member_inline_size <= 4) {
13608                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
13609                }
13610                let inner_offset;
13611                let mut inner_depth = depth.clone();
13612                if inlined {
13613                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
13614                    inner_offset = next_offset;
13615                } else {
13616                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
13617                    inner_depth.increment()?;
13618                }
13619                let val_ref = self.stable.get_or_insert_with(|| fidl::new_empty!(bool, D));
13620                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
13621                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
13622                {
13623                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
13624                }
13625                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
13626                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
13627                }
13628            }
13629
13630            next_offset += envelope_size;
13631            _next_ordinal_to_read += 1;
13632            if next_offset >= end_offset {
13633                return Ok(());
13634            }
13635
13636            // Decode unknown envelopes for gaps in ordinals.
13637            while _next_ordinal_to_read < 6 {
13638                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
13639                _next_ordinal_to_read += 1;
13640                next_offset += envelope_size;
13641            }
13642
13643            let next_out_of_line = decoder.next_out_of_line();
13644            let handles_before = decoder.remaining_handles();
13645            if let Some((inlined, num_bytes, num_handles)) =
13646                fidl::encoding::decode_envelope_header(decoder, next_offset)?
13647            {
13648                let member_inline_size =
13649                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
13650                if inlined != (member_inline_size <= 4) {
13651                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
13652                }
13653                let inner_offset;
13654                let mut inner_depth = depth.clone();
13655                if inlined {
13656                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
13657                    inner_offset = next_offset;
13658                } else {
13659                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
13660                    inner_depth.increment()?;
13661                }
13662                let val_ref =
13663                    self.next_hop_is_this_device.get_or_insert_with(|| fidl::new_empty!(bool, D));
13664                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
13665                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
13666                {
13667                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
13668                }
13669                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
13670                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
13671                }
13672            }
13673
13674            next_offset += envelope_size;
13675            _next_ordinal_to_read += 1;
13676            if next_offset >= end_offset {
13677                return Ok(());
13678            }
13679
13680            // Decode unknown envelopes for gaps in ordinals.
13681            while _next_ordinal_to_read < 7 {
13682                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
13683                _next_ordinal_to_read += 1;
13684                next_offset += envelope_size;
13685            }
13686
13687            let next_out_of_line = decoder.next_out_of_line();
13688            let handles_before = decoder.remaining_handles();
13689            if let Some((inlined, num_bytes, num_handles)) =
13690                fidl::encoding::decode_envelope_header(decoder, next_offset)?
13691            {
13692                let member_inline_size =
13693                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
13694                if inlined != (member_inline_size <= 4) {
13695                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
13696                }
13697                let inner_offset;
13698                let mut inner_depth = depth.clone();
13699                if inlined {
13700                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
13701                    inner_offset = next_offset;
13702                } else {
13703                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
13704                    inner_depth.increment()?;
13705                }
13706                let val_ref = self.adv_pio.get_or_insert_with(|| fidl::new_empty!(bool, D));
13707                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
13708                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
13709                {
13710                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
13711                }
13712                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
13713                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
13714                }
13715            }
13716
13717            next_offset += envelope_size;
13718
13719            // Decode the remaining unknown envelopes.
13720            while next_offset < end_offset {
13721                _next_ordinal_to_read += 1;
13722                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
13723                next_offset += envelope_size;
13724            }
13725
13726            Ok(())
13727        }
13728    }
13729
13730    impl JoinerCommissioningParams {
13731        #[inline(always)]
13732        fn max_ordinal_present(&self) -> u64 {
13733            if let Some(_) = self.vendor_data_string {
13734                return 6;
13735            }
13736            if let Some(_) = self.vendor_sw_version {
13737                return 5;
13738            }
13739            if let Some(_) = self.vendor_model {
13740                return 4;
13741            }
13742            if let Some(_) = self.vendor_name {
13743                return 3;
13744            }
13745            if let Some(_) = self.provisioning_url {
13746                return 2;
13747            }
13748            if let Some(_) = self.pskd {
13749                return 1;
13750            }
13751            0
13752        }
13753    }
13754
13755    impl fidl::encoding::ValueTypeMarker for JoinerCommissioningParams {
13756        type Borrowed<'a> = &'a Self;
13757        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
13758            value
13759        }
13760    }
13761
13762    unsafe impl fidl::encoding::TypeMarker for JoinerCommissioningParams {
13763        type Owned = Self;
13764
13765        #[inline(always)]
13766        fn inline_align(_context: fidl::encoding::Context) -> usize {
13767            8
13768        }
13769
13770        #[inline(always)]
13771        fn inline_size(_context: fidl::encoding::Context) -> usize {
13772            16
13773        }
13774    }
13775
13776    unsafe impl<D: fidl::encoding::ResourceDialect>
13777        fidl::encoding::Encode<JoinerCommissioningParams, D> for &JoinerCommissioningParams
13778    {
13779        unsafe fn encode(
13780            self,
13781            encoder: &mut fidl::encoding::Encoder<'_, D>,
13782            offset: usize,
13783            mut depth: fidl::encoding::Depth,
13784        ) -> fidl::Result<()> {
13785            encoder.debug_check_bounds::<JoinerCommissioningParams>(offset);
13786            // Vector header
13787            let max_ordinal: u64 = self.max_ordinal_present();
13788            encoder.write_num(max_ordinal, offset);
13789            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
13790            // Calling encoder.out_of_line_offset(0) is not allowed.
13791            if max_ordinal == 0 {
13792                return Ok(());
13793            }
13794            depth.increment()?;
13795            let envelope_size = 8;
13796            let bytes_len = max_ordinal as usize * envelope_size;
13797            #[allow(unused_variables)]
13798            let offset = encoder.out_of_line_offset(bytes_len);
13799            let mut _prev_end_offset: usize = 0;
13800            if 1 > max_ordinal {
13801                return Ok(());
13802            }
13803
13804            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13805            // are envelope_size bytes.
13806            let cur_offset: usize = (1 - 1) * envelope_size;
13807
13808            // Zero reserved fields.
13809            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13810
13811            // Safety:
13812            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13813            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13814            //   envelope_size bytes, there is always sufficient room.
13815            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<32>, D>(
13816                self.pskd.as_ref().map(
13817                    <fidl::encoding::BoundedString<32> as fidl::encoding::ValueTypeMarker>::borrow,
13818                ),
13819                encoder,
13820                offset + cur_offset,
13821                depth,
13822            )?;
13823
13824            _prev_end_offset = cur_offset + envelope_size;
13825            if 2 > max_ordinal {
13826                return Ok(());
13827            }
13828
13829            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13830            // are envelope_size bytes.
13831            let cur_offset: usize = (2 - 1) * envelope_size;
13832
13833            // Zero reserved fields.
13834            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13835
13836            // Safety:
13837            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13838            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13839            //   envelope_size bytes, there is always sufficient room.
13840            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<64>, D>(
13841                self.provisioning_url.as_ref().map(
13842                    <fidl::encoding::BoundedString<64> as fidl::encoding::ValueTypeMarker>::borrow,
13843                ),
13844                encoder,
13845                offset + cur_offset,
13846                depth,
13847            )?;
13848
13849            _prev_end_offset = cur_offset + envelope_size;
13850            if 3 > max_ordinal {
13851                return Ok(());
13852            }
13853
13854            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13855            // are envelope_size bytes.
13856            let cur_offset: usize = (3 - 1) * envelope_size;
13857
13858            // Zero reserved fields.
13859            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13860
13861            // Safety:
13862            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13863            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13864            //   envelope_size bytes, there is always sufficient room.
13865            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<32>, D>(
13866                self.vendor_name.as_ref().map(
13867                    <fidl::encoding::BoundedString<32> as fidl::encoding::ValueTypeMarker>::borrow,
13868                ),
13869                encoder,
13870                offset + cur_offset,
13871                depth,
13872            )?;
13873
13874            _prev_end_offset = cur_offset + envelope_size;
13875            if 4 > max_ordinal {
13876                return Ok(());
13877            }
13878
13879            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13880            // are envelope_size bytes.
13881            let cur_offset: usize = (4 - 1) * envelope_size;
13882
13883            // Zero reserved fields.
13884            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13885
13886            // Safety:
13887            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13888            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13889            //   envelope_size bytes, there is always sufficient room.
13890            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<32>, D>(
13891                self.vendor_model.as_ref().map(
13892                    <fidl::encoding::BoundedString<32> as fidl::encoding::ValueTypeMarker>::borrow,
13893                ),
13894                encoder,
13895                offset + cur_offset,
13896                depth,
13897            )?;
13898
13899            _prev_end_offset = cur_offset + envelope_size;
13900            if 5 > max_ordinal {
13901                return Ok(());
13902            }
13903
13904            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13905            // are envelope_size bytes.
13906            let cur_offset: usize = (5 - 1) * envelope_size;
13907
13908            // Zero reserved fields.
13909            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13910
13911            // Safety:
13912            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13913            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13914            //   envelope_size bytes, there is always sufficient room.
13915            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<16>, D>(
13916                self.vendor_sw_version.as_ref().map(
13917                    <fidl::encoding::BoundedString<16> as fidl::encoding::ValueTypeMarker>::borrow,
13918                ),
13919                encoder,
13920                offset + cur_offset,
13921                depth,
13922            )?;
13923
13924            _prev_end_offset = cur_offset + envelope_size;
13925            if 6 > max_ordinal {
13926                return Ok(());
13927            }
13928
13929            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13930            // are envelope_size bytes.
13931            let cur_offset: usize = (6 - 1) * envelope_size;
13932
13933            // Zero reserved fields.
13934            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13935
13936            // Safety:
13937            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13938            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13939            //   envelope_size bytes, there is always sufficient room.
13940            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<64>, D>(
13941                self.vendor_data_string.as_ref().map(
13942                    <fidl::encoding::BoundedString<64> as fidl::encoding::ValueTypeMarker>::borrow,
13943                ),
13944                encoder,
13945                offset + cur_offset,
13946                depth,
13947            )?;
13948
13949            _prev_end_offset = cur_offset + envelope_size;
13950
13951            Ok(())
13952        }
13953    }
13954
13955    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
13956        for JoinerCommissioningParams
13957    {
13958        #[inline(always)]
13959        fn new_empty() -> Self {
13960            Self::default()
13961        }
13962
13963        unsafe fn decode(
13964            &mut self,
13965            decoder: &mut fidl::encoding::Decoder<'_, D>,
13966            offset: usize,
13967            mut depth: fidl::encoding::Depth,
13968        ) -> fidl::Result<()> {
13969            decoder.debug_check_bounds::<Self>(offset);
13970            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
13971                None => return Err(fidl::Error::NotNullable),
13972                Some(len) => len,
13973            };
13974            // Calling decoder.out_of_line_offset(0) is not allowed.
13975            if len == 0 {
13976                return Ok(());
13977            };
13978            depth.increment()?;
13979            let envelope_size = 8;
13980            let bytes_len = len * envelope_size;
13981            let offset = decoder.out_of_line_offset(bytes_len)?;
13982            // Decode the envelope for each type.
13983            let mut _next_ordinal_to_read = 0;
13984            let mut next_offset = offset;
13985            let end_offset = offset + bytes_len;
13986            _next_ordinal_to_read += 1;
13987            if next_offset >= end_offset {
13988                return Ok(());
13989            }
13990
13991            // Decode unknown envelopes for gaps in ordinals.
13992            while _next_ordinal_to_read < 1 {
13993                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
13994                _next_ordinal_to_read += 1;
13995                next_offset += envelope_size;
13996            }
13997
13998            let next_out_of_line = decoder.next_out_of_line();
13999            let handles_before = decoder.remaining_handles();
14000            if let Some((inlined, num_bytes, num_handles)) =
14001                fidl::encoding::decode_envelope_header(decoder, next_offset)?
14002            {
14003                let member_inline_size =
14004                    <fidl::encoding::BoundedString<32> as fidl::encoding::TypeMarker>::inline_size(
14005                        decoder.context,
14006                    );
14007                if inlined != (member_inline_size <= 4) {
14008                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
14009                }
14010                let inner_offset;
14011                let mut inner_depth = depth.clone();
14012                if inlined {
14013                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
14014                    inner_offset = next_offset;
14015                } else {
14016                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
14017                    inner_depth.increment()?;
14018                }
14019                let val_ref = self
14020                    .pskd
14021                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<32>, D));
14022                fidl::decode!(
14023                    fidl::encoding::BoundedString<32>,
14024                    D,
14025                    val_ref,
14026                    decoder,
14027                    inner_offset,
14028                    inner_depth
14029                )?;
14030                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14031                {
14032                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
14033                }
14034                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14035                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14036                }
14037            }
14038
14039            next_offset += envelope_size;
14040            _next_ordinal_to_read += 1;
14041            if next_offset >= end_offset {
14042                return Ok(());
14043            }
14044
14045            // Decode unknown envelopes for gaps in ordinals.
14046            while _next_ordinal_to_read < 2 {
14047                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14048                _next_ordinal_to_read += 1;
14049                next_offset += envelope_size;
14050            }
14051
14052            let next_out_of_line = decoder.next_out_of_line();
14053            let handles_before = decoder.remaining_handles();
14054            if let Some((inlined, num_bytes, num_handles)) =
14055                fidl::encoding::decode_envelope_header(decoder, next_offset)?
14056            {
14057                let member_inline_size =
14058                    <fidl::encoding::BoundedString<64> as fidl::encoding::TypeMarker>::inline_size(
14059                        decoder.context,
14060                    );
14061                if inlined != (member_inline_size <= 4) {
14062                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
14063                }
14064                let inner_offset;
14065                let mut inner_depth = depth.clone();
14066                if inlined {
14067                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
14068                    inner_offset = next_offset;
14069                } else {
14070                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
14071                    inner_depth.increment()?;
14072                }
14073                let val_ref = self
14074                    .provisioning_url
14075                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<64>, D));
14076                fidl::decode!(
14077                    fidl::encoding::BoundedString<64>,
14078                    D,
14079                    val_ref,
14080                    decoder,
14081                    inner_offset,
14082                    inner_depth
14083                )?;
14084                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14085                {
14086                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
14087                }
14088                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14089                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14090                }
14091            }
14092
14093            next_offset += envelope_size;
14094            _next_ordinal_to_read += 1;
14095            if next_offset >= end_offset {
14096                return Ok(());
14097            }
14098
14099            // Decode unknown envelopes for gaps in ordinals.
14100            while _next_ordinal_to_read < 3 {
14101                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14102                _next_ordinal_to_read += 1;
14103                next_offset += envelope_size;
14104            }
14105
14106            let next_out_of_line = decoder.next_out_of_line();
14107            let handles_before = decoder.remaining_handles();
14108            if let Some((inlined, num_bytes, num_handles)) =
14109                fidl::encoding::decode_envelope_header(decoder, next_offset)?
14110            {
14111                let member_inline_size =
14112                    <fidl::encoding::BoundedString<32> as fidl::encoding::TypeMarker>::inline_size(
14113                        decoder.context,
14114                    );
14115                if inlined != (member_inline_size <= 4) {
14116                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
14117                }
14118                let inner_offset;
14119                let mut inner_depth = depth.clone();
14120                if inlined {
14121                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
14122                    inner_offset = next_offset;
14123                } else {
14124                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
14125                    inner_depth.increment()?;
14126                }
14127                let val_ref = self
14128                    .vendor_name
14129                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<32>, D));
14130                fidl::decode!(
14131                    fidl::encoding::BoundedString<32>,
14132                    D,
14133                    val_ref,
14134                    decoder,
14135                    inner_offset,
14136                    inner_depth
14137                )?;
14138                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14139                {
14140                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
14141                }
14142                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14143                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14144                }
14145            }
14146
14147            next_offset += envelope_size;
14148            _next_ordinal_to_read += 1;
14149            if next_offset >= end_offset {
14150                return Ok(());
14151            }
14152
14153            // Decode unknown envelopes for gaps in ordinals.
14154            while _next_ordinal_to_read < 4 {
14155                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14156                _next_ordinal_to_read += 1;
14157                next_offset += envelope_size;
14158            }
14159
14160            let next_out_of_line = decoder.next_out_of_line();
14161            let handles_before = decoder.remaining_handles();
14162            if let Some((inlined, num_bytes, num_handles)) =
14163                fidl::encoding::decode_envelope_header(decoder, next_offset)?
14164            {
14165                let member_inline_size =
14166                    <fidl::encoding::BoundedString<32> as fidl::encoding::TypeMarker>::inline_size(
14167                        decoder.context,
14168                    );
14169                if inlined != (member_inline_size <= 4) {
14170                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
14171                }
14172                let inner_offset;
14173                let mut inner_depth = depth.clone();
14174                if inlined {
14175                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
14176                    inner_offset = next_offset;
14177                } else {
14178                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
14179                    inner_depth.increment()?;
14180                }
14181                let val_ref = self
14182                    .vendor_model
14183                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<32>, D));
14184                fidl::decode!(
14185                    fidl::encoding::BoundedString<32>,
14186                    D,
14187                    val_ref,
14188                    decoder,
14189                    inner_offset,
14190                    inner_depth
14191                )?;
14192                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14193                {
14194                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
14195                }
14196                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14197                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14198                }
14199            }
14200
14201            next_offset += envelope_size;
14202            _next_ordinal_to_read += 1;
14203            if next_offset >= end_offset {
14204                return Ok(());
14205            }
14206
14207            // Decode unknown envelopes for gaps in ordinals.
14208            while _next_ordinal_to_read < 5 {
14209                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14210                _next_ordinal_to_read += 1;
14211                next_offset += envelope_size;
14212            }
14213
14214            let next_out_of_line = decoder.next_out_of_line();
14215            let handles_before = decoder.remaining_handles();
14216            if let Some((inlined, num_bytes, num_handles)) =
14217                fidl::encoding::decode_envelope_header(decoder, next_offset)?
14218            {
14219                let member_inline_size =
14220                    <fidl::encoding::BoundedString<16> as fidl::encoding::TypeMarker>::inline_size(
14221                        decoder.context,
14222                    );
14223                if inlined != (member_inline_size <= 4) {
14224                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
14225                }
14226                let inner_offset;
14227                let mut inner_depth = depth.clone();
14228                if inlined {
14229                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
14230                    inner_offset = next_offset;
14231                } else {
14232                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
14233                    inner_depth.increment()?;
14234                }
14235                let val_ref = self
14236                    .vendor_sw_version
14237                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<16>, D));
14238                fidl::decode!(
14239                    fidl::encoding::BoundedString<16>,
14240                    D,
14241                    val_ref,
14242                    decoder,
14243                    inner_offset,
14244                    inner_depth
14245                )?;
14246                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14247                {
14248                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
14249                }
14250                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14251                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14252                }
14253            }
14254
14255            next_offset += envelope_size;
14256            _next_ordinal_to_read += 1;
14257            if next_offset >= end_offset {
14258                return Ok(());
14259            }
14260
14261            // Decode unknown envelopes for gaps in ordinals.
14262            while _next_ordinal_to_read < 6 {
14263                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14264                _next_ordinal_to_read += 1;
14265                next_offset += envelope_size;
14266            }
14267
14268            let next_out_of_line = decoder.next_out_of_line();
14269            let handles_before = decoder.remaining_handles();
14270            if let Some((inlined, num_bytes, num_handles)) =
14271                fidl::encoding::decode_envelope_header(decoder, next_offset)?
14272            {
14273                let member_inline_size =
14274                    <fidl::encoding::BoundedString<64> as fidl::encoding::TypeMarker>::inline_size(
14275                        decoder.context,
14276                    );
14277                if inlined != (member_inline_size <= 4) {
14278                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
14279                }
14280                let inner_offset;
14281                let mut inner_depth = depth.clone();
14282                if inlined {
14283                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
14284                    inner_offset = next_offset;
14285                } else {
14286                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
14287                    inner_depth.increment()?;
14288                }
14289                let val_ref = self
14290                    .vendor_data_string
14291                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<64>, D));
14292                fidl::decode!(
14293                    fidl::encoding::BoundedString<64>,
14294                    D,
14295                    val_ref,
14296                    decoder,
14297                    inner_offset,
14298                    inner_depth
14299                )?;
14300                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14301                {
14302                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
14303                }
14304                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14305                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14306                }
14307            }
14308
14309            next_offset += envelope_size;
14310
14311            // Decode the remaining unknown envelopes.
14312            while next_offset < end_offset {
14313                _next_ordinal_to_read += 1;
14314                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14315                next_offset += envelope_size;
14316            }
14317
14318            Ok(())
14319        }
14320    }
14321
14322    impl LeaderData {
14323        #[inline(always)]
14324        fn max_ordinal_present(&self) -> u64 {
14325            if let Some(_) = self.router_id {
14326                return 5;
14327            }
14328            if let Some(_) = self.stable_network_data_version {
14329                return 4;
14330            }
14331            if let Some(_) = self.network_data_version {
14332                return 3;
14333            }
14334            if let Some(_) = self.weight {
14335                return 2;
14336            }
14337            if let Some(_) = self.partition_id {
14338                return 1;
14339            }
14340            0
14341        }
14342    }
14343
14344    impl fidl::encoding::ValueTypeMarker for LeaderData {
14345        type Borrowed<'a> = &'a Self;
14346        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
14347            value
14348        }
14349    }
14350
14351    unsafe impl fidl::encoding::TypeMarker for LeaderData {
14352        type Owned = Self;
14353
14354        #[inline(always)]
14355        fn inline_align(_context: fidl::encoding::Context) -> usize {
14356            8
14357        }
14358
14359        #[inline(always)]
14360        fn inline_size(_context: fidl::encoding::Context) -> usize {
14361            16
14362        }
14363    }
14364
14365    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<LeaderData, D>
14366        for &LeaderData
14367    {
14368        unsafe fn encode(
14369            self,
14370            encoder: &mut fidl::encoding::Encoder<'_, D>,
14371            offset: usize,
14372            mut depth: fidl::encoding::Depth,
14373        ) -> fidl::Result<()> {
14374            encoder.debug_check_bounds::<LeaderData>(offset);
14375            // Vector header
14376            let max_ordinal: u64 = self.max_ordinal_present();
14377            encoder.write_num(max_ordinal, offset);
14378            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
14379            // Calling encoder.out_of_line_offset(0) is not allowed.
14380            if max_ordinal == 0 {
14381                return Ok(());
14382            }
14383            depth.increment()?;
14384            let envelope_size = 8;
14385            let bytes_len = max_ordinal as usize * envelope_size;
14386            #[allow(unused_variables)]
14387            let offset = encoder.out_of_line_offset(bytes_len);
14388            let mut _prev_end_offset: usize = 0;
14389            if 1 > max_ordinal {
14390                return Ok(());
14391            }
14392
14393            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
14394            // are envelope_size bytes.
14395            let cur_offset: usize = (1 - 1) * envelope_size;
14396
14397            // Zero reserved fields.
14398            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
14399
14400            // Safety:
14401            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
14402            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
14403            //   envelope_size bytes, there is always sufficient room.
14404            fidl::encoding::encode_in_envelope_optional::<u32, D>(
14405                self.partition_id.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
14406                encoder,
14407                offset + cur_offset,
14408                depth,
14409            )?;
14410
14411            _prev_end_offset = cur_offset + envelope_size;
14412            if 2 > max_ordinal {
14413                return Ok(());
14414            }
14415
14416            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
14417            // are envelope_size bytes.
14418            let cur_offset: usize = (2 - 1) * envelope_size;
14419
14420            // Zero reserved fields.
14421            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
14422
14423            // Safety:
14424            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
14425            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
14426            //   envelope_size bytes, there is always sufficient room.
14427            fidl::encoding::encode_in_envelope_optional::<u8, D>(
14428                self.weight.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
14429                encoder,
14430                offset + cur_offset,
14431                depth,
14432            )?;
14433
14434            _prev_end_offset = cur_offset + envelope_size;
14435            if 3 > max_ordinal {
14436                return Ok(());
14437            }
14438
14439            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
14440            // are envelope_size bytes.
14441            let cur_offset: usize = (3 - 1) * envelope_size;
14442
14443            // Zero reserved fields.
14444            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
14445
14446            // Safety:
14447            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
14448            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
14449            //   envelope_size bytes, there is always sufficient room.
14450            fidl::encoding::encode_in_envelope_optional::<u8, D>(
14451                self.network_data_version
14452                    .as_ref()
14453                    .map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
14454                encoder,
14455                offset + cur_offset,
14456                depth,
14457            )?;
14458
14459            _prev_end_offset = cur_offset + envelope_size;
14460            if 4 > max_ordinal {
14461                return Ok(());
14462            }
14463
14464            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
14465            // are envelope_size bytes.
14466            let cur_offset: usize = (4 - 1) * envelope_size;
14467
14468            // Zero reserved fields.
14469            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
14470
14471            // Safety:
14472            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
14473            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
14474            //   envelope_size bytes, there is always sufficient room.
14475            fidl::encoding::encode_in_envelope_optional::<u8, D>(
14476                self.stable_network_data_version
14477                    .as_ref()
14478                    .map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
14479                encoder,
14480                offset + cur_offset,
14481                depth,
14482            )?;
14483
14484            _prev_end_offset = cur_offset + envelope_size;
14485            if 5 > max_ordinal {
14486                return Ok(());
14487            }
14488
14489            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
14490            // are envelope_size bytes.
14491            let cur_offset: usize = (5 - 1) * envelope_size;
14492
14493            // Zero reserved fields.
14494            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
14495
14496            // Safety:
14497            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
14498            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
14499            //   envelope_size bytes, there is always sufficient room.
14500            fidl::encoding::encode_in_envelope_optional::<u8, D>(
14501                self.router_id.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
14502                encoder,
14503                offset + cur_offset,
14504                depth,
14505            )?;
14506
14507            _prev_end_offset = cur_offset + envelope_size;
14508
14509            Ok(())
14510        }
14511    }
14512
14513    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for LeaderData {
14514        #[inline(always)]
14515        fn new_empty() -> Self {
14516            Self::default()
14517        }
14518
14519        unsafe fn decode(
14520            &mut self,
14521            decoder: &mut fidl::encoding::Decoder<'_, D>,
14522            offset: usize,
14523            mut depth: fidl::encoding::Depth,
14524        ) -> fidl::Result<()> {
14525            decoder.debug_check_bounds::<Self>(offset);
14526            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
14527                None => return Err(fidl::Error::NotNullable),
14528                Some(len) => len,
14529            };
14530            // Calling decoder.out_of_line_offset(0) is not allowed.
14531            if len == 0 {
14532                return Ok(());
14533            };
14534            depth.increment()?;
14535            let envelope_size = 8;
14536            let bytes_len = len * envelope_size;
14537            let offset = decoder.out_of_line_offset(bytes_len)?;
14538            // Decode the envelope for each type.
14539            let mut _next_ordinal_to_read = 0;
14540            let mut next_offset = offset;
14541            let end_offset = offset + bytes_len;
14542            _next_ordinal_to_read += 1;
14543            if next_offset >= end_offset {
14544                return Ok(());
14545            }
14546
14547            // Decode unknown envelopes for gaps in ordinals.
14548            while _next_ordinal_to_read < 1 {
14549                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14550                _next_ordinal_to_read += 1;
14551                next_offset += envelope_size;
14552            }
14553
14554            let next_out_of_line = decoder.next_out_of_line();
14555            let handles_before = decoder.remaining_handles();
14556            if let Some((inlined, num_bytes, num_handles)) =
14557                fidl::encoding::decode_envelope_header(decoder, next_offset)?
14558            {
14559                let member_inline_size =
14560                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
14561                if inlined != (member_inline_size <= 4) {
14562                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
14563                }
14564                let inner_offset;
14565                let mut inner_depth = depth.clone();
14566                if inlined {
14567                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
14568                    inner_offset = next_offset;
14569                } else {
14570                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
14571                    inner_depth.increment()?;
14572                }
14573                let val_ref = self.partition_id.get_or_insert_with(|| fidl::new_empty!(u32, D));
14574                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
14575                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14576                {
14577                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
14578                }
14579                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14580                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14581                }
14582            }
14583
14584            next_offset += envelope_size;
14585            _next_ordinal_to_read += 1;
14586            if next_offset >= end_offset {
14587                return Ok(());
14588            }
14589
14590            // Decode unknown envelopes for gaps in ordinals.
14591            while _next_ordinal_to_read < 2 {
14592                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14593                _next_ordinal_to_read += 1;
14594                next_offset += envelope_size;
14595            }
14596
14597            let next_out_of_line = decoder.next_out_of_line();
14598            let handles_before = decoder.remaining_handles();
14599            if let Some((inlined, num_bytes, num_handles)) =
14600                fidl::encoding::decode_envelope_header(decoder, next_offset)?
14601            {
14602                let member_inline_size =
14603                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
14604                if inlined != (member_inline_size <= 4) {
14605                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
14606                }
14607                let inner_offset;
14608                let mut inner_depth = depth.clone();
14609                if inlined {
14610                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
14611                    inner_offset = next_offset;
14612                } else {
14613                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
14614                    inner_depth.increment()?;
14615                }
14616                let val_ref = self.weight.get_or_insert_with(|| fidl::new_empty!(u8, D));
14617                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
14618                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14619                {
14620                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
14621                }
14622                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14623                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14624                }
14625            }
14626
14627            next_offset += envelope_size;
14628            _next_ordinal_to_read += 1;
14629            if next_offset >= end_offset {
14630                return Ok(());
14631            }
14632
14633            // Decode unknown envelopes for gaps in ordinals.
14634            while _next_ordinal_to_read < 3 {
14635                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14636                _next_ordinal_to_read += 1;
14637                next_offset += envelope_size;
14638            }
14639
14640            let next_out_of_line = decoder.next_out_of_line();
14641            let handles_before = decoder.remaining_handles();
14642            if let Some((inlined, num_bytes, num_handles)) =
14643                fidl::encoding::decode_envelope_header(decoder, next_offset)?
14644            {
14645                let member_inline_size =
14646                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
14647                if inlined != (member_inline_size <= 4) {
14648                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
14649                }
14650                let inner_offset;
14651                let mut inner_depth = depth.clone();
14652                if inlined {
14653                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
14654                    inner_offset = next_offset;
14655                } else {
14656                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
14657                    inner_depth.increment()?;
14658                }
14659                let val_ref =
14660                    self.network_data_version.get_or_insert_with(|| fidl::new_empty!(u8, D));
14661                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
14662                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14663                {
14664                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
14665                }
14666                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14667                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14668                }
14669            }
14670
14671            next_offset += envelope_size;
14672            _next_ordinal_to_read += 1;
14673            if next_offset >= end_offset {
14674                return Ok(());
14675            }
14676
14677            // Decode unknown envelopes for gaps in ordinals.
14678            while _next_ordinal_to_read < 4 {
14679                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14680                _next_ordinal_to_read += 1;
14681                next_offset += envelope_size;
14682            }
14683
14684            let next_out_of_line = decoder.next_out_of_line();
14685            let handles_before = decoder.remaining_handles();
14686            if let Some((inlined, num_bytes, num_handles)) =
14687                fidl::encoding::decode_envelope_header(decoder, next_offset)?
14688            {
14689                let member_inline_size =
14690                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
14691                if inlined != (member_inline_size <= 4) {
14692                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
14693                }
14694                let inner_offset;
14695                let mut inner_depth = depth.clone();
14696                if inlined {
14697                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
14698                    inner_offset = next_offset;
14699                } else {
14700                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
14701                    inner_depth.increment()?;
14702                }
14703                let val_ref =
14704                    self.stable_network_data_version.get_or_insert_with(|| fidl::new_empty!(u8, D));
14705                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
14706                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14707                {
14708                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
14709                }
14710                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14711                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14712                }
14713            }
14714
14715            next_offset += envelope_size;
14716            _next_ordinal_to_read += 1;
14717            if next_offset >= end_offset {
14718                return Ok(());
14719            }
14720
14721            // Decode unknown envelopes for gaps in ordinals.
14722            while _next_ordinal_to_read < 5 {
14723                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14724                _next_ordinal_to_read += 1;
14725                next_offset += envelope_size;
14726            }
14727
14728            let next_out_of_line = decoder.next_out_of_line();
14729            let handles_before = decoder.remaining_handles();
14730            if let Some((inlined, num_bytes, num_handles)) =
14731                fidl::encoding::decode_envelope_header(decoder, next_offset)?
14732            {
14733                let member_inline_size =
14734                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
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 = self.router_id.get_or_insert_with(|| fidl::new_empty!(u8, D));
14748                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
14749                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14750                {
14751                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
14752                }
14753                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14754                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14755                }
14756            }
14757
14758            next_offset += envelope_size;
14759
14760            // Decode the remaining unknown envelopes.
14761            while next_offset < end_offset {
14762                _next_ordinal_to_read += 1;
14763                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14764                next_offset += envelope_size;
14765            }
14766
14767            Ok(())
14768        }
14769    }
14770
14771    impl LinkMetricsEntry {
14772        #[inline(always)]
14773        fn max_ordinal_present(&self) -> u64 {
14774            if let Some(_) = self.extended_address {
14775                return 3;
14776            }
14777            if let Some(_) = self.rssi {
14778                return 2;
14779            }
14780            if let Some(_) = self.link_margin {
14781                return 1;
14782            }
14783            0
14784        }
14785    }
14786
14787    impl fidl::encoding::ValueTypeMarker for LinkMetricsEntry {
14788        type Borrowed<'a> = &'a Self;
14789        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
14790            value
14791        }
14792    }
14793
14794    unsafe impl fidl::encoding::TypeMarker for LinkMetricsEntry {
14795        type Owned = Self;
14796
14797        #[inline(always)]
14798        fn inline_align(_context: fidl::encoding::Context) -> usize {
14799            8
14800        }
14801
14802        #[inline(always)]
14803        fn inline_size(_context: fidl::encoding::Context) -> usize {
14804            16
14805        }
14806    }
14807
14808    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<LinkMetricsEntry, D>
14809        for &LinkMetricsEntry
14810    {
14811        unsafe fn encode(
14812            self,
14813            encoder: &mut fidl::encoding::Encoder<'_, D>,
14814            offset: usize,
14815            mut depth: fidl::encoding::Depth,
14816        ) -> fidl::Result<()> {
14817            encoder.debug_check_bounds::<LinkMetricsEntry>(offset);
14818            // Vector header
14819            let max_ordinal: u64 = self.max_ordinal_present();
14820            encoder.write_num(max_ordinal, offset);
14821            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
14822            // Calling encoder.out_of_line_offset(0) is not allowed.
14823            if max_ordinal == 0 {
14824                return Ok(());
14825            }
14826            depth.increment()?;
14827            let envelope_size = 8;
14828            let bytes_len = max_ordinal as usize * envelope_size;
14829            #[allow(unused_variables)]
14830            let offset = encoder.out_of_line_offset(bytes_len);
14831            let mut _prev_end_offset: usize = 0;
14832            if 1 > max_ordinal {
14833                return Ok(());
14834            }
14835
14836            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
14837            // are envelope_size bytes.
14838            let cur_offset: usize = (1 - 1) * envelope_size;
14839
14840            // Zero reserved fields.
14841            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
14842
14843            // Safety:
14844            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
14845            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
14846            //   envelope_size bytes, there is always sufficient room.
14847            fidl::encoding::encode_in_envelope_optional::<u8, D>(
14848                self.link_margin.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
14849                encoder,
14850                offset + cur_offset,
14851                depth,
14852            )?;
14853
14854            _prev_end_offset = cur_offset + envelope_size;
14855            if 2 > max_ordinal {
14856                return Ok(());
14857            }
14858
14859            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
14860            // are envelope_size bytes.
14861            let cur_offset: usize = (2 - 1) * envelope_size;
14862
14863            // Zero reserved fields.
14864            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
14865
14866            // Safety:
14867            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
14868            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
14869            //   envelope_size bytes, there is always sufficient room.
14870            fidl::encoding::encode_in_envelope_optional::<i8, D>(
14871                self.rssi.as_ref().map(<i8 as fidl::encoding::ValueTypeMarker>::borrow),
14872                encoder,
14873                offset + cur_offset,
14874                depth,
14875            )?;
14876
14877            _prev_end_offset = cur_offset + envelope_size;
14878            if 3 > max_ordinal {
14879                return Ok(());
14880            }
14881
14882            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
14883            // are envelope_size bytes.
14884            let cur_offset: usize = (3 - 1) * envelope_size;
14885
14886            // Zero reserved fields.
14887            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
14888
14889            // Safety:
14890            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
14891            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
14892            //   envelope_size bytes, there is always sufficient room.
14893            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u8, 8>, D>(
14894                self.extended_address.as_ref().map(
14895                    <fidl::encoding::Vector<u8, 8> as fidl::encoding::ValueTypeMarker>::borrow,
14896                ),
14897                encoder,
14898                offset + cur_offset,
14899                depth,
14900            )?;
14901
14902            _prev_end_offset = cur_offset + envelope_size;
14903
14904            Ok(())
14905        }
14906    }
14907
14908    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for LinkMetricsEntry {
14909        #[inline(always)]
14910        fn new_empty() -> Self {
14911            Self::default()
14912        }
14913
14914        unsafe fn decode(
14915            &mut self,
14916            decoder: &mut fidl::encoding::Decoder<'_, D>,
14917            offset: usize,
14918            mut depth: fidl::encoding::Depth,
14919        ) -> fidl::Result<()> {
14920            decoder.debug_check_bounds::<Self>(offset);
14921            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
14922                None => return Err(fidl::Error::NotNullable),
14923                Some(len) => len,
14924            };
14925            // Calling decoder.out_of_line_offset(0) is not allowed.
14926            if len == 0 {
14927                return Ok(());
14928            };
14929            depth.increment()?;
14930            let envelope_size = 8;
14931            let bytes_len = len * envelope_size;
14932            let offset = decoder.out_of_line_offset(bytes_len)?;
14933            // Decode the envelope for each type.
14934            let mut _next_ordinal_to_read = 0;
14935            let mut next_offset = offset;
14936            let end_offset = offset + bytes_len;
14937            _next_ordinal_to_read += 1;
14938            if next_offset >= end_offset {
14939                return Ok(());
14940            }
14941
14942            // Decode unknown envelopes for gaps in ordinals.
14943            while _next_ordinal_to_read < 1 {
14944                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14945                _next_ordinal_to_read += 1;
14946                next_offset += envelope_size;
14947            }
14948
14949            let next_out_of_line = decoder.next_out_of_line();
14950            let handles_before = decoder.remaining_handles();
14951            if let Some((inlined, num_bytes, num_handles)) =
14952                fidl::encoding::decode_envelope_header(decoder, next_offset)?
14953            {
14954                let member_inline_size =
14955                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
14956                if inlined != (member_inline_size <= 4) {
14957                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
14958                }
14959                let inner_offset;
14960                let mut inner_depth = depth.clone();
14961                if inlined {
14962                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
14963                    inner_offset = next_offset;
14964                } else {
14965                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
14966                    inner_depth.increment()?;
14967                }
14968                let val_ref = self.link_margin.get_or_insert_with(|| fidl::new_empty!(u8, D));
14969                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
14970                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14971                {
14972                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
14973                }
14974                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14975                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14976                }
14977            }
14978
14979            next_offset += envelope_size;
14980            _next_ordinal_to_read += 1;
14981            if next_offset >= end_offset {
14982                return Ok(());
14983            }
14984
14985            // Decode unknown envelopes for gaps in ordinals.
14986            while _next_ordinal_to_read < 2 {
14987                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14988                _next_ordinal_to_read += 1;
14989                next_offset += envelope_size;
14990            }
14991
14992            let next_out_of_line = decoder.next_out_of_line();
14993            let handles_before = decoder.remaining_handles();
14994            if let Some((inlined, num_bytes, num_handles)) =
14995                fidl::encoding::decode_envelope_header(decoder, next_offset)?
14996            {
14997                let member_inline_size =
14998                    <i8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
14999                if inlined != (member_inline_size <= 4) {
15000                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
15001                }
15002                let inner_offset;
15003                let mut inner_depth = depth.clone();
15004                if inlined {
15005                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
15006                    inner_offset = next_offset;
15007                } else {
15008                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
15009                    inner_depth.increment()?;
15010                }
15011                let val_ref = self.rssi.get_or_insert_with(|| fidl::new_empty!(i8, D));
15012                fidl::decode!(i8, D, val_ref, decoder, inner_offset, inner_depth)?;
15013                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
15014                {
15015                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
15016                }
15017                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
15018                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
15019                }
15020            }
15021
15022            next_offset += envelope_size;
15023            _next_ordinal_to_read += 1;
15024            if next_offset >= end_offset {
15025                return Ok(());
15026            }
15027
15028            // Decode unknown envelopes for gaps in ordinals.
15029            while _next_ordinal_to_read < 3 {
15030                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15031                _next_ordinal_to_read += 1;
15032                next_offset += envelope_size;
15033            }
15034
15035            let next_out_of_line = decoder.next_out_of_line();
15036            let handles_before = decoder.remaining_handles();
15037            if let Some((inlined, num_bytes, num_handles)) =
15038                fidl::encoding::decode_envelope_header(decoder, next_offset)?
15039            {
15040                let member_inline_size =
15041                    <fidl::encoding::Vector<u8, 8> as fidl::encoding::TypeMarker>::inline_size(
15042                        decoder.context,
15043                    );
15044                if inlined != (member_inline_size <= 4) {
15045                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
15046                }
15047                let inner_offset;
15048                let mut inner_depth = depth.clone();
15049                if inlined {
15050                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
15051                    inner_offset = next_offset;
15052                } else {
15053                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
15054                    inner_depth.increment()?;
15055                }
15056                let val_ref = self
15057                    .extended_address
15058                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u8, 8>, D));
15059                fidl::decode!(fidl::encoding::Vector<u8, 8>, D, val_ref, decoder, inner_offset, inner_depth)?;
15060                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
15061                {
15062                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
15063                }
15064                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
15065                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
15066                }
15067            }
15068
15069            next_offset += envelope_size;
15070
15071            // Decode the remaining unknown envelopes.
15072            while next_offset < end_offset {
15073                _next_ordinal_to_read += 1;
15074                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15075                next_offset += envelope_size;
15076            }
15077
15078            Ok(())
15079        }
15080    }
15081
15082    impl LowpanContextInfo {
15083        #[inline(always)]
15084        fn max_ordinal_present(&self) -> u64 {
15085            if let Some(_) = self.prefix {
15086                return 4;
15087            }
15088            if let Some(_) = self.stable {
15089                return 3;
15090            }
15091            if let Some(_) = self.compress_flag {
15092                return 2;
15093            }
15094            if let Some(_) = self.context_id {
15095                return 1;
15096            }
15097            0
15098        }
15099    }
15100
15101    impl fidl::encoding::ValueTypeMarker for LowpanContextInfo {
15102        type Borrowed<'a> = &'a Self;
15103        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
15104            value
15105        }
15106    }
15107
15108    unsafe impl fidl::encoding::TypeMarker for LowpanContextInfo {
15109        type Owned = Self;
15110
15111        #[inline(always)]
15112        fn inline_align(_context: fidl::encoding::Context) -> usize {
15113            8
15114        }
15115
15116        #[inline(always)]
15117        fn inline_size(_context: fidl::encoding::Context) -> usize {
15118            16
15119        }
15120    }
15121
15122    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<LowpanContextInfo, D>
15123        for &LowpanContextInfo
15124    {
15125        unsafe fn encode(
15126            self,
15127            encoder: &mut fidl::encoding::Encoder<'_, D>,
15128            offset: usize,
15129            mut depth: fidl::encoding::Depth,
15130        ) -> fidl::Result<()> {
15131            encoder.debug_check_bounds::<LowpanContextInfo>(offset);
15132            // Vector header
15133            let max_ordinal: u64 = self.max_ordinal_present();
15134            encoder.write_num(max_ordinal, offset);
15135            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
15136            // Calling encoder.out_of_line_offset(0) is not allowed.
15137            if max_ordinal == 0 {
15138                return Ok(());
15139            }
15140            depth.increment()?;
15141            let envelope_size = 8;
15142            let bytes_len = max_ordinal as usize * envelope_size;
15143            #[allow(unused_variables)]
15144            let offset = encoder.out_of_line_offset(bytes_len);
15145            let mut _prev_end_offset: usize = 0;
15146            if 1 > max_ordinal {
15147                return Ok(());
15148            }
15149
15150            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
15151            // are envelope_size bytes.
15152            let cur_offset: usize = (1 - 1) * envelope_size;
15153
15154            // Zero reserved fields.
15155            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
15156
15157            // Safety:
15158            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
15159            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
15160            //   envelope_size bytes, there is always sufficient room.
15161            fidl::encoding::encode_in_envelope_optional::<u8, D>(
15162                self.context_id.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
15163                encoder,
15164                offset + cur_offset,
15165                depth,
15166            )?;
15167
15168            _prev_end_offset = cur_offset + envelope_size;
15169            if 2 > max_ordinal {
15170                return Ok(());
15171            }
15172
15173            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
15174            // are envelope_size bytes.
15175            let cur_offset: usize = (2 - 1) * envelope_size;
15176
15177            // Zero reserved fields.
15178            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
15179
15180            // Safety:
15181            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
15182            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
15183            //   envelope_size bytes, there is always sufficient room.
15184            fidl::encoding::encode_in_envelope_optional::<bool, D>(
15185                self.compress_flag.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
15186                encoder,
15187                offset + cur_offset,
15188                depth,
15189            )?;
15190
15191            _prev_end_offset = cur_offset + envelope_size;
15192            if 3 > max_ordinal {
15193                return Ok(());
15194            }
15195
15196            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
15197            // are envelope_size bytes.
15198            let cur_offset: usize = (3 - 1) * envelope_size;
15199
15200            // Zero reserved fields.
15201            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
15202
15203            // Safety:
15204            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
15205            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
15206            //   envelope_size bytes, there is always sufficient room.
15207            fidl::encoding::encode_in_envelope_optional::<bool, D>(
15208                self.stable.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
15209                encoder,
15210                offset + cur_offset,
15211                depth,
15212            )?;
15213
15214            _prev_end_offset = cur_offset + envelope_size;
15215            if 4 > max_ordinal {
15216                return Ok(());
15217            }
15218
15219            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
15220            // are envelope_size bytes.
15221            let cur_offset: usize = (4 - 1) * envelope_size;
15222
15223            // Zero reserved fields.
15224            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
15225
15226            // Safety:
15227            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
15228            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
15229            //   envelope_size bytes, there is always sufficient room.
15230            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<64>, D>(
15231                self.prefix.as_ref().map(
15232                    <fidl::encoding::BoundedString<64> as fidl::encoding::ValueTypeMarker>::borrow,
15233                ),
15234                encoder,
15235                offset + cur_offset,
15236                depth,
15237            )?;
15238
15239            _prev_end_offset = cur_offset + envelope_size;
15240
15241            Ok(())
15242        }
15243    }
15244
15245    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for LowpanContextInfo {
15246        #[inline(always)]
15247        fn new_empty() -> Self {
15248            Self::default()
15249        }
15250
15251        unsafe fn decode(
15252            &mut self,
15253            decoder: &mut fidl::encoding::Decoder<'_, D>,
15254            offset: usize,
15255            mut depth: fidl::encoding::Depth,
15256        ) -> fidl::Result<()> {
15257            decoder.debug_check_bounds::<Self>(offset);
15258            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
15259                None => return Err(fidl::Error::NotNullable),
15260                Some(len) => len,
15261            };
15262            // Calling decoder.out_of_line_offset(0) is not allowed.
15263            if len == 0 {
15264                return Ok(());
15265            };
15266            depth.increment()?;
15267            let envelope_size = 8;
15268            let bytes_len = len * envelope_size;
15269            let offset = decoder.out_of_line_offset(bytes_len)?;
15270            // Decode the envelope for each type.
15271            let mut _next_ordinal_to_read = 0;
15272            let mut next_offset = offset;
15273            let end_offset = offset + bytes_len;
15274            _next_ordinal_to_read += 1;
15275            if next_offset >= end_offset {
15276                return Ok(());
15277            }
15278
15279            // Decode unknown envelopes for gaps in ordinals.
15280            while _next_ordinal_to_read < 1 {
15281                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15282                _next_ordinal_to_read += 1;
15283                next_offset += envelope_size;
15284            }
15285
15286            let next_out_of_line = decoder.next_out_of_line();
15287            let handles_before = decoder.remaining_handles();
15288            if let Some((inlined, num_bytes, num_handles)) =
15289                fidl::encoding::decode_envelope_header(decoder, next_offset)?
15290            {
15291                let member_inline_size =
15292                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
15293                if inlined != (member_inline_size <= 4) {
15294                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
15295                }
15296                let inner_offset;
15297                let mut inner_depth = depth.clone();
15298                if inlined {
15299                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
15300                    inner_offset = next_offset;
15301                } else {
15302                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
15303                    inner_depth.increment()?;
15304                }
15305                let val_ref = self.context_id.get_or_insert_with(|| fidl::new_empty!(u8, D));
15306                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
15307                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
15308                {
15309                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
15310                }
15311                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
15312                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
15313                }
15314            }
15315
15316            next_offset += envelope_size;
15317            _next_ordinal_to_read += 1;
15318            if next_offset >= end_offset {
15319                return Ok(());
15320            }
15321
15322            // Decode unknown envelopes for gaps in ordinals.
15323            while _next_ordinal_to_read < 2 {
15324                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15325                _next_ordinal_to_read += 1;
15326                next_offset += envelope_size;
15327            }
15328
15329            let next_out_of_line = decoder.next_out_of_line();
15330            let handles_before = decoder.remaining_handles();
15331            if let Some((inlined, num_bytes, num_handles)) =
15332                fidl::encoding::decode_envelope_header(decoder, next_offset)?
15333            {
15334                let member_inline_size =
15335                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
15336                if inlined != (member_inline_size <= 4) {
15337                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
15338                }
15339                let inner_offset;
15340                let mut inner_depth = depth.clone();
15341                if inlined {
15342                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
15343                    inner_offset = next_offset;
15344                } else {
15345                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
15346                    inner_depth.increment()?;
15347                }
15348                let val_ref = self.compress_flag.get_or_insert_with(|| fidl::new_empty!(bool, D));
15349                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
15350                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
15351                {
15352                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
15353                }
15354                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
15355                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
15356                }
15357            }
15358
15359            next_offset += envelope_size;
15360            _next_ordinal_to_read += 1;
15361            if next_offset >= end_offset {
15362                return Ok(());
15363            }
15364
15365            // Decode unknown envelopes for gaps in ordinals.
15366            while _next_ordinal_to_read < 3 {
15367                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15368                _next_ordinal_to_read += 1;
15369                next_offset += envelope_size;
15370            }
15371
15372            let next_out_of_line = decoder.next_out_of_line();
15373            let handles_before = decoder.remaining_handles();
15374            if let Some((inlined, num_bytes, num_handles)) =
15375                fidl::encoding::decode_envelope_header(decoder, next_offset)?
15376            {
15377                let member_inline_size =
15378                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
15379                if inlined != (member_inline_size <= 4) {
15380                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
15381                }
15382                let inner_offset;
15383                let mut inner_depth = depth.clone();
15384                if inlined {
15385                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
15386                    inner_offset = next_offset;
15387                } else {
15388                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
15389                    inner_depth.increment()?;
15390                }
15391                let val_ref = self.stable.get_or_insert_with(|| fidl::new_empty!(bool, D));
15392                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
15393                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
15394                {
15395                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
15396                }
15397                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
15398                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
15399                }
15400            }
15401
15402            next_offset += envelope_size;
15403            _next_ordinal_to_read += 1;
15404            if next_offset >= end_offset {
15405                return Ok(());
15406            }
15407
15408            // Decode unknown envelopes for gaps in ordinals.
15409            while _next_ordinal_to_read < 4 {
15410                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15411                _next_ordinal_to_read += 1;
15412                next_offset += envelope_size;
15413            }
15414
15415            let next_out_of_line = decoder.next_out_of_line();
15416            let handles_before = decoder.remaining_handles();
15417            if let Some((inlined, num_bytes, num_handles)) =
15418                fidl::encoding::decode_envelope_header(decoder, next_offset)?
15419            {
15420                let member_inline_size =
15421                    <fidl::encoding::BoundedString<64> as fidl::encoding::TypeMarker>::inline_size(
15422                        decoder.context,
15423                    );
15424                if inlined != (member_inline_size <= 4) {
15425                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
15426                }
15427                let inner_offset;
15428                let mut inner_depth = depth.clone();
15429                if inlined {
15430                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
15431                    inner_offset = next_offset;
15432                } else {
15433                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
15434                    inner_depth.increment()?;
15435                }
15436                let val_ref = self
15437                    .prefix
15438                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<64>, D));
15439                fidl::decode!(
15440                    fidl::encoding::BoundedString<64>,
15441                    D,
15442                    val_ref,
15443                    decoder,
15444                    inner_offset,
15445                    inner_depth
15446                )?;
15447                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
15448                {
15449                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
15450                }
15451                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
15452                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
15453                }
15454            }
15455
15456            next_offset += envelope_size;
15457
15458            // Decode the remaining unknown envelopes.
15459            while next_offset < end_offset {
15460                _next_ordinal_to_read += 1;
15461                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15462                next_offset += envelope_size;
15463            }
15464
15465            Ok(())
15466        }
15467    }
15468
15469    impl MultiRadioNeighborInfo {
15470        #[inline(always)]
15471        fn max_ordinal_present(&self) -> u64 {
15472            if let Some(_) = self.radio_link_info {
15473                return 3;
15474            }
15475            if let Some(_) = self.thread_rloc {
15476                return 2;
15477            }
15478            if let Some(_) = self.extended_address {
15479                return 1;
15480            }
15481            0
15482        }
15483    }
15484
15485    impl fidl::encoding::ValueTypeMarker for MultiRadioNeighborInfo {
15486        type Borrowed<'a> = &'a Self;
15487        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
15488            value
15489        }
15490    }
15491
15492    unsafe impl fidl::encoding::TypeMarker for MultiRadioNeighborInfo {
15493        type Owned = Self;
15494
15495        #[inline(always)]
15496        fn inline_align(_context: fidl::encoding::Context) -> usize {
15497            8
15498        }
15499
15500        #[inline(always)]
15501        fn inline_size(_context: fidl::encoding::Context) -> usize {
15502            16
15503        }
15504    }
15505
15506    unsafe impl<D: fidl::encoding::ResourceDialect>
15507        fidl::encoding::Encode<MultiRadioNeighborInfo, D> for &MultiRadioNeighborInfo
15508    {
15509        unsafe fn encode(
15510            self,
15511            encoder: &mut fidl::encoding::Encoder<'_, D>,
15512            offset: usize,
15513            mut depth: fidl::encoding::Depth,
15514        ) -> fidl::Result<()> {
15515            encoder.debug_check_bounds::<MultiRadioNeighborInfo>(offset);
15516            // Vector header
15517            let max_ordinal: u64 = self.max_ordinal_present();
15518            encoder.write_num(max_ordinal, offset);
15519            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
15520            // Calling encoder.out_of_line_offset(0) is not allowed.
15521            if max_ordinal == 0 {
15522                return Ok(());
15523            }
15524            depth.increment()?;
15525            let envelope_size = 8;
15526            let bytes_len = max_ordinal as usize * envelope_size;
15527            #[allow(unused_variables)]
15528            let offset = encoder.out_of_line_offset(bytes_len);
15529            let mut _prev_end_offset: usize = 0;
15530            if 1 > max_ordinal {
15531                return Ok(());
15532            }
15533
15534            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
15535            // are envelope_size bytes.
15536            let cur_offset: usize = (1 - 1) * envelope_size;
15537
15538            // Zero reserved fields.
15539            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
15540
15541            // Safety:
15542            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
15543            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
15544            //   envelope_size bytes, there is always sufficient room.
15545            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u8, 8>, D>(
15546                self.extended_address.as_ref().map(
15547                    <fidl::encoding::Vector<u8, 8> as fidl::encoding::ValueTypeMarker>::borrow,
15548                ),
15549                encoder,
15550                offset + cur_offset,
15551                depth,
15552            )?;
15553
15554            _prev_end_offset = cur_offset + envelope_size;
15555            if 2 > max_ordinal {
15556                return Ok(());
15557            }
15558
15559            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
15560            // are envelope_size bytes.
15561            let cur_offset: usize = (2 - 1) * envelope_size;
15562
15563            // Zero reserved fields.
15564            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
15565
15566            // Safety:
15567            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
15568            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
15569            //   envelope_size bytes, there is always sufficient room.
15570            fidl::encoding::encode_in_envelope_optional::<u16, D>(
15571                self.thread_rloc.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
15572                encoder,
15573                offset + cur_offset,
15574                depth,
15575            )?;
15576
15577            _prev_end_offset = cur_offset + envelope_size;
15578            if 3 > max_ordinal {
15579                return Ok(());
15580            }
15581
15582            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
15583            // are envelope_size bytes.
15584            let cur_offset: usize = (3 - 1) * envelope_size;
15585
15586            // Zero reserved fields.
15587            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
15588
15589            // Safety:
15590            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
15591            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
15592            //   envelope_size bytes, there is always sufficient room.
15593            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<RadioLinkInfo, 5>, D>(
15594            self.radio_link_info.as_ref().map(<fidl::encoding::Vector<RadioLinkInfo, 5> as fidl::encoding::ValueTypeMarker>::borrow),
15595            encoder, offset + cur_offset, depth
15596        )?;
15597
15598            _prev_end_offset = cur_offset + envelope_size;
15599
15600            Ok(())
15601        }
15602    }
15603
15604    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
15605        for MultiRadioNeighborInfo
15606    {
15607        #[inline(always)]
15608        fn new_empty() -> Self {
15609            Self::default()
15610        }
15611
15612        unsafe fn decode(
15613            &mut self,
15614            decoder: &mut fidl::encoding::Decoder<'_, D>,
15615            offset: usize,
15616            mut depth: fidl::encoding::Depth,
15617        ) -> fidl::Result<()> {
15618            decoder.debug_check_bounds::<Self>(offset);
15619            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
15620                None => return Err(fidl::Error::NotNullable),
15621                Some(len) => len,
15622            };
15623            // Calling decoder.out_of_line_offset(0) is not allowed.
15624            if len == 0 {
15625                return Ok(());
15626            };
15627            depth.increment()?;
15628            let envelope_size = 8;
15629            let bytes_len = len * envelope_size;
15630            let offset = decoder.out_of_line_offset(bytes_len)?;
15631            // Decode the envelope for each type.
15632            let mut _next_ordinal_to_read = 0;
15633            let mut next_offset = offset;
15634            let end_offset = offset + bytes_len;
15635            _next_ordinal_to_read += 1;
15636            if next_offset >= end_offset {
15637                return Ok(());
15638            }
15639
15640            // Decode unknown envelopes for gaps in ordinals.
15641            while _next_ordinal_to_read < 1 {
15642                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15643                _next_ordinal_to_read += 1;
15644                next_offset += envelope_size;
15645            }
15646
15647            let next_out_of_line = decoder.next_out_of_line();
15648            let handles_before = decoder.remaining_handles();
15649            if let Some((inlined, num_bytes, num_handles)) =
15650                fidl::encoding::decode_envelope_header(decoder, next_offset)?
15651            {
15652                let member_inline_size =
15653                    <fidl::encoding::Vector<u8, 8> as fidl::encoding::TypeMarker>::inline_size(
15654                        decoder.context,
15655                    );
15656                if inlined != (member_inline_size <= 4) {
15657                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
15658                }
15659                let inner_offset;
15660                let mut inner_depth = depth.clone();
15661                if inlined {
15662                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
15663                    inner_offset = next_offset;
15664                } else {
15665                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
15666                    inner_depth.increment()?;
15667                }
15668                let val_ref = self
15669                    .extended_address
15670                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u8, 8>, D));
15671                fidl::decode!(fidl::encoding::Vector<u8, 8>, D, val_ref, decoder, inner_offset, inner_depth)?;
15672                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
15673                {
15674                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
15675                }
15676                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
15677                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
15678                }
15679            }
15680
15681            next_offset += envelope_size;
15682            _next_ordinal_to_read += 1;
15683            if next_offset >= end_offset {
15684                return Ok(());
15685            }
15686
15687            // Decode unknown envelopes for gaps in ordinals.
15688            while _next_ordinal_to_read < 2 {
15689                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15690                _next_ordinal_to_read += 1;
15691                next_offset += envelope_size;
15692            }
15693
15694            let next_out_of_line = decoder.next_out_of_line();
15695            let handles_before = decoder.remaining_handles();
15696            if let Some((inlined, num_bytes, num_handles)) =
15697                fidl::encoding::decode_envelope_header(decoder, next_offset)?
15698            {
15699                let member_inline_size =
15700                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
15701                if inlined != (member_inline_size <= 4) {
15702                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
15703                }
15704                let inner_offset;
15705                let mut inner_depth = depth.clone();
15706                if inlined {
15707                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
15708                    inner_offset = next_offset;
15709                } else {
15710                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
15711                    inner_depth.increment()?;
15712                }
15713                let val_ref = self.thread_rloc.get_or_insert_with(|| fidl::new_empty!(u16, D));
15714                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
15715                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
15716                {
15717                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
15718                }
15719                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
15720                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
15721                }
15722            }
15723
15724            next_offset += envelope_size;
15725            _next_ordinal_to_read += 1;
15726            if next_offset >= end_offset {
15727                return Ok(());
15728            }
15729
15730            // Decode unknown envelopes for gaps in ordinals.
15731            while _next_ordinal_to_read < 3 {
15732                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15733                _next_ordinal_to_read += 1;
15734                next_offset += envelope_size;
15735            }
15736
15737            let next_out_of_line = decoder.next_out_of_line();
15738            let handles_before = decoder.remaining_handles();
15739            if let Some((inlined, num_bytes, num_handles)) =
15740                fidl::encoding::decode_envelope_header(decoder, next_offset)?
15741            {
15742                let member_inline_size = <fidl::encoding::Vector<RadioLinkInfo, 5> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
15743                if inlined != (member_inline_size <= 4) {
15744                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
15745                }
15746                let inner_offset;
15747                let mut inner_depth = depth.clone();
15748                if inlined {
15749                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
15750                    inner_offset = next_offset;
15751                } else {
15752                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
15753                    inner_depth.increment()?;
15754                }
15755                let val_ref = self.radio_link_info.get_or_insert_with(
15756                    || fidl::new_empty!(fidl::encoding::Vector<RadioLinkInfo, 5>, D),
15757                );
15758                fidl::decode!(fidl::encoding::Vector<RadioLinkInfo, 5>, D, val_ref, decoder, inner_offset, inner_depth)?;
15759                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
15760                {
15761                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
15762                }
15763                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
15764                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
15765                }
15766            }
15767
15768            next_offset += envelope_size;
15769
15770            // Decode the remaining unknown envelopes.
15771            while next_offset < end_offset {
15772                _next_ordinal_to_read += 1;
15773                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15774                next_offset += envelope_size;
15775            }
15776
15777            Ok(())
15778        }
15779    }
15780
15781    impl Nat64ErrorCounters {
15782        #[inline(always)]
15783        fn max_ordinal_present(&self) -> u64 {
15784            if let Some(_) = self.no_mapping {
15785                return 4;
15786            }
15787            if let Some(_) = self.unsupported_protocol {
15788                return 3;
15789            }
15790            if let Some(_) = self.illegal_packet {
15791                return 2;
15792            }
15793            if let Some(_) = self.unknown {
15794                return 1;
15795            }
15796            0
15797        }
15798    }
15799
15800    impl fidl::encoding::ValueTypeMarker for Nat64ErrorCounters {
15801        type Borrowed<'a> = &'a Self;
15802        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
15803            value
15804        }
15805    }
15806
15807    unsafe impl fidl::encoding::TypeMarker for Nat64ErrorCounters {
15808        type Owned = Self;
15809
15810        #[inline(always)]
15811        fn inline_align(_context: fidl::encoding::Context) -> usize {
15812            8
15813        }
15814
15815        #[inline(always)]
15816        fn inline_size(_context: fidl::encoding::Context) -> usize {
15817            16
15818        }
15819    }
15820
15821    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Nat64ErrorCounters, D>
15822        for &Nat64ErrorCounters
15823    {
15824        unsafe fn encode(
15825            self,
15826            encoder: &mut fidl::encoding::Encoder<'_, D>,
15827            offset: usize,
15828            mut depth: fidl::encoding::Depth,
15829        ) -> fidl::Result<()> {
15830            encoder.debug_check_bounds::<Nat64ErrorCounters>(offset);
15831            // Vector header
15832            let max_ordinal: u64 = self.max_ordinal_present();
15833            encoder.write_num(max_ordinal, offset);
15834            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
15835            // Calling encoder.out_of_line_offset(0) is not allowed.
15836            if max_ordinal == 0 {
15837                return Ok(());
15838            }
15839            depth.increment()?;
15840            let envelope_size = 8;
15841            let bytes_len = max_ordinal as usize * envelope_size;
15842            #[allow(unused_variables)]
15843            let offset = encoder.out_of_line_offset(bytes_len);
15844            let mut _prev_end_offset: usize = 0;
15845            if 1 > max_ordinal {
15846                return Ok(());
15847            }
15848
15849            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
15850            // are envelope_size bytes.
15851            let cur_offset: usize = (1 - 1) * envelope_size;
15852
15853            // Zero reserved fields.
15854            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
15855
15856            // Safety:
15857            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
15858            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
15859            //   envelope_size bytes, there is always sufficient room.
15860            fidl::encoding::encode_in_envelope_optional::<Nat64PacketCounters, D>(
15861                self.unknown
15862                    .as_ref()
15863                    .map(<Nat64PacketCounters as fidl::encoding::ValueTypeMarker>::borrow),
15864                encoder,
15865                offset + cur_offset,
15866                depth,
15867            )?;
15868
15869            _prev_end_offset = cur_offset + envelope_size;
15870            if 2 > max_ordinal {
15871                return Ok(());
15872            }
15873
15874            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
15875            // are envelope_size bytes.
15876            let cur_offset: usize = (2 - 1) * envelope_size;
15877
15878            // Zero reserved fields.
15879            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
15880
15881            // Safety:
15882            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
15883            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
15884            //   envelope_size bytes, there is always sufficient room.
15885            fidl::encoding::encode_in_envelope_optional::<Nat64PacketCounters, D>(
15886                self.illegal_packet
15887                    .as_ref()
15888                    .map(<Nat64PacketCounters as fidl::encoding::ValueTypeMarker>::borrow),
15889                encoder,
15890                offset + cur_offset,
15891                depth,
15892            )?;
15893
15894            _prev_end_offset = cur_offset + envelope_size;
15895            if 3 > max_ordinal {
15896                return Ok(());
15897            }
15898
15899            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
15900            // are envelope_size bytes.
15901            let cur_offset: usize = (3 - 1) * envelope_size;
15902
15903            // Zero reserved fields.
15904            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
15905
15906            // Safety:
15907            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
15908            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
15909            //   envelope_size bytes, there is always sufficient room.
15910            fidl::encoding::encode_in_envelope_optional::<Nat64PacketCounters, D>(
15911                self.unsupported_protocol
15912                    .as_ref()
15913                    .map(<Nat64PacketCounters as fidl::encoding::ValueTypeMarker>::borrow),
15914                encoder,
15915                offset + cur_offset,
15916                depth,
15917            )?;
15918
15919            _prev_end_offset = cur_offset + envelope_size;
15920            if 4 > max_ordinal {
15921                return Ok(());
15922            }
15923
15924            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
15925            // are envelope_size bytes.
15926            let cur_offset: usize = (4 - 1) * envelope_size;
15927
15928            // Zero reserved fields.
15929            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
15930
15931            // Safety:
15932            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
15933            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
15934            //   envelope_size bytes, there is always sufficient room.
15935            fidl::encoding::encode_in_envelope_optional::<Nat64PacketCounters, D>(
15936                self.no_mapping
15937                    .as_ref()
15938                    .map(<Nat64PacketCounters as fidl::encoding::ValueTypeMarker>::borrow),
15939                encoder,
15940                offset + cur_offset,
15941                depth,
15942            )?;
15943
15944            _prev_end_offset = cur_offset + envelope_size;
15945
15946            Ok(())
15947        }
15948    }
15949
15950    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Nat64ErrorCounters {
15951        #[inline(always)]
15952        fn new_empty() -> Self {
15953            Self::default()
15954        }
15955
15956        unsafe fn decode(
15957            &mut self,
15958            decoder: &mut fidl::encoding::Decoder<'_, D>,
15959            offset: usize,
15960            mut depth: fidl::encoding::Depth,
15961        ) -> fidl::Result<()> {
15962            decoder.debug_check_bounds::<Self>(offset);
15963            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
15964                None => return Err(fidl::Error::NotNullable),
15965                Some(len) => len,
15966            };
15967            // Calling decoder.out_of_line_offset(0) is not allowed.
15968            if len == 0 {
15969                return Ok(());
15970            };
15971            depth.increment()?;
15972            let envelope_size = 8;
15973            let bytes_len = len * envelope_size;
15974            let offset = decoder.out_of_line_offset(bytes_len)?;
15975            // Decode the envelope for each type.
15976            let mut _next_ordinal_to_read = 0;
15977            let mut next_offset = offset;
15978            let end_offset = offset + bytes_len;
15979            _next_ordinal_to_read += 1;
15980            if next_offset >= end_offset {
15981                return Ok(());
15982            }
15983
15984            // Decode unknown envelopes for gaps in ordinals.
15985            while _next_ordinal_to_read < 1 {
15986                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15987                _next_ordinal_to_read += 1;
15988                next_offset += envelope_size;
15989            }
15990
15991            let next_out_of_line = decoder.next_out_of_line();
15992            let handles_before = decoder.remaining_handles();
15993            if let Some((inlined, num_bytes, num_handles)) =
15994                fidl::encoding::decode_envelope_header(decoder, next_offset)?
15995            {
15996                let member_inline_size =
15997                    <Nat64PacketCounters as fidl::encoding::TypeMarker>::inline_size(
15998                        decoder.context,
15999                    );
16000                if inlined != (member_inline_size <= 4) {
16001                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
16002                }
16003                let inner_offset;
16004                let mut inner_depth = depth.clone();
16005                if inlined {
16006                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
16007                    inner_offset = next_offset;
16008                } else {
16009                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
16010                    inner_depth.increment()?;
16011                }
16012                let val_ref =
16013                    self.unknown.get_or_insert_with(|| fidl::new_empty!(Nat64PacketCounters, D));
16014                fidl::decode!(Nat64PacketCounters, D, val_ref, decoder, inner_offset, inner_depth)?;
16015                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
16016                {
16017                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
16018                }
16019                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
16020                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
16021                }
16022            }
16023
16024            next_offset += envelope_size;
16025            _next_ordinal_to_read += 1;
16026            if next_offset >= end_offset {
16027                return Ok(());
16028            }
16029
16030            // Decode unknown envelopes for gaps in ordinals.
16031            while _next_ordinal_to_read < 2 {
16032                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
16033                _next_ordinal_to_read += 1;
16034                next_offset += envelope_size;
16035            }
16036
16037            let next_out_of_line = decoder.next_out_of_line();
16038            let handles_before = decoder.remaining_handles();
16039            if let Some((inlined, num_bytes, num_handles)) =
16040                fidl::encoding::decode_envelope_header(decoder, next_offset)?
16041            {
16042                let member_inline_size =
16043                    <Nat64PacketCounters as fidl::encoding::TypeMarker>::inline_size(
16044                        decoder.context,
16045                    );
16046                if inlined != (member_inline_size <= 4) {
16047                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
16048                }
16049                let inner_offset;
16050                let mut inner_depth = depth.clone();
16051                if inlined {
16052                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
16053                    inner_offset = next_offset;
16054                } else {
16055                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
16056                    inner_depth.increment()?;
16057                }
16058                let val_ref = self
16059                    .illegal_packet
16060                    .get_or_insert_with(|| fidl::new_empty!(Nat64PacketCounters, D));
16061                fidl::decode!(Nat64PacketCounters, D, val_ref, decoder, inner_offset, inner_depth)?;
16062                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
16063                {
16064                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
16065                }
16066                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
16067                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
16068                }
16069            }
16070
16071            next_offset += envelope_size;
16072            _next_ordinal_to_read += 1;
16073            if next_offset >= end_offset {
16074                return Ok(());
16075            }
16076
16077            // Decode unknown envelopes for gaps in ordinals.
16078            while _next_ordinal_to_read < 3 {
16079                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
16080                _next_ordinal_to_read += 1;
16081                next_offset += envelope_size;
16082            }
16083
16084            let next_out_of_line = decoder.next_out_of_line();
16085            let handles_before = decoder.remaining_handles();
16086            if let Some((inlined, num_bytes, num_handles)) =
16087                fidl::encoding::decode_envelope_header(decoder, next_offset)?
16088            {
16089                let member_inline_size =
16090                    <Nat64PacketCounters as fidl::encoding::TypeMarker>::inline_size(
16091                        decoder.context,
16092                    );
16093                if inlined != (member_inline_size <= 4) {
16094                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
16095                }
16096                let inner_offset;
16097                let mut inner_depth = depth.clone();
16098                if inlined {
16099                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
16100                    inner_offset = next_offset;
16101                } else {
16102                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
16103                    inner_depth.increment()?;
16104                }
16105                let val_ref = self
16106                    .unsupported_protocol
16107                    .get_or_insert_with(|| fidl::new_empty!(Nat64PacketCounters, D));
16108                fidl::decode!(Nat64PacketCounters, D, val_ref, decoder, inner_offset, inner_depth)?;
16109                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
16110                {
16111                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
16112                }
16113                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
16114                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
16115                }
16116            }
16117
16118            next_offset += envelope_size;
16119            _next_ordinal_to_read += 1;
16120            if next_offset >= end_offset {
16121                return Ok(());
16122            }
16123
16124            // Decode unknown envelopes for gaps in ordinals.
16125            while _next_ordinal_to_read < 4 {
16126                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
16127                _next_ordinal_to_read += 1;
16128                next_offset += envelope_size;
16129            }
16130
16131            let next_out_of_line = decoder.next_out_of_line();
16132            let handles_before = decoder.remaining_handles();
16133            if let Some((inlined, num_bytes, num_handles)) =
16134                fidl::encoding::decode_envelope_header(decoder, next_offset)?
16135            {
16136                let member_inline_size =
16137                    <Nat64PacketCounters as fidl::encoding::TypeMarker>::inline_size(
16138                        decoder.context,
16139                    );
16140                if inlined != (member_inline_size <= 4) {
16141                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
16142                }
16143                let inner_offset;
16144                let mut inner_depth = depth.clone();
16145                if inlined {
16146                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
16147                    inner_offset = next_offset;
16148                } else {
16149                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
16150                    inner_depth.increment()?;
16151                }
16152                let val_ref =
16153                    self.no_mapping.get_or_insert_with(|| fidl::new_empty!(Nat64PacketCounters, D));
16154                fidl::decode!(Nat64PacketCounters, D, val_ref, decoder, inner_offset, inner_depth)?;
16155                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
16156                {
16157                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
16158                }
16159                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
16160                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
16161                }
16162            }
16163
16164            next_offset += envelope_size;
16165
16166            // Decode the remaining unknown envelopes.
16167            while next_offset < end_offset {
16168                _next_ordinal_to_read += 1;
16169                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
16170                next_offset += envelope_size;
16171            }
16172
16173            Ok(())
16174        }
16175    }
16176
16177    impl Nat64Info {
16178        #[inline(always)]
16179        fn max_ordinal_present(&self) -> u64 {
16180            if let Some(_) = self.nat64_protocol_counters {
16181                return 4;
16182            }
16183            if let Some(_) = self.nat64_error_counters {
16184                return 3;
16185            }
16186            if let Some(_) = self.nat64_mappings {
16187                return 2;
16188            }
16189            if let Some(_) = self.nat64_state {
16190                return 1;
16191            }
16192            0
16193        }
16194    }
16195
16196    impl fidl::encoding::ValueTypeMarker for Nat64Info {
16197        type Borrowed<'a> = &'a Self;
16198        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
16199            value
16200        }
16201    }
16202
16203    unsafe impl fidl::encoding::TypeMarker for Nat64Info {
16204        type Owned = Self;
16205
16206        #[inline(always)]
16207        fn inline_align(_context: fidl::encoding::Context) -> usize {
16208            8
16209        }
16210
16211        #[inline(always)]
16212        fn inline_size(_context: fidl::encoding::Context) -> usize {
16213            16
16214        }
16215    }
16216
16217    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Nat64Info, D>
16218        for &Nat64Info
16219    {
16220        unsafe fn encode(
16221            self,
16222            encoder: &mut fidl::encoding::Encoder<'_, D>,
16223            offset: usize,
16224            mut depth: fidl::encoding::Depth,
16225        ) -> fidl::Result<()> {
16226            encoder.debug_check_bounds::<Nat64Info>(offset);
16227            // Vector header
16228            let max_ordinal: u64 = self.max_ordinal_present();
16229            encoder.write_num(max_ordinal, offset);
16230            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
16231            // Calling encoder.out_of_line_offset(0) is not allowed.
16232            if max_ordinal == 0 {
16233                return Ok(());
16234            }
16235            depth.increment()?;
16236            let envelope_size = 8;
16237            let bytes_len = max_ordinal as usize * envelope_size;
16238            #[allow(unused_variables)]
16239            let offset = encoder.out_of_line_offset(bytes_len);
16240            let mut _prev_end_offset: usize = 0;
16241            if 1 > max_ordinal {
16242                return Ok(());
16243            }
16244
16245            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
16246            // are envelope_size bytes.
16247            let cur_offset: usize = (1 - 1) * envelope_size;
16248
16249            // Zero reserved fields.
16250            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
16251
16252            // Safety:
16253            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
16254            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
16255            //   envelope_size bytes, there is always sufficient room.
16256            fidl::encoding::encode_in_envelope_optional::<BorderRoutingNat64State, D>(
16257                self.nat64_state
16258                    .as_ref()
16259                    .map(<BorderRoutingNat64State as fidl::encoding::ValueTypeMarker>::borrow),
16260                encoder,
16261                offset + cur_offset,
16262                depth,
16263            )?;
16264
16265            _prev_end_offset = cur_offset + envelope_size;
16266            if 2 > max_ordinal {
16267                return Ok(());
16268            }
16269
16270            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
16271            // are envelope_size bytes.
16272            let cur_offset: usize = (2 - 1) * envelope_size;
16273
16274            // Zero reserved fields.
16275            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
16276
16277            // Safety:
16278            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
16279            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
16280            //   envelope_size bytes, there is always sufficient room.
16281            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<Nat64Mapping>, D>(
16282            self.nat64_mappings.as_ref().map(<fidl::encoding::UnboundedVector<Nat64Mapping> as fidl::encoding::ValueTypeMarker>::borrow),
16283            encoder, offset + cur_offset, depth
16284        )?;
16285
16286            _prev_end_offset = cur_offset + envelope_size;
16287            if 3 > max_ordinal {
16288                return Ok(());
16289            }
16290
16291            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
16292            // are envelope_size bytes.
16293            let cur_offset: usize = (3 - 1) * envelope_size;
16294
16295            // Zero reserved fields.
16296            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
16297
16298            // Safety:
16299            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
16300            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
16301            //   envelope_size bytes, there is always sufficient room.
16302            fidl::encoding::encode_in_envelope_optional::<Nat64ErrorCounters, D>(
16303                self.nat64_error_counters
16304                    .as_ref()
16305                    .map(<Nat64ErrorCounters as fidl::encoding::ValueTypeMarker>::borrow),
16306                encoder,
16307                offset + cur_offset,
16308                depth,
16309            )?;
16310
16311            _prev_end_offset = cur_offset + envelope_size;
16312            if 4 > max_ordinal {
16313                return Ok(());
16314            }
16315
16316            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
16317            // are envelope_size bytes.
16318            let cur_offset: usize = (4 - 1) * envelope_size;
16319
16320            // Zero reserved fields.
16321            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
16322
16323            // Safety:
16324            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
16325            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
16326            //   envelope_size bytes, there is always sufficient room.
16327            fidl::encoding::encode_in_envelope_optional::<Nat64ProtocolCounters, D>(
16328                self.nat64_protocol_counters
16329                    .as_ref()
16330                    .map(<Nat64ProtocolCounters as fidl::encoding::ValueTypeMarker>::borrow),
16331                encoder,
16332                offset + cur_offset,
16333                depth,
16334            )?;
16335
16336            _prev_end_offset = cur_offset + envelope_size;
16337
16338            Ok(())
16339        }
16340    }
16341
16342    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Nat64Info {
16343        #[inline(always)]
16344        fn new_empty() -> Self {
16345            Self::default()
16346        }
16347
16348        unsafe fn decode(
16349            &mut self,
16350            decoder: &mut fidl::encoding::Decoder<'_, D>,
16351            offset: usize,
16352            mut depth: fidl::encoding::Depth,
16353        ) -> fidl::Result<()> {
16354            decoder.debug_check_bounds::<Self>(offset);
16355            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
16356                None => return Err(fidl::Error::NotNullable),
16357                Some(len) => len,
16358            };
16359            // Calling decoder.out_of_line_offset(0) is not allowed.
16360            if len == 0 {
16361                return Ok(());
16362            };
16363            depth.increment()?;
16364            let envelope_size = 8;
16365            let bytes_len = len * envelope_size;
16366            let offset = decoder.out_of_line_offset(bytes_len)?;
16367            // Decode the envelope for each type.
16368            let mut _next_ordinal_to_read = 0;
16369            let mut next_offset = offset;
16370            let end_offset = offset + bytes_len;
16371            _next_ordinal_to_read += 1;
16372            if next_offset >= end_offset {
16373                return Ok(());
16374            }
16375
16376            // Decode unknown envelopes for gaps in ordinals.
16377            while _next_ordinal_to_read < 1 {
16378                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
16379                _next_ordinal_to_read += 1;
16380                next_offset += envelope_size;
16381            }
16382
16383            let next_out_of_line = decoder.next_out_of_line();
16384            let handles_before = decoder.remaining_handles();
16385            if let Some((inlined, num_bytes, num_handles)) =
16386                fidl::encoding::decode_envelope_header(decoder, next_offset)?
16387            {
16388                let member_inline_size =
16389                    <BorderRoutingNat64State as fidl::encoding::TypeMarker>::inline_size(
16390                        decoder.context,
16391                    );
16392                if inlined != (member_inline_size <= 4) {
16393                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
16394                }
16395                let inner_offset;
16396                let mut inner_depth = depth.clone();
16397                if inlined {
16398                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
16399                    inner_offset = next_offset;
16400                } else {
16401                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
16402                    inner_depth.increment()?;
16403                }
16404                let val_ref = self
16405                    .nat64_state
16406                    .get_or_insert_with(|| fidl::new_empty!(BorderRoutingNat64State, D));
16407                fidl::decode!(
16408                    BorderRoutingNat64State,
16409                    D,
16410                    val_ref,
16411                    decoder,
16412                    inner_offset,
16413                    inner_depth
16414                )?;
16415                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
16416                {
16417                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
16418                }
16419                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
16420                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
16421                }
16422            }
16423
16424            next_offset += envelope_size;
16425            _next_ordinal_to_read += 1;
16426            if next_offset >= end_offset {
16427                return Ok(());
16428            }
16429
16430            // Decode unknown envelopes for gaps in ordinals.
16431            while _next_ordinal_to_read < 2 {
16432                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
16433                _next_ordinal_to_read += 1;
16434                next_offset += envelope_size;
16435            }
16436
16437            let next_out_of_line = decoder.next_out_of_line();
16438            let handles_before = decoder.remaining_handles();
16439            if let Some((inlined, num_bytes, num_handles)) =
16440                fidl::encoding::decode_envelope_header(decoder, next_offset)?
16441            {
16442                let member_inline_size = <fidl::encoding::UnboundedVector<Nat64Mapping> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
16443                if inlined != (member_inline_size <= 4) {
16444                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
16445                }
16446                let inner_offset;
16447                let mut inner_depth = depth.clone();
16448                if inlined {
16449                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
16450                    inner_offset = next_offset;
16451                } else {
16452                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
16453                    inner_depth.increment()?;
16454                }
16455                let val_ref = self.nat64_mappings.get_or_insert_with(|| {
16456                    fidl::new_empty!(fidl::encoding::UnboundedVector<Nat64Mapping>, D)
16457                });
16458                fidl::decode!(
16459                    fidl::encoding::UnboundedVector<Nat64Mapping>,
16460                    D,
16461                    val_ref,
16462                    decoder,
16463                    inner_offset,
16464                    inner_depth
16465                )?;
16466                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
16467                {
16468                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
16469                }
16470                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
16471                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
16472                }
16473            }
16474
16475            next_offset += envelope_size;
16476            _next_ordinal_to_read += 1;
16477            if next_offset >= end_offset {
16478                return Ok(());
16479            }
16480
16481            // Decode unknown envelopes for gaps in ordinals.
16482            while _next_ordinal_to_read < 3 {
16483                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
16484                _next_ordinal_to_read += 1;
16485                next_offset += envelope_size;
16486            }
16487
16488            let next_out_of_line = decoder.next_out_of_line();
16489            let handles_before = decoder.remaining_handles();
16490            if let Some((inlined, num_bytes, num_handles)) =
16491                fidl::encoding::decode_envelope_header(decoder, next_offset)?
16492            {
16493                let member_inline_size =
16494                    <Nat64ErrorCounters as fidl::encoding::TypeMarker>::inline_size(
16495                        decoder.context,
16496                    );
16497                if inlined != (member_inline_size <= 4) {
16498                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
16499                }
16500                let inner_offset;
16501                let mut inner_depth = depth.clone();
16502                if inlined {
16503                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
16504                    inner_offset = next_offset;
16505                } else {
16506                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
16507                    inner_depth.increment()?;
16508                }
16509                let val_ref = self
16510                    .nat64_error_counters
16511                    .get_or_insert_with(|| fidl::new_empty!(Nat64ErrorCounters, D));
16512                fidl::decode!(Nat64ErrorCounters, D, val_ref, decoder, inner_offset, inner_depth)?;
16513                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
16514                {
16515                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
16516                }
16517                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
16518                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
16519                }
16520            }
16521
16522            next_offset += envelope_size;
16523            _next_ordinal_to_read += 1;
16524            if next_offset >= end_offset {
16525                return Ok(());
16526            }
16527
16528            // Decode unknown envelopes for gaps in ordinals.
16529            while _next_ordinal_to_read < 4 {
16530                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
16531                _next_ordinal_to_read += 1;
16532                next_offset += envelope_size;
16533            }
16534
16535            let next_out_of_line = decoder.next_out_of_line();
16536            let handles_before = decoder.remaining_handles();
16537            if let Some((inlined, num_bytes, num_handles)) =
16538                fidl::encoding::decode_envelope_header(decoder, next_offset)?
16539            {
16540                let member_inline_size =
16541                    <Nat64ProtocolCounters as fidl::encoding::TypeMarker>::inline_size(
16542                        decoder.context,
16543                    );
16544                if inlined != (member_inline_size <= 4) {
16545                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
16546                }
16547                let inner_offset;
16548                let mut inner_depth = depth.clone();
16549                if inlined {
16550                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
16551                    inner_offset = next_offset;
16552                } else {
16553                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
16554                    inner_depth.increment()?;
16555                }
16556                let val_ref = self
16557                    .nat64_protocol_counters
16558                    .get_or_insert_with(|| fidl::new_empty!(Nat64ProtocolCounters, D));
16559                fidl::decode!(
16560                    Nat64ProtocolCounters,
16561                    D,
16562                    val_ref,
16563                    decoder,
16564                    inner_offset,
16565                    inner_depth
16566                )?;
16567                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
16568                {
16569                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
16570                }
16571                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
16572                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
16573                }
16574            }
16575
16576            next_offset += envelope_size;
16577
16578            // Decode the remaining unknown envelopes.
16579            while next_offset < end_offset {
16580                _next_ordinal_to_read += 1;
16581                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
16582                next_offset += envelope_size;
16583            }
16584
16585            Ok(())
16586        }
16587    }
16588
16589    impl Nat64Mapping {
16590        #[inline(always)]
16591        fn max_ordinal_present(&self) -> u64 {
16592            if let Some(_) = self.counters {
16593                return 5;
16594            }
16595            if let Some(_) = self.remaining_time_ms {
16596                return 4;
16597            }
16598            if let Some(_) = self.ip6_addr {
16599                return 3;
16600            }
16601            if let Some(_) = self.ip4_addr {
16602                return 2;
16603            }
16604            if let Some(_) = self.mapping_id {
16605                return 1;
16606            }
16607            0
16608        }
16609    }
16610
16611    impl fidl::encoding::ValueTypeMarker for Nat64Mapping {
16612        type Borrowed<'a> = &'a Self;
16613        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
16614            value
16615        }
16616    }
16617
16618    unsafe impl fidl::encoding::TypeMarker for Nat64Mapping {
16619        type Owned = Self;
16620
16621        #[inline(always)]
16622        fn inline_align(_context: fidl::encoding::Context) -> usize {
16623            8
16624        }
16625
16626        #[inline(always)]
16627        fn inline_size(_context: fidl::encoding::Context) -> usize {
16628            16
16629        }
16630    }
16631
16632    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Nat64Mapping, D>
16633        for &Nat64Mapping
16634    {
16635        unsafe fn encode(
16636            self,
16637            encoder: &mut fidl::encoding::Encoder<'_, D>,
16638            offset: usize,
16639            mut depth: fidl::encoding::Depth,
16640        ) -> fidl::Result<()> {
16641            encoder.debug_check_bounds::<Nat64Mapping>(offset);
16642            // Vector header
16643            let max_ordinal: u64 = self.max_ordinal_present();
16644            encoder.write_num(max_ordinal, offset);
16645            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
16646            // Calling encoder.out_of_line_offset(0) is not allowed.
16647            if max_ordinal == 0 {
16648                return Ok(());
16649            }
16650            depth.increment()?;
16651            let envelope_size = 8;
16652            let bytes_len = max_ordinal as usize * envelope_size;
16653            #[allow(unused_variables)]
16654            let offset = encoder.out_of_line_offset(bytes_len);
16655            let mut _prev_end_offset: usize = 0;
16656            if 1 > max_ordinal {
16657                return Ok(());
16658            }
16659
16660            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
16661            // are envelope_size bytes.
16662            let cur_offset: usize = (1 - 1) * envelope_size;
16663
16664            // Zero reserved fields.
16665            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
16666
16667            // Safety:
16668            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
16669            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
16670            //   envelope_size bytes, there is always sufficient room.
16671            fidl::encoding::encode_in_envelope_optional::<u64, D>(
16672                self.mapping_id.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
16673                encoder,
16674                offset + cur_offset,
16675                depth,
16676            )?;
16677
16678            _prev_end_offset = cur_offset + envelope_size;
16679            if 2 > max_ordinal {
16680                return Ok(());
16681            }
16682
16683            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
16684            // are envelope_size bytes.
16685            let cur_offset: usize = (2 - 1) * envelope_size;
16686
16687            // Zero reserved fields.
16688            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
16689
16690            // Safety:
16691            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
16692            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
16693            //   envelope_size bytes, there is always sufficient room.
16694            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<u8>, D>(
16695            self.ip4_addr.as_ref().map(<fidl::encoding::UnboundedVector<u8> as fidl::encoding::ValueTypeMarker>::borrow),
16696            encoder, offset + cur_offset, depth
16697        )?;
16698
16699            _prev_end_offset = cur_offset + envelope_size;
16700            if 3 > max_ordinal {
16701                return Ok(());
16702            }
16703
16704            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
16705            // are envelope_size bytes.
16706            let cur_offset: usize = (3 - 1) * envelope_size;
16707
16708            // Zero reserved fields.
16709            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
16710
16711            // Safety:
16712            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
16713            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
16714            //   envelope_size bytes, there is always sufficient room.
16715            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<u8>, D>(
16716            self.ip6_addr.as_ref().map(<fidl::encoding::UnboundedVector<u8> as fidl::encoding::ValueTypeMarker>::borrow),
16717            encoder, offset + cur_offset, depth
16718        )?;
16719
16720            _prev_end_offset = cur_offset + envelope_size;
16721            if 4 > max_ordinal {
16722                return Ok(());
16723            }
16724
16725            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
16726            // are envelope_size bytes.
16727            let cur_offset: usize = (4 - 1) * envelope_size;
16728
16729            // Zero reserved fields.
16730            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
16731
16732            // Safety:
16733            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
16734            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
16735            //   envelope_size bytes, there is always sufficient room.
16736            fidl::encoding::encode_in_envelope_optional::<u32, D>(
16737                self.remaining_time_ms
16738                    .as_ref()
16739                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
16740                encoder,
16741                offset + cur_offset,
16742                depth,
16743            )?;
16744
16745            _prev_end_offset = cur_offset + envelope_size;
16746            if 5 > max_ordinal {
16747                return Ok(());
16748            }
16749
16750            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
16751            // are envelope_size bytes.
16752            let cur_offset: usize = (5 - 1) * envelope_size;
16753
16754            // Zero reserved fields.
16755            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
16756
16757            // Safety:
16758            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
16759            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
16760            //   envelope_size bytes, there is always sufficient room.
16761            fidl::encoding::encode_in_envelope_optional::<Nat64ProtocolCounters, D>(
16762                self.counters
16763                    .as_ref()
16764                    .map(<Nat64ProtocolCounters as fidl::encoding::ValueTypeMarker>::borrow),
16765                encoder,
16766                offset + cur_offset,
16767                depth,
16768            )?;
16769
16770            _prev_end_offset = cur_offset + envelope_size;
16771
16772            Ok(())
16773        }
16774    }
16775
16776    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Nat64Mapping {
16777        #[inline(always)]
16778        fn new_empty() -> Self {
16779            Self::default()
16780        }
16781
16782        unsafe fn decode(
16783            &mut self,
16784            decoder: &mut fidl::encoding::Decoder<'_, D>,
16785            offset: usize,
16786            mut depth: fidl::encoding::Depth,
16787        ) -> fidl::Result<()> {
16788            decoder.debug_check_bounds::<Self>(offset);
16789            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
16790                None => return Err(fidl::Error::NotNullable),
16791                Some(len) => len,
16792            };
16793            // Calling decoder.out_of_line_offset(0) is not allowed.
16794            if len == 0 {
16795                return Ok(());
16796            };
16797            depth.increment()?;
16798            let envelope_size = 8;
16799            let bytes_len = len * envelope_size;
16800            let offset = decoder.out_of_line_offset(bytes_len)?;
16801            // Decode the envelope for each type.
16802            let mut _next_ordinal_to_read = 0;
16803            let mut next_offset = offset;
16804            let end_offset = offset + bytes_len;
16805            _next_ordinal_to_read += 1;
16806            if next_offset >= end_offset {
16807                return Ok(());
16808            }
16809
16810            // Decode unknown envelopes for gaps in ordinals.
16811            while _next_ordinal_to_read < 1 {
16812                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
16813                _next_ordinal_to_read += 1;
16814                next_offset += envelope_size;
16815            }
16816
16817            let next_out_of_line = decoder.next_out_of_line();
16818            let handles_before = decoder.remaining_handles();
16819            if let Some((inlined, num_bytes, num_handles)) =
16820                fidl::encoding::decode_envelope_header(decoder, next_offset)?
16821            {
16822                let member_inline_size =
16823                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
16824                if inlined != (member_inline_size <= 4) {
16825                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
16826                }
16827                let inner_offset;
16828                let mut inner_depth = depth.clone();
16829                if inlined {
16830                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
16831                    inner_offset = next_offset;
16832                } else {
16833                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
16834                    inner_depth.increment()?;
16835                }
16836                let val_ref = self.mapping_id.get_or_insert_with(|| fidl::new_empty!(u64, D));
16837                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
16838                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
16839                {
16840                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
16841                }
16842                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
16843                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
16844                }
16845            }
16846
16847            next_offset += envelope_size;
16848            _next_ordinal_to_read += 1;
16849            if next_offset >= end_offset {
16850                return Ok(());
16851            }
16852
16853            // Decode unknown envelopes for gaps in ordinals.
16854            while _next_ordinal_to_read < 2 {
16855                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
16856                _next_ordinal_to_read += 1;
16857                next_offset += envelope_size;
16858            }
16859
16860            let next_out_of_line = decoder.next_out_of_line();
16861            let handles_before = decoder.remaining_handles();
16862            if let Some((inlined, num_bytes, num_handles)) =
16863                fidl::encoding::decode_envelope_header(decoder, next_offset)?
16864            {
16865                let member_inline_size = <fidl::encoding::UnboundedVector<u8> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
16866                if inlined != (member_inline_size <= 4) {
16867                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
16868                }
16869                let inner_offset;
16870                let mut inner_depth = depth.clone();
16871                if inlined {
16872                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
16873                    inner_offset = next_offset;
16874                } else {
16875                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
16876                    inner_depth.increment()?;
16877                }
16878                let val_ref = self.ip4_addr.get_or_insert_with(|| {
16879                    fidl::new_empty!(fidl::encoding::UnboundedVector<u8>, D)
16880                });
16881                fidl::decode!(
16882                    fidl::encoding::UnboundedVector<u8>,
16883                    D,
16884                    val_ref,
16885                    decoder,
16886                    inner_offset,
16887                    inner_depth
16888                )?;
16889                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
16890                {
16891                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
16892                }
16893                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
16894                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
16895                }
16896            }
16897
16898            next_offset += envelope_size;
16899            _next_ordinal_to_read += 1;
16900            if next_offset >= end_offset {
16901                return Ok(());
16902            }
16903
16904            // Decode unknown envelopes for gaps in ordinals.
16905            while _next_ordinal_to_read < 3 {
16906                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
16907                _next_ordinal_to_read += 1;
16908                next_offset += envelope_size;
16909            }
16910
16911            let next_out_of_line = decoder.next_out_of_line();
16912            let handles_before = decoder.remaining_handles();
16913            if let Some((inlined, num_bytes, num_handles)) =
16914                fidl::encoding::decode_envelope_header(decoder, next_offset)?
16915            {
16916                let member_inline_size = <fidl::encoding::UnboundedVector<u8> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
16917                if inlined != (member_inline_size <= 4) {
16918                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
16919                }
16920                let inner_offset;
16921                let mut inner_depth = depth.clone();
16922                if inlined {
16923                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
16924                    inner_offset = next_offset;
16925                } else {
16926                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
16927                    inner_depth.increment()?;
16928                }
16929                let val_ref = self.ip6_addr.get_or_insert_with(|| {
16930                    fidl::new_empty!(fidl::encoding::UnboundedVector<u8>, D)
16931                });
16932                fidl::decode!(
16933                    fidl::encoding::UnboundedVector<u8>,
16934                    D,
16935                    val_ref,
16936                    decoder,
16937                    inner_offset,
16938                    inner_depth
16939                )?;
16940                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
16941                {
16942                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
16943                }
16944                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
16945                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
16946                }
16947            }
16948
16949            next_offset += envelope_size;
16950            _next_ordinal_to_read += 1;
16951            if next_offset >= end_offset {
16952                return Ok(());
16953            }
16954
16955            // Decode unknown envelopes for gaps in ordinals.
16956            while _next_ordinal_to_read < 4 {
16957                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
16958                _next_ordinal_to_read += 1;
16959                next_offset += envelope_size;
16960            }
16961
16962            let next_out_of_line = decoder.next_out_of_line();
16963            let handles_before = decoder.remaining_handles();
16964            if let Some((inlined, num_bytes, num_handles)) =
16965                fidl::encoding::decode_envelope_header(decoder, next_offset)?
16966            {
16967                let member_inline_size =
16968                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
16969                if inlined != (member_inline_size <= 4) {
16970                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
16971                }
16972                let inner_offset;
16973                let mut inner_depth = depth.clone();
16974                if inlined {
16975                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
16976                    inner_offset = next_offset;
16977                } else {
16978                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
16979                    inner_depth.increment()?;
16980                }
16981                let val_ref =
16982                    self.remaining_time_ms.get_or_insert_with(|| fidl::new_empty!(u32, D));
16983                fidl::decode!(u32, 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 < 5 {
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                    <Nat64ProtocolCounters 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 =
17028                    self.counters.get_or_insert_with(|| fidl::new_empty!(Nat64ProtocolCounters, D));
17029                fidl::decode!(
17030                    Nat64ProtocolCounters,
17031                    D,
17032                    val_ref,
17033                    decoder,
17034                    inner_offset,
17035                    inner_depth
17036                )?;
17037                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
17038                {
17039                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
17040                }
17041                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
17042                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
17043                }
17044            }
17045
17046            next_offset += envelope_size;
17047
17048            // Decode the remaining unknown envelopes.
17049            while next_offset < end_offset {
17050                _next_ordinal_to_read += 1;
17051                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
17052                next_offset += envelope_size;
17053            }
17054
17055            Ok(())
17056        }
17057    }
17058
17059    impl Nat64PacketCounters {
17060        #[inline(always)]
17061        fn max_ordinal_present(&self) -> u64 {
17062            if let Some(_) = self.ipv6_to_ipv4_packets {
17063                return 2;
17064            }
17065            if let Some(_) = self.ipv4_to_ipv6_packets {
17066                return 1;
17067            }
17068            0
17069        }
17070    }
17071
17072    impl fidl::encoding::ValueTypeMarker for Nat64PacketCounters {
17073        type Borrowed<'a> = &'a Self;
17074        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
17075            value
17076        }
17077    }
17078
17079    unsafe impl fidl::encoding::TypeMarker for Nat64PacketCounters {
17080        type Owned = Self;
17081
17082        #[inline(always)]
17083        fn inline_align(_context: fidl::encoding::Context) -> usize {
17084            8
17085        }
17086
17087        #[inline(always)]
17088        fn inline_size(_context: fidl::encoding::Context) -> usize {
17089            16
17090        }
17091    }
17092
17093    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Nat64PacketCounters, D>
17094        for &Nat64PacketCounters
17095    {
17096        unsafe fn encode(
17097            self,
17098            encoder: &mut fidl::encoding::Encoder<'_, D>,
17099            offset: usize,
17100            mut depth: fidl::encoding::Depth,
17101        ) -> fidl::Result<()> {
17102            encoder.debug_check_bounds::<Nat64PacketCounters>(offset);
17103            // Vector header
17104            let max_ordinal: u64 = self.max_ordinal_present();
17105            encoder.write_num(max_ordinal, offset);
17106            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
17107            // Calling encoder.out_of_line_offset(0) is not allowed.
17108            if max_ordinal == 0 {
17109                return Ok(());
17110            }
17111            depth.increment()?;
17112            let envelope_size = 8;
17113            let bytes_len = max_ordinal as usize * envelope_size;
17114            #[allow(unused_variables)]
17115            let offset = encoder.out_of_line_offset(bytes_len);
17116            let mut _prev_end_offset: usize = 0;
17117            if 1 > max_ordinal {
17118                return Ok(());
17119            }
17120
17121            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
17122            // are envelope_size bytes.
17123            let cur_offset: usize = (1 - 1) * envelope_size;
17124
17125            // Zero reserved fields.
17126            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
17127
17128            // Safety:
17129            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
17130            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
17131            //   envelope_size bytes, there is always sufficient room.
17132            fidl::encoding::encode_in_envelope_optional::<u64, D>(
17133                self.ipv4_to_ipv6_packets
17134                    .as_ref()
17135                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
17136                encoder,
17137                offset + cur_offset,
17138                depth,
17139            )?;
17140
17141            _prev_end_offset = cur_offset + envelope_size;
17142            if 2 > max_ordinal {
17143                return Ok(());
17144            }
17145
17146            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
17147            // are envelope_size bytes.
17148            let cur_offset: usize = (2 - 1) * envelope_size;
17149
17150            // Zero reserved fields.
17151            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
17152
17153            // Safety:
17154            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
17155            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
17156            //   envelope_size bytes, there is always sufficient room.
17157            fidl::encoding::encode_in_envelope_optional::<u64, D>(
17158                self.ipv6_to_ipv4_packets
17159                    .as_ref()
17160                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
17161                encoder,
17162                offset + cur_offset,
17163                depth,
17164            )?;
17165
17166            _prev_end_offset = cur_offset + envelope_size;
17167
17168            Ok(())
17169        }
17170    }
17171
17172    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Nat64PacketCounters {
17173        #[inline(always)]
17174        fn new_empty() -> Self {
17175            Self::default()
17176        }
17177
17178        unsafe fn decode(
17179            &mut self,
17180            decoder: &mut fidl::encoding::Decoder<'_, D>,
17181            offset: usize,
17182            mut depth: fidl::encoding::Depth,
17183        ) -> fidl::Result<()> {
17184            decoder.debug_check_bounds::<Self>(offset);
17185            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
17186                None => return Err(fidl::Error::NotNullable),
17187                Some(len) => len,
17188            };
17189            // Calling decoder.out_of_line_offset(0) is not allowed.
17190            if len == 0 {
17191                return Ok(());
17192            };
17193            depth.increment()?;
17194            let envelope_size = 8;
17195            let bytes_len = len * envelope_size;
17196            let offset = decoder.out_of_line_offset(bytes_len)?;
17197            // Decode the envelope for each type.
17198            let mut _next_ordinal_to_read = 0;
17199            let mut next_offset = offset;
17200            let end_offset = offset + bytes_len;
17201            _next_ordinal_to_read += 1;
17202            if next_offset >= end_offset {
17203                return Ok(());
17204            }
17205
17206            // Decode unknown envelopes for gaps in ordinals.
17207            while _next_ordinal_to_read < 1 {
17208                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
17209                _next_ordinal_to_read += 1;
17210                next_offset += envelope_size;
17211            }
17212
17213            let next_out_of_line = decoder.next_out_of_line();
17214            let handles_before = decoder.remaining_handles();
17215            if let Some((inlined, num_bytes, num_handles)) =
17216                fidl::encoding::decode_envelope_header(decoder, next_offset)?
17217            {
17218                let member_inline_size =
17219                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
17220                if inlined != (member_inline_size <= 4) {
17221                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
17222                }
17223                let inner_offset;
17224                let mut inner_depth = depth.clone();
17225                if inlined {
17226                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
17227                    inner_offset = next_offset;
17228                } else {
17229                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
17230                    inner_depth.increment()?;
17231                }
17232                let val_ref =
17233                    self.ipv4_to_ipv6_packets.get_or_insert_with(|| fidl::new_empty!(u64, D));
17234                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
17235                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
17236                {
17237                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
17238                }
17239                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
17240                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
17241                }
17242            }
17243
17244            next_offset += envelope_size;
17245            _next_ordinal_to_read += 1;
17246            if next_offset >= end_offset {
17247                return Ok(());
17248            }
17249
17250            // Decode unknown envelopes for gaps in ordinals.
17251            while _next_ordinal_to_read < 2 {
17252                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
17253                _next_ordinal_to_read += 1;
17254                next_offset += envelope_size;
17255            }
17256
17257            let next_out_of_line = decoder.next_out_of_line();
17258            let handles_before = decoder.remaining_handles();
17259            if let Some((inlined, num_bytes, num_handles)) =
17260                fidl::encoding::decode_envelope_header(decoder, next_offset)?
17261            {
17262                let member_inline_size =
17263                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
17264                if inlined != (member_inline_size <= 4) {
17265                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
17266                }
17267                let inner_offset;
17268                let mut inner_depth = depth.clone();
17269                if inlined {
17270                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
17271                    inner_offset = next_offset;
17272                } else {
17273                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
17274                    inner_depth.increment()?;
17275                }
17276                let val_ref =
17277                    self.ipv6_to_ipv4_packets.get_or_insert_with(|| fidl::new_empty!(u64, D));
17278                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
17279                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
17280                {
17281                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
17282                }
17283                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
17284                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
17285                }
17286            }
17287
17288            next_offset += envelope_size;
17289
17290            // Decode the remaining unknown envelopes.
17291            while next_offset < end_offset {
17292                _next_ordinal_to_read += 1;
17293                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
17294                next_offset += envelope_size;
17295            }
17296
17297            Ok(())
17298        }
17299    }
17300
17301    impl Nat64ProtocolCounters {
17302        #[inline(always)]
17303        fn max_ordinal_present(&self) -> u64 {
17304            if let Some(_) = self.total {
17305                return 4;
17306            }
17307            if let Some(_) = self.icmp {
17308                return 3;
17309            }
17310            if let Some(_) = self.udp {
17311                return 2;
17312            }
17313            if let Some(_) = self.tcp {
17314                return 1;
17315            }
17316            0
17317        }
17318    }
17319
17320    impl fidl::encoding::ValueTypeMarker for Nat64ProtocolCounters {
17321        type Borrowed<'a> = &'a Self;
17322        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
17323            value
17324        }
17325    }
17326
17327    unsafe impl fidl::encoding::TypeMarker for Nat64ProtocolCounters {
17328        type Owned = Self;
17329
17330        #[inline(always)]
17331        fn inline_align(_context: fidl::encoding::Context) -> usize {
17332            8
17333        }
17334
17335        #[inline(always)]
17336        fn inline_size(_context: fidl::encoding::Context) -> usize {
17337            16
17338        }
17339    }
17340
17341    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Nat64ProtocolCounters, D>
17342        for &Nat64ProtocolCounters
17343    {
17344        unsafe fn encode(
17345            self,
17346            encoder: &mut fidl::encoding::Encoder<'_, D>,
17347            offset: usize,
17348            mut depth: fidl::encoding::Depth,
17349        ) -> fidl::Result<()> {
17350            encoder.debug_check_bounds::<Nat64ProtocolCounters>(offset);
17351            // Vector header
17352            let max_ordinal: u64 = self.max_ordinal_present();
17353            encoder.write_num(max_ordinal, offset);
17354            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
17355            // Calling encoder.out_of_line_offset(0) is not allowed.
17356            if max_ordinal == 0 {
17357                return Ok(());
17358            }
17359            depth.increment()?;
17360            let envelope_size = 8;
17361            let bytes_len = max_ordinal as usize * envelope_size;
17362            #[allow(unused_variables)]
17363            let offset = encoder.out_of_line_offset(bytes_len);
17364            let mut _prev_end_offset: usize = 0;
17365            if 1 > max_ordinal {
17366                return Ok(());
17367            }
17368
17369            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
17370            // are envelope_size bytes.
17371            let cur_offset: usize = (1 - 1) * envelope_size;
17372
17373            // Zero reserved fields.
17374            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
17375
17376            // Safety:
17377            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
17378            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
17379            //   envelope_size bytes, there is always sufficient room.
17380            fidl::encoding::encode_in_envelope_optional::<Nat64TrafficCounters, D>(
17381                self.tcp
17382                    .as_ref()
17383                    .map(<Nat64TrafficCounters as fidl::encoding::ValueTypeMarker>::borrow),
17384                encoder,
17385                offset + cur_offset,
17386                depth,
17387            )?;
17388
17389            _prev_end_offset = cur_offset + envelope_size;
17390            if 2 > max_ordinal {
17391                return Ok(());
17392            }
17393
17394            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
17395            // are envelope_size bytes.
17396            let cur_offset: usize = (2 - 1) * envelope_size;
17397
17398            // Zero reserved fields.
17399            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
17400
17401            // Safety:
17402            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
17403            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
17404            //   envelope_size bytes, there is always sufficient room.
17405            fidl::encoding::encode_in_envelope_optional::<Nat64TrafficCounters, D>(
17406                self.udp
17407                    .as_ref()
17408                    .map(<Nat64TrafficCounters as fidl::encoding::ValueTypeMarker>::borrow),
17409                encoder,
17410                offset + cur_offset,
17411                depth,
17412            )?;
17413
17414            _prev_end_offset = cur_offset + envelope_size;
17415            if 3 > max_ordinal {
17416                return Ok(());
17417            }
17418
17419            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
17420            // are envelope_size bytes.
17421            let cur_offset: usize = (3 - 1) * envelope_size;
17422
17423            // Zero reserved fields.
17424            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
17425
17426            // Safety:
17427            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
17428            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
17429            //   envelope_size bytes, there is always sufficient room.
17430            fidl::encoding::encode_in_envelope_optional::<Nat64TrafficCounters, D>(
17431                self.icmp
17432                    .as_ref()
17433                    .map(<Nat64TrafficCounters as fidl::encoding::ValueTypeMarker>::borrow),
17434                encoder,
17435                offset + cur_offset,
17436                depth,
17437            )?;
17438
17439            _prev_end_offset = cur_offset + envelope_size;
17440            if 4 > max_ordinal {
17441                return Ok(());
17442            }
17443
17444            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
17445            // are envelope_size bytes.
17446            let cur_offset: usize = (4 - 1) * envelope_size;
17447
17448            // Zero reserved fields.
17449            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
17450
17451            // Safety:
17452            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
17453            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
17454            //   envelope_size bytes, there is always sufficient room.
17455            fidl::encoding::encode_in_envelope_optional::<Nat64TrafficCounters, D>(
17456                self.total
17457                    .as_ref()
17458                    .map(<Nat64TrafficCounters as fidl::encoding::ValueTypeMarker>::borrow),
17459                encoder,
17460                offset + cur_offset,
17461                depth,
17462            )?;
17463
17464            _prev_end_offset = cur_offset + envelope_size;
17465
17466            Ok(())
17467        }
17468    }
17469
17470    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Nat64ProtocolCounters {
17471        #[inline(always)]
17472        fn new_empty() -> Self {
17473            Self::default()
17474        }
17475
17476        unsafe fn decode(
17477            &mut self,
17478            decoder: &mut fidl::encoding::Decoder<'_, D>,
17479            offset: usize,
17480            mut depth: fidl::encoding::Depth,
17481        ) -> fidl::Result<()> {
17482            decoder.debug_check_bounds::<Self>(offset);
17483            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
17484                None => return Err(fidl::Error::NotNullable),
17485                Some(len) => len,
17486            };
17487            // Calling decoder.out_of_line_offset(0) is not allowed.
17488            if len == 0 {
17489                return Ok(());
17490            };
17491            depth.increment()?;
17492            let envelope_size = 8;
17493            let bytes_len = len * envelope_size;
17494            let offset = decoder.out_of_line_offset(bytes_len)?;
17495            // Decode the envelope for each type.
17496            let mut _next_ordinal_to_read = 0;
17497            let mut next_offset = offset;
17498            let end_offset = offset + bytes_len;
17499            _next_ordinal_to_read += 1;
17500            if next_offset >= end_offset {
17501                return Ok(());
17502            }
17503
17504            // Decode unknown envelopes for gaps in ordinals.
17505            while _next_ordinal_to_read < 1 {
17506                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
17507                _next_ordinal_to_read += 1;
17508                next_offset += envelope_size;
17509            }
17510
17511            let next_out_of_line = decoder.next_out_of_line();
17512            let handles_before = decoder.remaining_handles();
17513            if let Some((inlined, num_bytes, num_handles)) =
17514                fidl::encoding::decode_envelope_header(decoder, next_offset)?
17515            {
17516                let member_inline_size =
17517                    <Nat64TrafficCounters as fidl::encoding::TypeMarker>::inline_size(
17518                        decoder.context,
17519                    );
17520                if inlined != (member_inline_size <= 4) {
17521                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
17522                }
17523                let inner_offset;
17524                let mut inner_depth = depth.clone();
17525                if inlined {
17526                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
17527                    inner_offset = next_offset;
17528                } else {
17529                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
17530                    inner_depth.increment()?;
17531                }
17532                let val_ref =
17533                    self.tcp.get_or_insert_with(|| fidl::new_empty!(Nat64TrafficCounters, D));
17534                fidl::decode!(
17535                    Nat64TrafficCounters,
17536                    D,
17537                    val_ref,
17538                    decoder,
17539                    inner_offset,
17540                    inner_depth
17541                )?;
17542                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
17543                {
17544                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
17545                }
17546                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
17547                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
17548                }
17549            }
17550
17551            next_offset += envelope_size;
17552            _next_ordinal_to_read += 1;
17553            if next_offset >= end_offset {
17554                return Ok(());
17555            }
17556
17557            // Decode unknown envelopes for gaps in ordinals.
17558            while _next_ordinal_to_read < 2 {
17559                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
17560                _next_ordinal_to_read += 1;
17561                next_offset += envelope_size;
17562            }
17563
17564            let next_out_of_line = decoder.next_out_of_line();
17565            let handles_before = decoder.remaining_handles();
17566            if let Some((inlined, num_bytes, num_handles)) =
17567                fidl::encoding::decode_envelope_header(decoder, next_offset)?
17568            {
17569                let member_inline_size =
17570                    <Nat64TrafficCounters as fidl::encoding::TypeMarker>::inline_size(
17571                        decoder.context,
17572                    );
17573                if inlined != (member_inline_size <= 4) {
17574                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
17575                }
17576                let inner_offset;
17577                let mut inner_depth = depth.clone();
17578                if inlined {
17579                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
17580                    inner_offset = next_offset;
17581                } else {
17582                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
17583                    inner_depth.increment()?;
17584                }
17585                let val_ref =
17586                    self.udp.get_or_insert_with(|| fidl::new_empty!(Nat64TrafficCounters, D));
17587                fidl::decode!(
17588                    Nat64TrafficCounters,
17589                    D,
17590                    val_ref,
17591                    decoder,
17592                    inner_offset,
17593                    inner_depth
17594                )?;
17595                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
17596                {
17597                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
17598                }
17599                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
17600                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
17601                }
17602            }
17603
17604            next_offset += envelope_size;
17605            _next_ordinal_to_read += 1;
17606            if next_offset >= end_offset {
17607                return Ok(());
17608            }
17609
17610            // Decode unknown envelopes for gaps in ordinals.
17611            while _next_ordinal_to_read < 3 {
17612                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
17613                _next_ordinal_to_read += 1;
17614                next_offset += envelope_size;
17615            }
17616
17617            let next_out_of_line = decoder.next_out_of_line();
17618            let handles_before = decoder.remaining_handles();
17619            if let Some((inlined, num_bytes, num_handles)) =
17620                fidl::encoding::decode_envelope_header(decoder, next_offset)?
17621            {
17622                let member_inline_size =
17623                    <Nat64TrafficCounters as fidl::encoding::TypeMarker>::inline_size(
17624                        decoder.context,
17625                    );
17626                if inlined != (member_inline_size <= 4) {
17627                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
17628                }
17629                let inner_offset;
17630                let mut inner_depth = depth.clone();
17631                if inlined {
17632                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
17633                    inner_offset = next_offset;
17634                } else {
17635                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
17636                    inner_depth.increment()?;
17637                }
17638                let val_ref =
17639                    self.icmp.get_or_insert_with(|| fidl::new_empty!(Nat64TrafficCounters, D));
17640                fidl::decode!(
17641                    Nat64TrafficCounters,
17642                    D,
17643                    val_ref,
17644                    decoder,
17645                    inner_offset,
17646                    inner_depth
17647                )?;
17648                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
17649                {
17650                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
17651                }
17652                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
17653                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
17654                }
17655            }
17656
17657            next_offset += envelope_size;
17658            _next_ordinal_to_read += 1;
17659            if next_offset >= end_offset {
17660                return Ok(());
17661            }
17662
17663            // Decode unknown envelopes for gaps in ordinals.
17664            while _next_ordinal_to_read < 4 {
17665                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
17666                _next_ordinal_to_read += 1;
17667                next_offset += envelope_size;
17668            }
17669
17670            let next_out_of_line = decoder.next_out_of_line();
17671            let handles_before = decoder.remaining_handles();
17672            if let Some((inlined, num_bytes, num_handles)) =
17673                fidl::encoding::decode_envelope_header(decoder, next_offset)?
17674            {
17675                let member_inline_size =
17676                    <Nat64TrafficCounters as fidl::encoding::TypeMarker>::inline_size(
17677                        decoder.context,
17678                    );
17679                if inlined != (member_inline_size <= 4) {
17680                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
17681                }
17682                let inner_offset;
17683                let mut inner_depth = depth.clone();
17684                if inlined {
17685                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
17686                    inner_offset = next_offset;
17687                } else {
17688                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
17689                    inner_depth.increment()?;
17690                }
17691                let val_ref =
17692                    self.total.get_or_insert_with(|| fidl::new_empty!(Nat64TrafficCounters, D));
17693                fidl::decode!(
17694                    Nat64TrafficCounters,
17695                    D,
17696                    val_ref,
17697                    decoder,
17698                    inner_offset,
17699                    inner_depth
17700                )?;
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
17712            // Decode the remaining unknown envelopes.
17713            while next_offset < end_offset {
17714                _next_ordinal_to_read += 1;
17715                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
17716                next_offset += envelope_size;
17717            }
17718
17719            Ok(())
17720        }
17721    }
17722
17723    impl Nat64TrafficCounters {
17724        #[inline(always)]
17725        fn max_ordinal_present(&self) -> u64 {
17726            if let Some(_) = self.ipv6_to_ipv4_bytes {
17727                return 4;
17728            }
17729            if let Some(_) = self.ipv6_to_ipv4_packets {
17730                return 3;
17731            }
17732            if let Some(_) = self.ipv4_to_ipv6_bytes {
17733                return 2;
17734            }
17735            if let Some(_) = self.ipv4_to_ipv6_packets {
17736                return 1;
17737            }
17738            0
17739        }
17740    }
17741
17742    impl fidl::encoding::ValueTypeMarker for Nat64TrafficCounters {
17743        type Borrowed<'a> = &'a Self;
17744        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
17745            value
17746        }
17747    }
17748
17749    unsafe impl fidl::encoding::TypeMarker for Nat64TrafficCounters {
17750        type Owned = Self;
17751
17752        #[inline(always)]
17753        fn inline_align(_context: fidl::encoding::Context) -> usize {
17754            8
17755        }
17756
17757        #[inline(always)]
17758        fn inline_size(_context: fidl::encoding::Context) -> usize {
17759            16
17760        }
17761    }
17762
17763    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Nat64TrafficCounters, D>
17764        for &Nat64TrafficCounters
17765    {
17766        unsafe fn encode(
17767            self,
17768            encoder: &mut fidl::encoding::Encoder<'_, D>,
17769            offset: usize,
17770            mut depth: fidl::encoding::Depth,
17771        ) -> fidl::Result<()> {
17772            encoder.debug_check_bounds::<Nat64TrafficCounters>(offset);
17773            // Vector header
17774            let max_ordinal: u64 = self.max_ordinal_present();
17775            encoder.write_num(max_ordinal, offset);
17776            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
17777            // Calling encoder.out_of_line_offset(0) is not allowed.
17778            if max_ordinal == 0 {
17779                return Ok(());
17780            }
17781            depth.increment()?;
17782            let envelope_size = 8;
17783            let bytes_len = max_ordinal as usize * envelope_size;
17784            #[allow(unused_variables)]
17785            let offset = encoder.out_of_line_offset(bytes_len);
17786            let mut _prev_end_offset: usize = 0;
17787            if 1 > max_ordinal {
17788                return Ok(());
17789            }
17790
17791            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
17792            // are envelope_size bytes.
17793            let cur_offset: usize = (1 - 1) * envelope_size;
17794
17795            // Zero reserved fields.
17796            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
17797
17798            // Safety:
17799            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
17800            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
17801            //   envelope_size bytes, there is always sufficient room.
17802            fidl::encoding::encode_in_envelope_optional::<u64, D>(
17803                self.ipv4_to_ipv6_packets
17804                    .as_ref()
17805                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
17806                encoder,
17807                offset + cur_offset,
17808                depth,
17809            )?;
17810
17811            _prev_end_offset = cur_offset + envelope_size;
17812            if 2 > max_ordinal {
17813                return Ok(());
17814            }
17815
17816            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
17817            // are envelope_size bytes.
17818            let cur_offset: usize = (2 - 1) * envelope_size;
17819
17820            // Zero reserved fields.
17821            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
17822
17823            // Safety:
17824            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
17825            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
17826            //   envelope_size bytes, there is always sufficient room.
17827            fidl::encoding::encode_in_envelope_optional::<u64, D>(
17828                self.ipv4_to_ipv6_bytes
17829                    .as_ref()
17830                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
17831                encoder,
17832                offset + cur_offset,
17833                depth,
17834            )?;
17835
17836            _prev_end_offset = cur_offset + envelope_size;
17837            if 3 > max_ordinal {
17838                return Ok(());
17839            }
17840
17841            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
17842            // are envelope_size bytes.
17843            let cur_offset: usize = (3 - 1) * envelope_size;
17844
17845            // Zero reserved fields.
17846            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
17847
17848            // Safety:
17849            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
17850            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
17851            //   envelope_size bytes, there is always sufficient room.
17852            fidl::encoding::encode_in_envelope_optional::<u64, D>(
17853                self.ipv6_to_ipv4_packets
17854                    .as_ref()
17855                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
17856                encoder,
17857                offset + cur_offset,
17858                depth,
17859            )?;
17860
17861            _prev_end_offset = cur_offset + envelope_size;
17862            if 4 > max_ordinal {
17863                return Ok(());
17864            }
17865
17866            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
17867            // are envelope_size bytes.
17868            let cur_offset: usize = (4 - 1) * envelope_size;
17869
17870            // Zero reserved fields.
17871            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
17872
17873            // Safety:
17874            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
17875            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
17876            //   envelope_size bytes, there is always sufficient room.
17877            fidl::encoding::encode_in_envelope_optional::<u64, D>(
17878                self.ipv6_to_ipv4_bytes
17879                    .as_ref()
17880                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
17881                encoder,
17882                offset + cur_offset,
17883                depth,
17884            )?;
17885
17886            _prev_end_offset = cur_offset + envelope_size;
17887
17888            Ok(())
17889        }
17890    }
17891
17892    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Nat64TrafficCounters {
17893        #[inline(always)]
17894        fn new_empty() -> Self {
17895            Self::default()
17896        }
17897
17898        unsafe fn decode(
17899            &mut self,
17900            decoder: &mut fidl::encoding::Decoder<'_, D>,
17901            offset: usize,
17902            mut depth: fidl::encoding::Depth,
17903        ) -> fidl::Result<()> {
17904            decoder.debug_check_bounds::<Self>(offset);
17905            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
17906                None => return Err(fidl::Error::NotNullable),
17907                Some(len) => len,
17908            };
17909            // Calling decoder.out_of_line_offset(0) is not allowed.
17910            if len == 0 {
17911                return Ok(());
17912            };
17913            depth.increment()?;
17914            let envelope_size = 8;
17915            let bytes_len = len * envelope_size;
17916            let offset = decoder.out_of_line_offset(bytes_len)?;
17917            // Decode the envelope for each type.
17918            let mut _next_ordinal_to_read = 0;
17919            let mut next_offset = offset;
17920            let end_offset = offset + bytes_len;
17921            _next_ordinal_to_read += 1;
17922            if next_offset >= end_offset {
17923                return Ok(());
17924            }
17925
17926            // Decode unknown envelopes for gaps in ordinals.
17927            while _next_ordinal_to_read < 1 {
17928                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
17929                _next_ordinal_to_read += 1;
17930                next_offset += envelope_size;
17931            }
17932
17933            let next_out_of_line = decoder.next_out_of_line();
17934            let handles_before = decoder.remaining_handles();
17935            if let Some((inlined, num_bytes, num_handles)) =
17936                fidl::encoding::decode_envelope_header(decoder, next_offset)?
17937            {
17938                let member_inline_size =
17939                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
17940                if inlined != (member_inline_size <= 4) {
17941                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
17942                }
17943                let inner_offset;
17944                let mut inner_depth = depth.clone();
17945                if inlined {
17946                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
17947                    inner_offset = next_offset;
17948                } else {
17949                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
17950                    inner_depth.increment()?;
17951                }
17952                let val_ref =
17953                    self.ipv4_to_ipv6_packets.get_or_insert_with(|| fidl::new_empty!(u64, D));
17954                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
17955                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
17956                {
17957                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
17958                }
17959                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
17960                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
17961                }
17962            }
17963
17964            next_offset += envelope_size;
17965            _next_ordinal_to_read += 1;
17966            if next_offset >= end_offset {
17967                return Ok(());
17968            }
17969
17970            // Decode unknown envelopes for gaps in ordinals.
17971            while _next_ordinal_to_read < 2 {
17972                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
17973                _next_ordinal_to_read += 1;
17974                next_offset += envelope_size;
17975            }
17976
17977            let next_out_of_line = decoder.next_out_of_line();
17978            let handles_before = decoder.remaining_handles();
17979            if let Some((inlined, num_bytes, num_handles)) =
17980                fidl::encoding::decode_envelope_header(decoder, next_offset)?
17981            {
17982                let member_inline_size =
17983                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
17984                if inlined != (member_inline_size <= 4) {
17985                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
17986                }
17987                let inner_offset;
17988                let mut inner_depth = depth.clone();
17989                if inlined {
17990                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
17991                    inner_offset = next_offset;
17992                } else {
17993                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
17994                    inner_depth.increment()?;
17995                }
17996                let val_ref =
17997                    self.ipv4_to_ipv6_bytes.get_or_insert_with(|| fidl::new_empty!(u64, D));
17998                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
17999                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
18000                {
18001                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
18002                }
18003                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
18004                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
18005                }
18006            }
18007
18008            next_offset += envelope_size;
18009            _next_ordinal_to_read += 1;
18010            if next_offset >= end_offset {
18011                return Ok(());
18012            }
18013
18014            // Decode unknown envelopes for gaps in ordinals.
18015            while _next_ordinal_to_read < 3 {
18016                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
18017                _next_ordinal_to_read += 1;
18018                next_offset += envelope_size;
18019            }
18020
18021            let next_out_of_line = decoder.next_out_of_line();
18022            let handles_before = decoder.remaining_handles();
18023            if let Some((inlined, num_bytes, num_handles)) =
18024                fidl::encoding::decode_envelope_header(decoder, next_offset)?
18025            {
18026                let member_inline_size =
18027                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
18028                if inlined != (member_inline_size <= 4) {
18029                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
18030                }
18031                let inner_offset;
18032                let mut inner_depth = depth.clone();
18033                if inlined {
18034                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
18035                    inner_offset = next_offset;
18036                } else {
18037                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
18038                    inner_depth.increment()?;
18039                }
18040                let val_ref =
18041                    self.ipv6_to_ipv4_packets.get_or_insert_with(|| fidl::new_empty!(u64, D));
18042                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
18043                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
18044                {
18045                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
18046                }
18047                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
18048                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
18049                }
18050            }
18051
18052            next_offset += envelope_size;
18053            _next_ordinal_to_read += 1;
18054            if next_offset >= end_offset {
18055                return Ok(());
18056            }
18057
18058            // Decode unknown envelopes for gaps in ordinals.
18059            while _next_ordinal_to_read < 4 {
18060                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
18061                _next_ordinal_to_read += 1;
18062                next_offset += envelope_size;
18063            }
18064
18065            let next_out_of_line = decoder.next_out_of_line();
18066            let handles_before = decoder.remaining_handles();
18067            if let Some((inlined, num_bytes, num_handles)) =
18068                fidl::encoding::decode_envelope_header(decoder, next_offset)?
18069            {
18070                let member_inline_size =
18071                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
18072                if inlined != (member_inline_size <= 4) {
18073                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
18074                }
18075                let inner_offset;
18076                let mut inner_depth = depth.clone();
18077                if inlined {
18078                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
18079                    inner_offset = next_offset;
18080                } else {
18081                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
18082                    inner_depth.increment()?;
18083                }
18084                let val_ref =
18085                    self.ipv6_to_ipv4_bytes.get_or_insert_with(|| fidl::new_empty!(u64, D));
18086                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
18087                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
18088                {
18089                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
18090                }
18091                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
18092                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
18093                }
18094            }
18095
18096            next_offset += envelope_size;
18097
18098            // Decode the remaining unknown envelopes.
18099            while next_offset < end_offset {
18100                _next_ordinal_to_read += 1;
18101                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
18102                next_offset += envelope_size;
18103            }
18104
18105            Ok(())
18106        }
18107    }
18108
18109    impl NetifAddress {
18110        #[inline(always)]
18111        fn max_ordinal_present(&self) -> u64 {
18112            if let Some(_) = self.valid {
18113                return 5;
18114            }
18115            if let Some(_) = self.preferred {
18116                return 4;
18117            }
18118            if let Some(_) = self.origin {
18119                return 3;
18120            }
18121            if let Some(_) = self.prefix_length {
18122                return 2;
18123            }
18124            if let Some(_) = self.address {
18125                return 1;
18126            }
18127            0
18128        }
18129    }
18130
18131    impl fidl::encoding::ValueTypeMarker for NetifAddress {
18132        type Borrowed<'a> = &'a Self;
18133        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
18134            value
18135        }
18136    }
18137
18138    unsafe impl fidl::encoding::TypeMarker for NetifAddress {
18139        type Owned = Self;
18140
18141        #[inline(always)]
18142        fn inline_align(_context: fidl::encoding::Context) -> usize {
18143            8
18144        }
18145
18146        #[inline(always)]
18147        fn inline_size(_context: fidl::encoding::Context) -> usize {
18148            16
18149        }
18150    }
18151
18152    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<NetifAddress, D>
18153        for &NetifAddress
18154    {
18155        unsafe fn encode(
18156            self,
18157            encoder: &mut fidl::encoding::Encoder<'_, D>,
18158            offset: usize,
18159            mut depth: fidl::encoding::Depth,
18160        ) -> fidl::Result<()> {
18161            encoder.debug_check_bounds::<NetifAddress>(offset);
18162            // Vector header
18163            let max_ordinal: u64 = self.max_ordinal_present();
18164            encoder.write_num(max_ordinal, offset);
18165            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
18166            // Calling encoder.out_of_line_offset(0) is not allowed.
18167            if max_ordinal == 0 {
18168                return Ok(());
18169            }
18170            depth.increment()?;
18171            let envelope_size = 8;
18172            let bytes_len = max_ordinal as usize * envelope_size;
18173            #[allow(unused_variables)]
18174            let offset = encoder.out_of_line_offset(bytes_len);
18175            let mut _prev_end_offset: usize = 0;
18176            if 1 > max_ordinal {
18177                return Ok(());
18178            }
18179
18180            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
18181            // are envelope_size bytes.
18182            let cur_offset: usize = (1 - 1) * envelope_size;
18183
18184            // Zero reserved fields.
18185            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
18186
18187            // Safety:
18188            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
18189            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
18190            //   envelope_size bytes, there is always sufficient room.
18191            fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_net_common::Ipv6Address, D>(
18192            self.address.as_ref().map(<fidl_fuchsia_net_common::Ipv6Address as fidl::encoding::ValueTypeMarker>::borrow),
18193            encoder, offset + cur_offset, depth
18194        )?;
18195
18196            _prev_end_offset = cur_offset + envelope_size;
18197            if 2 > max_ordinal {
18198                return Ok(());
18199            }
18200
18201            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
18202            // are envelope_size bytes.
18203            let cur_offset: usize = (2 - 1) * envelope_size;
18204
18205            // Zero reserved fields.
18206            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
18207
18208            // Safety:
18209            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
18210            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
18211            //   envelope_size bytes, there is always sufficient room.
18212            fidl::encoding::encode_in_envelope_optional::<u8, D>(
18213                self.prefix_length.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
18214                encoder,
18215                offset + cur_offset,
18216                depth,
18217            )?;
18218
18219            _prev_end_offset = cur_offset + envelope_size;
18220            if 3 > max_ordinal {
18221                return Ok(());
18222            }
18223
18224            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
18225            // are envelope_size bytes.
18226            let cur_offset: usize = (3 - 1) * envelope_size;
18227
18228            // Zero reserved fields.
18229            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
18230
18231            // Safety:
18232            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
18233            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
18234            //   envelope_size bytes, there is always sufficient room.
18235            fidl::encoding::encode_in_envelope_optional::<AddressOrigin, D>(
18236                self.origin
18237                    .as_ref()
18238                    .map(<AddressOrigin as fidl::encoding::ValueTypeMarker>::borrow),
18239                encoder,
18240                offset + cur_offset,
18241                depth,
18242            )?;
18243
18244            _prev_end_offset = cur_offset + envelope_size;
18245            if 4 > max_ordinal {
18246                return Ok(());
18247            }
18248
18249            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
18250            // are envelope_size bytes.
18251            let cur_offset: usize = (4 - 1) * envelope_size;
18252
18253            // Zero reserved fields.
18254            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
18255
18256            // Safety:
18257            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
18258            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
18259            //   envelope_size bytes, there is always sufficient room.
18260            fidl::encoding::encode_in_envelope_optional::<bool, D>(
18261                self.preferred.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
18262                encoder,
18263                offset + cur_offset,
18264                depth,
18265            )?;
18266
18267            _prev_end_offset = cur_offset + envelope_size;
18268            if 5 > max_ordinal {
18269                return Ok(());
18270            }
18271
18272            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
18273            // are envelope_size bytes.
18274            let cur_offset: usize = (5 - 1) * envelope_size;
18275
18276            // Zero reserved fields.
18277            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
18278
18279            // Safety:
18280            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
18281            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
18282            //   envelope_size bytes, there is always sufficient room.
18283            fidl::encoding::encode_in_envelope_optional::<bool, D>(
18284                self.valid.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
18285                encoder,
18286                offset + cur_offset,
18287                depth,
18288            )?;
18289
18290            _prev_end_offset = cur_offset + envelope_size;
18291
18292            Ok(())
18293        }
18294    }
18295
18296    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for NetifAddress {
18297        #[inline(always)]
18298        fn new_empty() -> Self {
18299            Self::default()
18300        }
18301
18302        unsafe fn decode(
18303            &mut self,
18304            decoder: &mut fidl::encoding::Decoder<'_, D>,
18305            offset: usize,
18306            mut depth: fidl::encoding::Depth,
18307        ) -> fidl::Result<()> {
18308            decoder.debug_check_bounds::<Self>(offset);
18309            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
18310                None => return Err(fidl::Error::NotNullable),
18311                Some(len) => len,
18312            };
18313            // Calling decoder.out_of_line_offset(0) is not allowed.
18314            if len == 0 {
18315                return Ok(());
18316            };
18317            depth.increment()?;
18318            let envelope_size = 8;
18319            let bytes_len = len * envelope_size;
18320            let offset = decoder.out_of_line_offset(bytes_len)?;
18321            // Decode the envelope for each type.
18322            let mut _next_ordinal_to_read = 0;
18323            let mut next_offset = offset;
18324            let end_offset = offset + bytes_len;
18325            _next_ordinal_to_read += 1;
18326            if next_offset >= end_offset {
18327                return Ok(());
18328            }
18329
18330            // Decode unknown envelopes for gaps in ordinals.
18331            while _next_ordinal_to_read < 1 {
18332                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
18333                _next_ordinal_to_read += 1;
18334                next_offset += envelope_size;
18335            }
18336
18337            let next_out_of_line = decoder.next_out_of_line();
18338            let handles_before = decoder.remaining_handles();
18339            if let Some((inlined, num_bytes, num_handles)) =
18340                fidl::encoding::decode_envelope_header(decoder, next_offset)?
18341            {
18342                let member_inline_size = <fidl_fuchsia_net_common::Ipv6Address as fidl::encoding::TypeMarker>::inline_size(decoder.context);
18343                if inlined != (member_inline_size <= 4) {
18344                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
18345                }
18346                let inner_offset;
18347                let mut inner_depth = depth.clone();
18348                if inlined {
18349                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
18350                    inner_offset = next_offset;
18351                } else {
18352                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
18353                    inner_depth.increment()?;
18354                }
18355                let val_ref = self.address.get_or_insert_with(|| {
18356                    fidl::new_empty!(fidl_fuchsia_net_common::Ipv6Address, D)
18357                });
18358                fidl::decode!(
18359                    fidl_fuchsia_net_common::Ipv6Address,
18360                    D,
18361                    val_ref,
18362                    decoder,
18363                    inner_offset,
18364                    inner_depth
18365                )?;
18366                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
18367                {
18368                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
18369                }
18370                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
18371                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
18372                }
18373            }
18374
18375            next_offset += envelope_size;
18376            _next_ordinal_to_read += 1;
18377            if next_offset >= end_offset {
18378                return Ok(());
18379            }
18380
18381            // Decode unknown envelopes for gaps in ordinals.
18382            while _next_ordinal_to_read < 2 {
18383                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
18384                _next_ordinal_to_read += 1;
18385                next_offset += envelope_size;
18386            }
18387
18388            let next_out_of_line = decoder.next_out_of_line();
18389            let handles_before = decoder.remaining_handles();
18390            if let Some((inlined, num_bytes, num_handles)) =
18391                fidl::encoding::decode_envelope_header(decoder, next_offset)?
18392            {
18393                let member_inline_size =
18394                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
18395                if inlined != (member_inline_size <= 4) {
18396                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
18397                }
18398                let inner_offset;
18399                let mut inner_depth = depth.clone();
18400                if inlined {
18401                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
18402                    inner_offset = next_offset;
18403                } else {
18404                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
18405                    inner_depth.increment()?;
18406                }
18407                let val_ref = self.prefix_length.get_or_insert_with(|| fidl::new_empty!(u8, D));
18408                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
18409                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
18410                {
18411                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
18412                }
18413                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
18414                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
18415                }
18416            }
18417
18418            next_offset += envelope_size;
18419            _next_ordinal_to_read += 1;
18420            if next_offset >= end_offset {
18421                return Ok(());
18422            }
18423
18424            // Decode unknown envelopes for gaps in ordinals.
18425            while _next_ordinal_to_read < 3 {
18426                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
18427                _next_ordinal_to_read += 1;
18428                next_offset += envelope_size;
18429            }
18430
18431            let next_out_of_line = decoder.next_out_of_line();
18432            let handles_before = decoder.remaining_handles();
18433            if let Some((inlined, num_bytes, num_handles)) =
18434                fidl::encoding::decode_envelope_header(decoder, next_offset)?
18435            {
18436                let member_inline_size =
18437                    <AddressOrigin as fidl::encoding::TypeMarker>::inline_size(decoder.context);
18438                if inlined != (member_inline_size <= 4) {
18439                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
18440                }
18441                let inner_offset;
18442                let mut inner_depth = depth.clone();
18443                if inlined {
18444                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
18445                    inner_offset = next_offset;
18446                } else {
18447                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
18448                    inner_depth.increment()?;
18449                }
18450                let val_ref = self.origin.get_or_insert_with(|| fidl::new_empty!(AddressOrigin, D));
18451                fidl::decode!(AddressOrigin, D, val_ref, decoder, inner_offset, inner_depth)?;
18452                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
18453                {
18454                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
18455                }
18456                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
18457                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
18458                }
18459            }
18460
18461            next_offset += envelope_size;
18462            _next_ordinal_to_read += 1;
18463            if next_offset >= end_offset {
18464                return Ok(());
18465            }
18466
18467            // Decode unknown envelopes for gaps in ordinals.
18468            while _next_ordinal_to_read < 4 {
18469                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
18470                _next_ordinal_to_read += 1;
18471                next_offset += envelope_size;
18472            }
18473
18474            let next_out_of_line = decoder.next_out_of_line();
18475            let handles_before = decoder.remaining_handles();
18476            if let Some((inlined, num_bytes, num_handles)) =
18477                fidl::encoding::decode_envelope_header(decoder, next_offset)?
18478            {
18479                let member_inline_size =
18480                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
18481                if inlined != (member_inline_size <= 4) {
18482                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
18483                }
18484                let inner_offset;
18485                let mut inner_depth = depth.clone();
18486                if inlined {
18487                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
18488                    inner_offset = next_offset;
18489                } else {
18490                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
18491                    inner_depth.increment()?;
18492                }
18493                let val_ref = self.preferred.get_or_insert_with(|| fidl::new_empty!(bool, D));
18494                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
18495                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
18496                {
18497                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
18498                }
18499                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
18500                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
18501                }
18502            }
18503
18504            next_offset += envelope_size;
18505            _next_ordinal_to_read += 1;
18506            if next_offset >= end_offset {
18507                return Ok(());
18508            }
18509
18510            // Decode unknown envelopes for gaps in ordinals.
18511            while _next_ordinal_to_read < 5 {
18512                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
18513                _next_ordinal_to_read += 1;
18514                next_offset += envelope_size;
18515            }
18516
18517            let next_out_of_line = decoder.next_out_of_line();
18518            let handles_before = decoder.remaining_handles();
18519            if let Some((inlined, num_bytes, num_handles)) =
18520                fidl::encoding::decode_envelope_header(decoder, next_offset)?
18521            {
18522                let member_inline_size =
18523                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
18524                if inlined != (member_inline_size <= 4) {
18525                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
18526                }
18527                let inner_offset;
18528                let mut inner_depth = depth.clone();
18529                if inlined {
18530                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
18531                    inner_offset = next_offset;
18532                } else {
18533                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
18534                    inner_depth.increment()?;
18535                }
18536                let val_ref = self.valid.get_or_insert_with(|| fidl::new_empty!(bool, D));
18537                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
18538                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
18539                {
18540                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
18541                }
18542                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
18543                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
18544                }
18545            }
18546
18547            next_offset += envelope_size;
18548
18549            // Decode the remaining unknown envelopes.
18550            while next_offset < end_offset {
18551                _next_ordinal_to_read += 1;
18552                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
18553                next_offset += envelope_size;
18554            }
18555
18556            Ok(())
18557        }
18558    }
18559
18560    impl NetworkData {
18561        #[inline(always)]
18562        fn max_ordinal_present(&self) -> u64 {
18563            if let Some(_) = self.commissioning_dataset {
18564                return 5;
18565            }
18566            if let Some(_) = self.contexts {
18567                return 4;
18568            }
18569            if let Some(_) = self.services {
18570                return 3;
18571            }
18572            if let Some(_) = self.external_routes {
18573                return 2;
18574            }
18575            if let Some(_) = self.on_mesh_prefixes {
18576                return 1;
18577            }
18578            0
18579        }
18580    }
18581
18582    impl fidl::encoding::ValueTypeMarker for NetworkData {
18583        type Borrowed<'a> = &'a Self;
18584        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
18585            value
18586        }
18587    }
18588
18589    unsafe impl fidl::encoding::TypeMarker for NetworkData {
18590        type Owned = Self;
18591
18592        #[inline(always)]
18593        fn inline_align(_context: fidl::encoding::Context) -> usize {
18594            8
18595        }
18596
18597        #[inline(always)]
18598        fn inline_size(_context: fidl::encoding::Context) -> usize {
18599            16
18600        }
18601    }
18602
18603    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<NetworkData, D>
18604        for &NetworkData
18605    {
18606        unsafe fn encode(
18607            self,
18608            encoder: &mut fidl::encoding::Encoder<'_, D>,
18609            offset: usize,
18610            mut depth: fidl::encoding::Depth,
18611        ) -> fidl::Result<()> {
18612            encoder.debug_check_bounds::<NetworkData>(offset);
18613            // Vector header
18614            let max_ordinal: u64 = self.max_ordinal_present();
18615            encoder.write_num(max_ordinal, offset);
18616            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
18617            // Calling encoder.out_of_line_offset(0) is not allowed.
18618            if max_ordinal == 0 {
18619                return Ok(());
18620            }
18621            depth.increment()?;
18622            let envelope_size = 8;
18623            let bytes_len = max_ordinal as usize * envelope_size;
18624            #[allow(unused_variables)]
18625            let offset = encoder.out_of_line_offset(bytes_len);
18626            let mut _prev_end_offset: usize = 0;
18627            if 1 > max_ordinal {
18628                return Ok(());
18629            }
18630
18631            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
18632            // are envelope_size bytes.
18633            let cur_offset: usize = (1 - 1) * envelope_size;
18634
18635            // Zero reserved fields.
18636            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
18637
18638            // Safety:
18639            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
18640            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
18641            //   envelope_size bytes, there is always sufficient room.
18642            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<BorderRouterConfig, 32>, D>(
18643            self.on_mesh_prefixes.as_ref().map(<fidl::encoding::Vector<BorderRouterConfig, 32> as fidl::encoding::ValueTypeMarker>::borrow),
18644            encoder, offset + cur_offset, depth
18645        )?;
18646
18647            _prev_end_offset = cur_offset + envelope_size;
18648            if 2 > max_ordinal {
18649                return Ok(());
18650            }
18651
18652            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
18653            // are envelope_size bytes.
18654            let cur_offset: usize = (2 - 1) * envelope_size;
18655
18656            // Zero reserved fields.
18657            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
18658
18659            // Safety:
18660            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
18661            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
18662            //   envelope_size bytes, there is always sufficient room.
18663            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<ExternalRouteConfig, 32>, D>(
18664            self.external_routes.as_ref().map(<fidl::encoding::Vector<ExternalRouteConfig, 32> as fidl::encoding::ValueTypeMarker>::borrow),
18665            encoder, offset + cur_offset, depth
18666        )?;
18667
18668            _prev_end_offset = cur_offset + envelope_size;
18669            if 3 > max_ordinal {
18670                return Ok(());
18671            }
18672
18673            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
18674            // are envelope_size bytes.
18675            let cur_offset: usize = (3 - 1) * envelope_size;
18676
18677            // Zero reserved fields.
18678            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
18679
18680            // Safety:
18681            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
18682            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
18683            //   envelope_size bytes, there is always sufficient room.
18684            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<ServiceConfig, 32>, D>(
18685            self.services.as_ref().map(<fidl::encoding::Vector<ServiceConfig, 32> as fidl::encoding::ValueTypeMarker>::borrow),
18686            encoder, offset + cur_offset, depth
18687        )?;
18688
18689            _prev_end_offset = cur_offset + envelope_size;
18690            if 4 > max_ordinal {
18691                return Ok(());
18692            }
18693
18694            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
18695            // are envelope_size bytes.
18696            let cur_offset: usize = (4 - 1) * envelope_size;
18697
18698            // Zero reserved fields.
18699            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
18700
18701            // Safety:
18702            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
18703            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
18704            //   envelope_size bytes, there is always sufficient room.
18705            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<LowpanContextInfo, 32>, D>(
18706            self.contexts.as_ref().map(<fidl::encoding::Vector<LowpanContextInfo, 32> as fidl::encoding::ValueTypeMarker>::borrow),
18707            encoder, offset + cur_offset, depth
18708        )?;
18709
18710            _prev_end_offset = cur_offset + envelope_size;
18711            if 5 > max_ordinal {
18712                return Ok(());
18713            }
18714
18715            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
18716            // are envelope_size bytes.
18717            let cur_offset: usize = (5 - 1) * envelope_size;
18718
18719            // Zero reserved fields.
18720            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
18721
18722            // Safety:
18723            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
18724            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
18725            //   envelope_size bytes, there is always sufficient room.
18726            fidl::encoding::encode_in_envelope_optional::<CommissioningDataset, D>(
18727                self.commissioning_dataset
18728                    .as_ref()
18729                    .map(<CommissioningDataset as fidl::encoding::ValueTypeMarker>::borrow),
18730                encoder,
18731                offset + cur_offset,
18732                depth,
18733            )?;
18734
18735            _prev_end_offset = cur_offset + envelope_size;
18736
18737            Ok(())
18738        }
18739    }
18740
18741    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for NetworkData {
18742        #[inline(always)]
18743        fn new_empty() -> Self {
18744            Self::default()
18745        }
18746
18747        unsafe fn decode(
18748            &mut self,
18749            decoder: &mut fidl::encoding::Decoder<'_, D>,
18750            offset: usize,
18751            mut depth: fidl::encoding::Depth,
18752        ) -> fidl::Result<()> {
18753            decoder.debug_check_bounds::<Self>(offset);
18754            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
18755                None => return Err(fidl::Error::NotNullable),
18756                Some(len) => len,
18757            };
18758            // Calling decoder.out_of_line_offset(0) is not allowed.
18759            if len == 0 {
18760                return Ok(());
18761            };
18762            depth.increment()?;
18763            let envelope_size = 8;
18764            let bytes_len = len * envelope_size;
18765            let offset = decoder.out_of_line_offset(bytes_len)?;
18766            // Decode the envelope for each type.
18767            let mut _next_ordinal_to_read = 0;
18768            let mut next_offset = offset;
18769            let end_offset = offset + bytes_len;
18770            _next_ordinal_to_read += 1;
18771            if next_offset >= end_offset {
18772                return Ok(());
18773            }
18774
18775            // Decode unknown envelopes for gaps in ordinals.
18776            while _next_ordinal_to_read < 1 {
18777                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
18778                _next_ordinal_to_read += 1;
18779                next_offset += envelope_size;
18780            }
18781
18782            let next_out_of_line = decoder.next_out_of_line();
18783            let handles_before = decoder.remaining_handles();
18784            if let Some((inlined, num_bytes, num_handles)) =
18785                fidl::encoding::decode_envelope_header(decoder, next_offset)?
18786            {
18787                let member_inline_size = <fidl::encoding::Vector<BorderRouterConfig, 32> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
18788                if inlined != (member_inline_size <= 4) {
18789                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
18790                }
18791                let inner_offset;
18792                let mut inner_depth = depth.clone();
18793                if inlined {
18794                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
18795                    inner_offset = next_offset;
18796                } else {
18797                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
18798                    inner_depth.increment()?;
18799                }
18800                let val_ref = self.on_mesh_prefixes.get_or_insert_with(
18801                    || fidl::new_empty!(fidl::encoding::Vector<BorderRouterConfig, 32>, D),
18802                );
18803                fidl::decode!(fidl::encoding::Vector<BorderRouterConfig, 32>, D, val_ref, decoder, inner_offset, inner_depth)?;
18804                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
18805                {
18806                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
18807                }
18808                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
18809                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
18810                }
18811            }
18812
18813            next_offset += envelope_size;
18814            _next_ordinal_to_read += 1;
18815            if next_offset >= end_offset {
18816                return Ok(());
18817            }
18818
18819            // Decode unknown envelopes for gaps in ordinals.
18820            while _next_ordinal_to_read < 2 {
18821                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
18822                _next_ordinal_to_read += 1;
18823                next_offset += envelope_size;
18824            }
18825
18826            let next_out_of_line = decoder.next_out_of_line();
18827            let handles_before = decoder.remaining_handles();
18828            if let Some((inlined, num_bytes, num_handles)) =
18829                fidl::encoding::decode_envelope_header(decoder, next_offset)?
18830            {
18831                let member_inline_size = <fidl::encoding::Vector<ExternalRouteConfig, 32> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
18832                if inlined != (member_inline_size <= 4) {
18833                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
18834                }
18835                let inner_offset;
18836                let mut inner_depth = depth.clone();
18837                if inlined {
18838                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
18839                    inner_offset = next_offset;
18840                } else {
18841                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
18842                    inner_depth.increment()?;
18843                }
18844                let val_ref = self.external_routes.get_or_insert_with(
18845                    || fidl::new_empty!(fidl::encoding::Vector<ExternalRouteConfig, 32>, D),
18846                );
18847                fidl::decode!(fidl::encoding::Vector<ExternalRouteConfig, 32>, D, val_ref, decoder, inner_offset, inner_depth)?;
18848                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
18849                {
18850                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
18851                }
18852                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
18853                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
18854                }
18855            }
18856
18857            next_offset += envelope_size;
18858            _next_ordinal_to_read += 1;
18859            if next_offset >= end_offset {
18860                return Ok(());
18861            }
18862
18863            // Decode unknown envelopes for gaps in ordinals.
18864            while _next_ordinal_to_read < 3 {
18865                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
18866                _next_ordinal_to_read += 1;
18867                next_offset += envelope_size;
18868            }
18869
18870            let next_out_of_line = decoder.next_out_of_line();
18871            let handles_before = decoder.remaining_handles();
18872            if let Some((inlined, num_bytes, num_handles)) =
18873                fidl::encoding::decode_envelope_header(decoder, next_offset)?
18874            {
18875                let member_inline_size = <fidl::encoding::Vector<ServiceConfig, 32> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
18876                if inlined != (member_inline_size <= 4) {
18877                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
18878                }
18879                let inner_offset;
18880                let mut inner_depth = depth.clone();
18881                if inlined {
18882                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
18883                    inner_offset = next_offset;
18884                } else {
18885                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
18886                    inner_depth.increment()?;
18887                }
18888                let val_ref = self.services.get_or_insert_with(
18889                    || fidl::new_empty!(fidl::encoding::Vector<ServiceConfig, 32>, D),
18890                );
18891                fidl::decode!(fidl::encoding::Vector<ServiceConfig, 32>, D, val_ref, decoder, inner_offset, inner_depth)?;
18892                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
18893                {
18894                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
18895                }
18896                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
18897                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
18898                }
18899            }
18900
18901            next_offset += envelope_size;
18902            _next_ordinal_to_read += 1;
18903            if next_offset >= end_offset {
18904                return Ok(());
18905            }
18906
18907            // Decode unknown envelopes for gaps in ordinals.
18908            while _next_ordinal_to_read < 4 {
18909                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
18910                _next_ordinal_to_read += 1;
18911                next_offset += envelope_size;
18912            }
18913
18914            let next_out_of_line = decoder.next_out_of_line();
18915            let handles_before = decoder.remaining_handles();
18916            if let Some((inlined, num_bytes, num_handles)) =
18917                fidl::encoding::decode_envelope_header(decoder, next_offset)?
18918            {
18919                let member_inline_size = <fidl::encoding::Vector<LowpanContextInfo, 32> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
18920                if inlined != (member_inline_size <= 4) {
18921                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
18922                }
18923                let inner_offset;
18924                let mut inner_depth = depth.clone();
18925                if inlined {
18926                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
18927                    inner_offset = next_offset;
18928                } else {
18929                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
18930                    inner_depth.increment()?;
18931                }
18932                let val_ref = self.contexts.get_or_insert_with(
18933                    || fidl::new_empty!(fidl::encoding::Vector<LowpanContextInfo, 32>, D),
18934                );
18935                fidl::decode!(fidl::encoding::Vector<LowpanContextInfo, 32>, D, val_ref, decoder, inner_offset, inner_depth)?;
18936                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
18937                {
18938                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
18939                }
18940                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
18941                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
18942                }
18943            }
18944
18945            next_offset += envelope_size;
18946            _next_ordinal_to_read += 1;
18947            if next_offset >= end_offset {
18948                return Ok(());
18949            }
18950
18951            // Decode unknown envelopes for gaps in ordinals.
18952            while _next_ordinal_to_read < 5 {
18953                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
18954                _next_ordinal_to_read += 1;
18955                next_offset += envelope_size;
18956            }
18957
18958            let next_out_of_line = decoder.next_out_of_line();
18959            let handles_before = decoder.remaining_handles();
18960            if let Some((inlined, num_bytes, num_handles)) =
18961                fidl::encoding::decode_envelope_header(decoder, next_offset)?
18962            {
18963                let member_inline_size =
18964                    <CommissioningDataset as fidl::encoding::TypeMarker>::inline_size(
18965                        decoder.context,
18966                    );
18967                if inlined != (member_inline_size <= 4) {
18968                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
18969                }
18970                let inner_offset;
18971                let mut inner_depth = depth.clone();
18972                if inlined {
18973                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
18974                    inner_offset = next_offset;
18975                } else {
18976                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
18977                    inner_depth.increment()?;
18978                }
18979                let val_ref = self
18980                    .commissioning_dataset
18981                    .get_or_insert_with(|| fidl::new_empty!(CommissioningDataset, D));
18982                fidl::decode!(
18983                    CommissioningDataset,
18984                    D,
18985                    val_ref,
18986                    decoder,
18987                    inner_offset,
18988                    inner_depth
18989                )?;
18990                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
18991                {
18992                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
18993                }
18994                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
18995                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
18996                }
18997            }
18998
18999            next_offset += envelope_size;
19000
19001            // Decode the remaining unknown envelopes.
19002            while next_offset < end_offset {
19003                _next_ordinal_to_read += 1;
19004                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
19005                next_offset += envelope_size;
19006            }
19007
19008            Ok(())
19009        }
19010    }
19011
19012    impl NetworkScanParameters {
19013        #[inline(always)]
19014        fn max_ordinal_present(&self) -> u64 {
19015            if let Some(_) = self.tx_power_dbm {
19016                return 2;
19017            }
19018            if let Some(_) = self.channels {
19019                return 1;
19020            }
19021            0
19022        }
19023    }
19024
19025    impl fidl::encoding::ValueTypeMarker for NetworkScanParameters {
19026        type Borrowed<'a> = &'a Self;
19027        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
19028            value
19029        }
19030    }
19031
19032    unsafe impl fidl::encoding::TypeMarker for NetworkScanParameters {
19033        type Owned = Self;
19034
19035        #[inline(always)]
19036        fn inline_align(_context: fidl::encoding::Context) -> usize {
19037            8
19038        }
19039
19040        #[inline(always)]
19041        fn inline_size(_context: fidl::encoding::Context) -> usize {
19042            16
19043        }
19044    }
19045
19046    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<NetworkScanParameters, D>
19047        for &NetworkScanParameters
19048    {
19049        unsafe fn encode(
19050            self,
19051            encoder: &mut fidl::encoding::Encoder<'_, D>,
19052            offset: usize,
19053            mut depth: fidl::encoding::Depth,
19054        ) -> fidl::Result<()> {
19055            encoder.debug_check_bounds::<NetworkScanParameters>(offset);
19056            // Vector header
19057            let max_ordinal: u64 = self.max_ordinal_present();
19058            encoder.write_num(max_ordinal, offset);
19059            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
19060            // Calling encoder.out_of_line_offset(0) is not allowed.
19061            if max_ordinal == 0 {
19062                return Ok(());
19063            }
19064            depth.increment()?;
19065            let envelope_size = 8;
19066            let bytes_len = max_ordinal as usize * envelope_size;
19067            #[allow(unused_variables)]
19068            let offset = encoder.out_of_line_offset(bytes_len);
19069            let mut _prev_end_offset: usize = 0;
19070            if 1 > max_ordinal {
19071                return Ok(());
19072            }
19073
19074            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
19075            // are envelope_size bytes.
19076            let cur_offset: usize = (1 - 1) * envelope_size;
19077
19078            // Zero reserved fields.
19079            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
19080
19081            // Safety:
19082            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
19083            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
19084            //   envelope_size bytes, there is always sufficient room.
19085            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u16, 200>, D>(
19086                self.channels.as_ref().map(
19087                    <fidl::encoding::Vector<u16, 200> as fidl::encoding::ValueTypeMarker>::borrow,
19088                ),
19089                encoder,
19090                offset + cur_offset,
19091                depth,
19092            )?;
19093
19094            _prev_end_offset = cur_offset + envelope_size;
19095            if 2 > max_ordinal {
19096                return Ok(());
19097            }
19098
19099            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
19100            // are envelope_size bytes.
19101            let cur_offset: usize = (2 - 1) * envelope_size;
19102
19103            // Zero reserved fields.
19104            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
19105
19106            // Safety:
19107            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
19108            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
19109            //   envelope_size bytes, there is always sufficient room.
19110            fidl::encoding::encode_in_envelope_optional::<i8, D>(
19111                self.tx_power_dbm.as_ref().map(<i8 as fidl::encoding::ValueTypeMarker>::borrow),
19112                encoder,
19113                offset + cur_offset,
19114                depth,
19115            )?;
19116
19117            _prev_end_offset = cur_offset + envelope_size;
19118
19119            Ok(())
19120        }
19121    }
19122
19123    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for NetworkScanParameters {
19124        #[inline(always)]
19125        fn new_empty() -> Self {
19126            Self::default()
19127        }
19128
19129        unsafe fn decode(
19130            &mut self,
19131            decoder: &mut fidl::encoding::Decoder<'_, D>,
19132            offset: usize,
19133            mut depth: fidl::encoding::Depth,
19134        ) -> fidl::Result<()> {
19135            decoder.debug_check_bounds::<Self>(offset);
19136            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
19137                None => return Err(fidl::Error::NotNullable),
19138                Some(len) => len,
19139            };
19140            // Calling decoder.out_of_line_offset(0) is not allowed.
19141            if len == 0 {
19142                return Ok(());
19143            };
19144            depth.increment()?;
19145            let envelope_size = 8;
19146            let bytes_len = len * envelope_size;
19147            let offset = decoder.out_of_line_offset(bytes_len)?;
19148            // Decode the envelope for each type.
19149            let mut _next_ordinal_to_read = 0;
19150            let mut next_offset = offset;
19151            let end_offset = offset + bytes_len;
19152            _next_ordinal_to_read += 1;
19153            if next_offset >= end_offset {
19154                return Ok(());
19155            }
19156
19157            // Decode unknown envelopes for gaps in ordinals.
19158            while _next_ordinal_to_read < 1 {
19159                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
19160                _next_ordinal_to_read += 1;
19161                next_offset += envelope_size;
19162            }
19163
19164            let next_out_of_line = decoder.next_out_of_line();
19165            let handles_before = decoder.remaining_handles();
19166            if let Some((inlined, num_bytes, num_handles)) =
19167                fidl::encoding::decode_envelope_header(decoder, next_offset)?
19168            {
19169                let member_inline_size =
19170                    <fidl::encoding::Vector<u16, 200> as fidl::encoding::TypeMarker>::inline_size(
19171                        decoder.context,
19172                    );
19173                if inlined != (member_inline_size <= 4) {
19174                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
19175                }
19176                let inner_offset;
19177                let mut inner_depth = depth.clone();
19178                if inlined {
19179                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
19180                    inner_offset = next_offset;
19181                } else {
19182                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
19183                    inner_depth.increment()?;
19184                }
19185                let val_ref = self
19186                    .channels
19187                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u16, 200>, D));
19188                fidl::decode!(fidl::encoding::Vector<u16, 200>, D, val_ref, decoder, inner_offset, inner_depth)?;
19189                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
19190                {
19191                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
19192                }
19193                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
19194                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
19195                }
19196            }
19197
19198            next_offset += envelope_size;
19199            _next_ordinal_to_read += 1;
19200            if next_offset >= end_offset {
19201                return Ok(());
19202            }
19203
19204            // Decode unknown envelopes for gaps in ordinals.
19205            while _next_ordinal_to_read < 2 {
19206                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
19207                _next_ordinal_to_read += 1;
19208                next_offset += envelope_size;
19209            }
19210
19211            let next_out_of_line = decoder.next_out_of_line();
19212            let handles_before = decoder.remaining_handles();
19213            if let Some((inlined, num_bytes, num_handles)) =
19214                fidl::encoding::decode_envelope_header(decoder, next_offset)?
19215            {
19216                let member_inline_size =
19217                    <i8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
19218                if inlined != (member_inline_size <= 4) {
19219                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
19220                }
19221                let inner_offset;
19222                let mut inner_depth = depth.clone();
19223                if inlined {
19224                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
19225                    inner_offset = next_offset;
19226                } else {
19227                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
19228                    inner_depth.increment()?;
19229                }
19230                let val_ref = self.tx_power_dbm.get_or_insert_with(|| fidl::new_empty!(i8, D));
19231                fidl::decode!(i8, D, val_ref, decoder, inner_offset, inner_depth)?;
19232                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
19233                {
19234                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
19235                }
19236                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
19237                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
19238                }
19239            }
19240
19241            next_offset += envelope_size;
19242
19243            // Decode the remaining unknown envelopes.
19244            while next_offset < end_offset {
19245                _next_ordinal_to_read += 1;
19246                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
19247                next_offset += envelope_size;
19248            }
19249
19250            Ok(())
19251        }
19252    }
19253
19254    impl OnMeshPrefix {
19255        #[inline(always)]
19256        fn max_ordinal_present(&self) -> u64 {
19257            if let Some(_) = self.slaac_valid {
19258                return 5;
19259            }
19260            if let Some(_) = self.slaac_preferred {
19261                return 4;
19262            }
19263            if let Some(_) = self.stable {
19264                return 3;
19265            }
19266            if let Some(_) = self.default_route_preference {
19267                return 2;
19268            }
19269            if let Some(_) = self.subnet {
19270                return 1;
19271            }
19272            0
19273        }
19274    }
19275
19276    impl fidl::encoding::ValueTypeMarker for OnMeshPrefix {
19277        type Borrowed<'a> = &'a Self;
19278        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
19279            value
19280        }
19281    }
19282
19283    unsafe impl fidl::encoding::TypeMarker for OnMeshPrefix {
19284        type Owned = Self;
19285
19286        #[inline(always)]
19287        fn inline_align(_context: fidl::encoding::Context) -> usize {
19288            8
19289        }
19290
19291        #[inline(always)]
19292        fn inline_size(_context: fidl::encoding::Context) -> usize {
19293            16
19294        }
19295    }
19296
19297    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<OnMeshPrefix, D>
19298        for &OnMeshPrefix
19299    {
19300        unsafe fn encode(
19301            self,
19302            encoder: &mut fidl::encoding::Encoder<'_, D>,
19303            offset: usize,
19304            mut depth: fidl::encoding::Depth,
19305        ) -> fidl::Result<()> {
19306            encoder.debug_check_bounds::<OnMeshPrefix>(offset);
19307            // Vector header
19308            let max_ordinal: u64 = self.max_ordinal_present();
19309            encoder.write_num(max_ordinal, offset);
19310            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
19311            // Calling encoder.out_of_line_offset(0) is not allowed.
19312            if max_ordinal == 0 {
19313                return Ok(());
19314            }
19315            depth.increment()?;
19316            let envelope_size = 8;
19317            let bytes_len = max_ordinal as usize * envelope_size;
19318            #[allow(unused_variables)]
19319            let offset = encoder.out_of_line_offset(bytes_len);
19320            let mut _prev_end_offset: usize = 0;
19321            if 1 > max_ordinal {
19322                return Ok(());
19323            }
19324
19325            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
19326            // are envelope_size bytes.
19327            let cur_offset: usize = (1 - 1) * envelope_size;
19328
19329            // Zero reserved fields.
19330            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
19331
19332            // Safety:
19333            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
19334            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
19335            //   envelope_size bytes, there is always sufficient room.
19336            fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_net_common::Ipv6AddressWithPrefix, D>(
19337            self.subnet.as_ref().map(<fidl_fuchsia_net_common::Ipv6AddressWithPrefix as fidl::encoding::ValueTypeMarker>::borrow),
19338            encoder, offset + cur_offset, depth
19339        )?;
19340
19341            _prev_end_offset = cur_offset + envelope_size;
19342            if 2 > max_ordinal {
19343                return Ok(());
19344            }
19345
19346            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
19347            // are envelope_size bytes.
19348            let cur_offset: usize = (2 - 1) * envelope_size;
19349
19350            // Zero reserved fields.
19351            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
19352
19353            // Safety:
19354            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
19355            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
19356            //   envelope_size bytes, there is always sufficient room.
19357            fidl::encoding::encode_in_envelope_optional::<RoutePreference, D>(
19358                self.default_route_preference
19359                    .as_ref()
19360                    .map(<RoutePreference as fidl::encoding::ValueTypeMarker>::borrow),
19361                encoder,
19362                offset + cur_offset,
19363                depth,
19364            )?;
19365
19366            _prev_end_offset = cur_offset + envelope_size;
19367            if 3 > max_ordinal {
19368                return Ok(());
19369            }
19370
19371            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
19372            // are envelope_size bytes.
19373            let cur_offset: usize = (3 - 1) * envelope_size;
19374
19375            // Zero reserved fields.
19376            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
19377
19378            // Safety:
19379            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
19380            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
19381            //   envelope_size bytes, there is always sufficient room.
19382            fidl::encoding::encode_in_envelope_optional::<bool, D>(
19383                self.stable.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
19384                encoder,
19385                offset + cur_offset,
19386                depth,
19387            )?;
19388
19389            _prev_end_offset = cur_offset + envelope_size;
19390            if 4 > max_ordinal {
19391                return Ok(());
19392            }
19393
19394            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
19395            // are envelope_size bytes.
19396            let cur_offset: usize = (4 - 1) * envelope_size;
19397
19398            // Zero reserved fields.
19399            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
19400
19401            // Safety:
19402            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
19403            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
19404            //   envelope_size bytes, there is always sufficient room.
19405            fidl::encoding::encode_in_envelope_optional::<bool, D>(
19406                self.slaac_preferred
19407                    .as_ref()
19408                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
19409                encoder,
19410                offset + cur_offset,
19411                depth,
19412            )?;
19413
19414            _prev_end_offset = cur_offset + envelope_size;
19415            if 5 > max_ordinal {
19416                return Ok(());
19417            }
19418
19419            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
19420            // are envelope_size bytes.
19421            let cur_offset: usize = (5 - 1) * envelope_size;
19422
19423            // Zero reserved fields.
19424            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
19425
19426            // Safety:
19427            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
19428            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
19429            //   envelope_size bytes, there is always sufficient room.
19430            fidl::encoding::encode_in_envelope_optional::<bool, D>(
19431                self.slaac_valid.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
19432                encoder,
19433                offset + cur_offset,
19434                depth,
19435            )?;
19436
19437            _prev_end_offset = cur_offset + envelope_size;
19438
19439            Ok(())
19440        }
19441    }
19442
19443    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for OnMeshPrefix {
19444        #[inline(always)]
19445        fn new_empty() -> Self {
19446            Self::default()
19447        }
19448
19449        unsafe fn decode(
19450            &mut self,
19451            decoder: &mut fidl::encoding::Decoder<'_, D>,
19452            offset: usize,
19453            mut depth: fidl::encoding::Depth,
19454        ) -> fidl::Result<()> {
19455            decoder.debug_check_bounds::<Self>(offset);
19456            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
19457                None => return Err(fidl::Error::NotNullable),
19458                Some(len) => len,
19459            };
19460            // Calling decoder.out_of_line_offset(0) is not allowed.
19461            if len == 0 {
19462                return Ok(());
19463            };
19464            depth.increment()?;
19465            let envelope_size = 8;
19466            let bytes_len = len * envelope_size;
19467            let offset = decoder.out_of_line_offset(bytes_len)?;
19468            // Decode the envelope for each type.
19469            let mut _next_ordinal_to_read = 0;
19470            let mut next_offset = offset;
19471            let end_offset = offset + bytes_len;
19472            _next_ordinal_to_read += 1;
19473            if next_offset >= end_offset {
19474                return Ok(());
19475            }
19476
19477            // Decode unknown envelopes for gaps in ordinals.
19478            while _next_ordinal_to_read < 1 {
19479                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
19480                _next_ordinal_to_read += 1;
19481                next_offset += envelope_size;
19482            }
19483
19484            let next_out_of_line = decoder.next_out_of_line();
19485            let handles_before = decoder.remaining_handles();
19486            if let Some((inlined, num_bytes, num_handles)) =
19487                fidl::encoding::decode_envelope_header(decoder, next_offset)?
19488            {
19489                let member_inline_size = <fidl_fuchsia_net_common::Ipv6AddressWithPrefix as fidl::encoding::TypeMarker>::inline_size(decoder.context);
19490                if inlined != (member_inline_size <= 4) {
19491                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
19492                }
19493                let inner_offset;
19494                let mut inner_depth = depth.clone();
19495                if inlined {
19496                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
19497                    inner_offset = next_offset;
19498                } else {
19499                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
19500                    inner_depth.increment()?;
19501                }
19502                let val_ref = self.subnet.get_or_insert_with(|| {
19503                    fidl::new_empty!(fidl_fuchsia_net_common::Ipv6AddressWithPrefix, D)
19504                });
19505                fidl::decode!(
19506                    fidl_fuchsia_net_common::Ipv6AddressWithPrefix,
19507                    D,
19508                    val_ref,
19509                    decoder,
19510                    inner_offset,
19511                    inner_depth
19512                )?;
19513                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
19514                {
19515                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
19516                }
19517                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
19518                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
19519                }
19520            }
19521
19522            next_offset += envelope_size;
19523            _next_ordinal_to_read += 1;
19524            if next_offset >= end_offset {
19525                return Ok(());
19526            }
19527
19528            // Decode unknown envelopes for gaps in ordinals.
19529            while _next_ordinal_to_read < 2 {
19530                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
19531                _next_ordinal_to_read += 1;
19532                next_offset += envelope_size;
19533            }
19534
19535            let next_out_of_line = decoder.next_out_of_line();
19536            let handles_before = decoder.remaining_handles();
19537            if let Some((inlined, num_bytes, num_handles)) =
19538                fidl::encoding::decode_envelope_header(decoder, next_offset)?
19539            {
19540                let member_inline_size =
19541                    <RoutePreference as fidl::encoding::TypeMarker>::inline_size(decoder.context);
19542                if inlined != (member_inline_size <= 4) {
19543                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
19544                }
19545                let inner_offset;
19546                let mut inner_depth = depth.clone();
19547                if inlined {
19548                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
19549                    inner_offset = next_offset;
19550                } else {
19551                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
19552                    inner_depth.increment()?;
19553                }
19554                let val_ref = self
19555                    .default_route_preference
19556                    .get_or_insert_with(|| fidl::new_empty!(RoutePreference, D));
19557                fidl::decode!(RoutePreference, D, val_ref, decoder, inner_offset, inner_depth)?;
19558                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
19559                {
19560                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
19561                }
19562                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
19563                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
19564                }
19565            }
19566
19567            next_offset += envelope_size;
19568            _next_ordinal_to_read += 1;
19569            if next_offset >= end_offset {
19570                return Ok(());
19571            }
19572
19573            // Decode unknown envelopes for gaps in ordinals.
19574            while _next_ordinal_to_read < 3 {
19575                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
19576                _next_ordinal_to_read += 1;
19577                next_offset += envelope_size;
19578            }
19579
19580            let next_out_of_line = decoder.next_out_of_line();
19581            let handles_before = decoder.remaining_handles();
19582            if let Some((inlined, num_bytes, num_handles)) =
19583                fidl::encoding::decode_envelope_header(decoder, next_offset)?
19584            {
19585                let member_inline_size =
19586                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
19587                if inlined != (member_inline_size <= 4) {
19588                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
19589                }
19590                let inner_offset;
19591                let mut inner_depth = depth.clone();
19592                if inlined {
19593                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
19594                    inner_offset = next_offset;
19595                } else {
19596                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
19597                    inner_depth.increment()?;
19598                }
19599                let val_ref = self.stable.get_or_insert_with(|| fidl::new_empty!(bool, D));
19600                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
19601                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
19602                {
19603                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
19604                }
19605                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
19606                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
19607                }
19608            }
19609
19610            next_offset += envelope_size;
19611            _next_ordinal_to_read += 1;
19612            if next_offset >= end_offset {
19613                return Ok(());
19614            }
19615
19616            // Decode unknown envelopes for gaps in ordinals.
19617            while _next_ordinal_to_read < 4 {
19618                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
19619                _next_ordinal_to_read += 1;
19620                next_offset += envelope_size;
19621            }
19622
19623            let next_out_of_line = decoder.next_out_of_line();
19624            let handles_before = decoder.remaining_handles();
19625            if let Some((inlined, num_bytes, num_handles)) =
19626                fidl::encoding::decode_envelope_header(decoder, next_offset)?
19627            {
19628                let member_inline_size =
19629                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
19630                if inlined != (member_inline_size <= 4) {
19631                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
19632                }
19633                let inner_offset;
19634                let mut inner_depth = depth.clone();
19635                if inlined {
19636                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
19637                    inner_offset = next_offset;
19638                } else {
19639                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
19640                    inner_depth.increment()?;
19641                }
19642                let val_ref = self.slaac_preferred.get_or_insert_with(|| fidl::new_empty!(bool, D));
19643                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
19644                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
19645                {
19646                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
19647                }
19648                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
19649                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
19650                }
19651            }
19652
19653            next_offset += envelope_size;
19654            _next_ordinal_to_read += 1;
19655            if next_offset >= end_offset {
19656                return Ok(());
19657            }
19658
19659            // Decode unknown envelopes for gaps in ordinals.
19660            while _next_ordinal_to_read < 5 {
19661                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
19662                _next_ordinal_to_read += 1;
19663                next_offset += envelope_size;
19664            }
19665
19666            let next_out_of_line = decoder.next_out_of_line();
19667            let handles_before = decoder.remaining_handles();
19668            if let Some((inlined, num_bytes, num_handles)) =
19669                fidl::encoding::decode_envelope_header(decoder, next_offset)?
19670            {
19671                let member_inline_size =
19672                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
19673                if inlined != (member_inline_size <= 4) {
19674                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
19675                }
19676                let inner_offset;
19677                let mut inner_depth = depth.clone();
19678                if inlined {
19679                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
19680                    inner_offset = next_offset;
19681                } else {
19682                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
19683                    inner_depth.increment()?;
19684                }
19685                let val_ref = self.slaac_valid.get_or_insert_with(|| fidl::new_empty!(bool, D));
19686                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
19687                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
19688                {
19689                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
19690                }
19691                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
19692                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
19693                }
19694            }
19695
19696            next_offset += envelope_size;
19697
19698            // Decode the remaining unknown envelopes.
19699            while next_offset < end_offset {
19700                _next_ordinal_to_read += 1;
19701                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
19702                next_offset += envelope_size;
19703            }
19704
19705            Ok(())
19706        }
19707    }
19708
19709    impl OperationalDataset {
19710        #[inline(always)]
19711        fn max_ordinal_present(&self) -> u64 {
19712            if let Some(_) = self.channel_mask {
19713                return 13;
19714            }
19715            if let Some(_) = self.security_policy {
19716                return 12;
19717            }
19718            if let Some(_) = self.pskc {
19719                return 11;
19720            }
19721            if let Some(_) = self.wakeup_channel {
19722                return 10;
19723            }
19724            if let Some(_) = self.channel {
19725                return 9;
19726            }
19727            if let Some(_) = self.pan_id {
19728                return 8;
19729            }
19730            if let Some(_) = self.delay {
19731                return 7;
19732            }
19733            if let Some(_) = self.mesh_local_prefix {
19734                return 6;
19735            }
19736            if let Some(_) = self.extended_pan_id {
19737                return 5;
19738            }
19739            if let Some(_) = self.network_name {
19740                return 4;
19741            }
19742            if let Some(_) = self.network_key {
19743                return 3;
19744            }
19745            if let Some(_) = self.pending_timestamp {
19746                return 2;
19747            }
19748            if let Some(_) = self.active_timestamp {
19749                return 1;
19750            }
19751            0
19752        }
19753    }
19754
19755    impl fidl::encoding::ValueTypeMarker for OperationalDataset {
19756        type Borrowed<'a> = &'a Self;
19757        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
19758            value
19759        }
19760    }
19761
19762    unsafe impl fidl::encoding::TypeMarker for OperationalDataset {
19763        type Owned = Self;
19764
19765        #[inline(always)]
19766        fn inline_align(_context: fidl::encoding::Context) -> usize {
19767            8
19768        }
19769
19770        #[inline(always)]
19771        fn inline_size(_context: fidl::encoding::Context) -> usize {
19772            16
19773        }
19774    }
19775
19776    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<OperationalDataset, D>
19777        for &OperationalDataset
19778    {
19779        unsafe fn encode(
19780            self,
19781            encoder: &mut fidl::encoding::Encoder<'_, D>,
19782            offset: usize,
19783            mut depth: fidl::encoding::Depth,
19784        ) -> fidl::Result<()> {
19785            encoder.debug_check_bounds::<OperationalDataset>(offset);
19786            // Vector header
19787            let max_ordinal: u64 = self.max_ordinal_present();
19788            encoder.write_num(max_ordinal, offset);
19789            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
19790            // Calling encoder.out_of_line_offset(0) is not allowed.
19791            if max_ordinal == 0 {
19792                return Ok(());
19793            }
19794            depth.increment()?;
19795            let envelope_size = 8;
19796            let bytes_len = max_ordinal as usize * envelope_size;
19797            #[allow(unused_variables)]
19798            let offset = encoder.out_of_line_offset(bytes_len);
19799            let mut _prev_end_offset: usize = 0;
19800            if 1 > max_ordinal {
19801                return Ok(());
19802            }
19803
19804            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
19805            // are envelope_size bytes.
19806            let cur_offset: usize = (1 - 1) * envelope_size;
19807
19808            // Zero reserved fields.
19809            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
19810
19811            // Safety:
19812            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
19813            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
19814            //   envelope_size bytes, there is always sufficient room.
19815            fidl::encoding::encode_in_envelope_optional::<i64, D>(
19816                self.active_timestamp
19817                    .as_ref()
19818                    .map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
19819                encoder,
19820                offset + cur_offset,
19821                depth,
19822            )?;
19823
19824            _prev_end_offset = cur_offset + envelope_size;
19825            if 2 > max_ordinal {
19826                return Ok(());
19827            }
19828
19829            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
19830            // are envelope_size bytes.
19831            let cur_offset: usize = (2 - 1) * envelope_size;
19832
19833            // Zero reserved fields.
19834            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
19835
19836            // Safety:
19837            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
19838            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
19839            //   envelope_size bytes, there is always sufficient room.
19840            fidl::encoding::encode_in_envelope_optional::<i64, D>(
19841                self.pending_timestamp
19842                    .as_ref()
19843                    .map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
19844                encoder,
19845                offset + cur_offset,
19846                depth,
19847            )?;
19848
19849            _prev_end_offset = cur_offset + envelope_size;
19850            if 3 > max_ordinal {
19851                return Ok(());
19852            }
19853
19854            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
19855            // are envelope_size bytes.
19856            let cur_offset: usize = (3 - 1) * envelope_size;
19857
19858            // Zero reserved fields.
19859            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
19860
19861            // Safety:
19862            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
19863            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
19864            //   envelope_size bytes, there is always sufficient room.
19865            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u8, 16>, D>(
19866                self.network_key.as_ref().map(
19867                    <fidl::encoding::Vector<u8, 16> as fidl::encoding::ValueTypeMarker>::borrow,
19868                ),
19869                encoder,
19870                offset + cur_offset,
19871                depth,
19872            )?;
19873
19874            _prev_end_offset = cur_offset + envelope_size;
19875            if 4 > max_ordinal {
19876                return Ok(());
19877            }
19878
19879            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
19880            // are envelope_size bytes.
19881            let cur_offset: usize = (4 - 1) * envelope_size;
19882
19883            // Zero reserved fields.
19884            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
19885
19886            // Safety:
19887            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
19888            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
19889            //   envelope_size bytes, there is always sufficient room.
19890            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u8, 17>, D>(
19891                self.network_name.as_ref().map(
19892                    <fidl::encoding::Vector<u8, 17> as fidl::encoding::ValueTypeMarker>::borrow,
19893                ),
19894                encoder,
19895                offset + cur_offset,
19896                depth,
19897            )?;
19898
19899            _prev_end_offset = cur_offset + envelope_size;
19900            if 5 > max_ordinal {
19901                return Ok(());
19902            }
19903
19904            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
19905            // are envelope_size bytes.
19906            let cur_offset: usize = (5 - 1) * envelope_size;
19907
19908            // Zero reserved fields.
19909            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
19910
19911            // Safety:
19912            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
19913            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
19914            //   envelope_size bytes, there is always sufficient room.
19915            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u8, 8>, D>(
19916                self.extended_pan_id.as_ref().map(
19917                    <fidl::encoding::Vector<u8, 8> as fidl::encoding::ValueTypeMarker>::borrow,
19918                ),
19919                encoder,
19920                offset + cur_offset,
19921                depth,
19922            )?;
19923
19924            _prev_end_offset = cur_offset + envelope_size;
19925            if 6 > max_ordinal {
19926                return Ok(());
19927            }
19928
19929            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
19930            // are envelope_size bytes.
19931            let cur_offset: usize = (6 - 1) * envelope_size;
19932
19933            // Zero reserved fields.
19934            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
19935
19936            // Safety:
19937            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
19938            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
19939            //   envelope_size bytes, there is always sufficient room.
19940            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u8, 8>, D>(
19941                self.mesh_local_prefix.as_ref().map(
19942                    <fidl::encoding::Vector<u8, 8> as fidl::encoding::ValueTypeMarker>::borrow,
19943                ),
19944                encoder,
19945                offset + cur_offset,
19946                depth,
19947            )?;
19948
19949            _prev_end_offset = cur_offset + envelope_size;
19950            if 7 > max_ordinal {
19951                return Ok(());
19952            }
19953
19954            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
19955            // are envelope_size bytes.
19956            let cur_offset: usize = (7 - 1) * envelope_size;
19957
19958            // Zero reserved fields.
19959            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
19960
19961            // Safety:
19962            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
19963            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
19964            //   envelope_size bytes, there is always sufficient room.
19965            fidl::encoding::encode_in_envelope_optional::<u32, D>(
19966                self.delay.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
19967                encoder,
19968                offset + cur_offset,
19969                depth,
19970            )?;
19971
19972            _prev_end_offset = cur_offset + envelope_size;
19973            if 8 > max_ordinal {
19974                return Ok(());
19975            }
19976
19977            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
19978            // are envelope_size bytes.
19979            let cur_offset: usize = (8 - 1) * envelope_size;
19980
19981            // Zero reserved fields.
19982            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
19983
19984            // Safety:
19985            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
19986            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
19987            //   envelope_size bytes, there is always sufficient room.
19988            fidl::encoding::encode_in_envelope_optional::<u16, D>(
19989                self.pan_id.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
19990                encoder,
19991                offset + cur_offset,
19992                depth,
19993            )?;
19994
19995            _prev_end_offset = cur_offset + envelope_size;
19996            if 9 > max_ordinal {
19997                return Ok(());
19998            }
19999
20000            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
20001            // are envelope_size bytes.
20002            let cur_offset: usize = (9 - 1) * envelope_size;
20003
20004            // Zero reserved fields.
20005            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
20006
20007            // Safety:
20008            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
20009            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
20010            //   envelope_size bytes, there is always sufficient room.
20011            fidl::encoding::encode_in_envelope_optional::<u16, D>(
20012                self.channel.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
20013                encoder,
20014                offset + cur_offset,
20015                depth,
20016            )?;
20017
20018            _prev_end_offset = cur_offset + envelope_size;
20019            if 10 > max_ordinal {
20020                return Ok(());
20021            }
20022
20023            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
20024            // are envelope_size bytes.
20025            let cur_offset: usize = (10 - 1) * envelope_size;
20026
20027            // Zero reserved fields.
20028            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
20029
20030            // Safety:
20031            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
20032            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
20033            //   envelope_size bytes, there is always sufficient room.
20034            fidl::encoding::encode_in_envelope_optional::<u16, D>(
20035                self.wakeup_channel.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
20036                encoder,
20037                offset + cur_offset,
20038                depth,
20039            )?;
20040
20041            _prev_end_offset = cur_offset + envelope_size;
20042            if 11 > max_ordinal {
20043                return Ok(());
20044            }
20045
20046            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
20047            // are envelope_size bytes.
20048            let cur_offset: usize = (11 - 1) * envelope_size;
20049
20050            // Zero reserved fields.
20051            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
20052
20053            // Safety:
20054            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
20055            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
20056            //   envelope_size bytes, there is always sufficient room.
20057            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u8, 16>, D>(
20058                self.pskc.as_ref().map(
20059                    <fidl::encoding::Vector<u8, 16> as fidl::encoding::ValueTypeMarker>::borrow,
20060                ),
20061                encoder,
20062                offset + cur_offset,
20063                depth,
20064            )?;
20065
20066            _prev_end_offset = cur_offset + envelope_size;
20067            if 12 > max_ordinal {
20068                return Ok(());
20069            }
20070
20071            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
20072            // are envelope_size bytes.
20073            let cur_offset: usize = (12 - 1) * envelope_size;
20074
20075            // Zero reserved fields.
20076            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
20077
20078            // Safety:
20079            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
20080            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
20081            //   envelope_size bytes, there is always sufficient room.
20082            fidl::encoding::encode_in_envelope_optional::<SecurityPolicy, D>(
20083                self.security_policy
20084                    .as_ref()
20085                    .map(<SecurityPolicy as fidl::encoding::ValueTypeMarker>::borrow),
20086                encoder,
20087                offset + cur_offset,
20088                depth,
20089            )?;
20090
20091            _prev_end_offset = cur_offset + envelope_size;
20092            if 13 > max_ordinal {
20093                return Ok(());
20094            }
20095
20096            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
20097            // are envelope_size bytes.
20098            let cur_offset: usize = (13 - 1) * envelope_size;
20099
20100            // Zero reserved fields.
20101            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
20102
20103            // Safety:
20104            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
20105            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
20106            //   envelope_size bytes, there is always sufficient room.
20107            fidl::encoding::encode_in_envelope_optional::<u32, D>(
20108                self.channel_mask.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
20109                encoder,
20110                offset + cur_offset,
20111                depth,
20112            )?;
20113
20114            _prev_end_offset = cur_offset + envelope_size;
20115
20116            Ok(())
20117        }
20118    }
20119
20120    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for OperationalDataset {
20121        #[inline(always)]
20122        fn new_empty() -> Self {
20123            Self::default()
20124        }
20125
20126        unsafe fn decode(
20127            &mut self,
20128            decoder: &mut fidl::encoding::Decoder<'_, D>,
20129            offset: usize,
20130            mut depth: fidl::encoding::Depth,
20131        ) -> fidl::Result<()> {
20132            decoder.debug_check_bounds::<Self>(offset);
20133            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
20134                None => return Err(fidl::Error::NotNullable),
20135                Some(len) => len,
20136            };
20137            // Calling decoder.out_of_line_offset(0) is not allowed.
20138            if len == 0 {
20139                return Ok(());
20140            };
20141            depth.increment()?;
20142            let envelope_size = 8;
20143            let bytes_len = len * envelope_size;
20144            let offset = decoder.out_of_line_offset(bytes_len)?;
20145            // Decode the envelope for each type.
20146            let mut _next_ordinal_to_read = 0;
20147            let mut next_offset = offset;
20148            let end_offset = offset + bytes_len;
20149            _next_ordinal_to_read += 1;
20150            if next_offset >= end_offset {
20151                return Ok(());
20152            }
20153
20154            // Decode unknown envelopes for gaps in ordinals.
20155            while _next_ordinal_to_read < 1 {
20156                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
20157                _next_ordinal_to_read += 1;
20158                next_offset += envelope_size;
20159            }
20160
20161            let next_out_of_line = decoder.next_out_of_line();
20162            let handles_before = decoder.remaining_handles();
20163            if let Some((inlined, num_bytes, num_handles)) =
20164                fidl::encoding::decode_envelope_header(decoder, next_offset)?
20165            {
20166                let member_inline_size =
20167                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
20168                if inlined != (member_inline_size <= 4) {
20169                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
20170                }
20171                let inner_offset;
20172                let mut inner_depth = depth.clone();
20173                if inlined {
20174                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
20175                    inner_offset = next_offset;
20176                } else {
20177                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
20178                    inner_depth.increment()?;
20179                }
20180                let val_ref = self.active_timestamp.get_or_insert_with(|| fidl::new_empty!(i64, D));
20181                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
20182                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
20183                {
20184                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
20185                }
20186                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
20187                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
20188                }
20189            }
20190
20191            next_offset += envelope_size;
20192            _next_ordinal_to_read += 1;
20193            if next_offset >= end_offset {
20194                return Ok(());
20195            }
20196
20197            // Decode unknown envelopes for gaps in ordinals.
20198            while _next_ordinal_to_read < 2 {
20199                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
20200                _next_ordinal_to_read += 1;
20201                next_offset += envelope_size;
20202            }
20203
20204            let next_out_of_line = decoder.next_out_of_line();
20205            let handles_before = decoder.remaining_handles();
20206            if let Some((inlined, num_bytes, num_handles)) =
20207                fidl::encoding::decode_envelope_header(decoder, next_offset)?
20208            {
20209                let member_inline_size =
20210                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
20211                if inlined != (member_inline_size <= 4) {
20212                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
20213                }
20214                let inner_offset;
20215                let mut inner_depth = depth.clone();
20216                if inlined {
20217                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
20218                    inner_offset = next_offset;
20219                } else {
20220                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
20221                    inner_depth.increment()?;
20222                }
20223                let val_ref =
20224                    self.pending_timestamp.get_or_insert_with(|| fidl::new_empty!(i64, D));
20225                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
20226                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
20227                {
20228                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
20229                }
20230                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
20231                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
20232                }
20233            }
20234
20235            next_offset += envelope_size;
20236            _next_ordinal_to_read += 1;
20237            if next_offset >= end_offset {
20238                return Ok(());
20239            }
20240
20241            // Decode unknown envelopes for gaps in ordinals.
20242            while _next_ordinal_to_read < 3 {
20243                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
20244                _next_ordinal_to_read += 1;
20245                next_offset += envelope_size;
20246            }
20247
20248            let next_out_of_line = decoder.next_out_of_line();
20249            let handles_before = decoder.remaining_handles();
20250            if let Some((inlined, num_bytes, num_handles)) =
20251                fidl::encoding::decode_envelope_header(decoder, next_offset)?
20252            {
20253                let member_inline_size =
20254                    <fidl::encoding::Vector<u8, 16> as fidl::encoding::TypeMarker>::inline_size(
20255                        decoder.context,
20256                    );
20257                if inlined != (member_inline_size <= 4) {
20258                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
20259                }
20260                let inner_offset;
20261                let mut inner_depth = depth.clone();
20262                if inlined {
20263                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
20264                    inner_offset = next_offset;
20265                } else {
20266                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
20267                    inner_depth.increment()?;
20268                }
20269                let val_ref = self
20270                    .network_key
20271                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u8, 16>, D));
20272                fidl::decode!(fidl::encoding::Vector<u8, 16>, D, val_ref, decoder, inner_offset, inner_depth)?;
20273                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
20274                {
20275                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
20276                }
20277                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
20278                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
20279                }
20280            }
20281
20282            next_offset += envelope_size;
20283            _next_ordinal_to_read += 1;
20284            if next_offset >= end_offset {
20285                return Ok(());
20286            }
20287
20288            // Decode unknown envelopes for gaps in ordinals.
20289            while _next_ordinal_to_read < 4 {
20290                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
20291                _next_ordinal_to_read += 1;
20292                next_offset += envelope_size;
20293            }
20294
20295            let next_out_of_line = decoder.next_out_of_line();
20296            let handles_before = decoder.remaining_handles();
20297            if let Some((inlined, num_bytes, num_handles)) =
20298                fidl::encoding::decode_envelope_header(decoder, next_offset)?
20299            {
20300                let member_inline_size =
20301                    <fidl::encoding::Vector<u8, 17> as fidl::encoding::TypeMarker>::inline_size(
20302                        decoder.context,
20303                    );
20304                if inlined != (member_inline_size <= 4) {
20305                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
20306                }
20307                let inner_offset;
20308                let mut inner_depth = depth.clone();
20309                if inlined {
20310                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
20311                    inner_offset = next_offset;
20312                } else {
20313                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
20314                    inner_depth.increment()?;
20315                }
20316                let val_ref = self
20317                    .network_name
20318                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u8, 17>, D));
20319                fidl::decode!(fidl::encoding::Vector<u8, 17>, D, val_ref, decoder, inner_offset, inner_depth)?;
20320                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
20321                {
20322                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
20323                }
20324                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
20325                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
20326                }
20327            }
20328
20329            next_offset += envelope_size;
20330            _next_ordinal_to_read += 1;
20331            if next_offset >= end_offset {
20332                return Ok(());
20333            }
20334
20335            // Decode unknown envelopes for gaps in ordinals.
20336            while _next_ordinal_to_read < 5 {
20337                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
20338                _next_ordinal_to_read += 1;
20339                next_offset += envelope_size;
20340            }
20341
20342            let next_out_of_line = decoder.next_out_of_line();
20343            let handles_before = decoder.remaining_handles();
20344            if let Some((inlined, num_bytes, num_handles)) =
20345                fidl::encoding::decode_envelope_header(decoder, next_offset)?
20346            {
20347                let member_inline_size =
20348                    <fidl::encoding::Vector<u8, 8> as fidl::encoding::TypeMarker>::inline_size(
20349                        decoder.context,
20350                    );
20351                if inlined != (member_inline_size <= 4) {
20352                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
20353                }
20354                let inner_offset;
20355                let mut inner_depth = depth.clone();
20356                if inlined {
20357                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
20358                    inner_offset = next_offset;
20359                } else {
20360                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
20361                    inner_depth.increment()?;
20362                }
20363                let val_ref = self
20364                    .extended_pan_id
20365                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u8, 8>, D));
20366                fidl::decode!(fidl::encoding::Vector<u8, 8>, D, val_ref, decoder, inner_offset, inner_depth)?;
20367                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
20368                {
20369                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
20370                }
20371                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
20372                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
20373                }
20374            }
20375
20376            next_offset += envelope_size;
20377            _next_ordinal_to_read += 1;
20378            if next_offset >= end_offset {
20379                return Ok(());
20380            }
20381
20382            // Decode unknown envelopes for gaps in ordinals.
20383            while _next_ordinal_to_read < 6 {
20384                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
20385                _next_ordinal_to_read += 1;
20386                next_offset += envelope_size;
20387            }
20388
20389            let next_out_of_line = decoder.next_out_of_line();
20390            let handles_before = decoder.remaining_handles();
20391            if let Some((inlined, num_bytes, num_handles)) =
20392                fidl::encoding::decode_envelope_header(decoder, next_offset)?
20393            {
20394                let member_inline_size =
20395                    <fidl::encoding::Vector<u8, 8> as fidl::encoding::TypeMarker>::inline_size(
20396                        decoder.context,
20397                    );
20398                if inlined != (member_inline_size <= 4) {
20399                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
20400                }
20401                let inner_offset;
20402                let mut inner_depth = depth.clone();
20403                if inlined {
20404                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
20405                    inner_offset = next_offset;
20406                } else {
20407                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
20408                    inner_depth.increment()?;
20409                }
20410                let val_ref = self
20411                    .mesh_local_prefix
20412                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u8, 8>, D));
20413                fidl::decode!(fidl::encoding::Vector<u8, 8>, D, val_ref, decoder, inner_offset, inner_depth)?;
20414                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
20415                {
20416                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
20417                }
20418                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
20419                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
20420                }
20421            }
20422
20423            next_offset += envelope_size;
20424            _next_ordinal_to_read += 1;
20425            if next_offset >= end_offset {
20426                return Ok(());
20427            }
20428
20429            // Decode unknown envelopes for gaps in ordinals.
20430            while _next_ordinal_to_read < 7 {
20431                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
20432                _next_ordinal_to_read += 1;
20433                next_offset += envelope_size;
20434            }
20435
20436            let next_out_of_line = decoder.next_out_of_line();
20437            let handles_before = decoder.remaining_handles();
20438            if let Some((inlined, num_bytes, num_handles)) =
20439                fidl::encoding::decode_envelope_header(decoder, next_offset)?
20440            {
20441                let member_inline_size =
20442                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
20443                if inlined != (member_inline_size <= 4) {
20444                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
20445                }
20446                let inner_offset;
20447                let mut inner_depth = depth.clone();
20448                if inlined {
20449                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
20450                    inner_offset = next_offset;
20451                } else {
20452                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
20453                    inner_depth.increment()?;
20454                }
20455                let val_ref = self.delay.get_or_insert_with(|| fidl::new_empty!(u32, D));
20456                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
20457                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
20458                {
20459                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
20460                }
20461                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
20462                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
20463                }
20464            }
20465
20466            next_offset += envelope_size;
20467            _next_ordinal_to_read += 1;
20468            if next_offset >= end_offset {
20469                return Ok(());
20470            }
20471
20472            // Decode unknown envelopes for gaps in ordinals.
20473            while _next_ordinal_to_read < 8 {
20474                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
20475                _next_ordinal_to_read += 1;
20476                next_offset += envelope_size;
20477            }
20478
20479            let next_out_of_line = decoder.next_out_of_line();
20480            let handles_before = decoder.remaining_handles();
20481            if let Some((inlined, num_bytes, num_handles)) =
20482                fidl::encoding::decode_envelope_header(decoder, next_offset)?
20483            {
20484                let member_inline_size =
20485                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
20486                if inlined != (member_inline_size <= 4) {
20487                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
20488                }
20489                let inner_offset;
20490                let mut inner_depth = depth.clone();
20491                if inlined {
20492                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
20493                    inner_offset = next_offset;
20494                } else {
20495                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
20496                    inner_depth.increment()?;
20497                }
20498                let val_ref = self.pan_id.get_or_insert_with(|| fidl::new_empty!(u16, D));
20499                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
20500                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
20501                {
20502                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
20503                }
20504                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
20505                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
20506                }
20507            }
20508
20509            next_offset += envelope_size;
20510            _next_ordinal_to_read += 1;
20511            if next_offset >= end_offset {
20512                return Ok(());
20513            }
20514
20515            // Decode unknown envelopes for gaps in ordinals.
20516            while _next_ordinal_to_read < 9 {
20517                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
20518                _next_ordinal_to_read += 1;
20519                next_offset += envelope_size;
20520            }
20521
20522            let next_out_of_line = decoder.next_out_of_line();
20523            let handles_before = decoder.remaining_handles();
20524            if let Some((inlined, num_bytes, num_handles)) =
20525                fidl::encoding::decode_envelope_header(decoder, next_offset)?
20526            {
20527                let member_inline_size =
20528                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
20529                if inlined != (member_inline_size <= 4) {
20530                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
20531                }
20532                let inner_offset;
20533                let mut inner_depth = depth.clone();
20534                if inlined {
20535                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
20536                    inner_offset = next_offset;
20537                } else {
20538                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
20539                    inner_depth.increment()?;
20540                }
20541                let val_ref = self.channel.get_or_insert_with(|| fidl::new_empty!(u16, D));
20542                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
20543                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
20544                {
20545                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
20546                }
20547                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
20548                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
20549                }
20550            }
20551
20552            next_offset += envelope_size;
20553            _next_ordinal_to_read += 1;
20554            if next_offset >= end_offset {
20555                return Ok(());
20556            }
20557
20558            // Decode unknown envelopes for gaps in ordinals.
20559            while _next_ordinal_to_read < 10 {
20560                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
20561                _next_ordinal_to_read += 1;
20562                next_offset += envelope_size;
20563            }
20564
20565            let next_out_of_line = decoder.next_out_of_line();
20566            let handles_before = decoder.remaining_handles();
20567            if let Some((inlined, num_bytes, num_handles)) =
20568                fidl::encoding::decode_envelope_header(decoder, next_offset)?
20569            {
20570                let member_inline_size =
20571                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
20572                if inlined != (member_inline_size <= 4) {
20573                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
20574                }
20575                let inner_offset;
20576                let mut inner_depth = depth.clone();
20577                if inlined {
20578                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
20579                    inner_offset = next_offset;
20580                } else {
20581                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
20582                    inner_depth.increment()?;
20583                }
20584                let val_ref = self.wakeup_channel.get_or_insert_with(|| fidl::new_empty!(u16, D));
20585                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
20586                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
20587                {
20588                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
20589                }
20590                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
20591                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
20592                }
20593            }
20594
20595            next_offset += envelope_size;
20596            _next_ordinal_to_read += 1;
20597            if next_offset >= end_offset {
20598                return Ok(());
20599            }
20600
20601            // Decode unknown envelopes for gaps in ordinals.
20602            while _next_ordinal_to_read < 11 {
20603                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
20604                _next_ordinal_to_read += 1;
20605                next_offset += envelope_size;
20606            }
20607
20608            let next_out_of_line = decoder.next_out_of_line();
20609            let handles_before = decoder.remaining_handles();
20610            if let Some((inlined, num_bytes, num_handles)) =
20611                fidl::encoding::decode_envelope_header(decoder, next_offset)?
20612            {
20613                let member_inline_size =
20614                    <fidl::encoding::Vector<u8, 16> as fidl::encoding::TypeMarker>::inline_size(
20615                        decoder.context,
20616                    );
20617                if inlined != (member_inline_size <= 4) {
20618                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
20619                }
20620                let inner_offset;
20621                let mut inner_depth = depth.clone();
20622                if inlined {
20623                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
20624                    inner_offset = next_offset;
20625                } else {
20626                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
20627                    inner_depth.increment()?;
20628                }
20629                let val_ref = self
20630                    .pskc
20631                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u8, 16>, D));
20632                fidl::decode!(fidl::encoding::Vector<u8, 16>, D, val_ref, decoder, inner_offset, inner_depth)?;
20633                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
20634                {
20635                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
20636                }
20637                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
20638                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
20639                }
20640            }
20641
20642            next_offset += envelope_size;
20643            _next_ordinal_to_read += 1;
20644            if next_offset >= end_offset {
20645                return Ok(());
20646            }
20647
20648            // Decode unknown envelopes for gaps in ordinals.
20649            while _next_ordinal_to_read < 12 {
20650                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
20651                _next_ordinal_to_read += 1;
20652                next_offset += envelope_size;
20653            }
20654
20655            let next_out_of_line = decoder.next_out_of_line();
20656            let handles_before = decoder.remaining_handles();
20657            if let Some((inlined, num_bytes, num_handles)) =
20658                fidl::encoding::decode_envelope_header(decoder, next_offset)?
20659            {
20660                let member_inline_size =
20661                    <SecurityPolicy as fidl::encoding::TypeMarker>::inline_size(decoder.context);
20662                if inlined != (member_inline_size <= 4) {
20663                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
20664                }
20665                let inner_offset;
20666                let mut inner_depth = depth.clone();
20667                if inlined {
20668                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
20669                    inner_offset = next_offset;
20670                } else {
20671                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
20672                    inner_depth.increment()?;
20673                }
20674                let val_ref =
20675                    self.security_policy.get_or_insert_with(|| fidl::new_empty!(SecurityPolicy, D));
20676                fidl::decode!(SecurityPolicy, D, val_ref, decoder, inner_offset, inner_depth)?;
20677                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
20678                {
20679                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
20680                }
20681                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
20682                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
20683                }
20684            }
20685
20686            next_offset += envelope_size;
20687            _next_ordinal_to_read += 1;
20688            if next_offset >= end_offset {
20689                return Ok(());
20690            }
20691
20692            // Decode unknown envelopes for gaps in ordinals.
20693            while _next_ordinal_to_read < 13 {
20694                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
20695                _next_ordinal_to_read += 1;
20696                next_offset += envelope_size;
20697            }
20698
20699            let next_out_of_line = decoder.next_out_of_line();
20700            let handles_before = decoder.remaining_handles();
20701            if let Some((inlined, num_bytes, num_handles)) =
20702                fidl::encoding::decode_envelope_header(decoder, next_offset)?
20703            {
20704                let member_inline_size =
20705                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
20706                if inlined != (member_inline_size <= 4) {
20707                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
20708                }
20709                let inner_offset;
20710                let mut inner_depth = depth.clone();
20711                if inlined {
20712                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
20713                    inner_offset = next_offset;
20714                } else {
20715                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
20716                    inner_depth.increment()?;
20717                }
20718                let val_ref = self.channel_mask.get_or_insert_with(|| fidl::new_empty!(u32, D));
20719                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
20720                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
20721                {
20722                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
20723                }
20724                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
20725                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
20726                }
20727            }
20728
20729            next_offset += envelope_size;
20730
20731            // Decode the remaining unknown envelopes.
20732            while next_offset < end_offset {
20733                _next_ordinal_to_read += 1;
20734                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
20735                next_offset += envelope_size;
20736            }
20737
20738            Ok(())
20739        }
20740    }
20741
20742    impl PdProcessedRaInfo {
20743        #[inline(always)]
20744        fn max_ordinal_present(&self) -> u64 {
20745            if let Some(_) = self.last_platform_ra_msec {
20746                return 3;
20747            }
20748            if let Some(_) = self.num_platform_pio_processed {
20749                return 2;
20750            }
20751            if let Some(_) = self.num_platform_ra_received {
20752                return 1;
20753            }
20754            0
20755        }
20756    }
20757
20758    impl fidl::encoding::ValueTypeMarker for PdProcessedRaInfo {
20759        type Borrowed<'a> = &'a Self;
20760        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
20761            value
20762        }
20763    }
20764
20765    unsafe impl fidl::encoding::TypeMarker for PdProcessedRaInfo {
20766        type Owned = Self;
20767
20768        #[inline(always)]
20769        fn inline_align(_context: fidl::encoding::Context) -> usize {
20770            8
20771        }
20772
20773        #[inline(always)]
20774        fn inline_size(_context: fidl::encoding::Context) -> usize {
20775            16
20776        }
20777    }
20778
20779    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<PdProcessedRaInfo, D>
20780        for &PdProcessedRaInfo
20781    {
20782        unsafe fn encode(
20783            self,
20784            encoder: &mut fidl::encoding::Encoder<'_, D>,
20785            offset: usize,
20786            mut depth: fidl::encoding::Depth,
20787        ) -> fidl::Result<()> {
20788            encoder.debug_check_bounds::<PdProcessedRaInfo>(offset);
20789            // Vector header
20790            let max_ordinal: u64 = self.max_ordinal_present();
20791            encoder.write_num(max_ordinal, offset);
20792            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
20793            // Calling encoder.out_of_line_offset(0) is not allowed.
20794            if max_ordinal == 0 {
20795                return Ok(());
20796            }
20797            depth.increment()?;
20798            let envelope_size = 8;
20799            let bytes_len = max_ordinal as usize * envelope_size;
20800            #[allow(unused_variables)]
20801            let offset = encoder.out_of_line_offset(bytes_len);
20802            let mut _prev_end_offset: usize = 0;
20803            if 1 > max_ordinal {
20804                return Ok(());
20805            }
20806
20807            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
20808            // are envelope_size bytes.
20809            let cur_offset: usize = (1 - 1) * envelope_size;
20810
20811            // Zero reserved fields.
20812            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
20813
20814            // Safety:
20815            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
20816            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
20817            //   envelope_size bytes, there is always sufficient room.
20818            fidl::encoding::encode_in_envelope_optional::<u32, D>(
20819                self.num_platform_ra_received
20820                    .as_ref()
20821                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
20822                encoder,
20823                offset + cur_offset,
20824                depth,
20825            )?;
20826
20827            _prev_end_offset = cur_offset + envelope_size;
20828            if 2 > max_ordinal {
20829                return Ok(());
20830            }
20831
20832            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
20833            // are envelope_size bytes.
20834            let cur_offset: usize = (2 - 1) * envelope_size;
20835
20836            // Zero reserved fields.
20837            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
20838
20839            // Safety:
20840            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
20841            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
20842            //   envelope_size bytes, there is always sufficient room.
20843            fidl::encoding::encode_in_envelope_optional::<u32, D>(
20844                self.num_platform_pio_processed
20845                    .as_ref()
20846                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
20847                encoder,
20848                offset + cur_offset,
20849                depth,
20850            )?;
20851
20852            _prev_end_offset = cur_offset + envelope_size;
20853            if 3 > max_ordinal {
20854                return Ok(());
20855            }
20856
20857            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
20858            // are envelope_size bytes.
20859            let cur_offset: usize = (3 - 1) * envelope_size;
20860
20861            // Zero reserved fields.
20862            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
20863
20864            // Safety:
20865            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
20866            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
20867            //   envelope_size bytes, there is always sufficient room.
20868            fidl::encoding::encode_in_envelope_optional::<u32, D>(
20869                self.last_platform_ra_msec
20870                    .as_ref()
20871                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
20872                encoder,
20873                offset + cur_offset,
20874                depth,
20875            )?;
20876
20877            _prev_end_offset = cur_offset + envelope_size;
20878
20879            Ok(())
20880        }
20881    }
20882
20883    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for PdProcessedRaInfo {
20884        #[inline(always)]
20885        fn new_empty() -> Self {
20886            Self::default()
20887        }
20888
20889        unsafe fn decode(
20890            &mut self,
20891            decoder: &mut fidl::encoding::Decoder<'_, D>,
20892            offset: usize,
20893            mut depth: fidl::encoding::Depth,
20894        ) -> fidl::Result<()> {
20895            decoder.debug_check_bounds::<Self>(offset);
20896            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
20897                None => return Err(fidl::Error::NotNullable),
20898                Some(len) => len,
20899            };
20900            // Calling decoder.out_of_line_offset(0) is not allowed.
20901            if len == 0 {
20902                return Ok(());
20903            };
20904            depth.increment()?;
20905            let envelope_size = 8;
20906            let bytes_len = len * envelope_size;
20907            let offset = decoder.out_of_line_offset(bytes_len)?;
20908            // Decode the envelope for each type.
20909            let mut _next_ordinal_to_read = 0;
20910            let mut next_offset = offset;
20911            let end_offset = offset + bytes_len;
20912            _next_ordinal_to_read += 1;
20913            if next_offset >= end_offset {
20914                return Ok(());
20915            }
20916
20917            // Decode unknown envelopes for gaps in ordinals.
20918            while _next_ordinal_to_read < 1 {
20919                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
20920                _next_ordinal_to_read += 1;
20921                next_offset += envelope_size;
20922            }
20923
20924            let next_out_of_line = decoder.next_out_of_line();
20925            let handles_before = decoder.remaining_handles();
20926            if let Some((inlined, num_bytes, num_handles)) =
20927                fidl::encoding::decode_envelope_header(decoder, next_offset)?
20928            {
20929                let member_inline_size =
20930                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
20931                if inlined != (member_inline_size <= 4) {
20932                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
20933                }
20934                let inner_offset;
20935                let mut inner_depth = depth.clone();
20936                if inlined {
20937                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
20938                    inner_offset = next_offset;
20939                } else {
20940                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
20941                    inner_depth.increment()?;
20942                }
20943                let val_ref =
20944                    self.num_platform_ra_received.get_or_insert_with(|| fidl::new_empty!(u32, D));
20945                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
20946                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
20947                {
20948                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
20949                }
20950                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
20951                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
20952                }
20953            }
20954
20955            next_offset += envelope_size;
20956            _next_ordinal_to_read += 1;
20957            if next_offset >= end_offset {
20958                return Ok(());
20959            }
20960
20961            // Decode unknown envelopes for gaps in ordinals.
20962            while _next_ordinal_to_read < 2 {
20963                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
20964                _next_ordinal_to_read += 1;
20965                next_offset += envelope_size;
20966            }
20967
20968            let next_out_of_line = decoder.next_out_of_line();
20969            let handles_before = decoder.remaining_handles();
20970            if let Some((inlined, num_bytes, num_handles)) =
20971                fidl::encoding::decode_envelope_header(decoder, next_offset)?
20972            {
20973                let member_inline_size =
20974                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
20975                if inlined != (member_inline_size <= 4) {
20976                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
20977                }
20978                let inner_offset;
20979                let mut inner_depth = depth.clone();
20980                if inlined {
20981                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
20982                    inner_offset = next_offset;
20983                } else {
20984                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
20985                    inner_depth.increment()?;
20986                }
20987                let val_ref =
20988                    self.num_platform_pio_processed.get_or_insert_with(|| fidl::new_empty!(u32, D));
20989                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
20990                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
20991                {
20992                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
20993                }
20994                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
20995                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
20996                }
20997            }
20998
20999            next_offset += envelope_size;
21000            _next_ordinal_to_read += 1;
21001            if next_offset >= end_offset {
21002                return Ok(());
21003            }
21004
21005            // Decode unknown envelopes for gaps in ordinals.
21006            while _next_ordinal_to_read < 3 {
21007                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
21008                _next_ordinal_to_read += 1;
21009                next_offset += envelope_size;
21010            }
21011
21012            let next_out_of_line = decoder.next_out_of_line();
21013            let handles_before = decoder.remaining_handles();
21014            if let Some((inlined, num_bytes, num_handles)) =
21015                fidl::encoding::decode_envelope_header(decoder, next_offset)?
21016            {
21017                let member_inline_size =
21018                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
21019                if inlined != (member_inline_size <= 4) {
21020                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
21021                }
21022                let inner_offset;
21023                let mut inner_depth = depth.clone();
21024                if inlined {
21025                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
21026                    inner_offset = next_offset;
21027                } else {
21028                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
21029                    inner_depth.increment()?;
21030                }
21031                let val_ref =
21032                    self.last_platform_ra_msec.get_or_insert_with(|| fidl::new_empty!(u32, D));
21033                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
21034                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
21035                {
21036                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
21037                }
21038                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
21039                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
21040                }
21041            }
21042
21043            next_offset += envelope_size;
21044
21045            // Decode the remaining unknown envelopes.
21046            while next_offset < end_offset {
21047                _next_ordinal_to_read += 1;
21048                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
21049                next_offset += envelope_size;
21050            }
21051
21052            Ok(())
21053        }
21054    }
21055
21056    impl RadioLinkInfo {
21057        #[inline(always)]
21058        fn max_ordinal_present(&self) -> u64 {
21059            if let Some(_) = self.preference {
21060                return 2;
21061            }
21062            if let Some(_) = self.link_type {
21063                return 1;
21064            }
21065            0
21066        }
21067    }
21068
21069    impl fidl::encoding::ValueTypeMarker for RadioLinkInfo {
21070        type Borrowed<'a> = &'a Self;
21071        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
21072            value
21073        }
21074    }
21075
21076    unsafe impl fidl::encoding::TypeMarker for RadioLinkInfo {
21077        type Owned = Self;
21078
21079        #[inline(always)]
21080        fn inline_align(_context: fidl::encoding::Context) -> usize {
21081            8
21082        }
21083
21084        #[inline(always)]
21085        fn inline_size(_context: fidl::encoding::Context) -> usize {
21086            16
21087        }
21088    }
21089
21090    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<RadioLinkInfo, D>
21091        for &RadioLinkInfo
21092    {
21093        unsafe fn encode(
21094            self,
21095            encoder: &mut fidl::encoding::Encoder<'_, D>,
21096            offset: usize,
21097            mut depth: fidl::encoding::Depth,
21098        ) -> fidl::Result<()> {
21099            encoder.debug_check_bounds::<RadioLinkInfo>(offset);
21100            // Vector header
21101            let max_ordinal: u64 = self.max_ordinal_present();
21102            encoder.write_num(max_ordinal, offset);
21103            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
21104            // Calling encoder.out_of_line_offset(0) is not allowed.
21105            if max_ordinal == 0 {
21106                return Ok(());
21107            }
21108            depth.increment()?;
21109            let envelope_size = 8;
21110            let bytes_len = max_ordinal as usize * envelope_size;
21111            #[allow(unused_variables)]
21112            let offset = encoder.out_of_line_offset(bytes_len);
21113            let mut _prev_end_offset: usize = 0;
21114            if 1 > max_ordinal {
21115                return Ok(());
21116            }
21117
21118            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
21119            // are envelope_size bytes.
21120            let cur_offset: usize = (1 - 1) * envelope_size;
21121
21122            // Zero reserved fields.
21123            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
21124
21125            // Safety:
21126            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
21127            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
21128            //   envelope_size bytes, there is always sufficient room.
21129            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<10>, D>(
21130                self.link_type.as_ref().map(
21131                    <fidl::encoding::BoundedString<10> as fidl::encoding::ValueTypeMarker>::borrow,
21132                ),
21133                encoder,
21134                offset + cur_offset,
21135                depth,
21136            )?;
21137
21138            _prev_end_offset = cur_offset + envelope_size;
21139            if 2 > max_ordinal {
21140                return Ok(());
21141            }
21142
21143            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
21144            // are envelope_size bytes.
21145            let cur_offset: usize = (2 - 1) * envelope_size;
21146
21147            // Zero reserved fields.
21148            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
21149
21150            // Safety:
21151            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
21152            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
21153            //   envelope_size bytes, there is always sufficient room.
21154            fidl::encoding::encode_in_envelope_optional::<u8, D>(
21155                self.preference.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
21156                encoder,
21157                offset + cur_offset,
21158                depth,
21159            )?;
21160
21161            _prev_end_offset = cur_offset + envelope_size;
21162
21163            Ok(())
21164        }
21165    }
21166
21167    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for RadioLinkInfo {
21168        #[inline(always)]
21169        fn new_empty() -> Self {
21170            Self::default()
21171        }
21172
21173        unsafe fn decode(
21174            &mut self,
21175            decoder: &mut fidl::encoding::Decoder<'_, D>,
21176            offset: usize,
21177            mut depth: fidl::encoding::Depth,
21178        ) -> fidl::Result<()> {
21179            decoder.debug_check_bounds::<Self>(offset);
21180            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
21181                None => return Err(fidl::Error::NotNullable),
21182                Some(len) => len,
21183            };
21184            // Calling decoder.out_of_line_offset(0) is not allowed.
21185            if len == 0 {
21186                return Ok(());
21187            };
21188            depth.increment()?;
21189            let envelope_size = 8;
21190            let bytes_len = len * envelope_size;
21191            let offset = decoder.out_of_line_offset(bytes_len)?;
21192            // Decode the envelope for each type.
21193            let mut _next_ordinal_to_read = 0;
21194            let mut next_offset = offset;
21195            let end_offset = offset + bytes_len;
21196            _next_ordinal_to_read += 1;
21197            if next_offset >= end_offset {
21198                return Ok(());
21199            }
21200
21201            // Decode unknown envelopes for gaps in ordinals.
21202            while _next_ordinal_to_read < 1 {
21203                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
21204                _next_ordinal_to_read += 1;
21205                next_offset += envelope_size;
21206            }
21207
21208            let next_out_of_line = decoder.next_out_of_line();
21209            let handles_before = decoder.remaining_handles();
21210            if let Some((inlined, num_bytes, num_handles)) =
21211                fidl::encoding::decode_envelope_header(decoder, next_offset)?
21212            {
21213                let member_inline_size =
21214                    <fidl::encoding::BoundedString<10> as fidl::encoding::TypeMarker>::inline_size(
21215                        decoder.context,
21216                    );
21217                if inlined != (member_inline_size <= 4) {
21218                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
21219                }
21220                let inner_offset;
21221                let mut inner_depth = depth.clone();
21222                if inlined {
21223                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
21224                    inner_offset = next_offset;
21225                } else {
21226                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
21227                    inner_depth.increment()?;
21228                }
21229                let val_ref = self
21230                    .link_type
21231                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<10>, D));
21232                fidl::decode!(
21233                    fidl::encoding::BoundedString<10>,
21234                    D,
21235                    val_ref,
21236                    decoder,
21237                    inner_offset,
21238                    inner_depth
21239                )?;
21240                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
21241                {
21242                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
21243                }
21244                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
21245                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
21246                }
21247            }
21248
21249            next_offset += envelope_size;
21250            _next_ordinal_to_read += 1;
21251            if next_offset >= end_offset {
21252                return Ok(());
21253            }
21254
21255            // Decode unknown envelopes for gaps in ordinals.
21256            while _next_ordinal_to_read < 2 {
21257                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
21258                _next_ordinal_to_read += 1;
21259                next_offset += envelope_size;
21260            }
21261
21262            let next_out_of_line = decoder.next_out_of_line();
21263            let handles_before = decoder.remaining_handles();
21264            if let Some((inlined, num_bytes, num_handles)) =
21265                fidl::encoding::decode_envelope_header(decoder, next_offset)?
21266            {
21267                let member_inline_size =
21268                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
21269                if inlined != (member_inline_size <= 4) {
21270                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
21271                }
21272                let inner_offset;
21273                let mut inner_depth = depth.clone();
21274                if inlined {
21275                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
21276                    inner_offset = next_offset;
21277                } else {
21278                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
21279                    inner_depth.increment()?;
21280                }
21281                let val_ref = self.preference.get_or_insert_with(|| fidl::new_empty!(u8, D));
21282                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
21283                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
21284                {
21285                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
21286                }
21287                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
21288                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
21289                }
21290            }
21291
21292            next_offset += envelope_size;
21293
21294            // Decode the remaining unknown envelopes.
21295            while next_offset < end_offset {
21296                _next_ordinal_to_read += 1;
21297                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
21298                next_offset += envelope_size;
21299            }
21300
21301            Ok(())
21302        }
21303    }
21304
21305    impl RouterInfo {
21306        #[inline(always)]
21307        fn max_ordinal_present(&self) -> u64 {
21308            if let Some(_) = self.link_established {
21309                return 9;
21310            }
21311            if let Some(_) = self.age {
21312                return 8;
21313            }
21314            if let Some(_) = self.link_quality_out {
21315                return 7;
21316            }
21317            if let Some(_) = self.link_quality_in {
21318                return 6;
21319            }
21320            if let Some(_) = self.path_cost {
21321                return 5;
21322            }
21323            if let Some(_) = self.next_hop {
21324                return 4;
21325            }
21326            if let Some(_) = self.router_id {
21327                return 3;
21328            }
21329            if let Some(_) = self.thread_rloc {
21330                return 2;
21331            }
21332            if let Some(_) = self.extended_address {
21333                return 1;
21334            }
21335            0
21336        }
21337    }
21338
21339    impl fidl::encoding::ValueTypeMarker for RouterInfo {
21340        type Borrowed<'a> = &'a Self;
21341        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
21342            value
21343        }
21344    }
21345
21346    unsafe impl fidl::encoding::TypeMarker for RouterInfo {
21347        type Owned = Self;
21348
21349        #[inline(always)]
21350        fn inline_align(_context: fidl::encoding::Context) -> usize {
21351            8
21352        }
21353
21354        #[inline(always)]
21355        fn inline_size(_context: fidl::encoding::Context) -> usize {
21356            16
21357        }
21358    }
21359
21360    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<RouterInfo, D>
21361        for &RouterInfo
21362    {
21363        unsafe fn encode(
21364            self,
21365            encoder: &mut fidl::encoding::Encoder<'_, D>,
21366            offset: usize,
21367            mut depth: fidl::encoding::Depth,
21368        ) -> fidl::Result<()> {
21369            encoder.debug_check_bounds::<RouterInfo>(offset);
21370            // Vector header
21371            let max_ordinal: u64 = self.max_ordinal_present();
21372            encoder.write_num(max_ordinal, offset);
21373            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
21374            // Calling encoder.out_of_line_offset(0) is not allowed.
21375            if max_ordinal == 0 {
21376                return Ok(());
21377            }
21378            depth.increment()?;
21379            let envelope_size = 8;
21380            let bytes_len = max_ordinal as usize * envelope_size;
21381            #[allow(unused_variables)]
21382            let offset = encoder.out_of_line_offset(bytes_len);
21383            let mut _prev_end_offset: usize = 0;
21384            if 1 > max_ordinal {
21385                return Ok(());
21386            }
21387
21388            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
21389            // are envelope_size bytes.
21390            let cur_offset: usize = (1 - 1) * envelope_size;
21391
21392            // Zero reserved fields.
21393            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
21394
21395            // Safety:
21396            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
21397            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
21398            //   envelope_size bytes, there is always sufficient room.
21399            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u8, 8>, D>(
21400                self.extended_address.as_ref().map(
21401                    <fidl::encoding::Vector<u8, 8> as fidl::encoding::ValueTypeMarker>::borrow,
21402                ),
21403                encoder,
21404                offset + cur_offset,
21405                depth,
21406            )?;
21407
21408            _prev_end_offset = cur_offset + envelope_size;
21409            if 2 > max_ordinal {
21410                return Ok(());
21411            }
21412
21413            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
21414            // are envelope_size bytes.
21415            let cur_offset: usize = (2 - 1) * envelope_size;
21416
21417            // Zero reserved fields.
21418            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
21419
21420            // Safety:
21421            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
21422            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
21423            //   envelope_size bytes, there is always sufficient room.
21424            fidl::encoding::encode_in_envelope_optional::<u16, D>(
21425                self.thread_rloc.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
21426                encoder,
21427                offset + cur_offset,
21428                depth,
21429            )?;
21430
21431            _prev_end_offset = cur_offset + envelope_size;
21432            if 3 > max_ordinal {
21433                return Ok(());
21434            }
21435
21436            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
21437            // are envelope_size bytes.
21438            let cur_offset: usize = (3 - 1) * envelope_size;
21439
21440            // Zero reserved fields.
21441            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
21442
21443            // Safety:
21444            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
21445            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
21446            //   envelope_size bytes, there is always sufficient room.
21447            fidl::encoding::encode_in_envelope_optional::<u8, D>(
21448                self.router_id.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
21449                encoder,
21450                offset + cur_offset,
21451                depth,
21452            )?;
21453
21454            _prev_end_offset = cur_offset + envelope_size;
21455            if 4 > max_ordinal {
21456                return Ok(());
21457            }
21458
21459            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
21460            // are envelope_size bytes.
21461            let cur_offset: usize = (4 - 1) * envelope_size;
21462
21463            // Zero reserved fields.
21464            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
21465
21466            // Safety:
21467            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
21468            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
21469            //   envelope_size bytes, there is always sufficient room.
21470            fidl::encoding::encode_in_envelope_optional::<u8, D>(
21471                self.next_hop.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
21472                encoder,
21473                offset + cur_offset,
21474                depth,
21475            )?;
21476
21477            _prev_end_offset = cur_offset + envelope_size;
21478            if 5 > max_ordinal {
21479                return Ok(());
21480            }
21481
21482            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
21483            // are envelope_size bytes.
21484            let cur_offset: usize = (5 - 1) * envelope_size;
21485
21486            // Zero reserved fields.
21487            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
21488
21489            // Safety:
21490            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
21491            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
21492            //   envelope_size bytes, there is always sufficient room.
21493            fidl::encoding::encode_in_envelope_optional::<u8, D>(
21494                self.path_cost.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
21495                encoder,
21496                offset + cur_offset,
21497                depth,
21498            )?;
21499
21500            _prev_end_offset = cur_offset + envelope_size;
21501            if 6 > max_ordinal {
21502                return Ok(());
21503            }
21504
21505            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
21506            // are envelope_size bytes.
21507            let cur_offset: usize = (6 - 1) * envelope_size;
21508
21509            // Zero reserved fields.
21510            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
21511
21512            // Safety:
21513            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
21514            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
21515            //   envelope_size bytes, there is always sufficient room.
21516            fidl::encoding::encode_in_envelope_optional::<u8, D>(
21517                self.link_quality_in.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
21518                encoder,
21519                offset + cur_offset,
21520                depth,
21521            )?;
21522
21523            _prev_end_offset = cur_offset + envelope_size;
21524            if 7 > max_ordinal {
21525                return Ok(());
21526            }
21527
21528            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
21529            // are envelope_size bytes.
21530            let cur_offset: usize = (7 - 1) * envelope_size;
21531
21532            // Zero reserved fields.
21533            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
21534
21535            // Safety:
21536            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
21537            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
21538            //   envelope_size bytes, there is always sufficient room.
21539            fidl::encoding::encode_in_envelope_optional::<u8, D>(
21540                self.link_quality_out.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
21541                encoder,
21542                offset + cur_offset,
21543                depth,
21544            )?;
21545
21546            _prev_end_offset = cur_offset + envelope_size;
21547            if 8 > max_ordinal {
21548                return Ok(());
21549            }
21550
21551            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
21552            // are envelope_size bytes.
21553            let cur_offset: usize = (8 - 1) * envelope_size;
21554
21555            // Zero reserved fields.
21556            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
21557
21558            // Safety:
21559            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
21560            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
21561            //   envelope_size bytes, there is always sufficient room.
21562            fidl::encoding::encode_in_envelope_optional::<i64, D>(
21563                self.age.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
21564                encoder,
21565                offset + cur_offset,
21566                depth,
21567            )?;
21568
21569            _prev_end_offset = cur_offset + envelope_size;
21570            if 9 > max_ordinal {
21571                return Ok(());
21572            }
21573
21574            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
21575            // are envelope_size bytes.
21576            let cur_offset: usize = (9 - 1) * envelope_size;
21577
21578            // Zero reserved fields.
21579            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
21580
21581            // Safety:
21582            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
21583            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
21584            //   envelope_size bytes, there is always sufficient room.
21585            fidl::encoding::encode_in_envelope_optional::<bool, D>(
21586                self.link_established
21587                    .as_ref()
21588                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
21589                encoder,
21590                offset + cur_offset,
21591                depth,
21592            )?;
21593
21594            _prev_end_offset = cur_offset + envelope_size;
21595
21596            Ok(())
21597        }
21598    }
21599
21600    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for RouterInfo {
21601        #[inline(always)]
21602        fn new_empty() -> Self {
21603            Self::default()
21604        }
21605
21606        unsafe fn decode(
21607            &mut self,
21608            decoder: &mut fidl::encoding::Decoder<'_, D>,
21609            offset: usize,
21610            mut depth: fidl::encoding::Depth,
21611        ) -> fidl::Result<()> {
21612            decoder.debug_check_bounds::<Self>(offset);
21613            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
21614                None => return Err(fidl::Error::NotNullable),
21615                Some(len) => len,
21616            };
21617            // Calling decoder.out_of_line_offset(0) is not allowed.
21618            if len == 0 {
21619                return Ok(());
21620            };
21621            depth.increment()?;
21622            let envelope_size = 8;
21623            let bytes_len = len * envelope_size;
21624            let offset = decoder.out_of_line_offset(bytes_len)?;
21625            // Decode the envelope for each type.
21626            let mut _next_ordinal_to_read = 0;
21627            let mut next_offset = offset;
21628            let end_offset = offset + bytes_len;
21629            _next_ordinal_to_read += 1;
21630            if next_offset >= end_offset {
21631                return Ok(());
21632            }
21633
21634            // Decode unknown envelopes for gaps in ordinals.
21635            while _next_ordinal_to_read < 1 {
21636                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
21637                _next_ordinal_to_read += 1;
21638                next_offset += envelope_size;
21639            }
21640
21641            let next_out_of_line = decoder.next_out_of_line();
21642            let handles_before = decoder.remaining_handles();
21643            if let Some((inlined, num_bytes, num_handles)) =
21644                fidl::encoding::decode_envelope_header(decoder, next_offset)?
21645            {
21646                let member_inline_size =
21647                    <fidl::encoding::Vector<u8, 8> as fidl::encoding::TypeMarker>::inline_size(
21648                        decoder.context,
21649                    );
21650                if inlined != (member_inline_size <= 4) {
21651                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
21652                }
21653                let inner_offset;
21654                let mut inner_depth = depth.clone();
21655                if inlined {
21656                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
21657                    inner_offset = next_offset;
21658                } else {
21659                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
21660                    inner_depth.increment()?;
21661                }
21662                let val_ref = self
21663                    .extended_address
21664                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u8, 8>, D));
21665                fidl::decode!(fidl::encoding::Vector<u8, 8>, D, val_ref, decoder, inner_offset, inner_depth)?;
21666                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
21667                {
21668                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
21669                }
21670                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
21671                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
21672                }
21673            }
21674
21675            next_offset += envelope_size;
21676            _next_ordinal_to_read += 1;
21677            if next_offset >= end_offset {
21678                return Ok(());
21679            }
21680
21681            // Decode unknown envelopes for gaps in ordinals.
21682            while _next_ordinal_to_read < 2 {
21683                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
21684                _next_ordinal_to_read += 1;
21685                next_offset += envelope_size;
21686            }
21687
21688            let next_out_of_line = decoder.next_out_of_line();
21689            let handles_before = decoder.remaining_handles();
21690            if let Some((inlined, num_bytes, num_handles)) =
21691                fidl::encoding::decode_envelope_header(decoder, next_offset)?
21692            {
21693                let member_inline_size =
21694                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
21695                if inlined != (member_inline_size <= 4) {
21696                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
21697                }
21698                let inner_offset;
21699                let mut inner_depth = depth.clone();
21700                if inlined {
21701                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
21702                    inner_offset = next_offset;
21703                } else {
21704                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
21705                    inner_depth.increment()?;
21706                }
21707                let val_ref = self.thread_rloc.get_or_insert_with(|| fidl::new_empty!(u16, D));
21708                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
21709                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
21710                {
21711                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
21712                }
21713                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
21714                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
21715                }
21716            }
21717
21718            next_offset += envelope_size;
21719            _next_ordinal_to_read += 1;
21720            if next_offset >= end_offset {
21721                return Ok(());
21722            }
21723
21724            // Decode unknown envelopes for gaps in ordinals.
21725            while _next_ordinal_to_read < 3 {
21726                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
21727                _next_ordinal_to_read += 1;
21728                next_offset += envelope_size;
21729            }
21730
21731            let next_out_of_line = decoder.next_out_of_line();
21732            let handles_before = decoder.remaining_handles();
21733            if let Some((inlined, num_bytes, num_handles)) =
21734                fidl::encoding::decode_envelope_header(decoder, next_offset)?
21735            {
21736                let member_inline_size =
21737                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
21738                if inlined != (member_inline_size <= 4) {
21739                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
21740                }
21741                let inner_offset;
21742                let mut inner_depth = depth.clone();
21743                if inlined {
21744                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
21745                    inner_offset = next_offset;
21746                } else {
21747                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
21748                    inner_depth.increment()?;
21749                }
21750                let val_ref = self.router_id.get_or_insert_with(|| fidl::new_empty!(u8, D));
21751                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
21752                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
21753                {
21754                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
21755                }
21756                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
21757                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
21758                }
21759            }
21760
21761            next_offset += envelope_size;
21762            _next_ordinal_to_read += 1;
21763            if next_offset >= end_offset {
21764                return Ok(());
21765            }
21766
21767            // Decode unknown envelopes for gaps in ordinals.
21768            while _next_ordinal_to_read < 4 {
21769                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
21770                _next_ordinal_to_read += 1;
21771                next_offset += envelope_size;
21772            }
21773
21774            let next_out_of_line = decoder.next_out_of_line();
21775            let handles_before = decoder.remaining_handles();
21776            if let Some((inlined, num_bytes, num_handles)) =
21777                fidl::encoding::decode_envelope_header(decoder, next_offset)?
21778            {
21779                let member_inline_size =
21780                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
21781                if inlined != (member_inline_size <= 4) {
21782                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
21783                }
21784                let inner_offset;
21785                let mut inner_depth = depth.clone();
21786                if inlined {
21787                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
21788                    inner_offset = next_offset;
21789                } else {
21790                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
21791                    inner_depth.increment()?;
21792                }
21793                let val_ref = self.next_hop.get_or_insert_with(|| fidl::new_empty!(u8, D));
21794                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
21795                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
21796                {
21797                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
21798                }
21799                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
21800                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
21801                }
21802            }
21803
21804            next_offset += envelope_size;
21805            _next_ordinal_to_read += 1;
21806            if next_offset >= end_offset {
21807                return Ok(());
21808            }
21809
21810            // Decode unknown envelopes for gaps in ordinals.
21811            while _next_ordinal_to_read < 5 {
21812                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
21813                _next_ordinal_to_read += 1;
21814                next_offset += envelope_size;
21815            }
21816
21817            let next_out_of_line = decoder.next_out_of_line();
21818            let handles_before = decoder.remaining_handles();
21819            if let Some((inlined, num_bytes, num_handles)) =
21820                fidl::encoding::decode_envelope_header(decoder, next_offset)?
21821            {
21822                let member_inline_size =
21823                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
21824                if inlined != (member_inline_size <= 4) {
21825                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
21826                }
21827                let inner_offset;
21828                let mut inner_depth = depth.clone();
21829                if inlined {
21830                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
21831                    inner_offset = next_offset;
21832                } else {
21833                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
21834                    inner_depth.increment()?;
21835                }
21836                let val_ref = self.path_cost.get_or_insert_with(|| fidl::new_empty!(u8, D));
21837                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
21838                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
21839                {
21840                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
21841                }
21842                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
21843                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
21844                }
21845            }
21846
21847            next_offset += envelope_size;
21848            _next_ordinal_to_read += 1;
21849            if next_offset >= end_offset {
21850                return Ok(());
21851            }
21852
21853            // Decode unknown envelopes for gaps in ordinals.
21854            while _next_ordinal_to_read < 6 {
21855                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
21856                _next_ordinal_to_read += 1;
21857                next_offset += envelope_size;
21858            }
21859
21860            let next_out_of_line = decoder.next_out_of_line();
21861            let handles_before = decoder.remaining_handles();
21862            if let Some((inlined, num_bytes, num_handles)) =
21863                fidl::encoding::decode_envelope_header(decoder, next_offset)?
21864            {
21865                let member_inline_size =
21866                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
21867                if inlined != (member_inline_size <= 4) {
21868                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
21869                }
21870                let inner_offset;
21871                let mut inner_depth = depth.clone();
21872                if inlined {
21873                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
21874                    inner_offset = next_offset;
21875                } else {
21876                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
21877                    inner_depth.increment()?;
21878                }
21879                let val_ref = self.link_quality_in.get_or_insert_with(|| fidl::new_empty!(u8, D));
21880                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
21881                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
21882                {
21883                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
21884                }
21885                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
21886                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
21887                }
21888            }
21889
21890            next_offset += envelope_size;
21891            _next_ordinal_to_read += 1;
21892            if next_offset >= end_offset {
21893                return Ok(());
21894            }
21895
21896            // Decode unknown envelopes for gaps in ordinals.
21897            while _next_ordinal_to_read < 7 {
21898                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
21899                _next_ordinal_to_read += 1;
21900                next_offset += envelope_size;
21901            }
21902
21903            let next_out_of_line = decoder.next_out_of_line();
21904            let handles_before = decoder.remaining_handles();
21905            if let Some((inlined, num_bytes, num_handles)) =
21906                fidl::encoding::decode_envelope_header(decoder, next_offset)?
21907            {
21908                let member_inline_size =
21909                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
21910                if inlined != (member_inline_size <= 4) {
21911                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
21912                }
21913                let inner_offset;
21914                let mut inner_depth = depth.clone();
21915                if inlined {
21916                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
21917                    inner_offset = next_offset;
21918                } else {
21919                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
21920                    inner_depth.increment()?;
21921                }
21922                let val_ref = self.link_quality_out.get_or_insert_with(|| fidl::new_empty!(u8, D));
21923                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
21924                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
21925                {
21926                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
21927                }
21928                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
21929                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
21930                }
21931            }
21932
21933            next_offset += envelope_size;
21934            _next_ordinal_to_read += 1;
21935            if next_offset >= end_offset {
21936                return Ok(());
21937            }
21938
21939            // Decode unknown envelopes for gaps in ordinals.
21940            while _next_ordinal_to_read < 8 {
21941                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
21942                _next_ordinal_to_read += 1;
21943                next_offset += envelope_size;
21944            }
21945
21946            let next_out_of_line = decoder.next_out_of_line();
21947            let handles_before = decoder.remaining_handles();
21948            if let Some((inlined, num_bytes, num_handles)) =
21949                fidl::encoding::decode_envelope_header(decoder, next_offset)?
21950            {
21951                let member_inline_size =
21952                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
21953                if inlined != (member_inline_size <= 4) {
21954                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
21955                }
21956                let inner_offset;
21957                let mut inner_depth = depth.clone();
21958                if inlined {
21959                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
21960                    inner_offset = next_offset;
21961                } else {
21962                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
21963                    inner_depth.increment()?;
21964                }
21965                let val_ref = self.age.get_or_insert_with(|| fidl::new_empty!(i64, D));
21966                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
21967                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
21968                {
21969                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
21970                }
21971                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
21972                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
21973                }
21974            }
21975
21976            next_offset += envelope_size;
21977            _next_ordinal_to_read += 1;
21978            if next_offset >= end_offset {
21979                return Ok(());
21980            }
21981
21982            // Decode unknown envelopes for gaps in ordinals.
21983            while _next_ordinal_to_read < 9 {
21984                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
21985                _next_ordinal_to_read += 1;
21986                next_offset += envelope_size;
21987            }
21988
21989            let next_out_of_line = decoder.next_out_of_line();
21990            let handles_before = decoder.remaining_handles();
21991            if let Some((inlined, num_bytes, num_handles)) =
21992                fidl::encoding::decode_envelope_header(decoder, next_offset)?
21993            {
21994                let member_inline_size =
21995                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
21996                if inlined != (member_inline_size <= 4) {
21997                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
21998                }
21999                let inner_offset;
22000                let mut inner_depth = depth.clone();
22001                if inlined {
22002                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
22003                    inner_offset = next_offset;
22004                } else {
22005                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
22006                    inner_depth.increment()?;
22007                }
22008                let val_ref =
22009                    self.link_established.get_or_insert_with(|| fidl::new_empty!(bool, D));
22010                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
22011                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
22012                {
22013                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
22014                }
22015                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
22016                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
22017                }
22018            }
22019
22020            next_offset += envelope_size;
22021
22022            // Decode the remaining unknown envelopes.
22023            while next_offset < end_offset {
22024                _next_ordinal_to_read += 1;
22025                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
22026                next_offset += envelope_size;
22027            }
22028
22029            Ok(())
22030        }
22031    }
22032
22033    impl SecurityPolicy {
22034        #[inline(always)]
22035        fn max_ordinal_present(&self) -> u64 {
22036            if let Some(_) = self.version_threshold_for_routing {
22037                return 10;
22038            }
22039            if let Some(_) = self.nonccm_routers_enabled {
22040                return 9;
22041            }
22042            if let Some(_) = self.toble_link_enabled {
22043                return 8;
22044            }
22045            if let Some(_) = self.network_key_provisioning_enabled {
22046                return 7;
22047            }
22048            if let Some(_) = self.autonomous_enrollment_enabled {
22049                return 6;
22050            }
22051            if let Some(_) = self.external_commissioning_enabled {
22052                return 5;
22053            }
22054            if let Some(_) = self.routers_enabled {
22055                return 4;
22056            }
22057            if let Some(_) = self.native_commissioning_enabled {
22058                return 3;
22059            }
22060            if let Some(_) = self.obtain_network_key_enabled {
22061                return 2;
22062            }
22063            if let Some(_) = self.rotation_time {
22064                return 1;
22065            }
22066            0
22067        }
22068    }
22069
22070    impl fidl::encoding::ValueTypeMarker for SecurityPolicy {
22071        type Borrowed<'a> = &'a Self;
22072        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
22073            value
22074        }
22075    }
22076
22077    unsafe impl fidl::encoding::TypeMarker for SecurityPolicy {
22078        type Owned = Self;
22079
22080        #[inline(always)]
22081        fn inline_align(_context: fidl::encoding::Context) -> usize {
22082            8
22083        }
22084
22085        #[inline(always)]
22086        fn inline_size(_context: fidl::encoding::Context) -> usize {
22087            16
22088        }
22089    }
22090
22091    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<SecurityPolicy, D>
22092        for &SecurityPolicy
22093    {
22094        unsafe fn encode(
22095            self,
22096            encoder: &mut fidl::encoding::Encoder<'_, D>,
22097            offset: usize,
22098            mut depth: fidl::encoding::Depth,
22099        ) -> fidl::Result<()> {
22100            encoder.debug_check_bounds::<SecurityPolicy>(offset);
22101            // Vector header
22102            let max_ordinal: u64 = self.max_ordinal_present();
22103            encoder.write_num(max_ordinal, offset);
22104            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
22105            // Calling encoder.out_of_line_offset(0) is not allowed.
22106            if max_ordinal == 0 {
22107                return Ok(());
22108            }
22109            depth.increment()?;
22110            let envelope_size = 8;
22111            let bytes_len = max_ordinal as usize * envelope_size;
22112            #[allow(unused_variables)]
22113            let offset = encoder.out_of_line_offset(bytes_len);
22114            let mut _prev_end_offset: usize = 0;
22115            if 1 > max_ordinal {
22116                return Ok(());
22117            }
22118
22119            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
22120            // are envelope_size bytes.
22121            let cur_offset: usize = (1 - 1) * envelope_size;
22122
22123            // Zero reserved fields.
22124            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
22125
22126            // Safety:
22127            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
22128            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
22129            //   envelope_size bytes, there is always sufficient room.
22130            fidl::encoding::encode_in_envelope_optional::<u16, D>(
22131                self.rotation_time.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
22132                encoder,
22133                offset + cur_offset,
22134                depth,
22135            )?;
22136
22137            _prev_end_offset = cur_offset + envelope_size;
22138            if 2 > max_ordinal {
22139                return Ok(());
22140            }
22141
22142            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
22143            // are envelope_size bytes.
22144            let cur_offset: usize = (2 - 1) * envelope_size;
22145
22146            // Zero reserved fields.
22147            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
22148
22149            // Safety:
22150            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
22151            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
22152            //   envelope_size bytes, there is always sufficient room.
22153            fidl::encoding::encode_in_envelope_optional::<bool, D>(
22154                self.obtain_network_key_enabled
22155                    .as_ref()
22156                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
22157                encoder,
22158                offset + cur_offset,
22159                depth,
22160            )?;
22161
22162            _prev_end_offset = cur_offset + envelope_size;
22163            if 3 > max_ordinal {
22164                return Ok(());
22165            }
22166
22167            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
22168            // are envelope_size bytes.
22169            let cur_offset: usize = (3 - 1) * envelope_size;
22170
22171            // Zero reserved fields.
22172            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
22173
22174            // Safety:
22175            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
22176            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
22177            //   envelope_size bytes, there is always sufficient room.
22178            fidl::encoding::encode_in_envelope_optional::<bool, D>(
22179                self.native_commissioning_enabled
22180                    .as_ref()
22181                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
22182                encoder,
22183                offset + cur_offset,
22184                depth,
22185            )?;
22186
22187            _prev_end_offset = cur_offset + envelope_size;
22188            if 4 > max_ordinal {
22189                return Ok(());
22190            }
22191
22192            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
22193            // are envelope_size bytes.
22194            let cur_offset: usize = (4 - 1) * envelope_size;
22195
22196            // Zero reserved fields.
22197            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
22198
22199            // Safety:
22200            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
22201            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
22202            //   envelope_size bytes, there is always sufficient room.
22203            fidl::encoding::encode_in_envelope_optional::<bool, D>(
22204                self.routers_enabled
22205                    .as_ref()
22206                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
22207                encoder,
22208                offset + cur_offset,
22209                depth,
22210            )?;
22211
22212            _prev_end_offset = cur_offset + envelope_size;
22213            if 5 > max_ordinal {
22214                return Ok(());
22215            }
22216
22217            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
22218            // are envelope_size bytes.
22219            let cur_offset: usize = (5 - 1) * envelope_size;
22220
22221            // Zero reserved fields.
22222            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
22223
22224            // Safety:
22225            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
22226            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
22227            //   envelope_size bytes, there is always sufficient room.
22228            fidl::encoding::encode_in_envelope_optional::<bool, D>(
22229                self.external_commissioning_enabled
22230                    .as_ref()
22231                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
22232                encoder,
22233                offset + cur_offset,
22234                depth,
22235            )?;
22236
22237            _prev_end_offset = cur_offset + envelope_size;
22238            if 6 > max_ordinal {
22239                return Ok(());
22240            }
22241
22242            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
22243            // are envelope_size bytes.
22244            let cur_offset: usize = (6 - 1) * envelope_size;
22245
22246            // Zero reserved fields.
22247            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
22248
22249            // Safety:
22250            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
22251            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
22252            //   envelope_size bytes, there is always sufficient room.
22253            fidl::encoding::encode_in_envelope_optional::<bool, D>(
22254                self.autonomous_enrollment_enabled
22255                    .as_ref()
22256                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
22257                encoder,
22258                offset + cur_offset,
22259                depth,
22260            )?;
22261
22262            _prev_end_offset = cur_offset + envelope_size;
22263            if 7 > max_ordinal {
22264                return Ok(());
22265            }
22266
22267            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
22268            // are envelope_size bytes.
22269            let cur_offset: usize = (7 - 1) * envelope_size;
22270
22271            // Zero reserved fields.
22272            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
22273
22274            // Safety:
22275            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
22276            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
22277            //   envelope_size bytes, there is always sufficient room.
22278            fidl::encoding::encode_in_envelope_optional::<bool, D>(
22279                self.network_key_provisioning_enabled
22280                    .as_ref()
22281                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
22282                encoder,
22283                offset + cur_offset,
22284                depth,
22285            )?;
22286
22287            _prev_end_offset = cur_offset + envelope_size;
22288            if 8 > max_ordinal {
22289                return Ok(());
22290            }
22291
22292            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
22293            // are envelope_size bytes.
22294            let cur_offset: usize = (8 - 1) * envelope_size;
22295
22296            // Zero reserved fields.
22297            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
22298
22299            // Safety:
22300            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
22301            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
22302            //   envelope_size bytes, there is always sufficient room.
22303            fidl::encoding::encode_in_envelope_optional::<bool, D>(
22304                self.toble_link_enabled
22305                    .as_ref()
22306                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
22307                encoder,
22308                offset + cur_offset,
22309                depth,
22310            )?;
22311
22312            _prev_end_offset = cur_offset + envelope_size;
22313            if 9 > max_ordinal {
22314                return Ok(());
22315            }
22316
22317            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
22318            // are envelope_size bytes.
22319            let cur_offset: usize = (9 - 1) * envelope_size;
22320
22321            // Zero reserved fields.
22322            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
22323
22324            // Safety:
22325            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
22326            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
22327            //   envelope_size bytes, there is always sufficient room.
22328            fidl::encoding::encode_in_envelope_optional::<bool, D>(
22329                self.nonccm_routers_enabled
22330                    .as_ref()
22331                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
22332                encoder,
22333                offset + cur_offset,
22334                depth,
22335            )?;
22336
22337            _prev_end_offset = cur_offset + envelope_size;
22338            if 10 > max_ordinal {
22339                return Ok(());
22340            }
22341
22342            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
22343            // are envelope_size bytes.
22344            let cur_offset: usize = (10 - 1) * envelope_size;
22345
22346            // Zero reserved fields.
22347            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
22348
22349            // Safety:
22350            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
22351            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
22352            //   envelope_size bytes, there is always sufficient room.
22353            fidl::encoding::encode_in_envelope_optional::<u8, D>(
22354                self.version_threshold_for_routing
22355                    .as_ref()
22356                    .map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
22357                encoder,
22358                offset + cur_offset,
22359                depth,
22360            )?;
22361
22362            _prev_end_offset = cur_offset + envelope_size;
22363
22364            Ok(())
22365        }
22366    }
22367
22368    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SecurityPolicy {
22369        #[inline(always)]
22370        fn new_empty() -> Self {
22371            Self::default()
22372        }
22373
22374        unsafe fn decode(
22375            &mut self,
22376            decoder: &mut fidl::encoding::Decoder<'_, D>,
22377            offset: usize,
22378            mut depth: fidl::encoding::Depth,
22379        ) -> fidl::Result<()> {
22380            decoder.debug_check_bounds::<Self>(offset);
22381            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
22382                None => return Err(fidl::Error::NotNullable),
22383                Some(len) => len,
22384            };
22385            // Calling decoder.out_of_line_offset(0) is not allowed.
22386            if len == 0 {
22387                return Ok(());
22388            };
22389            depth.increment()?;
22390            let envelope_size = 8;
22391            let bytes_len = len * envelope_size;
22392            let offset = decoder.out_of_line_offset(bytes_len)?;
22393            // Decode the envelope for each type.
22394            let mut _next_ordinal_to_read = 0;
22395            let mut next_offset = offset;
22396            let end_offset = offset + bytes_len;
22397            _next_ordinal_to_read += 1;
22398            if next_offset >= end_offset {
22399                return Ok(());
22400            }
22401
22402            // Decode unknown envelopes for gaps in ordinals.
22403            while _next_ordinal_to_read < 1 {
22404                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
22405                _next_ordinal_to_read += 1;
22406                next_offset += envelope_size;
22407            }
22408
22409            let next_out_of_line = decoder.next_out_of_line();
22410            let handles_before = decoder.remaining_handles();
22411            if let Some((inlined, num_bytes, num_handles)) =
22412                fidl::encoding::decode_envelope_header(decoder, next_offset)?
22413            {
22414                let member_inline_size =
22415                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
22416                if inlined != (member_inline_size <= 4) {
22417                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
22418                }
22419                let inner_offset;
22420                let mut inner_depth = depth.clone();
22421                if inlined {
22422                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
22423                    inner_offset = next_offset;
22424                } else {
22425                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
22426                    inner_depth.increment()?;
22427                }
22428                let val_ref = self.rotation_time.get_or_insert_with(|| fidl::new_empty!(u16, D));
22429                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
22430                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
22431                {
22432                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
22433                }
22434                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
22435                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
22436                }
22437            }
22438
22439            next_offset += envelope_size;
22440            _next_ordinal_to_read += 1;
22441            if next_offset >= end_offset {
22442                return Ok(());
22443            }
22444
22445            // Decode unknown envelopes for gaps in ordinals.
22446            while _next_ordinal_to_read < 2 {
22447                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
22448                _next_ordinal_to_read += 1;
22449                next_offset += envelope_size;
22450            }
22451
22452            let next_out_of_line = decoder.next_out_of_line();
22453            let handles_before = decoder.remaining_handles();
22454            if let Some((inlined, num_bytes, num_handles)) =
22455                fidl::encoding::decode_envelope_header(decoder, next_offset)?
22456            {
22457                let member_inline_size =
22458                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
22459                if inlined != (member_inline_size <= 4) {
22460                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
22461                }
22462                let inner_offset;
22463                let mut inner_depth = depth.clone();
22464                if inlined {
22465                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
22466                    inner_offset = next_offset;
22467                } else {
22468                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
22469                    inner_depth.increment()?;
22470                }
22471                let val_ref = self
22472                    .obtain_network_key_enabled
22473                    .get_or_insert_with(|| fidl::new_empty!(bool, D));
22474                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
22475                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
22476                {
22477                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
22478                }
22479                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
22480                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
22481                }
22482            }
22483
22484            next_offset += envelope_size;
22485            _next_ordinal_to_read += 1;
22486            if next_offset >= end_offset {
22487                return Ok(());
22488            }
22489
22490            // Decode unknown envelopes for gaps in ordinals.
22491            while _next_ordinal_to_read < 3 {
22492                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
22493                _next_ordinal_to_read += 1;
22494                next_offset += envelope_size;
22495            }
22496
22497            let next_out_of_line = decoder.next_out_of_line();
22498            let handles_before = decoder.remaining_handles();
22499            if let Some((inlined, num_bytes, num_handles)) =
22500                fidl::encoding::decode_envelope_header(decoder, next_offset)?
22501            {
22502                let member_inline_size =
22503                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
22504                if inlined != (member_inline_size <= 4) {
22505                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
22506                }
22507                let inner_offset;
22508                let mut inner_depth = depth.clone();
22509                if inlined {
22510                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
22511                    inner_offset = next_offset;
22512                } else {
22513                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
22514                    inner_depth.increment()?;
22515                }
22516                let val_ref = self
22517                    .native_commissioning_enabled
22518                    .get_or_insert_with(|| fidl::new_empty!(bool, D));
22519                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
22520                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
22521                {
22522                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
22523                }
22524                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
22525                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
22526                }
22527            }
22528
22529            next_offset += envelope_size;
22530            _next_ordinal_to_read += 1;
22531            if next_offset >= end_offset {
22532                return Ok(());
22533            }
22534
22535            // Decode unknown envelopes for gaps in ordinals.
22536            while _next_ordinal_to_read < 4 {
22537                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
22538                _next_ordinal_to_read += 1;
22539                next_offset += envelope_size;
22540            }
22541
22542            let next_out_of_line = decoder.next_out_of_line();
22543            let handles_before = decoder.remaining_handles();
22544            if let Some((inlined, num_bytes, num_handles)) =
22545                fidl::encoding::decode_envelope_header(decoder, next_offset)?
22546            {
22547                let member_inline_size =
22548                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
22549                if inlined != (member_inline_size <= 4) {
22550                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
22551                }
22552                let inner_offset;
22553                let mut inner_depth = depth.clone();
22554                if inlined {
22555                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
22556                    inner_offset = next_offset;
22557                } else {
22558                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
22559                    inner_depth.increment()?;
22560                }
22561                let val_ref = self.routers_enabled.get_or_insert_with(|| fidl::new_empty!(bool, D));
22562                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
22563                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
22564                {
22565                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
22566                }
22567                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
22568                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
22569                }
22570            }
22571
22572            next_offset += envelope_size;
22573            _next_ordinal_to_read += 1;
22574            if next_offset >= end_offset {
22575                return Ok(());
22576            }
22577
22578            // Decode unknown envelopes for gaps in ordinals.
22579            while _next_ordinal_to_read < 5 {
22580                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
22581                _next_ordinal_to_read += 1;
22582                next_offset += envelope_size;
22583            }
22584
22585            let next_out_of_line = decoder.next_out_of_line();
22586            let handles_before = decoder.remaining_handles();
22587            if let Some((inlined, num_bytes, num_handles)) =
22588                fidl::encoding::decode_envelope_header(decoder, next_offset)?
22589            {
22590                let member_inline_size =
22591                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
22592                if inlined != (member_inline_size <= 4) {
22593                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
22594                }
22595                let inner_offset;
22596                let mut inner_depth = depth.clone();
22597                if inlined {
22598                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
22599                    inner_offset = next_offset;
22600                } else {
22601                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
22602                    inner_depth.increment()?;
22603                }
22604                let val_ref = self
22605                    .external_commissioning_enabled
22606                    .get_or_insert_with(|| fidl::new_empty!(bool, D));
22607                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
22608                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
22609                {
22610                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
22611                }
22612                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
22613                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
22614                }
22615            }
22616
22617            next_offset += envelope_size;
22618            _next_ordinal_to_read += 1;
22619            if next_offset >= end_offset {
22620                return Ok(());
22621            }
22622
22623            // Decode unknown envelopes for gaps in ordinals.
22624            while _next_ordinal_to_read < 6 {
22625                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
22626                _next_ordinal_to_read += 1;
22627                next_offset += envelope_size;
22628            }
22629
22630            let next_out_of_line = decoder.next_out_of_line();
22631            let handles_before = decoder.remaining_handles();
22632            if let Some((inlined, num_bytes, num_handles)) =
22633                fidl::encoding::decode_envelope_header(decoder, next_offset)?
22634            {
22635                let member_inline_size =
22636                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
22637                if inlined != (member_inline_size <= 4) {
22638                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
22639                }
22640                let inner_offset;
22641                let mut inner_depth = depth.clone();
22642                if inlined {
22643                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
22644                    inner_offset = next_offset;
22645                } else {
22646                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
22647                    inner_depth.increment()?;
22648                }
22649                let val_ref = self
22650                    .autonomous_enrollment_enabled
22651                    .get_or_insert_with(|| fidl::new_empty!(bool, D));
22652                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
22653                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
22654                {
22655                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
22656                }
22657                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
22658                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
22659                }
22660            }
22661
22662            next_offset += envelope_size;
22663            _next_ordinal_to_read += 1;
22664            if next_offset >= end_offset {
22665                return Ok(());
22666            }
22667
22668            // Decode unknown envelopes for gaps in ordinals.
22669            while _next_ordinal_to_read < 7 {
22670                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
22671                _next_ordinal_to_read += 1;
22672                next_offset += envelope_size;
22673            }
22674
22675            let next_out_of_line = decoder.next_out_of_line();
22676            let handles_before = decoder.remaining_handles();
22677            if let Some((inlined, num_bytes, num_handles)) =
22678                fidl::encoding::decode_envelope_header(decoder, next_offset)?
22679            {
22680                let member_inline_size =
22681                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
22682                if inlined != (member_inline_size <= 4) {
22683                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
22684                }
22685                let inner_offset;
22686                let mut inner_depth = depth.clone();
22687                if inlined {
22688                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
22689                    inner_offset = next_offset;
22690                } else {
22691                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
22692                    inner_depth.increment()?;
22693                }
22694                let val_ref = self
22695                    .network_key_provisioning_enabled
22696                    .get_or_insert_with(|| fidl::new_empty!(bool, D));
22697                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
22698                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
22699                {
22700                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
22701                }
22702                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
22703                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
22704                }
22705            }
22706
22707            next_offset += envelope_size;
22708            _next_ordinal_to_read += 1;
22709            if next_offset >= end_offset {
22710                return Ok(());
22711            }
22712
22713            // Decode unknown envelopes for gaps in ordinals.
22714            while _next_ordinal_to_read < 8 {
22715                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
22716                _next_ordinal_to_read += 1;
22717                next_offset += envelope_size;
22718            }
22719
22720            let next_out_of_line = decoder.next_out_of_line();
22721            let handles_before = decoder.remaining_handles();
22722            if let Some((inlined, num_bytes, num_handles)) =
22723                fidl::encoding::decode_envelope_header(decoder, next_offset)?
22724            {
22725                let member_inline_size =
22726                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
22727                if inlined != (member_inline_size <= 4) {
22728                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
22729                }
22730                let inner_offset;
22731                let mut inner_depth = depth.clone();
22732                if inlined {
22733                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
22734                    inner_offset = next_offset;
22735                } else {
22736                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
22737                    inner_depth.increment()?;
22738                }
22739                let val_ref =
22740                    self.toble_link_enabled.get_or_insert_with(|| fidl::new_empty!(bool, D));
22741                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
22742                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
22743                {
22744                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
22745                }
22746                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
22747                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
22748                }
22749            }
22750
22751            next_offset += envelope_size;
22752            _next_ordinal_to_read += 1;
22753            if next_offset >= end_offset {
22754                return Ok(());
22755            }
22756
22757            // Decode unknown envelopes for gaps in ordinals.
22758            while _next_ordinal_to_read < 9 {
22759                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
22760                _next_ordinal_to_read += 1;
22761                next_offset += envelope_size;
22762            }
22763
22764            let next_out_of_line = decoder.next_out_of_line();
22765            let handles_before = decoder.remaining_handles();
22766            if let Some((inlined, num_bytes, num_handles)) =
22767                fidl::encoding::decode_envelope_header(decoder, next_offset)?
22768            {
22769                let member_inline_size =
22770                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
22771                if inlined != (member_inline_size <= 4) {
22772                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
22773                }
22774                let inner_offset;
22775                let mut inner_depth = depth.clone();
22776                if inlined {
22777                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
22778                    inner_offset = next_offset;
22779                } else {
22780                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
22781                    inner_depth.increment()?;
22782                }
22783                let val_ref =
22784                    self.nonccm_routers_enabled.get_or_insert_with(|| fidl::new_empty!(bool, D));
22785                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
22786                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
22787                {
22788                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
22789                }
22790                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
22791                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
22792                }
22793            }
22794
22795            next_offset += envelope_size;
22796            _next_ordinal_to_read += 1;
22797            if next_offset >= end_offset {
22798                return Ok(());
22799            }
22800
22801            // Decode unknown envelopes for gaps in ordinals.
22802            while _next_ordinal_to_read < 10 {
22803                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
22804                _next_ordinal_to_read += 1;
22805                next_offset += envelope_size;
22806            }
22807
22808            let next_out_of_line = decoder.next_out_of_line();
22809            let handles_before = decoder.remaining_handles();
22810            if let Some((inlined, num_bytes, num_handles)) =
22811                fidl::encoding::decode_envelope_header(decoder, next_offset)?
22812            {
22813                let member_inline_size =
22814                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
22815                if inlined != (member_inline_size <= 4) {
22816                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
22817                }
22818                let inner_offset;
22819                let mut inner_depth = depth.clone();
22820                if inlined {
22821                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
22822                    inner_offset = next_offset;
22823                } else {
22824                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
22825                    inner_depth.increment()?;
22826                }
22827                let val_ref = self
22828                    .version_threshold_for_routing
22829                    .get_or_insert_with(|| fidl::new_empty!(u8, D));
22830                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
22831                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
22832                {
22833                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
22834                }
22835                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
22836                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
22837                }
22838            }
22839
22840            next_offset += envelope_size;
22841
22842            // Decode the remaining unknown envelopes.
22843            while next_offset < end_offset {
22844                _next_ordinal_to_read += 1;
22845                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
22846                next_offset += envelope_size;
22847            }
22848
22849            Ok(())
22850        }
22851    }
22852
22853    impl ServerConfig {
22854        #[inline(always)]
22855        fn max_ordinal_present(&self) -> u64 {
22856            if let Some(_) = self.rloc16 {
22857                return 4;
22858            }
22859            if let Some(_) = self.server_data {
22860                return 3;
22861            }
22862            if let Some(_) = self.server_data_length {
22863                return 2;
22864            }
22865            if let Some(_) = self.stable {
22866                return 1;
22867            }
22868            0
22869        }
22870    }
22871
22872    impl fidl::encoding::ValueTypeMarker for ServerConfig {
22873        type Borrowed<'a> = &'a Self;
22874        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
22875            value
22876        }
22877    }
22878
22879    unsafe impl fidl::encoding::TypeMarker for ServerConfig {
22880        type Owned = Self;
22881
22882        #[inline(always)]
22883        fn inline_align(_context: fidl::encoding::Context) -> usize {
22884            8
22885        }
22886
22887        #[inline(always)]
22888        fn inline_size(_context: fidl::encoding::Context) -> usize {
22889            16
22890        }
22891    }
22892
22893    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<ServerConfig, D>
22894        for &ServerConfig
22895    {
22896        unsafe fn encode(
22897            self,
22898            encoder: &mut fidl::encoding::Encoder<'_, D>,
22899            offset: usize,
22900            mut depth: fidl::encoding::Depth,
22901        ) -> fidl::Result<()> {
22902            encoder.debug_check_bounds::<ServerConfig>(offset);
22903            // Vector header
22904            let max_ordinal: u64 = self.max_ordinal_present();
22905            encoder.write_num(max_ordinal, offset);
22906            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
22907            // Calling encoder.out_of_line_offset(0) is not allowed.
22908            if max_ordinal == 0 {
22909                return Ok(());
22910            }
22911            depth.increment()?;
22912            let envelope_size = 8;
22913            let bytes_len = max_ordinal as usize * envelope_size;
22914            #[allow(unused_variables)]
22915            let offset = encoder.out_of_line_offset(bytes_len);
22916            let mut _prev_end_offset: usize = 0;
22917            if 1 > max_ordinal {
22918                return Ok(());
22919            }
22920
22921            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
22922            // are envelope_size bytes.
22923            let cur_offset: usize = (1 - 1) * envelope_size;
22924
22925            // Zero reserved fields.
22926            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
22927
22928            // Safety:
22929            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
22930            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
22931            //   envelope_size bytes, there is always sufficient room.
22932            fidl::encoding::encode_in_envelope_optional::<bool, D>(
22933                self.stable.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
22934                encoder,
22935                offset + cur_offset,
22936                depth,
22937            )?;
22938
22939            _prev_end_offset = cur_offset + envelope_size;
22940            if 2 > max_ordinal {
22941                return Ok(());
22942            }
22943
22944            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
22945            // are envelope_size bytes.
22946            let cur_offset: usize = (2 - 1) * envelope_size;
22947
22948            // Zero reserved fields.
22949            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
22950
22951            // Safety:
22952            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
22953            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
22954            //   envelope_size bytes, there is always sufficient room.
22955            fidl::encoding::encode_in_envelope_optional::<u8, D>(
22956                self.server_data_length
22957                    .as_ref()
22958                    .map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
22959                encoder,
22960                offset + cur_offset,
22961                depth,
22962            )?;
22963
22964            _prev_end_offset = cur_offset + envelope_size;
22965            if 3 > max_ordinal {
22966                return Ok(());
22967            }
22968
22969            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
22970            // are envelope_size bytes.
22971            let cur_offset: usize = (3 - 1) * envelope_size;
22972
22973            // Zero reserved fields.
22974            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
22975
22976            // Safety:
22977            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
22978            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
22979            //   envelope_size bytes, there is always sufficient room.
22980            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u8, 252>, D>(
22981                self.server_data.as_ref().map(
22982                    <fidl::encoding::Vector<u8, 252> as fidl::encoding::ValueTypeMarker>::borrow,
22983                ),
22984                encoder,
22985                offset + cur_offset,
22986                depth,
22987            )?;
22988
22989            _prev_end_offset = cur_offset + envelope_size;
22990            if 4 > max_ordinal {
22991                return Ok(());
22992            }
22993
22994            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
22995            // are envelope_size bytes.
22996            let cur_offset: usize = (4 - 1) * envelope_size;
22997
22998            // Zero reserved fields.
22999            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
23000
23001            // Safety:
23002            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
23003            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
23004            //   envelope_size bytes, there is always sufficient room.
23005            fidl::encoding::encode_in_envelope_optional::<u16, D>(
23006                self.rloc16.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
23007                encoder,
23008                offset + cur_offset,
23009                depth,
23010            )?;
23011
23012            _prev_end_offset = cur_offset + envelope_size;
23013
23014            Ok(())
23015        }
23016    }
23017
23018    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ServerConfig {
23019        #[inline(always)]
23020        fn new_empty() -> Self {
23021            Self::default()
23022        }
23023
23024        unsafe fn decode(
23025            &mut self,
23026            decoder: &mut fidl::encoding::Decoder<'_, D>,
23027            offset: usize,
23028            mut depth: fidl::encoding::Depth,
23029        ) -> fidl::Result<()> {
23030            decoder.debug_check_bounds::<Self>(offset);
23031            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
23032                None => return Err(fidl::Error::NotNullable),
23033                Some(len) => len,
23034            };
23035            // Calling decoder.out_of_line_offset(0) is not allowed.
23036            if len == 0 {
23037                return Ok(());
23038            };
23039            depth.increment()?;
23040            let envelope_size = 8;
23041            let bytes_len = len * envelope_size;
23042            let offset = decoder.out_of_line_offset(bytes_len)?;
23043            // Decode the envelope for each type.
23044            let mut _next_ordinal_to_read = 0;
23045            let mut next_offset = offset;
23046            let end_offset = offset + bytes_len;
23047            _next_ordinal_to_read += 1;
23048            if next_offset >= end_offset {
23049                return Ok(());
23050            }
23051
23052            // Decode unknown envelopes for gaps in ordinals.
23053            while _next_ordinal_to_read < 1 {
23054                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
23055                _next_ordinal_to_read += 1;
23056                next_offset += envelope_size;
23057            }
23058
23059            let next_out_of_line = decoder.next_out_of_line();
23060            let handles_before = decoder.remaining_handles();
23061            if let Some((inlined, num_bytes, num_handles)) =
23062                fidl::encoding::decode_envelope_header(decoder, next_offset)?
23063            {
23064                let member_inline_size =
23065                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
23066                if inlined != (member_inline_size <= 4) {
23067                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
23068                }
23069                let inner_offset;
23070                let mut inner_depth = depth.clone();
23071                if inlined {
23072                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
23073                    inner_offset = next_offset;
23074                } else {
23075                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
23076                    inner_depth.increment()?;
23077                }
23078                let val_ref = self.stable.get_or_insert_with(|| fidl::new_empty!(bool, D));
23079                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
23080                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
23081                {
23082                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
23083                }
23084                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
23085                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
23086                }
23087            }
23088
23089            next_offset += envelope_size;
23090            _next_ordinal_to_read += 1;
23091            if next_offset >= end_offset {
23092                return Ok(());
23093            }
23094
23095            // Decode unknown envelopes for gaps in ordinals.
23096            while _next_ordinal_to_read < 2 {
23097                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
23098                _next_ordinal_to_read += 1;
23099                next_offset += envelope_size;
23100            }
23101
23102            let next_out_of_line = decoder.next_out_of_line();
23103            let handles_before = decoder.remaining_handles();
23104            if let Some((inlined, num_bytes, num_handles)) =
23105                fidl::encoding::decode_envelope_header(decoder, next_offset)?
23106            {
23107                let member_inline_size =
23108                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
23109                if inlined != (member_inline_size <= 4) {
23110                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
23111                }
23112                let inner_offset;
23113                let mut inner_depth = depth.clone();
23114                if inlined {
23115                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
23116                    inner_offset = next_offset;
23117                } else {
23118                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
23119                    inner_depth.increment()?;
23120                }
23121                let val_ref =
23122                    self.server_data_length.get_or_insert_with(|| fidl::new_empty!(u8, D));
23123                fidl::decode!(u8, 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 < 3 {
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                    <fidl::encoding::Vector<u8, 252> as fidl::encoding::TypeMarker>::inline_size(
23153                        decoder.context,
23154                    );
23155                if inlined != (member_inline_size <= 4) {
23156                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
23157                }
23158                let inner_offset;
23159                let mut inner_depth = depth.clone();
23160                if inlined {
23161                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
23162                    inner_offset = next_offset;
23163                } else {
23164                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
23165                    inner_depth.increment()?;
23166                }
23167                let val_ref = self
23168                    .server_data
23169                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u8, 252>, D));
23170                fidl::decode!(fidl::encoding::Vector<u8, 252>, D, val_ref, decoder, inner_offset, inner_depth)?;
23171                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
23172                {
23173                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
23174                }
23175                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
23176                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
23177                }
23178            }
23179
23180            next_offset += envelope_size;
23181            _next_ordinal_to_read += 1;
23182            if next_offset >= end_offset {
23183                return Ok(());
23184            }
23185
23186            // Decode unknown envelopes for gaps in ordinals.
23187            while _next_ordinal_to_read < 4 {
23188                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
23189                _next_ordinal_to_read += 1;
23190                next_offset += envelope_size;
23191            }
23192
23193            let next_out_of_line = decoder.next_out_of_line();
23194            let handles_before = decoder.remaining_handles();
23195            if let Some((inlined, num_bytes, num_handles)) =
23196                fidl::encoding::decode_envelope_header(decoder, next_offset)?
23197            {
23198                let member_inline_size =
23199                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
23200                if inlined != (member_inline_size <= 4) {
23201                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
23202                }
23203                let inner_offset;
23204                let mut inner_depth = depth.clone();
23205                if inlined {
23206                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
23207                    inner_offset = next_offset;
23208                } else {
23209                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
23210                    inner_depth.increment()?;
23211                }
23212                let val_ref = self.rloc16.get_or_insert_with(|| fidl::new_empty!(u16, D));
23213                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
23214                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
23215                {
23216                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
23217                }
23218                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
23219                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
23220                }
23221            }
23222
23223            next_offset += envelope_size;
23224
23225            // Decode the remaining unknown envelopes.
23226            while next_offset < end_offset {
23227                _next_ordinal_to_read += 1;
23228                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
23229                next_offset += envelope_size;
23230            }
23231
23232            Ok(())
23233        }
23234    }
23235
23236    impl ServiceConfig {
23237        #[inline(always)]
23238        fn max_ordinal_present(&self) -> u64 {
23239            if let Some(_) = self.server_config {
23240                return 5;
23241            }
23242            if let Some(_) = self.service_data {
23243                return 4;
23244            }
23245            if let Some(_) = self.service_data_length {
23246                return 3;
23247            }
23248            if let Some(_) = self.enterprise_number {
23249                return 2;
23250            }
23251            if let Some(_) = self.service_id {
23252                return 1;
23253            }
23254            0
23255        }
23256    }
23257
23258    impl fidl::encoding::ValueTypeMarker for ServiceConfig {
23259        type Borrowed<'a> = &'a Self;
23260        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
23261            value
23262        }
23263    }
23264
23265    unsafe impl fidl::encoding::TypeMarker for ServiceConfig {
23266        type Owned = Self;
23267
23268        #[inline(always)]
23269        fn inline_align(_context: fidl::encoding::Context) -> usize {
23270            8
23271        }
23272
23273        #[inline(always)]
23274        fn inline_size(_context: fidl::encoding::Context) -> usize {
23275            16
23276        }
23277    }
23278
23279    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<ServiceConfig, D>
23280        for &ServiceConfig
23281    {
23282        unsafe fn encode(
23283            self,
23284            encoder: &mut fidl::encoding::Encoder<'_, D>,
23285            offset: usize,
23286            mut depth: fidl::encoding::Depth,
23287        ) -> fidl::Result<()> {
23288            encoder.debug_check_bounds::<ServiceConfig>(offset);
23289            // Vector header
23290            let max_ordinal: u64 = self.max_ordinal_present();
23291            encoder.write_num(max_ordinal, offset);
23292            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
23293            // Calling encoder.out_of_line_offset(0) is not allowed.
23294            if max_ordinal == 0 {
23295                return Ok(());
23296            }
23297            depth.increment()?;
23298            let envelope_size = 8;
23299            let bytes_len = max_ordinal as usize * envelope_size;
23300            #[allow(unused_variables)]
23301            let offset = encoder.out_of_line_offset(bytes_len);
23302            let mut _prev_end_offset: usize = 0;
23303            if 1 > max_ordinal {
23304                return Ok(());
23305            }
23306
23307            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
23308            // are envelope_size bytes.
23309            let cur_offset: usize = (1 - 1) * envelope_size;
23310
23311            // Zero reserved fields.
23312            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
23313
23314            // Safety:
23315            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
23316            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
23317            //   envelope_size bytes, there is always sufficient room.
23318            fidl::encoding::encode_in_envelope_optional::<u8, D>(
23319                self.service_id.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
23320                encoder,
23321                offset + cur_offset,
23322                depth,
23323            )?;
23324
23325            _prev_end_offset = cur_offset + envelope_size;
23326            if 2 > max_ordinal {
23327                return Ok(());
23328            }
23329
23330            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
23331            // are envelope_size bytes.
23332            let cur_offset: usize = (2 - 1) * envelope_size;
23333
23334            // Zero reserved fields.
23335            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
23336
23337            // Safety:
23338            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
23339            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
23340            //   envelope_size bytes, there is always sufficient room.
23341            fidl::encoding::encode_in_envelope_optional::<u32, D>(
23342                self.enterprise_number
23343                    .as_ref()
23344                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
23345                encoder,
23346                offset + cur_offset,
23347                depth,
23348            )?;
23349
23350            _prev_end_offset = cur_offset + envelope_size;
23351            if 3 > max_ordinal {
23352                return Ok(());
23353            }
23354
23355            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
23356            // are envelope_size bytes.
23357            let cur_offset: usize = (3 - 1) * envelope_size;
23358
23359            // Zero reserved fields.
23360            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
23361
23362            // Safety:
23363            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
23364            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
23365            //   envelope_size bytes, there is always sufficient room.
23366            fidl::encoding::encode_in_envelope_optional::<u8, D>(
23367                self.service_data_length
23368                    .as_ref()
23369                    .map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
23370                encoder,
23371                offset + cur_offset,
23372                depth,
23373            )?;
23374
23375            _prev_end_offset = cur_offset + envelope_size;
23376            if 4 > max_ordinal {
23377                return Ok(());
23378            }
23379
23380            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
23381            // are envelope_size bytes.
23382            let cur_offset: usize = (4 - 1) * envelope_size;
23383
23384            // Zero reserved fields.
23385            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
23386
23387            // Safety:
23388            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
23389            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
23390            //   envelope_size bytes, there is always sufficient room.
23391            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u8, 252>, D>(
23392                self.service_data.as_ref().map(
23393                    <fidl::encoding::Vector<u8, 252> as fidl::encoding::ValueTypeMarker>::borrow,
23394                ),
23395                encoder,
23396                offset + cur_offset,
23397                depth,
23398            )?;
23399
23400            _prev_end_offset = cur_offset + envelope_size;
23401            if 5 > max_ordinal {
23402                return Ok(());
23403            }
23404
23405            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
23406            // are envelope_size bytes.
23407            let cur_offset: usize = (5 - 1) * envelope_size;
23408
23409            // Zero reserved fields.
23410            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
23411
23412            // Safety:
23413            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
23414            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
23415            //   envelope_size bytes, there is always sufficient room.
23416            fidl::encoding::encode_in_envelope_optional::<ServerConfig, D>(
23417                self.server_config
23418                    .as_ref()
23419                    .map(<ServerConfig as fidl::encoding::ValueTypeMarker>::borrow),
23420                encoder,
23421                offset + cur_offset,
23422                depth,
23423            )?;
23424
23425            _prev_end_offset = cur_offset + envelope_size;
23426
23427            Ok(())
23428        }
23429    }
23430
23431    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ServiceConfig {
23432        #[inline(always)]
23433        fn new_empty() -> Self {
23434            Self::default()
23435        }
23436
23437        unsafe fn decode(
23438            &mut self,
23439            decoder: &mut fidl::encoding::Decoder<'_, D>,
23440            offset: usize,
23441            mut depth: fidl::encoding::Depth,
23442        ) -> fidl::Result<()> {
23443            decoder.debug_check_bounds::<Self>(offset);
23444            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
23445                None => return Err(fidl::Error::NotNullable),
23446                Some(len) => len,
23447            };
23448            // Calling decoder.out_of_line_offset(0) is not allowed.
23449            if len == 0 {
23450                return Ok(());
23451            };
23452            depth.increment()?;
23453            let envelope_size = 8;
23454            let bytes_len = len * envelope_size;
23455            let offset = decoder.out_of_line_offset(bytes_len)?;
23456            // Decode the envelope for each type.
23457            let mut _next_ordinal_to_read = 0;
23458            let mut next_offset = offset;
23459            let end_offset = offset + bytes_len;
23460            _next_ordinal_to_read += 1;
23461            if next_offset >= end_offset {
23462                return Ok(());
23463            }
23464
23465            // Decode unknown envelopes for gaps in ordinals.
23466            while _next_ordinal_to_read < 1 {
23467                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
23468                _next_ordinal_to_read += 1;
23469                next_offset += envelope_size;
23470            }
23471
23472            let next_out_of_line = decoder.next_out_of_line();
23473            let handles_before = decoder.remaining_handles();
23474            if let Some((inlined, num_bytes, num_handles)) =
23475                fidl::encoding::decode_envelope_header(decoder, next_offset)?
23476            {
23477                let member_inline_size =
23478                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
23479                if inlined != (member_inline_size <= 4) {
23480                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
23481                }
23482                let inner_offset;
23483                let mut inner_depth = depth.clone();
23484                if inlined {
23485                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
23486                    inner_offset = next_offset;
23487                } else {
23488                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
23489                    inner_depth.increment()?;
23490                }
23491                let val_ref = self.service_id.get_or_insert_with(|| fidl::new_empty!(u8, D));
23492                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
23493                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
23494                {
23495                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
23496                }
23497                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
23498                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
23499                }
23500            }
23501
23502            next_offset += envelope_size;
23503            _next_ordinal_to_read += 1;
23504            if next_offset >= end_offset {
23505                return Ok(());
23506            }
23507
23508            // Decode unknown envelopes for gaps in ordinals.
23509            while _next_ordinal_to_read < 2 {
23510                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
23511                _next_ordinal_to_read += 1;
23512                next_offset += envelope_size;
23513            }
23514
23515            let next_out_of_line = decoder.next_out_of_line();
23516            let handles_before = decoder.remaining_handles();
23517            if let Some((inlined, num_bytes, num_handles)) =
23518                fidl::encoding::decode_envelope_header(decoder, next_offset)?
23519            {
23520                let member_inline_size =
23521                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
23522                if inlined != (member_inline_size <= 4) {
23523                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
23524                }
23525                let inner_offset;
23526                let mut inner_depth = depth.clone();
23527                if inlined {
23528                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
23529                    inner_offset = next_offset;
23530                } else {
23531                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
23532                    inner_depth.increment()?;
23533                }
23534                let val_ref =
23535                    self.enterprise_number.get_or_insert_with(|| fidl::new_empty!(u32, D));
23536                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
23537                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
23538                {
23539                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
23540                }
23541                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
23542                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
23543                }
23544            }
23545
23546            next_offset += envelope_size;
23547            _next_ordinal_to_read += 1;
23548            if next_offset >= end_offset {
23549                return Ok(());
23550            }
23551
23552            // Decode unknown envelopes for gaps in ordinals.
23553            while _next_ordinal_to_read < 3 {
23554                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
23555                _next_ordinal_to_read += 1;
23556                next_offset += envelope_size;
23557            }
23558
23559            let next_out_of_line = decoder.next_out_of_line();
23560            let handles_before = decoder.remaining_handles();
23561            if let Some((inlined, num_bytes, num_handles)) =
23562                fidl::encoding::decode_envelope_header(decoder, next_offset)?
23563            {
23564                let member_inline_size =
23565                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
23566                if inlined != (member_inline_size <= 4) {
23567                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
23568                }
23569                let inner_offset;
23570                let mut inner_depth = depth.clone();
23571                if inlined {
23572                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
23573                    inner_offset = next_offset;
23574                } else {
23575                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
23576                    inner_depth.increment()?;
23577                }
23578                let val_ref =
23579                    self.service_data_length.get_or_insert_with(|| fidl::new_empty!(u8, D));
23580                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
23581                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
23582                {
23583                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
23584                }
23585                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
23586                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
23587                }
23588            }
23589
23590            next_offset += envelope_size;
23591            _next_ordinal_to_read += 1;
23592            if next_offset >= end_offset {
23593                return Ok(());
23594            }
23595
23596            // Decode unknown envelopes for gaps in ordinals.
23597            while _next_ordinal_to_read < 4 {
23598                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
23599                _next_ordinal_to_read += 1;
23600                next_offset += envelope_size;
23601            }
23602
23603            let next_out_of_line = decoder.next_out_of_line();
23604            let handles_before = decoder.remaining_handles();
23605            if let Some((inlined, num_bytes, num_handles)) =
23606                fidl::encoding::decode_envelope_header(decoder, next_offset)?
23607            {
23608                let member_inline_size =
23609                    <fidl::encoding::Vector<u8, 252> as fidl::encoding::TypeMarker>::inline_size(
23610                        decoder.context,
23611                    );
23612                if inlined != (member_inline_size <= 4) {
23613                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
23614                }
23615                let inner_offset;
23616                let mut inner_depth = depth.clone();
23617                if inlined {
23618                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
23619                    inner_offset = next_offset;
23620                } else {
23621                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
23622                    inner_depth.increment()?;
23623                }
23624                let val_ref = self
23625                    .service_data
23626                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u8, 252>, D));
23627                fidl::decode!(fidl::encoding::Vector<u8, 252>, D, val_ref, decoder, inner_offset, inner_depth)?;
23628                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
23629                {
23630                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
23631                }
23632                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
23633                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
23634                }
23635            }
23636
23637            next_offset += envelope_size;
23638            _next_ordinal_to_read += 1;
23639            if next_offset >= end_offset {
23640                return Ok(());
23641            }
23642
23643            // Decode unknown envelopes for gaps in ordinals.
23644            while _next_ordinal_to_read < 5 {
23645                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
23646                _next_ordinal_to_read += 1;
23647                next_offset += envelope_size;
23648            }
23649
23650            let next_out_of_line = decoder.next_out_of_line();
23651            let handles_before = decoder.remaining_handles();
23652            if let Some((inlined, num_bytes, num_handles)) =
23653                fidl::encoding::decode_envelope_header(decoder, next_offset)?
23654            {
23655                let member_inline_size =
23656                    <ServerConfig as fidl::encoding::TypeMarker>::inline_size(decoder.context);
23657                if inlined != (member_inline_size <= 4) {
23658                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
23659                }
23660                let inner_offset;
23661                let mut inner_depth = depth.clone();
23662                if inlined {
23663                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
23664                    inner_offset = next_offset;
23665                } else {
23666                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
23667                    inner_depth.increment()?;
23668                }
23669                let val_ref =
23670                    self.server_config.get_or_insert_with(|| fidl::new_empty!(ServerConfig, D));
23671                fidl::decode!(ServerConfig, D, val_ref, decoder, inner_offset, inner_depth)?;
23672                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
23673                {
23674                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
23675                }
23676                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
23677                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
23678                }
23679            }
23680
23681            next_offset += envelope_size;
23682
23683            // Decode the remaining unknown envelopes.
23684            while next_offset < end_offset {
23685                _next_ordinal_to_read += 1;
23686                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
23687                next_offset += envelope_size;
23688            }
23689
23690            Ok(())
23691        }
23692    }
23693
23694    impl SrpServerHost {
23695        #[inline(always)]
23696        fn max_ordinal_present(&self) -> u64 {
23697            if let Some(_) = self.addresses {
23698                return 3;
23699            }
23700            if let Some(_) = self.deleted {
23701                return 2;
23702            }
23703            if let Some(_) = self.name {
23704                return 1;
23705            }
23706            0
23707        }
23708    }
23709
23710    impl fidl::encoding::ValueTypeMarker for SrpServerHost {
23711        type Borrowed<'a> = &'a Self;
23712        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
23713            value
23714        }
23715    }
23716
23717    unsafe impl fidl::encoding::TypeMarker for SrpServerHost {
23718        type Owned = Self;
23719
23720        #[inline(always)]
23721        fn inline_align(_context: fidl::encoding::Context) -> usize {
23722            8
23723        }
23724
23725        #[inline(always)]
23726        fn inline_size(_context: fidl::encoding::Context) -> usize {
23727            16
23728        }
23729    }
23730
23731    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<SrpServerHost, D>
23732        for &SrpServerHost
23733    {
23734        unsafe fn encode(
23735            self,
23736            encoder: &mut fidl::encoding::Encoder<'_, D>,
23737            offset: usize,
23738            mut depth: fidl::encoding::Depth,
23739        ) -> fidl::Result<()> {
23740            encoder.debug_check_bounds::<SrpServerHost>(offset);
23741            // Vector header
23742            let max_ordinal: u64 = self.max_ordinal_present();
23743            encoder.write_num(max_ordinal, offset);
23744            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
23745            // Calling encoder.out_of_line_offset(0) is not allowed.
23746            if max_ordinal == 0 {
23747                return Ok(());
23748            }
23749            depth.increment()?;
23750            let envelope_size = 8;
23751            let bytes_len = max_ordinal as usize * envelope_size;
23752            #[allow(unused_variables)]
23753            let offset = encoder.out_of_line_offset(bytes_len);
23754            let mut _prev_end_offset: usize = 0;
23755            if 1 > max_ordinal {
23756                return Ok(());
23757            }
23758
23759            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
23760            // are envelope_size bytes.
23761            let cur_offset: usize = (1 - 1) * envelope_size;
23762
23763            // Zero reserved fields.
23764            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
23765
23766            // Safety:
23767            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
23768            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
23769            //   envelope_size bytes, there is always sufficient room.
23770            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<255>, D>(
23771                self.name.as_ref().map(
23772                    <fidl::encoding::BoundedString<255> as fidl::encoding::ValueTypeMarker>::borrow,
23773                ),
23774                encoder,
23775                offset + cur_offset,
23776                depth,
23777            )?;
23778
23779            _prev_end_offset = cur_offset + envelope_size;
23780            if 2 > max_ordinal {
23781                return Ok(());
23782            }
23783
23784            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
23785            // are envelope_size bytes.
23786            let cur_offset: usize = (2 - 1) * envelope_size;
23787
23788            // Zero reserved fields.
23789            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
23790
23791            // Safety:
23792            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
23793            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
23794            //   envelope_size bytes, there is always sufficient room.
23795            fidl::encoding::encode_in_envelope_optional::<bool, D>(
23796                self.deleted.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
23797                encoder,
23798                offset + cur_offset,
23799                depth,
23800            )?;
23801
23802            _prev_end_offset = cur_offset + envelope_size;
23803            if 3 > max_ordinal {
23804                return Ok(());
23805            }
23806
23807            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
23808            // are envelope_size bytes.
23809            let cur_offset: usize = (3 - 1) * envelope_size;
23810
23811            // Zero reserved fields.
23812            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
23813
23814            // Safety:
23815            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
23816            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
23817            //   envelope_size bytes, there is always sufficient room.
23818            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<fidl_fuchsia_net_common::Ipv6Address, 16>, D>(
23819            self.addresses.as_ref().map(<fidl::encoding::Vector<fidl_fuchsia_net_common::Ipv6Address, 16> as fidl::encoding::ValueTypeMarker>::borrow),
23820            encoder, offset + cur_offset, depth
23821        )?;
23822
23823            _prev_end_offset = cur_offset + envelope_size;
23824
23825            Ok(())
23826        }
23827    }
23828
23829    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SrpServerHost {
23830        #[inline(always)]
23831        fn new_empty() -> Self {
23832            Self::default()
23833        }
23834
23835        unsafe fn decode(
23836            &mut self,
23837            decoder: &mut fidl::encoding::Decoder<'_, D>,
23838            offset: usize,
23839            mut depth: fidl::encoding::Depth,
23840        ) -> fidl::Result<()> {
23841            decoder.debug_check_bounds::<Self>(offset);
23842            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
23843                None => return Err(fidl::Error::NotNullable),
23844                Some(len) => len,
23845            };
23846            // Calling decoder.out_of_line_offset(0) is not allowed.
23847            if len == 0 {
23848                return Ok(());
23849            };
23850            depth.increment()?;
23851            let envelope_size = 8;
23852            let bytes_len = len * envelope_size;
23853            let offset = decoder.out_of_line_offset(bytes_len)?;
23854            // Decode the envelope for each type.
23855            let mut _next_ordinal_to_read = 0;
23856            let mut next_offset = offset;
23857            let end_offset = offset + bytes_len;
23858            _next_ordinal_to_read += 1;
23859            if next_offset >= end_offset {
23860                return Ok(());
23861            }
23862
23863            // Decode unknown envelopes for gaps in ordinals.
23864            while _next_ordinal_to_read < 1 {
23865                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
23866                _next_ordinal_to_read += 1;
23867                next_offset += envelope_size;
23868            }
23869
23870            let next_out_of_line = decoder.next_out_of_line();
23871            let handles_before = decoder.remaining_handles();
23872            if let Some((inlined, num_bytes, num_handles)) =
23873                fidl::encoding::decode_envelope_header(decoder, next_offset)?
23874            {
23875                let member_inline_size =
23876                    <fidl::encoding::BoundedString<255> as fidl::encoding::TypeMarker>::inline_size(
23877                        decoder.context,
23878                    );
23879                if inlined != (member_inline_size <= 4) {
23880                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
23881                }
23882                let inner_offset;
23883                let mut inner_depth = depth.clone();
23884                if inlined {
23885                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
23886                    inner_offset = next_offset;
23887                } else {
23888                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
23889                    inner_depth.increment()?;
23890                }
23891                let val_ref = self
23892                    .name
23893                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<255>, D));
23894                fidl::decode!(
23895                    fidl::encoding::BoundedString<255>,
23896                    D,
23897                    val_ref,
23898                    decoder,
23899                    inner_offset,
23900                    inner_depth
23901                )?;
23902                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
23903                {
23904                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
23905                }
23906                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
23907                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
23908                }
23909            }
23910
23911            next_offset += envelope_size;
23912            _next_ordinal_to_read += 1;
23913            if next_offset >= end_offset {
23914                return Ok(());
23915            }
23916
23917            // Decode unknown envelopes for gaps in ordinals.
23918            while _next_ordinal_to_read < 2 {
23919                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
23920                _next_ordinal_to_read += 1;
23921                next_offset += envelope_size;
23922            }
23923
23924            let next_out_of_line = decoder.next_out_of_line();
23925            let handles_before = decoder.remaining_handles();
23926            if let Some((inlined, num_bytes, num_handles)) =
23927                fidl::encoding::decode_envelope_header(decoder, next_offset)?
23928            {
23929                let member_inline_size =
23930                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
23931                if inlined != (member_inline_size <= 4) {
23932                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
23933                }
23934                let inner_offset;
23935                let mut inner_depth = depth.clone();
23936                if inlined {
23937                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
23938                    inner_offset = next_offset;
23939                } else {
23940                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
23941                    inner_depth.increment()?;
23942                }
23943                let val_ref = self.deleted.get_or_insert_with(|| fidl::new_empty!(bool, D));
23944                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
23945                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
23946                {
23947                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
23948                }
23949                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
23950                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
23951                }
23952            }
23953
23954            next_offset += envelope_size;
23955            _next_ordinal_to_read += 1;
23956            if next_offset >= end_offset {
23957                return Ok(());
23958            }
23959
23960            // Decode unknown envelopes for gaps in ordinals.
23961            while _next_ordinal_to_read < 3 {
23962                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
23963                _next_ordinal_to_read += 1;
23964                next_offset += envelope_size;
23965            }
23966
23967            let next_out_of_line = decoder.next_out_of_line();
23968            let handles_before = decoder.remaining_handles();
23969            if let Some((inlined, num_bytes, num_handles)) =
23970                fidl::encoding::decode_envelope_header(decoder, next_offset)?
23971            {
23972                let member_inline_size = <fidl::encoding::Vector<
23973                    fidl_fuchsia_net_common::Ipv6Address,
23974                    16,
23975                > as fidl::encoding::TypeMarker>::inline_size(
23976                    decoder.context
23977                );
23978                if inlined != (member_inline_size <= 4) {
23979                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
23980                }
23981                let inner_offset;
23982                let mut inner_depth = depth.clone();
23983                if inlined {
23984                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
23985                    inner_offset = next_offset;
23986                } else {
23987                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
23988                    inner_depth.increment()?;
23989                }
23990                let val_ref =
23991                self.addresses.get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<fidl_fuchsia_net_common::Ipv6Address, 16>, D));
23992                fidl::decode!(fidl::encoding::Vector<fidl_fuchsia_net_common::Ipv6Address, 16>, D, val_ref, decoder, inner_offset, inner_depth)?;
23993                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
23994                {
23995                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
23996                }
23997                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
23998                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
23999                }
24000            }
24001
24002            next_offset += envelope_size;
24003
24004            // Decode the remaining unknown envelopes.
24005            while next_offset < end_offset {
24006                _next_ordinal_to_read += 1;
24007                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
24008                next_offset += envelope_size;
24009            }
24010
24011            Ok(())
24012        }
24013    }
24014
24015    impl SrpServerInfo {
24016        #[inline(always)]
24017        fn max_ordinal_present(&self) -> u64 {
24018            if let Some(_) = self.services {
24019                return 8;
24020            }
24021            if let Some(_) = self.hosts {
24022                return 7;
24023            }
24024            if let Some(_) = self.services_registration {
24025                return 6;
24026            }
24027            if let Some(_) = self.hosts_registration {
24028                return 5;
24029            }
24030            if let Some(_) = self.response_counters {
24031                return 4;
24032            }
24033            if let Some(_) = self.address_mode {
24034                return 3;
24035            }
24036            if let Some(_) = self.port {
24037                return 2;
24038            }
24039            if let Some(_) = self.state {
24040                return 1;
24041            }
24042            0
24043        }
24044    }
24045
24046    impl fidl::encoding::ValueTypeMarker for SrpServerInfo {
24047        type Borrowed<'a> = &'a Self;
24048        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
24049            value
24050        }
24051    }
24052
24053    unsafe impl fidl::encoding::TypeMarker for SrpServerInfo {
24054        type Owned = Self;
24055
24056        #[inline(always)]
24057        fn inline_align(_context: fidl::encoding::Context) -> usize {
24058            8
24059        }
24060
24061        #[inline(always)]
24062        fn inline_size(_context: fidl::encoding::Context) -> usize {
24063            16
24064        }
24065    }
24066
24067    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<SrpServerInfo, D>
24068        for &SrpServerInfo
24069    {
24070        unsafe fn encode(
24071            self,
24072            encoder: &mut fidl::encoding::Encoder<'_, D>,
24073            offset: usize,
24074            mut depth: fidl::encoding::Depth,
24075        ) -> fidl::Result<()> {
24076            encoder.debug_check_bounds::<SrpServerInfo>(offset);
24077            // Vector header
24078            let max_ordinal: u64 = self.max_ordinal_present();
24079            encoder.write_num(max_ordinal, offset);
24080            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
24081            // Calling encoder.out_of_line_offset(0) is not allowed.
24082            if max_ordinal == 0 {
24083                return Ok(());
24084            }
24085            depth.increment()?;
24086            let envelope_size = 8;
24087            let bytes_len = max_ordinal as usize * envelope_size;
24088            #[allow(unused_variables)]
24089            let offset = encoder.out_of_line_offset(bytes_len);
24090            let mut _prev_end_offset: usize = 0;
24091            if 1 > max_ordinal {
24092                return Ok(());
24093            }
24094
24095            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
24096            // are envelope_size bytes.
24097            let cur_offset: usize = (1 - 1) * envelope_size;
24098
24099            // Zero reserved fields.
24100            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
24101
24102            // Safety:
24103            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
24104            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
24105            //   envelope_size bytes, there is always sufficient room.
24106            fidl::encoding::encode_in_envelope_optional::<SrpServerState, D>(
24107                self.state
24108                    .as_ref()
24109                    .map(<SrpServerState as fidl::encoding::ValueTypeMarker>::borrow),
24110                encoder,
24111                offset + cur_offset,
24112                depth,
24113            )?;
24114
24115            _prev_end_offset = cur_offset + envelope_size;
24116            if 2 > max_ordinal {
24117                return Ok(());
24118            }
24119
24120            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
24121            // are envelope_size bytes.
24122            let cur_offset: usize = (2 - 1) * envelope_size;
24123
24124            // Zero reserved fields.
24125            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
24126
24127            // Safety:
24128            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
24129            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
24130            //   envelope_size bytes, there is always sufficient room.
24131            fidl::encoding::encode_in_envelope_optional::<u16, D>(
24132                self.port.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
24133                encoder,
24134                offset + cur_offset,
24135                depth,
24136            )?;
24137
24138            _prev_end_offset = cur_offset + envelope_size;
24139            if 3 > max_ordinal {
24140                return Ok(());
24141            }
24142
24143            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
24144            // are envelope_size bytes.
24145            let cur_offset: usize = (3 - 1) * envelope_size;
24146
24147            // Zero reserved fields.
24148            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
24149
24150            // Safety:
24151            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
24152            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
24153            //   envelope_size bytes, there is always sufficient room.
24154            fidl::encoding::encode_in_envelope_optional::<SrpServerAddressMode, D>(
24155                self.address_mode
24156                    .as_ref()
24157                    .map(<SrpServerAddressMode as fidl::encoding::ValueTypeMarker>::borrow),
24158                encoder,
24159                offset + cur_offset,
24160                depth,
24161            )?;
24162
24163            _prev_end_offset = cur_offset + envelope_size;
24164            if 4 > max_ordinal {
24165                return Ok(());
24166            }
24167
24168            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
24169            // are envelope_size bytes.
24170            let cur_offset: usize = (4 - 1) * envelope_size;
24171
24172            // Zero reserved fields.
24173            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
24174
24175            // Safety:
24176            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
24177            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
24178            //   envelope_size bytes, there is always sufficient room.
24179            fidl::encoding::encode_in_envelope_optional::<SrpServerResponseCounters, D>(
24180                self.response_counters
24181                    .as_ref()
24182                    .map(<SrpServerResponseCounters as fidl::encoding::ValueTypeMarker>::borrow),
24183                encoder,
24184                offset + cur_offset,
24185                depth,
24186            )?;
24187
24188            _prev_end_offset = cur_offset + envelope_size;
24189            if 5 > max_ordinal {
24190                return Ok(());
24191            }
24192
24193            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
24194            // are envelope_size bytes.
24195            let cur_offset: usize = (5 - 1) * envelope_size;
24196
24197            // Zero reserved fields.
24198            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
24199
24200            // Safety:
24201            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
24202            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
24203            //   envelope_size bytes, there is always sufficient room.
24204            fidl::encoding::encode_in_envelope_optional::<SrpServerRegistration, D>(
24205                self.hosts_registration
24206                    .as_ref()
24207                    .map(<SrpServerRegistration as fidl::encoding::ValueTypeMarker>::borrow),
24208                encoder,
24209                offset + cur_offset,
24210                depth,
24211            )?;
24212
24213            _prev_end_offset = cur_offset + envelope_size;
24214            if 6 > max_ordinal {
24215                return Ok(());
24216            }
24217
24218            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
24219            // are envelope_size bytes.
24220            let cur_offset: usize = (6 - 1) * envelope_size;
24221
24222            // Zero reserved fields.
24223            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
24224
24225            // Safety:
24226            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
24227            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
24228            //   envelope_size bytes, there is always sufficient room.
24229            fidl::encoding::encode_in_envelope_optional::<SrpServerRegistration, D>(
24230                self.services_registration
24231                    .as_ref()
24232                    .map(<SrpServerRegistration as fidl::encoding::ValueTypeMarker>::borrow),
24233                encoder,
24234                offset + cur_offset,
24235                depth,
24236            )?;
24237
24238            _prev_end_offset = cur_offset + envelope_size;
24239            if 7 > max_ordinal {
24240                return Ok(());
24241            }
24242
24243            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
24244            // are envelope_size bytes.
24245            let cur_offset: usize = (7 - 1) * envelope_size;
24246
24247            // Zero reserved fields.
24248            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
24249
24250            // Safety:
24251            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
24252            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
24253            //   envelope_size bytes, there is always sufficient room.
24254            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<SrpServerHost, 64>, D>(
24255            self.hosts.as_ref().map(<fidl::encoding::Vector<SrpServerHost, 64> as fidl::encoding::ValueTypeMarker>::borrow),
24256            encoder, offset + cur_offset, depth
24257        )?;
24258
24259            _prev_end_offset = cur_offset + envelope_size;
24260            if 8 > max_ordinal {
24261                return Ok(());
24262            }
24263
24264            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
24265            // are envelope_size bytes.
24266            let cur_offset: usize = (8 - 1) * envelope_size;
24267
24268            // Zero reserved fields.
24269            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
24270
24271            // Safety:
24272            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
24273            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
24274            //   envelope_size bytes, there is always sufficient room.
24275            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<SrpServerService, 64>, D>(
24276            self.services.as_ref().map(<fidl::encoding::Vector<SrpServerService, 64> as fidl::encoding::ValueTypeMarker>::borrow),
24277            encoder, offset + cur_offset, depth
24278        )?;
24279
24280            _prev_end_offset = cur_offset + envelope_size;
24281
24282            Ok(())
24283        }
24284    }
24285
24286    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SrpServerInfo {
24287        #[inline(always)]
24288        fn new_empty() -> Self {
24289            Self::default()
24290        }
24291
24292        unsafe fn decode(
24293            &mut self,
24294            decoder: &mut fidl::encoding::Decoder<'_, D>,
24295            offset: usize,
24296            mut depth: fidl::encoding::Depth,
24297        ) -> fidl::Result<()> {
24298            decoder.debug_check_bounds::<Self>(offset);
24299            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
24300                None => return Err(fidl::Error::NotNullable),
24301                Some(len) => len,
24302            };
24303            // Calling decoder.out_of_line_offset(0) is not allowed.
24304            if len == 0 {
24305                return Ok(());
24306            };
24307            depth.increment()?;
24308            let envelope_size = 8;
24309            let bytes_len = len * envelope_size;
24310            let offset = decoder.out_of_line_offset(bytes_len)?;
24311            // Decode the envelope for each type.
24312            let mut _next_ordinal_to_read = 0;
24313            let mut next_offset = offset;
24314            let end_offset = offset + bytes_len;
24315            _next_ordinal_to_read += 1;
24316            if next_offset >= end_offset {
24317                return Ok(());
24318            }
24319
24320            // Decode unknown envelopes for gaps in ordinals.
24321            while _next_ordinal_to_read < 1 {
24322                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
24323                _next_ordinal_to_read += 1;
24324                next_offset += envelope_size;
24325            }
24326
24327            let next_out_of_line = decoder.next_out_of_line();
24328            let handles_before = decoder.remaining_handles();
24329            if let Some((inlined, num_bytes, num_handles)) =
24330                fidl::encoding::decode_envelope_header(decoder, next_offset)?
24331            {
24332                let member_inline_size =
24333                    <SrpServerState as fidl::encoding::TypeMarker>::inline_size(decoder.context);
24334                if inlined != (member_inline_size <= 4) {
24335                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
24336                }
24337                let inner_offset;
24338                let mut inner_depth = depth.clone();
24339                if inlined {
24340                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
24341                    inner_offset = next_offset;
24342                } else {
24343                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
24344                    inner_depth.increment()?;
24345                }
24346                let val_ref = self.state.get_or_insert_with(|| fidl::new_empty!(SrpServerState, D));
24347                fidl::decode!(SrpServerState, D, val_ref, decoder, inner_offset, inner_depth)?;
24348                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
24349                {
24350                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
24351                }
24352                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
24353                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
24354                }
24355            }
24356
24357            next_offset += envelope_size;
24358            _next_ordinal_to_read += 1;
24359            if next_offset >= end_offset {
24360                return Ok(());
24361            }
24362
24363            // Decode unknown envelopes for gaps in ordinals.
24364            while _next_ordinal_to_read < 2 {
24365                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
24366                _next_ordinal_to_read += 1;
24367                next_offset += envelope_size;
24368            }
24369
24370            let next_out_of_line = decoder.next_out_of_line();
24371            let handles_before = decoder.remaining_handles();
24372            if let Some((inlined, num_bytes, num_handles)) =
24373                fidl::encoding::decode_envelope_header(decoder, next_offset)?
24374            {
24375                let member_inline_size =
24376                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
24377                if inlined != (member_inline_size <= 4) {
24378                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
24379                }
24380                let inner_offset;
24381                let mut inner_depth = depth.clone();
24382                if inlined {
24383                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
24384                    inner_offset = next_offset;
24385                } else {
24386                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
24387                    inner_depth.increment()?;
24388                }
24389                let val_ref = self.port.get_or_insert_with(|| fidl::new_empty!(u16, D));
24390                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
24391                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
24392                {
24393                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
24394                }
24395                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
24396                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
24397                }
24398            }
24399
24400            next_offset += envelope_size;
24401            _next_ordinal_to_read += 1;
24402            if next_offset >= end_offset {
24403                return Ok(());
24404            }
24405
24406            // Decode unknown envelopes for gaps in ordinals.
24407            while _next_ordinal_to_read < 3 {
24408                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
24409                _next_ordinal_to_read += 1;
24410                next_offset += envelope_size;
24411            }
24412
24413            let next_out_of_line = decoder.next_out_of_line();
24414            let handles_before = decoder.remaining_handles();
24415            if let Some((inlined, num_bytes, num_handles)) =
24416                fidl::encoding::decode_envelope_header(decoder, next_offset)?
24417            {
24418                let member_inline_size =
24419                    <SrpServerAddressMode as fidl::encoding::TypeMarker>::inline_size(
24420                        decoder.context,
24421                    );
24422                if inlined != (member_inline_size <= 4) {
24423                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
24424                }
24425                let inner_offset;
24426                let mut inner_depth = depth.clone();
24427                if inlined {
24428                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
24429                    inner_offset = next_offset;
24430                } else {
24431                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
24432                    inner_depth.increment()?;
24433                }
24434                let val_ref = self
24435                    .address_mode
24436                    .get_or_insert_with(|| fidl::new_empty!(SrpServerAddressMode, D));
24437                fidl::decode!(
24438                    SrpServerAddressMode,
24439                    D,
24440                    val_ref,
24441                    decoder,
24442                    inner_offset,
24443                    inner_depth
24444                )?;
24445                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
24446                {
24447                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
24448                }
24449                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
24450                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
24451                }
24452            }
24453
24454            next_offset += envelope_size;
24455            _next_ordinal_to_read += 1;
24456            if next_offset >= end_offset {
24457                return Ok(());
24458            }
24459
24460            // Decode unknown envelopes for gaps in ordinals.
24461            while _next_ordinal_to_read < 4 {
24462                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
24463                _next_ordinal_to_read += 1;
24464                next_offset += envelope_size;
24465            }
24466
24467            let next_out_of_line = decoder.next_out_of_line();
24468            let handles_before = decoder.remaining_handles();
24469            if let Some((inlined, num_bytes, num_handles)) =
24470                fidl::encoding::decode_envelope_header(decoder, next_offset)?
24471            {
24472                let member_inline_size =
24473                    <SrpServerResponseCounters as fidl::encoding::TypeMarker>::inline_size(
24474                        decoder.context,
24475                    );
24476                if inlined != (member_inline_size <= 4) {
24477                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
24478                }
24479                let inner_offset;
24480                let mut inner_depth = depth.clone();
24481                if inlined {
24482                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
24483                    inner_offset = next_offset;
24484                } else {
24485                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
24486                    inner_depth.increment()?;
24487                }
24488                let val_ref = self
24489                    .response_counters
24490                    .get_or_insert_with(|| fidl::new_empty!(SrpServerResponseCounters, D));
24491                fidl::decode!(
24492                    SrpServerResponseCounters,
24493                    D,
24494                    val_ref,
24495                    decoder,
24496                    inner_offset,
24497                    inner_depth
24498                )?;
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                    <SrpServerRegistration 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                    .hosts_registration
24544                    .get_or_insert_with(|| fidl::new_empty!(SrpServerRegistration, D));
24545                fidl::decode!(
24546                    SrpServerRegistration,
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                    <SrpServerRegistration 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                    .services_registration
24598                    .get_or_insert_with(|| fidl::new_empty!(SrpServerRegistration, D));
24599                fidl::decode!(
24600                    SrpServerRegistration,
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 = <fidl::encoding::Vector<SrpServerHost, 64> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
24635                if inlined != (member_inline_size <= 4) {
24636                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
24637                }
24638                let inner_offset;
24639                let mut inner_depth = depth.clone();
24640                if inlined {
24641                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
24642                    inner_offset = next_offset;
24643                } else {
24644                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
24645                    inner_depth.increment()?;
24646                }
24647                let val_ref = self.hosts.get_or_insert_with(
24648                    || fidl::new_empty!(fidl::encoding::Vector<SrpServerHost, 64>, D),
24649                );
24650                fidl::decode!(fidl::encoding::Vector<SrpServerHost, 64>, D, val_ref, decoder, inner_offset, inner_depth)?;
24651                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
24652                {
24653                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
24654                }
24655                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
24656                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
24657                }
24658            }
24659
24660            next_offset += envelope_size;
24661            _next_ordinal_to_read += 1;
24662            if next_offset >= end_offset {
24663                return Ok(());
24664            }
24665
24666            // Decode unknown envelopes for gaps in ordinals.
24667            while _next_ordinal_to_read < 8 {
24668                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
24669                _next_ordinal_to_read += 1;
24670                next_offset += envelope_size;
24671            }
24672
24673            let next_out_of_line = decoder.next_out_of_line();
24674            let handles_before = decoder.remaining_handles();
24675            if let Some((inlined, num_bytes, num_handles)) =
24676                fidl::encoding::decode_envelope_header(decoder, next_offset)?
24677            {
24678                let member_inline_size = <fidl::encoding::Vector<SrpServerService, 64> 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.services.get_or_insert_with(
24692                    || fidl::new_empty!(fidl::encoding::Vector<SrpServerService, 64>, D),
24693                );
24694                fidl::decode!(fidl::encoding::Vector<SrpServerService, 64>, D, val_ref, decoder, inner_offset, inner_depth)?;
24695                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
24696                {
24697                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
24698                }
24699                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
24700                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
24701                }
24702            }
24703
24704            next_offset += envelope_size;
24705
24706            // Decode the remaining unknown envelopes.
24707            while next_offset < end_offset {
24708                _next_ordinal_to_read += 1;
24709                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
24710                next_offset += envelope_size;
24711            }
24712
24713            Ok(())
24714        }
24715    }
24716
24717    impl SrpServerRegistration {
24718        #[inline(always)]
24719        fn max_ordinal_present(&self) -> u64 {
24720            if let Some(_) = self.remaining_key_lease_time_total {
24721                return 6;
24722            }
24723            if let Some(_) = self.remaining_lease_time_total {
24724                return 5;
24725            }
24726            if let Some(_) = self.key_lease_time_total {
24727                return 4;
24728            }
24729            if let Some(_) = self.lease_time_total {
24730                return 3;
24731            }
24732            if let Some(_) = self.deleted_count {
24733                return 2;
24734            }
24735            if let Some(_) = self.fresh_count {
24736                return 1;
24737            }
24738            0
24739        }
24740    }
24741
24742    impl fidl::encoding::ValueTypeMarker for SrpServerRegistration {
24743        type Borrowed<'a> = &'a Self;
24744        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
24745            value
24746        }
24747    }
24748
24749    unsafe impl fidl::encoding::TypeMarker for SrpServerRegistration {
24750        type Owned = Self;
24751
24752        #[inline(always)]
24753        fn inline_align(_context: fidl::encoding::Context) -> usize {
24754            8
24755        }
24756
24757        #[inline(always)]
24758        fn inline_size(_context: fidl::encoding::Context) -> usize {
24759            16
24760        }
24761    }
24762
24763    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<SrpServerRegistration, D>
24764        for &SrpServerRegistration
24765    {
24766        unsafe fn encode(
24767            self,
24768            encoder: &mut fidl::encoding::Encoder<'_, D>,
24769            offset: usize,
24770            mut depth: fidl::encoding::Depth,
24771        ) -> fidl::Result<()> {
24772            encoder.debug_check_bounds::<SrpServerRegistration>(offset);
24773            // Vector header
24774            let max_ordinal: u64 = self.max_ordinal_present();
24775            encoder.write_num(max_ordinal, offset);
24776            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
24777            // Calling encoder.out_of_line_offset(0) is not allowed.
24778            if max_ordinal == 0 {
24779                return Ok(());
24780            }
24781            depth.increment()?;
24782            let envelope_size = 8;
24783            let bytes_len = max_ordinal as usize * envelope_size;
24784            #[allow(unused_variables)]
24785            let offset = encoder.out_of_line_offset(bytes_len);
24786            let mut _prev_end_offset: usize = 0;
24787            if 1 > max_ordinal {
24788                return Ok(());
24789            }
24790
24791            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
24792            // are envelope_size bytes.
24793            let cur_offset: usize = (1 - 1) * envelope_size;
24794
24795            // Zero reserved fields.
24796            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
24797
24798            // Safety:
24799            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
24800            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
24801            //   envelope_size bytes, there is always sufficient room.
24802            fidl::encoding::encode_in_envelope_optional::<u32, D>(
24803                self.fresh_count.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
24804                encoder,
24805                offset + cur_offset,
24806                depth,
24807            )?;
24808
24809            _prev_end_offset = cur_offset + envelope_size;
24810            if 2 > max_ordinal {
24811                return Ok(());
24812            }
24813
24814            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
24815            // are envelope_size bytes.
24816            let cur_offset: usize = (2 - 1) * envelope_size;
24817
24818            // Zero reserved fields.
24819            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
24820
24821            // Safety:
24822            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
24823            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
24824            //   envelope_size bytes, there is always sufficient room.
24825            fidl::encoding::encode_in_envelope_optional::<u32, D>(
24826                self.deleted_count.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
24827                encoder,
24828                offset + cur_offset,
24829                depth,
24830            )?;
24831
24832            _prev_end_offset = cur_offset + envelope_size;
24833            if 3 > max_ordinal {
24834                return Ok(());
24835            }
24836
24837            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
24838            // are envelope_size bytes.
24839            let cur_offset: usize = (3 - 1) * envelope_size;
24840
24841            // Zero reserved fields.
24842            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
24843
24844            // Safety:
24845            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
24846            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
24847            //   envelope_size bytes, there is always sufficient room.
24848            fidl::encoding::encode_in_envelope_optional::<i64, D>(
24849                self.lease_time_total
24850                    .as_ref()
24851                    .map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
24852                encoder,
24853                offset + cur_offset,
24854                depth,
24855            )?;
24856
24857            _prev_end_offset = cur_offset + envelope_size;
24858            if 4 > max_ordinal {
24859                return Ok(());
24860            }
24861
24862            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
24863            // are envelope_size bytes.
24864            let cur_offset: usize = (4 - 1) * envelope_size;
24865
24866            // Zero reserved fields.
24867            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
24868
24869            // Safety:
24870            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
24871            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
24872            //   envelope_size bytes, there is always sufficient room.
24873            fidl::encoding::encode_in_envelope_optional::<i64, D>(
24874                self.key_lease_time_total
24875                    .as_ref()
24876                    .map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
24877                encoder,
24878                offset + cur_offset,
24879                depth,
24880            )?;
24881
24882            _prev_end_offset = cur_offset + envelope_size;
24883            if 5 > max_ordinal {
24884                return Ok(());
24885            }
24886
24887            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
24888            // are envelope_size bytes.
24889            let cur_offset: usize = (5 - 1) * envelope_size;
24890
24891            // Zero reserved fields.
24892            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
24893
24894            // Safety:
24895            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
24896            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
24897            //   envelope_size bytes, there is always sufficient room.
24898            fidl::encoding::encode_in_envelope_optional::<i64, D>(
24899                self.remaining_lease_time_total
24900                    .as_ref()
24901                    .map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
24902                encoder,
24903                offset + cur_offset,
24904                depth,
24905            )?;
24906
24907            _prev_end_offset = cur_offset + envelope_size;
24908            if 6 > max_ordinal {
24909                return Ok(());
24910            }
24911
24912            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
24913            // are envelope_size bytes.
24914            let cur_offset: usize = (6 - 1) * envelope_size;
24915
24916            // Zero reserved fields.
24917            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
24918
24919            // Safety:
24920            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
24921            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
24922            //   envelope_size bytes, there is always sufficient room.
24923            fidl::encoding::encode_in_envelope_optional::<i64, D>(
24924                self.remaining_key_lease_time_total
24925                    .as_ref()
24926                    .map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
24927                encoder,
24928                offset + cur_offset,
24929                depth,
24930            )?;
24931
24932            _prev_end_offset = cur_offset + envelope_size;
24933
24934            Ok(())
24935        }
24936    }
24937
24938    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SrpServerRegistration {
24939        #[inline(always)]
24940        fn new_empty() -> Self {
24941            Self::default()
24942        }
24943
24944        unsafe fn decode(
24945            &mut self,
24946            decoder: &mut fidl::encoding::Decoder<'_, D>,
24947            offset: usize,
24948            mut depth: fidl::encoding::Depth,
24949        ) -> fidl::Result<()> {
24950            decoder.debug_check_bounds::<Self>(offset);
24951            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
24952                None => return Err(fidl::Error::NotNullable),
24953                Some(len) => len,
24954            };
24955            // Calling decoder.out_of_line_offset(0) is not allowed.
24956            if len == 0 {
24957                return Ok(());
24958            };
24959            depth.increment()?;
24960            let envelope_size = 8;
24961            let bytes_len = len * envelope_size;
24962            let offset = decoder.out_of_line_offset(bytes_len)?;
24963            // Decode the envelope for each type.
24964            let mut _next_ordinal_to_read = 0;
24965            let mut next_offset = offset;
24966            let end_offset = offset + bytes_len;
24967            _next_ordinal_to_read += 1;
24968            if next_offset >= end_offset {
24969                return Ok(());
24970            }
24971
24972            // Decode unknown envelopes for gaps in ordinals.
24973            while _next_ordinal_to_read < 1 {
24974                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
24975                _next_ordinal_to_read += 1;
24976                next_offset += envelope_size;
24977            }
24978
24979            let next_out_of_line = decoder.next_out_of_line();
24980            let handles_before = decoder.remaining_handles();
24981            if let Some((inlined, num_bytes, num_handles)) =
24982                fidl::encoding::decode_envelope_header(decoder, next_offset)?
24983            {
24984                let member_inline_size =
24985                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
24986                if inlined != (member_inline_size <= 4) {
24987                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
24988                }
24989                let inner_offset;
24990                let mut inner_depth = depth.clone();
24991                if inlined {
24992                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
24993                    inner_offset = next_offset;
24994                } else {
24995                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
24996                    inner_depth.increment()?;
24997                }
24998                let val_ref = self.fresh_count.get_or_insert_with(|| fidl::new_empty!(u32, D));
24999                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
25000                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
25001                {
25002                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
25003                }
25004                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
25005                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
25006                }
25007            }
25008
25009            next_offset += envelope_size;
25010            _next_ordinal_to_read += 1;
25011            if next_offset >= end_offset {
25012                return Ok(());
25013            }
25014
25015            // Decode unknown envelopes for gaps in ordinals.
25016            while _next_ordinal_to_read < 2 {
25017                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
25018                _next_ordinal_to_read += 1;
25019                next_offset += envelope_size;
25020            }
25021
25022            let next_out_of_line = decoder.next_out_of_line();
25023            let handles_before = decoder.remaining_handles();
25024            if let Some((inlined, num_bytes, num_handles)) =
25025                fidl::encoding::decode_envelope_header(decoder, next_offset)?
25026            {
25027                let member_inline_size =
25028                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
25029                if inlined != (member_inline_size <= 4) {
25030                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
25031                }
25032                let inner_offset;
25033                let mut inner_depth = depth.clone();
25034                if inlined {
25035                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
25036                    inner_offset = next_offset;
25037                } else {
25038                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
25039                    inner_depth.increment()?;
25040                }
25041                let val_ref = self.deleted_count.get_or_insert_with(|| fidl::new_empty!(u32, D));
25042                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
25043                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
25044                {
25045                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
25046                }
25047                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
25048                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
25049                }
25050            }
25051
25052            next_offset += envelope_size;
25053            _next_ordinal_to_read += 1;
25054            if next_offset >= end_offset {
25055                return Ok(());
25056            }
25057
25058            // Decode unknown envelopes for gaps in ordinals.
25059            while _next_ordinal_to_read < 3 {
25060                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
25061                _next_ordinal_to_read += 1;
25062                next_offset += envelope_size;
25063            }
25064
25065            let next_out_of_line = decoder.next_out_of_line();
25066            let handles_before = decoder.remaining_handles();
25067            if let Some((inlined, num_bytes, num_handles)) =
25068                fidl::encoding::decode_envelope_header(decoder, next_offset)?
25069            {
25070                let member_inline_size =
25071                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
25072                if inlined != (member_inline_size <= 4) {
25073                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
25074                }
25075                let inner_offset;
25076                let mut inner_depth = depth.clone();
25077                if inlined {
25078                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
25079                    inner_offset = next_offset;
25080                } else {
25081                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
25082                    inner_depth.increment()?;
25083                }
25084                let val_ref = self.lease_time_total.get_or_insert_with(|| fidl::new_empty!(i64, D));
25085                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
25086                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
25087                {
25088                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
25089                }
25090                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
25091                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
25092                }
25093            }
25094
25095            next_offset += envelope_size;
25096            _next_ordinal_to_read += 1;
25097            if next_offset >= end_offset {
25098                return Ok(());
25099            }
25100
25101            // Decode unknown envelopes for gaps in ordinals.
25102            while _next_ordinal_to_read < 4 {
25103                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
25104                _next_ordinal_to_read += 1;
25105                next_offset += envelope_size;
25106            }
25107
25108            let next_out_of_line = decoder.next_out_of_line();
25109            let handles_before = decoder.remaining_handles();
25110            if let Some((inlined, num_bytes, num_handles)) =
25111                fidl::encoding::decode_envelope_header(decoder, next_offset)?
25112            {
25113                let member_inline_size =
25114                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
25115                if inlined != (member_inline_size <= 4) {
25116                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
25117                }
25118                let inner_offset;
25119                let mut inner_depth = depth.clone();
25120                if inlined {
25121                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
25122                    inner_offset = next_offset;
25123                } else {
25124                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
25125                    inner_depth.increment()?;
25126                }
25127                let val_ref =
25128                    self.key_lease_time_total.get_or_insert_with(|| fidl::new_empty!(i64, D));
25129                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
25130                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
25131                {
25132                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
25133                }
25134                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
25135                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
25136                }
25137            }
25138
25139            next_offset += envelope_size;
25140            _next_ordinal_to_read += 1;
25141            if next_offset >= end_offset {
25142                return Ok(());
25143            }
25144
25145            // Decode unknown envelopes for gaps in ordinals.
25146            while _next_ordinal_to_read < 5 {
25147                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
25148                _next_ordinal_to_read += 1;
25149                next_offset += envelope_size;
25150            }
25151
25152            let next_out_of_line = decoder.next_out_of_line();
25153            let handles_before = decoder.remaining_handles();
25154            if let Some((inlined, num_bytes, num_handles)) =
25155                fidl::encoding::decode_envelope_header(decoder, next_offset)?
25156            {
25157                let member_inline_size =
25158                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
25159                if inlined != (member_inline_size <= 4) {
25160                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
25161                }
25162                let inner_offset;
25163                let mut inner_depth = depth.clone();
25164                if inlined {
25165                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
25166                    inner_offset = next_offset;
25167                } else {
25168                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
25169                    inner_depth.increment()?;
25170                }
25171                let val_ref =
25172                    self.remaining_lease_time_total.get_or_insert_with(|| fidl::new_empty!(i64, D));
25173                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
25174                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
25175                {
25176                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
25177                }
25178                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
25179                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
25180                }
25181            }
25182
25183            next_offset += envelope_size;
25184            _next_ordinal_to_read += 1;
25185            if next_offset >= end_offset {
25186                return Ok(());
25187            }
25188
25189            // Decode unknown envelopes for gaps in ordinals.
25190            while _next_ordinal_to_read < 6 {
25191                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
25192                _next_ordinal_to_read += 1;
25193                next_offset += envelope_size;
25194            }
25195
25196            let next_out_of_line = decoder.next_out_of_line();
25197            let handles_before = decoder.remaining_handles();
25198            if let Some((inlined, num_bytes, num_handles)) =
25199                fidl::encoding::decode_envelope_header(decoder, next_offset)?
25200            {
25201                let member_inline_size =
25202                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
25203                if inlined != (member_inline_size <= 4) {
25204                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
25205                }
25206                let inner_offset;
25207                let mut inner_depth = depth.clone();
25208                if inlined {
25209                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
25210                    inner_offset = next_offset;
25211                } else {
25212                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
25213                    inner_depth.increment()?;
25214                }
25215                let val_ref = self
25216                    .remaining_key_lease_time_total
25217                    .get_or_insert_with(|| fidl::new_empty!(i64, D));
25218                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
25219                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
25220                {
25221                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
25222                }
25223                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
25224                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
25225                }
25226            }
25227
25228            next_offset += envelope_size;
25229
25230            // Decode the remaining unknown envelopes.
25231            while next_offset < end_offset {
25232                _next_ordinal_to_read += 1;
25233                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
25234                next_offset += envelope_size;
25235            }
25236
25237            Ok(())
25238        }
25239    }
25240
25241    impl SrpServerResponseCounters {
25242        #[inline(always)]
25243        fn max_ordinal_present(&self) -> u64 {
25244            if let Some(_) = self.other_response {
25245                return 6;
25246            }
25247            if let Some(_) = self.refused_response {
25248                return 5;
25249            }
25250            if let Some(_) = self.name_exists_response {
25251                return 4;
25252            }
25253            if let Some(_) = self.format_error_response {
25254                return 3;
25255            }
25256            if let Some(_) = self.server_failure_response {
25257                return 2;
25258            }
25259            if let Some(_) = self.success_response {
25260                return 1;
25261            }
25262            0
25263        }
25264    }
25265
25266    impl fidl::encoding::ValueTypeMarker for SrpServerResponseCounters {
25267        type Borrowed<'a> = &'a Self;
25268        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
25269            value
25270        }
25271    }
25272
25273    unsafe impl fidl::encoding::TypeMarker for SrpServerResponseCounters {
25274        type Owned = Self;
25275
25276        #[inline(always)]
25277        fn inline_align(_context: fidl::encoding::Context) -> usize {
25278            8
25279        }
25280
25281        #[inline(always)]
25282        fn inline_size(_context: fidl::encoding::Context) -> usize {
25283            16
25284        }
25285    }
25286
25287    unsafe impl<D: fidl::encoding::ResourceDialect>
25288        fidl::encoding::Encode<SrpServerResponseCounters, D> for &SrpServerResponseCounters
25289    {
25290        unsafe fn encode(
25291            self,
25292            encoder: &mut fidl::encoding::Encoder<'_, D>,
25293            offset: usize,
25294            mut depth: fidl::encoding::Depth,
25295        ) -> fidl::Result<()> {
25296            encoder.debug_check_bounds::<SrpServerResponseCounters>(offset);
25297            // Vector header
25298            let max_ordinal: u64 = self.max_ordinal_present();
25299            encoder.write_num(max_ordinal, offset);
25300            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
25301            // Calling encoder.out_of_line_offset(0) is not allowed.
25302            if max_ordinal == 0 {
25303                return Ok(());
25304            }
25305            depth.increment()?;
25306            let envelope_size = 8;
25307            let bytes_len = max_ordinal as usize * envelope_size;
25308            #[allow(unused_variables)]
25309            let offset = encoder.out_of_line_offset(bytes_len);
25310            let mut _prev_end_offset: usize = 0;
25311            if 1 > max_ordinal {
25312                return Ok(());
25313            }
25314
25315            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
25316            // are envelope_size bytes.
25317            let cur_offset: usize = (1 - 1) * envelope_size;
25318
25319            // Zero reserved fields.
25320            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
25321
25322            // Safety:
25323            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
25324            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
25325            //   envelope_size bytes, there is always sufficient room.
25326            fidl::encoding::encode_in_envelope_optional::<u32, D>(
25327                self.success_response
25328                    .as_ref()
25329                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
25330                encoder,
25331                offset + cur_offset,
25332                depth,
25333            )?;
25334
25335            _prev_end_offset = cur_offset + envelope_size;
25336            if 2 > max_ordinal {
25337                return Ok(());
25338            }
25339
25340            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
25341            // are envelope_size bytes.
25342            let cur_offset: usize = (2 - 1) * envelope_size;
25343
25344            // Zero reserved fields.
25345            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
25346
25347            // Safety:
25348            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
25349            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
25350            //   envelope_size bytes, there is always sufficient room.
25351            fidl::encoding::encode_in_envelope_optional::<u32, D>(
25352                self.server_failure_response
25353                    .as_ref()
25354                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
25355                encoder,
25356                offset + cur_offset,
25357                depth,
25358            )?;
25359
25360            _prev_end_offset = cur_offset + envelope_size;
25361            if 3 > max_ordinal {
25362                return Ok(());
25363            }
25364
25365            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
25366            // are envelope_size bytes.
25367            let cur_offset: usize = (3 - 1) * envelope_size;
25368
25369            // Zero reserved fields.
25370            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
25371
25372            // Safety:
25373            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
25374            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
25375            //   envelope_size bytes, there is always sufficient room.
25376            fidl::encoding::encode_in_envelope_optional::<u32, D>(
25377                self.format_error_response
25378                    .as_ref()
25379                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
25380                encoder,
25381                offset + cur_offset,
25382                depth,
25383            )?;
25384
25385            _prev_end_offset = cur_offset + envelope_size;
25386            if 4 > max_ordinal {
25387                return Ok(());
25388            }
25389
25390            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
25391            // are envelope_size bytes.
25392            let cur_offset: usize = (4 - 1) * envelope_size;
25393
25394            // Zero reserved fields.
25395            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
25396
25397            // Safety:
25398            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
25399            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
25400            //   envelope_size bytes, there is always sufficient room.
25401            fidl::encoding::encode_in_envelope_optional::<u32, D>(
25402                self.name_exists_response
25403                    .as_ref()
25404                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
25405                encoder,
25406                offset + cur_offset,
25407                depth,
25408            )?;
25409
25410            _prev_end_offset = cur_offset + envelope_size;
25411            if 5 > max_ordinal {
25412                return Ok(());
25413            }
25414
25415            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
25416            // are envelope_size bytes.
25417            let cur_offset: usize = (5 - 1) * envelope_size;
25418
25419            // Zero reserved fields.
25420            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
25421
25422            // Safety:
25423            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
25424            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
25425            //   envelope_size bytes, there is always sufficient room.
25426            fidl::encoding::encode_in_envelope_optional::<u32, D>(
25427                self.refused_response
25428                    .as_ref()
25429                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
25430                encoder,
25431                offset + cur_offset,
25432                depth,
25433            )?;
25434
25435            _prev_end_offset = cur_offset + envelope_size;
25436            if 6 > max_ordinal {
25437                return Ok(());
25438            }
25439
25440            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
25441            // are envelope_size bytes.
25442            let cur_offset: usize = (6 - 1) * envelope_size;
25443
25444            // Zero reserved fields.
25445            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
25446
25447            // Safety:
25448            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
25449            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
25450            //   envelope_size bytes, there is always sufficient room.
25451            fidl::encoding::encode_in_envelope_optional::<u32, D>(
25452                self.other_response.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
25453                encoder,
25454                offset + cur_offset,
25455                depth,
25456            )?;
25457
25458            _prev_end_offset = cur_offset + envelope_size;
25459
25460            Ok(())
25461        }
25462    }
25463
25464    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
25465        for SrpServerResponseCounters
25466    {
25467        #[inline(always)]
25468        fn new_empty() -> Self {
25469            Self::default()
25470        }
25471
25472        unsafe fn decode(
25473            &mut self,
25474            decoder: &mut fidl::encoding::Decoder<'_, D>,
25475            offset: usize,
25476            mut depth: fidl::encoding::Depth,
25477        ) -> fidl::Result<()> {
25478            decoder.debug_check_bounds::<Self>(offset);
25479            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
25480                None => return Err(fidl::Error::NotNullable),
25481                Some(len) => len,
25482            };
25483            // Calling decoder.out_of_line_offset(0) is not allowed.
25484            if len == 0 {
25485                return Ok(());
25486            };
25487            depth.increment()?;
25488            let envelope_size = 8;
25489            let bytes_len = len * envelope_size;
25490            let offset = decoder.out_of_line_offset(bytes_len)?;
25491            // Decode the envelope for each type.
25492            let mut _next_ordinal_to_read = 0;
25493            let mut next_offset = offset;
25494            let end_offset = offset + bytes_len;
25495            _next_ordinal_to_read += 1;
25496            if next_offset >= end_offset {
25497                return Ok(());
25498            }
25499
25500            // Decode unknown envelopes for gaps in ordinals.
25501            while _next_ordinal_to_read < 1 {
25502                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
25503                _next_ordinal_to_read += 1;
25504                next_offset += envelope_size;
25505            }
25506
25507            let next_out_of_line = decoder.next_out_of_line();
25508            let handles_before = decoder.remaining_handles();
25509            if let Some((inlined, num_bytes, num_handles)) =
25510                fidl::encoding::decode_envelope_header(decoder, next_offset)?
25511            {
25512                let member_inline_size =
25513                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
25514                if inlined != (member_inline_size <= 4) {
25515                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
25516                }
25517                let inner_offset;
25518                let mut inner_depth = depth.clone();
25519                if inlined {
25520                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
25521                    inner_offset = next_offset;
25522                } else {
25523                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
25524                    inner_depth.increment()?;
25525                }
25526                let val_ref = self.success_response.get_or_insert_with(|| fidl::new_empty!(u32, D));
25527                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
25528                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
25529                {
25530                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
25531                }
25532                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
25533                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
25534                }
25535            }
25536
25537            next_offset += envelope_size;
25538            _next_ordinal_to_read += 1;
25539            if next_offset >= end_offset {
25540                return Ok(());
25541            }
25542
25543            // Decode unknown envelopes for gaps in ordinals.
25544            while _next_ordinal_to_read < 2 {
25545                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
25546                _next_ordinal_to_read += 1;
25547                next_offset += envelope_size;
25548            }
25549
25550            let next_out_of_line = decoder.next_out_of_line();
25551            let handles_before = decoder.remaining_handles();
25552            if let Some((inlined, num_bytes, num_handles)) =
25553                fidl::encoding::decode_envelope_header(decoder, next_offset)?
25554            {
25555                let member_inline_size =
25556                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
25557                if inlined != (member_inline_size <= 4) {
25558                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
25559                }
25560                let inner_offset;
25561                let mut inner_depth = depth.clone();
25562                if inlined {
25563                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
25564                    inner_offset = next_offset;
25565                } else {
25566                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
25567                    inner_depth.increment()?;
25568                }
25569                let val_ref =
25570                    self.server_failure_response.get_or_insert_with(|| fidl::new_empty!(u32, D));
25571                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
25572                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
25573                {
25574                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
25575                }
25576                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
25577                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
25578                }
25579            }
25580
25581            next_offset += envelope_size;
25582            _next_ordinal_to_read += 1;
25583            if next_offset >= end_offset {
25584                return Ok(());
25585            }
25586
25587            // Decode unknown envelopes for gaps in ordinals.
25588            while _next_ordinal_to_read < 3 {
25589                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
25590                _next_ordinal_to_read += 1;
25591                next_offset += envelope_size;
25592            }
25593
25594            let next_out_of_line = decoder.next_out_of_line();
25595            let handles_before = decoder.remaining_handles();
25596            if let Some((inlined, num_bytes, num_handles)) =
25597                fidl::encoding::decode_envelope_header(decoder, next_offset)?
25598            {
25599                let member_inline_size =
25600                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
25601                if inlined != (member_inline_size <= 4) {
25602                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
25603                }
25604                let inner_offset;
25605                let mut inner_depth = depth.clone();
25606                if inlined {
25607                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
25608                    inner_offset = next_offset;
25609                } else {
25610                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
25611                    inner_depth.increment()?;
25612                }
25613                let val_ref =
25614                    self.format_error_response.get_or_insert_with(|| fidl::new_empty!(u32, D));
25615                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
25616                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
25617                {
25618                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
25619                }
25620                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
25621                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
25622                }
25623            }
25624
25625            next_offset += envelope_size;
25626            _next_ordinal_to_read += 1;
25627            if next_offset >= end_offset {
25628                return Ok(());
25629            }
25630
25631            // Decode unknown envelopes for gaps in ordinals.
25632            while _next_ordinal_to_read < 4 {
25633                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
25634                _next_ordinal_to_read += 1;
25635                next_offset += envelope_size;
25636            }
25637
25638            let next_out_of_line = decoder.next_out_of_line();
25639            let handles_before = decoder.remaining_handles();
25640            if let Some((inlined, num_bytes, num_handles)) =
25641                fidl::encoding::decode_envelope_header(decoder, next_offset)?
25642            {
25643                let member_inline_size =
25644                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
25645                if inlined != (member_inline_size <= 4) {
25646                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
25647                }
25648                let inner_offset;
25649                let mut inner_depth = depth.clone();
25650                if inlined {
25651                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
25652                    inner_offset = next_offset;
25653                } else {
25654                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
25655                    inner_depth.increment()?;
25656                }
25657                let val_ref =
25658                    self.name_exists_response.get_or_insert_with(|| fidl::new_empty!(u32, D));
25659                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
25660                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
25661                {
25662                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
25663                }
25664                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
25665                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
25666                }
25667            }
25668
25669            next_offset += envelope_size;
25670            _next_ordinal_to_read += 1;
25671            if next_offset >= end_offset {
25672                return Ok(());
25673            }
25674
25675            // Decode unknown envelopes for gaps in ordinals.
25676            while _next_ordinal_to_read < 5 {
25677                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
25678                _next_ordinal_to_read += 1;
25679                next_offset += envelope_size;
25680            }
25681
25682            let next_out_of_line = decoder.next_out_of_line();
25683            let handles_before = decoder.remaining_handles();
25684            if let Some((inlined, num_bytes, num_handles)) =
25685                fidl::encoding::decode_envelope_header(decoder, next_offset)?
25686            {
25687                let member_inline_size =
25688                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
25689                if inlined != (member_inline_size <= 4) {
25690                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
25691                }
25692                let inner_offset;
25693                let mut inner_depth = depth.clone();
25694                if inlined {
25695                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
25696                    inner_offset = next_offset;
25697                } else {
25698                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
25699                    inner_depth.increment()?;
25700                }
25701                let val_ref = self.refused_response.get_or_insert_with(|| fidl::new_empty!(u32, D));
25702                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
25703                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
25704                {
25705                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
25706                }
25707                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
25708                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
25709                }
25710            }
25711
25712            next_offset += envelope_size;
25713            _next_ordinal_to_read += 1;
25714            if next_offset >= end_offset {
25715                return Ok(());
25716            }
25717
25718            // Decode unknown envelopes for gaps in ordinals.
25719            while _next_ordinal_to_read < 6 {
25720                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
25721                _next_ordinal_to_read += 1;
25722                next_offset += envelope_size;
25723            }
25724
25725            let next_out_of_line = decoder.next_out_of_line();
25726            let handles_before = decoder.remaining_handles();
25727            if let Some((inlined, num_bytes, num_handles)) =
25728                fidl::encoding::decode_envelope_header(decoder, next_offset)?
25729            {
25730                let member_inline_size =
25731                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
25732                if inlined != (member_inline_size <= 4) {
25733                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
25734                }
25735                let inner_offset;
25736                let mut inner_depth = depth.clone();
25737                if inlined {
25738                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
25739                    inner_offset = next_offset;
25740                } else {
25741                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
25742                    inner_depth.increment()?;
25743                }
25744                let val_ref = self.other_response.get_or_insert_with(|| fidl::new_empty!(u32, D));
25745                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
25746                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
25747                {
25748                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
25749                }
25750                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
25751                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
25752                }
25753            }
25754
25755            next_offset += envelope_size;
25756
25757            // Decode the remaining unknown envelopes.
25758            while next_offset < end_offset {
25759                _next_ordinal_to_read += 1;
25760                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
25761                next_offset += envelope_size;
25762            }
25763
25764            Ok(())
25765        }
25766    }
25767
25768    impl SrpServerService {
25769        #[inline(always)]
25770        fn max_ordinal_present(&self) -> u64 {
25771            if let Some(_) = self.host {
25772                return 11;
25773            }
25774            if let Some(_) = self.txt_data {
25775                return 10;
25776            }
25777            if let Some(_) = self.key_lease {
25778                return 9;
25779            }
25780            if let Some(_) = self.lease {
25781                return 8;
25782            }
25783            if let Some(_) = self.ttl {
25784                return 7;
25785            }
25786            if let Some(_) = self.weight {
25787                return 6;
25788            }
25789            if let Some(_) = self.priority {
25790                return 5;
25791            }
25792            if let Some(_) = self.port {
25793                return 4;
25794            }
25795            if let Some(_) = self.subtypes {
25796                return 3;
25797            }
25798            if let Some(_) = self.deleted {
25799                return 2;
25800            }
25801            if let Some(_) = self.instance_name {
25802                return 1;
25803            }
25804            0
25805        }
25806    }
25807
25808    impl fidl::encoding::ValueTypeMarker for SrpServerService {
25809        type Borrowed<'a> = &'a Self;
25810        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
25811            value
25812        }
25813    }
25814
25815    unsafe impl fidl::encoding::TypeMarker for SrpServerService {
25816        type Owned = Self;
25817
25818        #[inline(always)]
25819        fn inline_align(_context: fidl::encoding::Context) -> usize {
25820            8
25821        }
25822
25823        #[inline(always)]
25824        fn inline_size(_context: fidl::encoding::Context) -> usize {
25825            16
25826        }
25827    }
25828
25829    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<SrpServerService, D>
25830        for &SrpServerService
25831    {
25832        unsafe fn encode(
25833            self,
25834            encoder: &mut fidl::encoding::Encoder<'_, D>,
25835            offset: usize,
25836            mut depth: fidl::encoding::Depth,
25837        ) -> fidl::Result<()> {
25838            encoder.debug_check_bounds::<SrpServerService>(offset);
25839            // Vector header
25840            let max_ordinal: u64 = self.max_ordinal_present();
25841            encoder.write_num(max_ordinal, offset);
25842            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
25843            // Calling encoder.out_of_line_offset(0) is not allowed.
25844            if max_ordinal == 0 {
25845                return Ok(());
25846            }
25847            depth.increment()?;
25848            let envelope_size = 8;
25849            let bytes_len = max_ordinal as usize * envelope_size;
25850            #[allow(unused_variables)]
25851            let offset = encoder.out_of_line_offset(bytes_len);
25852            let mut _prev_end_offset: usize = 0;
25853            if 1 > max_ordinal {
25854                return Ok(());
25855            }
25856
25857            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
25858            // are envelope_size bytes.
25859            let cur_offset: usize = (1 - 1) * envelope_size;
25860
25861            // Zero reserved fields.
25862            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
25863
25864            // Safety:
25865            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
25866            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
25867            //   envelope_size bytes, there is always sufficient room.
25868            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<255>, D>(
25869                self.instance_name.as_ref().map(
25870                    <fidl::encoding::BoundedString<255> as fidl::encoding::ValueTypeMarker>::borrow,
25871                ),
25872                encoder,
25873                offset + cur_offset,
25874                depth,
25875            )?;
25876
25877            _prev_end_offset = cur_offset + envelope_size;
25878            if 2 > max_ordinal {
25879                return Ok(());
25880            }
25881
25882            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
25883            // are envelope_size bytes.
25884            let cur_offset: usize = (2 - 1) * envelope_size;
25885
25886            // Zero reserved fields.
25887            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
25888
25889            // Safety:
25890            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
25891            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
25892            //   envelope_size bytes, there is always sufficient room.
25893            fidl::encoding::encode_in_envelope_optional::<bool, D>(
25894                self.deleted.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
25895                encoder,
25896                offset + cur_offset,
25897                depth,
25898            )?;
25899
25900            _prev_end_offset = cur_offset + envelope_size;
25901            if 3 > max_ordinal {
25902                return Ok(());
25903            }
25904
25905            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
25906            // are envelope_size bytes.
25907            let cur_offset: usize = (3 - 1) * envelope_size;
25908
25909            // Zero reserved fields.
25910            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
25911
25912            // Safety:
25913            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
25914            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
25915            //   envelope_size bytes, there is always sufficient room.
25916            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<fidl::encoding::BoundedString<63>, 6>, D>(
25917            self.subtypes.as_ref().map(<fidl::encoding::Vector<fidl::encoding::BoundedString<63>, 6> as fidl::encoding::ValueTypeMarker>::borrow),
25918            encoder, offset + cur_offset, depth
25919        )?;
25920
25921            _prev_end_offset = cur_offset + envelope_size;
25922            if 4 > max_ordinal {
25923                return Ok(());
25924            }
25925
25926            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
25927            // are envelope_size bytes.
25928            let cur_offset: usize = (4 - 1) * envelope_size;
25929
25930            // Zero reserved fields.
25931            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
25932
25933            // Safety:
25934            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
25935            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
25936            //   envelope_size bytes, there is always sufficient room.
25937            fidl::encoding::encode_in_envelope_optional::<u16, D>(
25938                self.port.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
25939                encoder,
25940                offset + cur_offset,
25941                depth,
25942            )?;
25943
25944            _prev_end_offset = cur_offset + envelope_size;
25945            if 5 > max_ordinal {
25946                return Ok(());
25947            }
25948
25949            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
25950            // are envelope_size bytes.
25951            let cur_offset: usize = (5 - 1) * envelope_size;
25952
25953            // Zero reserved fields.
25954            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
25955
25956            // Safety:
25957            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
25958            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
25959            //   envelope_size bytes, there is always sufficient room.
25960            fidl::encoding::encode_in_envelope_optional::<u16, D>(
25961                self.priority.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
25962                encoder,
25963                offset + cur_offset,
25964                depth,
25965            )?;
25966
25967            _prev_end_offset = cur_offset + envelope_size;
25968            if 6 > max_ordinal {
25969                return Ok(());
25970            }
25971
25972            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
25973            // are envelope_size bytes.
25974            let cur_offset: usize = (6 - 1) * envelope_size;
25975
25976            // Zero reserved fields.
25977            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
25978
25979            // Safety:
25980            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
25981            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
25982            //   envelope_size bytes, there is always sufficient room.
25983            fidl::encoding::encode_in_envelope_optional::<u16, D>(
25984                self.weight.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
25985                encoder,
25986                offset + cur_offset,
25987                depth,
25988            )?;
25989
25990            _prev_end_offset = cur_offset + envelope_size;
25991            if 7 > max_ordinal {
25992                return Ok(());
25993            }
25994
25995            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
25996            // are envelope_size bytes.
25997            let cur_offset: usize = (7 - 1) * envelope_size;
25998
25999            // Zero reserved fields.
26000            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
26001
26002            // Safety:
26003            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
26004            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
26005            //   envelope_size bytes, there is always sufficient room.
26006            fidl::encoding::encode_in_envelope_optional::<i64, D>(
26007                self.ttl.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
26008                encoder,
26009                offset + cur_offset,
26010                depth,
26011            )?;
26012
26013            _prev_end_offset = cur_offset + envelope_size;
26014            if 8 > max_ordinal {
26015                return Ok(());
26016            }
26017
26018            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
26019            // are envelope_size bytes.
26020            let cur_offset: usize = (8 - 1) * envelope_size;
26021
26022            // Zero reserved fields.
26023            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
26024
26025            // Safety:
26026            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
26027            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
26028            //   envelope_size bytes, there is always sufficient room.
26029            fidl::encoding::encode_in_envelope_optional::<i64, D>(
26030                self.lease.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
26031                encoder,
26032                offset + cur_offset,
26033                depth,
26034            )?;
26035
26036            _prev_end_offset = cur_offset + envelope_size;
26037            if 9 > max_ordinal {
26038                return Ok(());
26039            }
26040
26041            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
26042            // are envelope_size bytes.
26043            let cur_offset: usize = (9 - 1) * envelope_size;
26044
26045            // Zero reserved fields.
26046            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
26047
26048            // Safety:
26049            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
26050            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
26051            //   envelope_size bytes, there is always sufficient room.
26052            fidl::encoding::encode_in_envelope_optional::<i64, D>(
26053                self.key_lease.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
26054                encoder,
26055                offset + cur_offset,
26056                depth,
26057            )?;
26058
26059            _prev_end_offset = cur_offset + envelope_size;
26060            if 10 > max_ordinal {
26061                return Ok(());
26062            }
26063
26064            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
26065            // are envelope_size bytes.
26066            let cur_offset: usize = (10 - 1) * envelope_size;
26067
26068            // Zero reserved fields.
26069            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
26070
26071            // Safety:
26072            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
26073            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
26074            //   envelope_size bytes, there is always sufficient room.
26075            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<DnsTxtEntry>, D>(
26076            self.txt_data.as_ref().map(<fidl::encoding::UnboundedVector<DnsTxtEntry> as fidl::encoding::ValueTypeMarker>::borrow),
26077            encoder, offset + cur_offset, depth
26078        )?;
26079
26080            _prev_end_offset = cur_offset + envelope_size;
26081            if 11 > max_ordinal {
26082                return Ok(());
26083            }
26084
26085            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
26086            // are envelope_size bytes.
26087            let cur_offset: usize = (11 - 1) * envelope_size;
26088
26089            // Zero reserved fields.
26090            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
26091
26092            // Safety:
26093            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
26094            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
26095            //   envelope_size bytes, there is always sufficient room.
26096            fidl::encoding::encode_in_envelope_optional::<SrpServerHost, D>(
26097                self.host.as_ref().map(<SrpServerHost as fidl::encoding::ValueTypeMarker>::borrow),
26098                encoder,
26099                offset + cur_offset,
26100                depth,
26101            )?;
26102
26103            _prev_end_offset = cur_offset + envelope_size;
26104
26105            Ok(())
26106        }
26107    }
26108
26109    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SrpServerService {
26110        #[inline(always)]
26111        fn new_empty() -> Self {
26112            Self::default()
26113        }
26114
26115        unsafe fn decode(
26116            &mut self,
26117            decoder: &mut fidl::encoding::Decoder<'_, D>,
26118            offset: usize,
26119            mut depth: fidl::encoding::Depth,
26120        ) -> fidl::Result<()> {
26121            decoder.debug_check_bounds::<Self>(offset);
26122            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
26123                None => return Err(fidl::Error::NotNullable),
26124                Some(len) => len,
26125            };
26126            // Calling decoder.out_of_line_offset(0) is not allowed.
26127            if len == 0 {
26128                return Ok(());
26129            };
26130            depth.increment()?;
26131            let envelope_size = 8;
26132            let bytes_len = len * envelope_size;
26133            let offset = decoder.out_of_line_offset(bytes_len)?;
26134            // Decode the envelope for each type.
26135            let mut _next_ordinal_to_read = 0;
26136            let mut next_offset = offset;
26137            let end_offset = offset + bytes_len;
26138            _next_ordinal_to_read += 1;
26139            if next_offset >= end_offset {
26140                return Ok(());
26141            }
26142
26143            // Decode unknown envelopes for gaps in ordinals.
26144            while _next_ordinal_to_read < 1 {
26145                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
26146                _next_ordinal_to_read += 1;
26147                next_offset += envelope_size;
26148            }
26149
26150            let next_out_of_line = decoder.next_out_of_line();
26151            let handles_before = decoder.remaining_handles();
26152            if let Some((inlined, num_bytes, num_handles)) =
26153                fidl::encoding::decode_envelope_header(decoder, next_offset)?
26154            {
26155                let member_inline_size =
26156                    <fidl::encoding::BoundedString<255> as fidl::encoding::TypeMarker>::inline_size(
26157                        decoder.context,
26158                    );
26159                if inlined != (member_inline_size <= 4) {
26160                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
26161                }
26162                let inner_offset;
26163                let mut inner_depth = depth.clone();
26164                if inlined {
26165                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
26166                    inner_offset = next_offset;
26167                } else {
26168                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
26169                    inner_depth.increment()?;
26170                }
26171                let val_ref = self
26172                    .instance_name
26173                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<255>, D));
26174                fidl::decode!(
26175                    fidl::encoding::BoundedString<255>,
26176                    D,
26177                    val_ref,
26178                    decoder,
26179                    inner_offset,
26180                    inner_depth
26181                )?;
26182                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
26183                {
26184                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
26185                }
26186                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
26187                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
26188                }
26189            }
26190
26191            next_offset += envelope_size;
26192            _next_ordinal_to_read += 1;
26193            if next_offset >= end_offset {
26194                return Ok(());
26195            }
26196
26197            // Decode unknown envelopes for gaps in ordinals.
26198            while _next_ordinal_to_read < 2 {
26199                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
26200                _next_ordinal_to_read += 1;
26201                next_offset += envelope_size;
26202            }
26203
26204            let next_out_of_line = decoder.next_out_of_line();
26205            let handles_before = decoder.remaining_handles();
26206            if let Some((inlined, num_bytes, num_handles)) =
26207                fidl::encoding::decode_envelope_header(decoder, next_offset)?
26208            {
26209                let member_inline_size =
26210                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
26211                if inlined != (member_inline_size <= 4) {
26212                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
26213                }
26214                let inner_offset;
26215                let mut inner_depth = depth.clone();
26216                if inlined {
26217                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
26218                    inner_offset = next_offset;
26219                } else {
26220                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
26221                    inner_depth.increment()?;
26222                }
26223                let val_ref = self.deleted.get_or_insert_with(|| fidl::new_empty!(bool, D));
26224                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
26225                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
26226                {
26227                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
26228                }
26229                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
26230                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
26231                }
26232            }
26233
26234            next_offset += envelope_size;
26235            _next_ordinal_to_read += 1;
26236            if next_offset >= end_offset {
26237                return Ok(());
26238            }
26239
26240            // Decode unknown envelopes for gaps in ordinals.
26241            while _next_ordinal_to_read < 3 {
26242                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
26243                _next_ordinal_to_read += 1;
26244                next_offset += envelope_size;
26245            }
26246
26247            let next_out_of_line = decoder.next_out_of_line();
26248            let handles_before = decoder.remaining_handles();
26249            if let Some((inlined, num_bytes, num_handles)) =
26250                fidl::encoding::decode_envelope_header(decoder, next_offset)?
26251            {
26252                let member_inline_size = <fidl::encoding::Vector<
26253                    fidl::encoding::BoundedString<63>,
26254                    6,
26255                > as fidl::encoding::TypeMarker>::inline_size(
26256                    decoder.context
26257                );
26258                if inlined != (member_inline_size <= 4) {
26259                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
26260                }
26261                let inner_offset;
26262                let mut inner_depth = depth.clone();
26263                if inlined {
26264                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
26265                    inner_offset = next_offset;
26266                } else {
26267                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
26268                    inner_depth.increment()?;
26269                }
26270                let val_ref = self.subtypes.get_or_insert_with(|| {
26271                    fidl::new_empty!(
26272                        fidl::encoding::Vector<fidl::encoding::BoundedString<63>, 6>,
26273                        D
26274                    )
26275                });
26276                fidl::decode!(
26277                    fidl::encoding::Vector<fidl::encoding::BoundedString<63>, 6>,
26278                    D,
26279                    val_ref,
26280                    decoder,
26281                    inner_offset,
26282                    inner_depth
26283                )?;
26284                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
26285                {
26286                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
26287                }
26288                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
26289                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
26290                }
26291            }
26292
26293            next_offset += envelope_size;
26294            _next_ordinal_to_read += 1;
26295            if next_offset >= end_offset {
26296                return Ok(());
26297            }
26298
26299            // Decode unknown envelopes for gaps in ordinals.
26300            while _next_ordinal_to_read < 4 {
26301                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
26302                _next_ordinal_to_read += 1;
26303                next_offset += envelope_size;
26304            }
26305
26306            let next_out_of_line = decoder.next_out_of_line();
26307            let handles_before = decoder.remaining_handles();
26308            if let Some((inlined, num_bytes, num_handles)) =
26309                fidl::encoding::decode_envelope_header(decoder, next_offset)?
26310            {
26311                let member_inline_size =
26312                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
26313                if inlined != (member_inline_size <= 4) {
26314                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
26315                }
26316                let inner_offset;
26317                let mut inner_depth = depth.clone();
26318                if inlined {
26319                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
26320                    inner_offset = next_offset;
26321                } else {
26322                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
26323                    inner_depth.increment()?;
26324                }
26325                let val_ref = self.port.get_or_insert_with(|| fidl::new_empty!(u16, D));
26326                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
26327                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
26328                {
26329                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
26330                }
26331                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
26332                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
26333                }
26334            }
26335
26336            next_offset += envelope_size;
26337            _next_ordinal_to_read += 1;
26338            if next_offset >= end_offset {
26339                return Ok(());
26340            }
26341
26342            // Decode unknown envelopes for gaps in ordinals.
26343            while _next_ordinal_to_read < 5 {
26344                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
26345                _next_ordinal_to_read += 1;
26346                next_offset += envelope_size;
26347            }
26348
26349            let next_out_of_line = decoder.next_out_of_line();
26350            let handles_before = decoder.remaining_handles();
26351            if let Some((inlined, num_bytes, num_handles)) =
26352                fidl::encoding::decode_envelope_header(decoder, next_offset)?
26353            {
26354                let member_inline_size =
26355                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
26356                if inlined != (member_inline_size <= 4) {
26357                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
26358                }
26359                let inner_offset;
26360                let mut inner_depth = depth.clone();
26361                if inlined {
26362                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
26363                    inner_offset = next_offset;
26364                } else {
26365                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
26366                    inner_depth.increment()?;
26367                }
26368                let val_ref = self.priority.get_or_insert_with(|| fidl::new_empty!(u16, D));
26369                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
26370                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
26371                {
26372                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
26373                }
26374                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
26375                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
26376                }
26377            }
26378
26379            next_offset += envelope_size;
26380            _next_ordinal_to_read += 1;
26381            if next_offset >= end_offset {
26382                return Ok(());
26383            }
26384
26385            // Decode unknown envelopes for gaps in ordinals.
26386            while _next_ordinal_to_read < 6 {
26387                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
26388                _next_ordinal_to_read += 1;
26389                next_offset += envelope_size;
26390            }
26391
26392            let next_out_of_line = decoder.next_out_of_line();
26393            let handles_before = decoder.remaining_handles();
26394            if let Some((inlined, num_bytes, num_handles)) =
26395                fidl::encoding::decode_envelope_header(decoder, next_offset)?
26396            {
26397                let member_inline_size =
26398                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
26399                if inlined != (member_inline_size <= 4) {
26400                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
26401                }
26402                let inner_offset;
26403                let mut inner_depth = depth.clone();
26404                if inlined {
26405                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
26406                    inner_offset = next_offset;
26407                } else {
26408                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
26409                    inner_depth.increment()?;
26410                }
26411                let val_ref = self.weight.get_or_insert_with(|| fidl::new_empty!(u16, D));
26412                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
26413                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
26414                {
26415                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
26416                }
26417                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
26418                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
26419                }
26420            }
26421
26422            next_offset += envelope_size;
26423            _next_ordinal_to_read += 1;
26424            if next_offset >= end_offset {
26425                return Ok(());
26426            }
26427
26428            // Decode unknown envelopes for gaps in ordinals.
26429            while _next_ordinal_to_read < 7 {
26430                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
26431                _next_ordinal_to_read += 1;
26432                next_offset += envelope_size;
26433            }
26434
26435            let next_out_of_line = decoder.next_out_of_line();
26436            let handles_before = decoder.remaining_handles();
26437            if let Some((inlined, num_bytes, num_handles)) =
26438                fidl::encoding::decode_envelope_header(decoder, next_offset)?
26439            {
26440                let member_inline_size =
26441                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
26442                if inlined != (member_inline_size <= 4) {
26443                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
26444                }
26445                let inner_offset;
26446                let mut inner_depth = depth.clone();
26447                if inlined {
26448                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
26449                    inner_offset = next_offset;
26450                } else {
26451                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
26452                    inner_depth.increment()?;
26453                }
26454                let val_ref = self.ttl.get_or_insert_with(|| fidl::new_empty!(i64, D));
26455                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
26456                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
26457                {
26458                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
26459                }
26460                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
26461                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
26462                }
26463            }
26464
26465            next_offset += envelope_size;
26466            _next_ordinal_to_read += 1;
26467            if next_offset >= end_offset {
26468                return Ok(());
26469            }
26470
26471            // Decode unknown envelopes for gaps in ordinals.
26472            while _next_ordinal_to_read < 8 {
26473                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
26474                _next_ordinal_to_read += 1;
26475                next_offset += envelope_size;
26476            }
26477
26478            let next_out_of_line = decoder.next_out_of_line();
26479            let handles_before = decoder.remaining_handles();
26480            if let Some((inlined, num_bytes, num_handles)) =
26481                fidl::encoding::decode_envelope_header(decoder, next_offset)?
26482            {
26483                let member_inline_size =
26484                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
26485                if inlined != (member_inline_size <= 4) {
26486                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
26487                }
26488                let inner_offset;
26489                let mut inner_depth = depth.clone();
26490                if inlined {
26491                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
26492                    inner_offset = next_offset;
26493                } else {
26494                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
26495                    inner_depth.increment()?;
26496                }
26497                let val_ref = self.lease.get_or_insert_with(|| fidl::new_empty!(i64, D));
26498                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
26499                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
26500                {
26501                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
26502                }
26503                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
26504                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
26505                }
26506            }
26507
26508            next_offset += envelope_size;
26509            _next_ordinal_to_read += 1;
26510            if next_offset >= end_offset {
26511                return Ok(());
26512            }
26513
26514            // Decode unknown envelopes for gaps in ordinals.
26515            while _next_ordinal_to_read < 9 {
26516                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
26517                _next_ordinal_to_read += 1;
26518                next_offset += envelope_size;
26519            }
26520
26521            let next_out_of_line = decoder.next_out_of_line();
26522            let handles_before = decoder.remaining_handles();
26523            if let Some((inlined, num_bytes, num_handles)) =
26524                fidl::encoding::decode_envelope_header(decoder, next_offset)?
26525            {
26526                let member_inline_size =
26527                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
26528                if inlined != (member_inline_size <= 4) {
26529                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
26530                }
26531                let inner_offset;
26532                let mut inner_depth = depth.clone();
26533                if inlined {
26534                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
26535                    inner_offset = next_offset;
26536                } else {
26537                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
26538                    inner_depth.increment()?;
26539                }
26540                let val_ref = self.key_lease.get_or_insert_with(|| fidl::new_empty!(i64, D));
26541                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
26542                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
26543                {
26544                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
26545                }
26546                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
26547                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
26548                }
26549            }
26550
26551            next_offset += envelope_size;
26552            _next_ordinal_to_read += 1;
26553            if next_offset >= end_offset {
26554                return Ok(());
26555            }
26556
26557            // Decode unknown envelopes for gaps in ordinals.
26558            while _next_ordinal_to_read < 10 {
26559                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
26560                _next_ordinal_to_read += 1;
26561                next_offset += envelope_size;
26562            }
26563
26564            let next_out_of_line = decoder.next_out_of_line();
26565            let handles_before = decoder.remaining_handles();
26566            if let Some((inlined, num_bytes, num_handles)) =
26567                fidl::encoding::decode_envelope_header(decoder, next_offset)?
26568            {
26569                let member_inline_size = <fidl::encoding::UnboundedVector<DnsTxtEntry> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
26570                if inlined != (member_inline_size <= 4) {
26571                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
26572                }
26573                let inner_offset;
26574                let mut inner_depth = depth.clone();
26575                if inlined {
26576                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
26577                    inner_offset = next_offset;
26578                } else {
26579                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
26580                    inner_depth.increment()?;
26581                }
26582                let val_ref = self.txt_data.get_or_insert_with(|| {
26583                    fidl::new_empty!(fidl::encoding::UnboundedVector<DnsTxtEntry>, D)
26584                });
26585                fidl::decode!(
26586                    fidl::encoding::UnboundedVector<DnsTxtEntry>,
26587                    D,
26588                    val_ref,
26589                    decoder,
26590                    inner_offset,
26591                    inner_depth
26592                )?;
26593                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
26594                {
26595                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
26596                }
26597                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
26598                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
26599                }
26600            }
26601
26602            next_offset += envelope_size;
26603            _next_ordinal_to_read += 1;
26604            if next_offset >= end_offset {
26605                return Ok(());
26606            }
26607
26608            // Decode unknown envelopes for gaps in ordinals.
26609            while _next_ordinal_to_read < 11 {
26610                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
26611                _next_ordinal_to_read += 1;
26612                next_offset += envelope_size;
26613            }
26614
26615            let next_out_of_line = decoder.next_out_of_line();
26616            let handles_before = decoder.remaining_handles();
26617            if let Some((inlined, num_bytes, num_handles)) =
26618                fidl::encoding::decode_envelope_header(decoder, next_offset)?
26619            {
26620                let member_inline_size =
26621                    <SrpServerHost as fidl::encoding::TypeMarker>::inline_size(decoder.context);
26622                if inlined != (member_inline_size <= 4) {
26623                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
26624                }
26625                let inner_offset;
26626                let mut inner_depth = depth.clone();
26627                if inlined {
26628                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
26629                    inner_offset = next_offset;
26630                } else {
26631                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
26632                    inner_depth.increment()?;
26633                }
26634                let val_ref = self.host.get_or_insert_with(|| fidl::new_empty!(SrpServerHost, D));
26635                fidl::decode!(SrpServerHost, D, val_ref, decoder, inner_offset, inner_depth)?;
26636                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
26637                {
26638                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
26639                }
26640                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
26641                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
26642                }
26643            }
26644
26645            next_offset += envelope_size;
26646
26647            // Decode the remaining unknown envelopes.
26648            while next_offset < end_offset {
26649                _next_ordinal_to_read += 1;
26650                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
26651                next_offset += envelope_size;
26652            }
26653
26654            Ok(())
26655        }
26656    }
26657
26658    impl Telemetry {
26659        #[inline(always)]
26660        fn max_ordinal_present(&self) -> u64 {
26661            if let Some(_) = self.cca_threshold {
26662                return 41;
26663            }
26664            if let Some(_) = self.eid_cache_entries {
26665                return 40;
26666            }
26667            if let Some(_) = self.netstat {
26668                return 39;
26669            }
26670            if let Some(_) = self.border_routing_rdnsses {
26671                return 38;
26672            }
26673            if let Some(_) = self.border_routing_prefixes {
26674                return 37;
26675            }
26676            if let Some(_) = self.ipmaddrs {
26677                return 36;
26678            }
26679            if let Some(_) = self.ipaddrs {
26680                return 35;
26681            }
26682            if let Some(_) = self.history_report {
26683                return 34;
26684            }
26685            if let Some(_) = self.network_data {
26686                return 33;
26687            }
26688            if let Some(_) = self.router_info {
26689                return 32;
26690            }
26691            if let Some(_) = self.multiradio_neighbor_info {
26692                return 31;
26693            }
26694            if let Some(_) = self.active_dataset {
26695                return 30;
26696            }
26697            if let Some(_) = self.border_routing_routers {
26698                return 29;
26699            }
26700            if let Some(_) = self.border_routing_peers {
26701                return 28;
26702            }
26703            if let Some(_) = self.extended_pan_id {
26704                return 27;
26705            }
26706            if let Some(_) = self.multi_ail_detected {
26707                return 26;
26708            }
26709            if let Some(_) = self.border_agent_counters {
26710                return 25;
26711            }
26712            if let Some(_) = self.link_metrics_entries {
26713                return 24;
26714            }
26715            if let Some(_) = self.dhcp6pd_info {
26716                return 23;
26717            }
26718            if let Some(_) = self.upstream_dns_info {
26719                return 22;
26720            }
26721            if let Some(_) = self.trel_peers_info {
26722                return 21;
26723            }
26724            if let Some(_) = self.trel_counters {
26725                return 20;
26726            }
26727            if let Some(_) = self.nat64_info {
26728                return 19;
26729            }
26730            if let Some(_) = self.uptime {
26731                return 18;
26732            }
26733            if let Some(_) = self.leader_data {
26734                return 17;
26735            }
26736            if let Some(_) = self.dnssd_counters {
26737                return 16;
26738            }
26739            if let Some(_) = self.srp_server_info {
26740                return 15;
26741            }
26742            if let Some(_) = self.thread_border_routing_counters {
26743                return 14;
26744            }
26745            if let Some(_) = self.thread_stable_network_data {
26746                return 13;
26747            }
26748            if let Some(_) = self.thread_network_data {
26749                return 12;
26750            }
26751            if let Some(_) = self.thread_stable_network_data_version {
26752                return 11;
26753            }
26754            if let Some(_) = self.thread_network_data_version {
26755                return 10;
26756            }
26757            if let Some(_) = self.thread_rloc {
26758                return 9;
26759            }
26760            if let Some(_) = self.thread_router_id {
26761                return 8;
26762            }
26763            if let Some(_) = self.thread_link_mode {
26764                return 7;
26765            }
26766            if let Some(_) = self.rcp_version {
26767                return 6;
26768            }
26769            if let Some(_) = self.stack_version {
26770                return 5;
26771            }
26772            if let Some(_) = self.partition_id {
26773                return 4;
26774            }
26775            if let Some(_) = self.channel_index {
26776                return 3;
26777            }
26778            if let Some(_) = self.tx_power {
26779                return 2;
26780            }
26781            if let Some(_) = self.rssi {
26782                return 1;
26783            }
26784            0
26785        }
26786    }
26787
26788    impl fidl::encoding::ValueTypeMarker for Telemetry {
26789        type Borrowed<'a> = &'a Self;
26790        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
26791            value
26792        }
26793    }
26794
26795    unsafe impl fidl::encoding::TypeMarker for Telemetry {
26796        type Owned = Self;
26797
26798        #[inline(always)]
26799        fn inline_align(_context: fidl::encoding::Context) -> usize {
26800            8
26801        }
26802
26803        #[inline(always)]
26804        fn inline_size(_context: fidl::encoding::Context) -> usize {
26805            16
26806        }
26807    }
26808
26809    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Telemetry, D>
26810        for &Telemetry
26811    {
26812        unsafe fn encode(
26813            self,
26814            encoder: &mut fidl::encoding::Encoder<'_, D>,
26815            offset: usize,
26816            mut depth: fidl::encoding::Depth,
26817        ) -> fidl::Result<()> {
26818            encoder.debug_check_bounds::<Telemetry>(offset);
26819            // Vector header
26820            let max_ordinal: u64 = self.max_ordinal_present();
26821            encoder.write_num(max_ordinal, offset);
26822            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
26823            // Calling encoder.out_of_line_offset(0) is not allowed.
26824            if max_ordinal == 0 {
26825                return Ok(());
26826            }
26827            depth.increment()?;
26828            let envelope_size = 8;
26829            let bytes_len = max_ordinal as usize * envelope_size;
26830            #[allow(unused_variables)]
26831            let offset = encoder.out_of_line_offset(bytes_len);
26832            let mut _prev_end_offset: usize = 0;
26833            if 1 > max_ordinal {
26834                return Ok(());
26835            }
26836
26837            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
26838            // are envelope_size bytes.
26839            let cur_offset: usize = (1 - 1) * envelope_size;
26840
26841            // Zero reserved fields.
26842            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
26843
26844            // Safety:
26845            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
26846            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
26847            //   envelope_size bytes, there is always sufficient room.
26848            fidl::encoding::encode_in_envelope_optional::<i8, D>(
26849                self.rssi.as_ref().map(<i8 as fidl::encoding::ValueTypeMarker>::borrow),
26850                encoder,
26851                offset + cur_offset,
26852                depth,
26853            )?;
26854
26855            _prev_end_offset = cur_offset + envelope_size;
26856            if 2 > max_ordinal {
26857                return Ok(());
26858            }
26859
26860            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
26861            // are envelope_size bytes.
26862            let cur_offset: usize = (2 - 1) * envelope_size;
26863
26864            // Zero reserved fields.
26865            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
26866
26867            // Safety:
26868            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
26869            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
26870            //   envelope_size bytes, there is always sufficient room.
26871            fidl::encoding::encode_in_envelope_optional::<i8, D>(
26872                self.tx_power.as_ref().map(<i8 as fidl::encoding::ValueTypeMarker>::borrow),
26873                encoder,
26874                offset + cur_offset,
26875                depth,
26876            )?;
26877
26878            _prev_end_offset = cur_offset + envelope_size;
26879            if 3 > max_ordinal {
26880                return Ok(());
26881            }
26882
26883            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
26884            // are envelope_size bytes.
26885            let cur_offset: usize = (3 - 1) * envelope_size;
26886
26887            // Zero reserved fields.
26888            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
26889
26890            // Safety:
26891            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
26892            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
26893            //   envelope_size bytes, there is always sufficient room.
26894            fidl::encoding::encode_in_envelope_optional::<u16, D>(
26895                self.channel_index.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
26896                encoder,
26897                offset + cur_offset,
26898                depth,
26899            )?;
26900
26901            _prev_end_offset = cur_offset + envelope_size;
26902            if 4 > max_ordinal {
26903                return Ok(());
26904            }
26905
26906            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
26907            // are envelope_size bytes.
26908            let cur_offset: usize = (4 - 1) * envelope_size;
26909
26910            // Zero reserved fields.
26911            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
26912
26913            // Safety:
26914            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
26915            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
26916            //   envelope_size bytes, there is always sufficient room.
26917            fidl::encoding::encode_in_envelope_optional::<u32, D>(
26918                self.partition_id.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
26919                encoder,
26920                offset + cur_offset,
26921                depth,
26922            )?;
26923
26924            _prev_end_offset = cur_offset + envelope_size;
26925            if 5 > max_ordinal {
26926                return Ok(());
26927            }
26928
26929            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
26930            // are envelope_size bytes.
26931            let cur_offset: usize = (5 - 1) * envelope_size;
26932
26933            // Zero reserved fields.
26934            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
26935
26936            // Safety:
26937            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
26938            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
26939            //   envelope_size bytes, there is always sufficient room.
26940            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<256>, D>(
26941                self.stack_version.as_ref().map(
26942                    <fidl::encoding::BoundedString<256> as fidl::encoding::ValueTypeMarker>::borrow,
26943                ),
26944                encoder,
26945                offset + cur_offset,
26946                depth,
26947            )?;
26948
26949            _prev_end_offset = cur_offset + envelope_size;
26950            if 6 > max_ordinal {
26951                return Ok(());
26952            }
26953
26954            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
26955            // are envelope_size bytes.
26956            let cur_offset: usize = (6 - 1) * envelope_size;
26957
26958            // Zero reserved fields.
26959            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
26960
26961            // Safety:
26962            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
26963            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
26964            //   envelope_size bytes, there is always sufficient room.
26965            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<256>, D>(
26966                self.rcp_version.as_ref().map(
26967                    <fidl::encoding::BoundedString<256> as fidl::encoding::ValueTypeMarker>::borrow,
26968                ),
26969                encoder,
26970                offset + cur_offset,
26971                depth,
26972            )?;
26973
26974            _prev_end_offset = cur_offset + envelope_size;
26975            if 7 > max_ordinal {
26976                return Ok(());
26977            }
26978
26979            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
26980            // are envelope_size bytes.
26981            let cur_offset: usize = (7 - 1) * envelope_size;
26982
26983            // Zero reserved fields.
26984            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
26985
26986            // Safety:
26987            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
26988            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
26989            //   envelope_size bytes, there is always sufficient room.
26990            fidl::encoding::encode_in_envelope_optional::<u8, D>(
26991                self.thread_link_mode.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
26992                encoder,
26993                offset + cur_offset,
26994                depth,
26995            )?;
26996
26997            _prev_end_offset = cur_offset + envelope_size;
26998            if 8 > max_ordinal {
26999                return Ok(());
27000            }
27001
27002            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
27003            // are envelope_size bytes.
27004            let cur_offset: usize = (8 - 1) * envelope_size;
27005
27006            // Zero reserved fields.
27007            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
27008
27009            // Safety:
27010            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
27011            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
27012            //   envelope_size bytes, there is always sufficient room.
27013            fidl::encoding::encode_in_envelope_optional::<u8, D>(
27014                self.thread_router_id.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
27015                encoder,
27016                offset + cur_offset,
27017                depth,
27018            )?;
27019
27020            _prev_end_offset = cur_offset + envelope_size;
27021            if 9 > max_ordinal {
27022                return Ok(());
27023            }
27024
27025            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
27026            // are envelope_size bytes.
27027            let cur_offset: usize = (9 - 1) * envelope_size;
27028
27029            // Zero reserved fields.
27030            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
27031
27032            // Safety:
27033            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
27034            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
27035            //   envelope_size bytes, there is always sufficient room.
27036            fidl::encoding::encode_in_envelope_optional::<u16, D>(
27037                self.thread_rloc.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
27038                encoder,
27039                offset + cur_offset,
27040                depth,
27041            )?;
27042
27043            _prev_end_offset = cur_offset + envelope_size;
27044            if 10 > max_ordinal {
27045                return Ok(());
27046            }
27047
27048            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
27049            // are envelope_size bytes.
27050            let cur_offset: usize = (10 - 1) * envelope_size;
27051
27052            // Zero reserved fields.
27053            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
27054
27055            // Safety:
27056            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
27057            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
27058            //   envelope_size bytes, there is always sufficient room.
27059            fidl::encoding::encode_in_envelope_optional::<u8, D>(
27060                self.thread_network_data_version
27061                    .as_ref()
27062                    .map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
27063                encoder,
27064                offset + cur_offset,
27065                depth,
27066            )?;
27067
27068            _prev_end_offset = cur_offset + envelope_size;
27069            if 11 > max_ordinal {
27070                return Ok(());
27071            }
27072
27073            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
27074            // are envelope_size bytes.
27075            let cur_offset: usize = (11 - 1) * envelope_size;
27076
27077            // Zero reserved fields.
27078            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
27079
27080            // Safety:
27081            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
27082            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
27083            //   envelope_size bytes, there is always sufficient room.
27084            fidl::encoding::encode_in_envelope_optional::<u8, D>(
27085                self.thread_stable_network_data_version
27086                    .as_ref()
27087                    .map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
27088                encoder,
27089                offset + cur_offset,
27090                depth,
27091            )?;
27092
27093            _prev_end_offset = cur_offset + envelope_size;
27094            if 12 > max_ordinal {
27095                return Ok(());
27096            }
27097
27098            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
27099            // are envelope_size bytes.
27100            let cur_offset: usize = (12 - 1) * envelope_size;
27101
27102            // Zero reserved fields.
27103            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
27104
27105            // Safety:
27106            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
27107            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
27108            //   envelope_size bytes, there is always sufficient room.
27109            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u8, 255>, D>(
27110                self.thread_network_data.as_ref().map(
27111                    <fidl::encoding::Vector<u8, 255> as fidl::encoding::ValueTypeMarker>::borrow,
27112                ),
27113                encoder,
27114                offset + cur_offset,
27115                depth,
27116            )?;
27117
27118            _prev_end_offset = cur_offset + envelope_size;
27119            if 13 > max_ordinal {
27120                return Ok(());
27121            }
27122
27123            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
27124            // are envelope_size bytes.
27125            let cur_offset: usize = (13 - 1) * envelope_size;
27126
27127            // Zero reserved fields.
27128            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
27129
27130            // Safety:
27131            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
27132            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
27133            //   envelope_size bytes, there is always sufficient room.
27134            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u8, 255>, D>(
27135                self.thread_stable_network_data.as_ref().map(
27136                    <fidl::encoding::Vector<u8, 255> as fidl::encoding::ValueTypeMarker>::borrow,
27137                ),
27138                encoder,
27139                offset + cur_offset,
27140                depth,
27141            )?;
27142
27143            _prev_end_offset = cur_offset + envelope_size;
27144            if 14 > max_ordinal {
27145                return Ok(());
27146            }
27147
27148            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
27149            // are envelope_size bytes.
27150            let cur_offset: usize = (14 - 1) * envelope_size;
27151
27152            // Zero reserved fields.
27153            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
27154
27155            // Safety:
27156            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
27157            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
27158            //   envelope_size bytes, there is always sufficient room.
27159            fidl::encoding::encode_in_envelope_optional::<BorderRoutingCounters, D>(
27160                self.thread_border_routing_counters
27161                    .as_ref()
27162                    .map(<BorderRoutingCounters as fidl::encoding::ValueTypeMarker>::borrow),
27163                encoder,
27164                offset + cur_offset,
27165                depth,
27166            )?;
27167
27168            _prev_end_offset = cur_offset + envelope_size;
27169            if 15 > max_ordinal {
27170                return Ok(());
27171            }
27172
27173            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
27174            // are envelope_size bytes.
27175            let cur_offset: usize = (15 - 1) * envelope_size;
27176
27177            // Zero reserved fields.
27178            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
27179
27180            // Safety:
27181            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
27182            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
27183            //   envelope_size bytes, there is always sufficient room.
27184            fidl::encoding::encode_in_envelope_optional::<SrpServerInfo, D>(
27185                self.srp_server_info
27186                    .as_ref()
27187                    .map(<SrpServerInfo as fidl::encoding::ValueTypeMarker>::borrow),
27188                encoder,
27189                offset + cur_offset,
27190                depth,
27191            )?;
27192
27193            _prev_end_offset = cur_offset + envelope_size;
27194            if 16 > max_ordinal {
27195                return Ok(());
27196            }
27197
27198            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
27199            // are envelope_size bytes.
27200            let cur_offset: usize = (16 - 1) * envelope_size;
27201
27202            // Zero reserved fields.
27203            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
27204
27205            // Safety:
27206            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
27207            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
27208            //   envelope_size bytes, there is always sufficient room.
27209            fidl::encoding::encode_in_envelope_optional::<DnssdCounters, D>(
27210                self.dnssd_counters
27211                    .as_ref()
27212                    .map(<DnssdCounters as fidl::encoding::ValueTypeMarker>::borrow),
27213                encoder,
27214                offset + cur_offset,
27215                depth,
27216            )?;
27217
27218            _prev_end_offset = cur_offset + envelope_size;
27219            if 17 > max_ordinal {
27220                return Ok(());
27221            }
27222
27223            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
27224            // are envelope_size bytes.
27225            let cur_offset: usize = (17 - 1) * envelope_size;
27226
27227            // Zero reserved fields.
27228            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
27229
27230            // Safety:
27231            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
27232            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
27233            //   envelope_size bytes, there is always sufficient room.
27234            fidl::encoding::encode_in_envelope_optional::<LeaderData, D>(
27235                self.leader_data
27236                    .as_ref()
27237                    .map(<LeaderData as fidl::encoding::ValueTypeMarker>::borrow),
27238                encoder,
27239                offset + cur_offset,
27240                depth,
27241            )?;
27242
27243            _prev_end_offset = cur_offset + envelope_size;
27244            if 18 > max_ordinal {
27245                return Ok(());
27246            }
27247
27248            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
27249            // are envelope_size bytes.
27250            let cur_offset: usize = (18 - 1) * envelope_size;
27251
27252            // Zero reserved fields.
27253            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
27254
27255            // Safety:
27256            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
27257            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
27258            //   envelope_size bytes, there is always sufficient room.
27259            fidl::encoding::encode_in_envelope_optional::<i64, D>(
27260                self.uptime.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
27261                encoder,
27262                offset + cur_offset,
27263                depth,
27264            )?;
27265
27266            _prev_end_offset = cur_offset + envelope_size;
27267            if 19 > max_ordinal {
27268                return Ok(());
27269            }
27270
27271            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
27272            // are envelope_size bytes.
27273            let cur_offset: usize = (19 - 1) * envelope_size;
27274
27275            // Zero reserved fields.
27276            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
27277
27278            // Safety:
27279            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
27280            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
27281            //   envelope_size bytes, there is always sufficient room.
27282            fidl::encoding::encode_in_envelope_optional::<Nat64Info, D>(
27283                self.nat64_info
27284                    .as_ref()
27285                    .map(<Nat64Info as fidl::encoding::ValueTypeMarker>::borrow),
27286                encoder,
27287                offset + cur_offset,
27288                depth,
27289            )?;
27290
27291            _prev_end_offset = cur_offset + envelope_size;
27292            if 20 > max_ordinal {
27293                return Ok(());
27294            }
27295
27296            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
27297            // are envelope_size bytes.
27298            let cur_offset: usize = (20 - 1) * envelope_size;
27299
27300            // Zero reserved fields.
27301            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
27302
27303            // Safety:
27304            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
27305            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
27306            //   envelope_size bytes, there is always sufficient room.
27307            fidl::encoding::encode_in_envelope_optional::<TrelCounters, D>(
27308                self.trel_counters
27309                    .as_ref()
27310                    .map(<TrelCounters as fidl::encoding::ValueTypeMarker>::borrow),
27311                encoder,
27312                offset + cur_offset,
27313                depth,
27314            )?;
27315
27316            _prev_end_offset = cur_offset + envelope_size;
27317            if 21 > max_ordinal {
27318                return Ok(());
27319            }
27320
27321            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
27322            // are envelope_size bytes.
27323            let cur_offset: usize = (21 - 1) * envelope_size;
27324
27325            // Zero reserved fields.
27326            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
27327
27328            // Safety:
27329            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
27330            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
27331            //   envelope_size bytes, there is always sufficient room.
27332            fidl::encoding::encode_in_envelope_optional::<TrelPeersInfo, D>(
27333                self.trel_peers_info
27334                    .as_ref()
27335                    .map(<TrelPeersInfo as fidl::encoding::ValueTypeMarker>::borrow),
27336                encoder,
27337                offset + cur_offset,
27338                depth,
27339            )?;
27340
27341            _prev_end_offset = cur_offset + envelope_size;
27342            if 22 > max_ordinal {
27343                return Ok(());
27344            }
27345
27346            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
27347            // are envelope_size bytes.
27348            let cur_offset: usize = (22 - 1) * envelope_size;
27349
27350            // Zero reserved fields.
27351            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
27352
27353            // Safety:
27354            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
27355            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
27356            //   envelope_size bytes, there is always sufficient room.
27357            fidl::encoding::encode_in_envelope_optional::<UpstreamDnsInfo, D>(
27358                self.upstream_dns_info
27359                    .as_ref()
27360                    .map(<UpstreamDnsInfo as fidl::encoding::ValueTypeMarker>::borrow),
27361                encoder,
27362                offset + cur_offset,
27363                depth,
27364            )?;
27365
27366            _prev_end_offset = cur_offset + envelope_size;
27367            if 23 > max_ordinal {
27368                return Ok(());
27369            }
27370
27371            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
27372            // are envelope_size bytes.
27373            let cur_offset: usize = (23 - 1) * envelope_size;
27374
27375            // Zero reserved fields.
27376            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
27377
27378            // Safety:
27379            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
27380            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
27381            //   envelope_size bytes, there is always sufficient room.
27382            fidl::encoding::encode_in_envelope_optional::<Dhcp6PdInfo, D>(
27383                self.dhcp6pd_info
27384                    .as_ref()
27385                    .map(<Dhcp6PdInfo as fidl::encoding::ValueTypeMarker>::borrow),
27386                encoder,
27387                offset + cur_offset,
27388                depth,
27389            )?;
27390
27391            _prev_end_offset = cur_offset + envelope_size;
27392            if 24 > max_ordinal {
27393                return Ok(());
27394            }
27395
27396            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
27397            // are envelope_size bytes.
27398            let cur_offset: usize = (24 - 1) * envelope_size;
27399
27400            // Zero reserved fields.
27401            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
27402
27403            // Safety:
27404            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
27405            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
27406            //   envelope_size bytes, there is always sufficient room.
27407            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<LinkMetricsEntry, 64>, D>(
27408            self.link_metrics_entries.as_ref().map(<fidl::encoding::Vector<LinkMetricsEntry, 64> as fidl::encoding::ValueTypeMarker>::borrow),
27409            encoder, offset + cur_offset, depth
27410        )?;
27411
27412            _prev_end_offset = cur_offset + envelope_size;
27413            if 25 > max_ordinal {
27414                return Ok(());
27415            }
27416
27417            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
27418            // are envelope_size bytes.
27419            let cur_offset: usize = (25 - 1) * envelope_size;
27420
27421            // Zero reserved fields.
27422            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
27423
27424            // Safety:
27425            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
27426            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
27427            //   envelope_size bytes, there is always sufficient room.
27428            fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_lowpan_device_common::BorderAgentCounters, D>(
27429            self.border_agent_counters.as_ref().map(<fidl_fuchsia_lowpan_device_common::BorderAgentCounters as fidl::encoding::ValueTypeMarker>::borrow),
27430            encoder, offset + cur_offset, depth
27431        )?;
27432
27433            _prev_end_offset = cur_offset + envelope_size;
27434            if 26 > max_ordinal {
27435                return Ok(());
27436            }
27437
27438            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
27439            // are envelope_size bytes.
27440            let cur_offset: usize = (26 - 1) * envelope_size;
27441
27442            // Zero reserved fields.
27443            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
27444
27445            // Safety:
27446            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
27447            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
27448            //   envelope_size bytes, there is always sufficient room.
27449            fidl::encoding::encode_in_envelope_optional::<bool, D>(
27450                self.multi_ail_detected
27451                    .as_ref()
27452                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
27453                encoder,
27454                offset + cur_offset,
27455                depth,
27456            )?;
27457
27458            _prev_end_offset = cur_offset + envelope_size;
27459            if 27 > max_ordinal {
27460                return Ok(());
27461            }
27462
27463            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
27464            // are envelope_size bytes.
27465            let cur_offset: usize = (27 - 1) * envelope_size;
27466
27467            // Zero reserved fields.
27468            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
27469
27470            // Safety:
27471            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
27472            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
27473            //   envelope_size bytes, there is always sufficient room.
27474            fidl::encoding::encode_in_envelope_optional::<u64, D>(
27475                self.extended_pan_id.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
27476                encoder,
27477                offset + cur_offset,
27478                depth,
27479            )?;
27480
27481            _prev_end_offset = cur_offset + envelope_size;
27482            if 28 > max_ordinal {
27483                return Ok(());
27484            }
27485
27486            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
27487            // are envelope_size bytes.
27488            let cur_offset: usize = (28 - 1) * envelope_size;
27489
27490            // Zero reserved fields.
27491            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
27492
27493            // Safety:
27494            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
27495            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
27496            //   envelope_size bytes, there is always sufficient room.
27497            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<BorderRoutingPeer, 64>, D>(
27498            self.border_routing_peers.as_ref().map(<fidl::encoding::Vector<BorderRoutingPeer, 64> as fidl::encoding::ValueTypeMarker>::borrow),
27499            encoder, offset + cur_offset, depth
27500        )?;
27501
27502            _prev_end_offset = cur_offset + envelope_size;
27503            if 29 > max_ordinal {
27504                return Ok(());
27505            }
27506
27507            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
27508            // are envelope_size bytes.
27509            let cur_offset: usize = (29 - 1) * envelope_size;
27510
27511            // Zero reserved fields.
27512            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
27513
27514            // Safety:
27515            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
27516            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
27517            //   envelope_size bytes, there is always sufficient room.
27518            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<BorderRoutingRouter, 64>, D>(
27519            self.border_routing_routers.as_ref().map(<fidl::encoding::Vector<BorderRoutingRouter, 64> as fidl::encoding::ValueTypeMarker>::borrow),
27520            encoder, offset + cur_offset, depth
27521        )?;
27522
27523            _prev_end_offset = cur_offset + envelope_size;
27524            if 30 > max_ordinal {
27525                return Ok(());
27526            }
27527
27528            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
27529            // are envelope_size bytes.
27530            let cur_offset: usize = (30 - 1) * envelope_size;
27531
27532            // Zero reserved fields.
27533            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
27534
27535            // Safety:
27536            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
27537            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
27538            //   envelope_size bytes, there is always sufficient room.
27539            fidl::encoding::encode_in_envelope_optional::<OperationalDataset, D>(
27540                self.active_dataset
27541                    .as_ref()
27542                    .map(<OperationalDataset as fidl::encoding::ValueTypeMarker>::borrow),
27543                encoder,
27544                offset + cur_offset,
27545                depth,
27546            )?;
27547
27548            _prev_end_offset = cur_offset + envelope_size;
27549            if 31 > max_ordinal {
27550                return Ok(());
27551            }
27552
27553            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
27554            // are envelope_size bytes.
27555            let cur_offset: usize = (31 - 1) * envelope_size;
27556
27557            // Zero reserved fields.
27558            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
27559
27560            // Safety:
27561            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
27562            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
27563            //   envelope_size bytes, there is always sufficient room.
27564            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<MultiRadioNeighborInfo, 64>, D>(
27565            self.multiradio_neighbor_info.as_ref().map(<fidl::encoding::Vector<MultiRadioNeighborInfo, 64> as fidl::encoding::ValueTypeMarker>::borrow),
27566            encoder, offset + cur_offset, depth
27567        )?;
27568
27569            _prev_end_offset = cur_offset + envelope_size;
27570            if 32 > max_ordinal {
27571                return Ok(());
27572            }
27573
27574            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
27575            // are envelope_size bytes.
27576            let cur_offset: usize = (32 - 1) * envelope_size;
27577
27578            // Zero reserved fields.
27579            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
27580
27581            // Safety:
27582            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
27583            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
27584            //   envelope_size bytes, there is always sufficient room.
27585            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<RouterInfo, 64>, D>(
27586            self.router_info.as_ref().map(<fidl::encoding::Vector<RouterInfo, 64> as fidl::encoding::ValueTypeMarker>::borrow),
27587            encoder, offset + cur_offset, depth
27588        )?;
27589
27590            _prev_end_offset = cur_offset + envelope_size;
27591            if 33 > max_ordinal {
27592                return Ok(());
27593            }
27594
27595            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
27596            // are envelope_size bytes.
27597            let cur_offset: usize = (33 - 1) * envelope_size;
27598
27599            // Zero reserved fields.
27600            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
27601
27602            // Safety:
27603            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
27604            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
27605            //   envelope_size bytes, there is always sufficient room.
27606            fidl::encoding::encode_in_envelope_optional::<NetworkData, D>(
27607                self.network_data
27608                    .as_ref()
27609                    .map(<NetworkData as fidl::encoding::ValueTypeMarker>::borrow),
27610                encoder,
27611                offset + cur_offset,
27612                depth,
27613            )?;
27614
27615            _prev_end_offset = cur_offset + envelope_size;
27616            if 34 > max_ordinal {
27617                return Ok(());
27618            }
27619
27620            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
27621            // are envelope_size bytes.
27622            let cur_offset: usize = (34 - 1) * envelope_size;
27623
27624            // Zero reserved fields.
27625            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
27626
27627            // Safety:
27628            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
27629            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
27630            //   envelope_size bytes, there is always sufficient room.
27631            fidl::encoding::encode_in_envelope_optional::<ThreadHistoryReport, D>(
27632                self.history_report
27633                    .as_ref()
27634                    .map(<ThreadHistoryReport as fidl::encoding::ValueTypeMarker>::borrow),
27635                encoder,
27636                offset + cur_offset,
27637                depth,
27638            )?;
27639
27640            _prev_end_offset = cur_offset + envelope_size;
27641            if 35 > max_ordinal {
27642                return Ok(());
27643            }
27644
27645            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
27646            // are envelope_size bytes.
27647            let cur_offset: usize = (35 - 1) * envelope_size;
27648
27649            // Zero reserved fields.
27650            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
27651
27652            // Safety:
27653            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
27654            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
27655            //   envelope_size bytes, there is always sufficient room.
27656            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<NetifAddress, 32>, D>(
27657            self.ipaddrs.as_ref().map(<fidl::encoding::Vector<NetifAddress, 32> as fidl::encoding::ValueTypeMarker>::borrow),
27658            encoder, offset + cur_offset, depth
27659        )?;
27660
27661            _prev_end_offset = cur_offset + envelope_size;
27662            if 36 > max_ordinal {
27663                return Ok(());
27664            }
27665
27666            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
27667            // are envelope_size bytes.
27668            let cur_offset: usize = (36 - 1) * envelope_size;
27669
27670            // Zero reserved fields.
27671            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
27672
27673            // Safety:
27674            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
27675            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
27676            //   envelope_size bytes, there is always sufficient room.
27677            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<fidl_fuchsia_net_common::Ipv6Address, 32>, D>(
27678            self.ipmaddrs.as_ref().map(<fidl::encoding::Vector<fidl_fuchsia_net_common::Ipv6Address, 32> as fidl::encoding::ValueTypeMarker>::borrow),
27679            encoder, offset + cur_offset, depth
27680        )?;
27681
27682            _prev_end_offset = cur_offset + envelope_size;
27683            if 37 > max_ordinal {
27684                return Ok(());
27685            }
27686
27687            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
27688            // are envelope_size bytes.
27689            let cur_offset: usize = (37 - 1) * envelope_size;
27690
27691            // Zero reserved fields.
27692            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
27693
27694            // Safety:
27695            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
27696            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
27697            //   envelope_size bytes, there is always sufficient room.
27698            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<BorderRoutingPrefixTable, 64>, D>(
27699            self.border_routing_prefixes.as_ref().map(<fidl::encoding::Vector<BorderRoutingPrefixTable, 64> as fidl::encoding::ValueTypeMarker>::borrow),
27700            encoder, offset + cur_offset, depth
27701        )?;
27702
27703            _prev_end_offset = cur_offset + envelope_size;
27704            if 38 > max_ordinal {
27705                return Ok(());
27706            }
27707
27708            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
27709            // are envelope_size bytes.
27710            let cur_offset: usize = (38 - 1) * envelope_size;
27711
27712            // Zero reserved fields.
27713            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
27714
27715            // Safety:
27716            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
27717            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
27718            //   envelope_size bytes, there is always sufficient room.
27719            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<BorderRoutingRdnss, 64>, D>(
27720            self.border_routing_rdnsses.as_ref().map(<fidl::encoding::Vector<BorderRoutingRdnss, 64> as fidl::encoding::ValueTypeMarker>::borrow),
27721            encoder, offset + cur_offset, depth
27722        )?;
27723
27724            _prev_end_offset = cur_offset + envelope_size;
27725            if 39 > max_ordinal {
27726                return Ok(());
27727            }
27728
27729            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
27730            // are envelope_size bytes.
27731            let cur_offset: usize = (39 - 1) * envelope_size;
27732
27733            // Zero reserved fields.
27734            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
27735
27736            // Safety:
27737            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
27738            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
27739            //   envelope_size bytes, there is always sufficient room.
27740            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<UdpSocket, 32>, D>(
27741            self.netstat.as_ref().map(<fidl::encoding::Vector<UdpSocket, 32> as fidl::encoding::ValueTypeMarker>::borrow),
27742            encoder, offset + cur_offset, depth
27743        )?;
27744
27745            _prev_end_offset = cur_offset + envelope_size;
27746            if 40 > max_ordinal {
27747                return Ok(());
27748            }
27749
27750            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
27751            // are envelope_size bytes.
27752            let cur_offset: usize = (40 - 1) * envelope_size;
27753
27754            // Zero reserved fields.
27755            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
27756
27757            // Safety:
27758            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
27759            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
27760            //   envelope_size bytes, there is always sufficient room.
27761            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<EidCacheEntry, 64>, D>(
27762            self.eid_cache_entries.as_ref().map(<fidl::encoding::Vector<EidCacheEntry, 64> as fidl::encoding::ValueTypeMarker>::borrow),
27763            encoder, offset + cur_offset, depth
27764        )?;
27765
27766            _prev_end_offset = cur_offset + envelope_size;
27767            if 41 > max_ordinal {
27768                return Ok(());
27769            }
27770
27771            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
27772            // are envelope_size bytes.
27773            let cur_offset: usize = (41 - 1) * envelope_size;
27774
27775            // Zero reserved fields.
27776            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
27777
27778            // Safety:
27779            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
27780            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
27781            //   envelope_size bytes, there is always sufficient room.
27782            fidl::encoding::encode_in_envelope_optional::<i8, D>(
27783                self.cca_threshold.as_ref().map(<i8 as fidl::encoding::ValueTypeMarker>::borrow),
27784                encoder,
27785                offset + cur_offset,
27786                depth,
27787            )?;
27788
27789            _prev_end_offset = cur_offset + envelope_size;
27790
27791            Ok(())
27792        }
27793    }
27794
27795    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Telemetry {
27796        #[inline(always)]
27797        fn new_empty() -> Self {
27798            Self::default()
27799        }
27800
27801        unsafe fn decode(
27802            &mut self,
27803            decoder: &mut fidl::encoding::Decoder<'_, D>,
27804            offset: usize,
27805            mut depth: fidl::encoding::Depth,
27806        ) -> fidl::Result<()> {
27807            decoder.debug_check_bounds::<Self>(offset);
27808            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
27809                None => return Err(fidl::Error::NotNullable),
27810                Some(len) => len,
27811            };
27812            // Calling decoder.out_of_line_offset(0) is not allowed.
27813            if len == 0 {
27814                return Ok(());
27815            };
27816            depth.increment()?;
27817            let envelope_size = 8;
27818            let bytes_len = len * envelope_size;
27819            let offset = decoder.out_of_line_offset(bytes_len)?;
27820            // Decode the envelope for each type.
27821            let mut _next_ordinal_to_read = 0;
27822            let mut next_offset = offset;
27823            let end_offset = offset + bytes_len;
27824            _next_ordinal_to_read += 1;
27825            if next_offset >= end_offset {
27826                return Ok(());
27827            }
27828
27829            // Decode unknown envelopes for gaps in ordinals.
27830            while _next_ordinal_to_read < 1 {
27831                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
27832                _next_ordinal_to_read += 1;
27833                next_offset += envelope_size;
27834            }
27835
27836            let next_out_of_line = decoder.next_out_of_line();
27837            let handles_before = decoder.remaining_handles();
27838            if let Some((inlined, num_bytes, num_handles)) =
27839                fidl::encoding::decode_envelope_header(decoder, next_offset)?
27840            {
27841                let member_inline_size =
27842                    <i8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
27843                if inlined != (member_inline_size <= 4) {
27844                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
27845                }
27846                let inner_offset;
27847                let mut inner_depth = depth.clone();
27848                if inlined {
27849                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
27850                    inner_offset = next_offset;
27851                } else {
27852                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
27853                    inner_depth.increment()?;
27854                }
27855                let val_ref = self.rssi.get_or_insert_with(|| fidl::new_empty!(i8, D));
27856                fidl::decode!(i8, D, val_ref, decoder, inner_offset, inner_depth)?;
27857                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
27858                {
27859                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
27860                }
27861                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
27862                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
27863                }
27864            }
27865
27866            next_offset += envelope_size;
27867            _next_ordinal_to_read += 1;
27868            if next_offset >= end_offset {
27869                return Ok(());
27870            }
27871
27872            // Decode unknown envelopes for gaps in ordinals.
27873            while _next_ordinal_to_read < 2 {
27874                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
27875                _next_ordinal_to_read += 1;
27876                next_offset += envelope_size;
27877            }
27878
27879            let next_out_of_line = decoder.next_out_of_line();
27880            let handles_before = decoder.remaining_handles();
27881            if let Some((inlined, num_bytes, num_handles)) =
27882                fidl::encoding::decode_envelope_header(decoder, next_offset)?
27883            {
27884                let member_inline_size =
27885                    <i8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
27886                if inlined != (member_inline_size <= 4) {
27887                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
27888                }
27889                let inner_offset;
27890                let mut inner_depth = depth.clone();
27891                if inlined {
27892                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
27893                    inner_offset = next_offset;
27894                } else {
27895                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
27896                    inner_depth.increment()?;
27897                }
27898                let val_ref = self.tx_power.get_or_insert_with(|| fidl::new_empty!(i8, D));
27899                fidl::decode!(i8, D, val_ref, decoder, inner_offset, inner_depth)?;
27900                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
27901                {
27902                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
27903                }
27904                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
27905                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
27906                }
27907            }
27908
27909            next_offset += envelope_size;
27910            _next_ordinal_to_read += 1;
27911            if next_offset >= end_offset {
27912                return Ok(());
27913            }
27914
27915            // Decode unknown envelopes for gaps in ordinals.
27916            while _next_ordinal_to_read < 3 {
27917                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
27918                _next_ordinal_to_read += 1;
27919                next_offset += envelope_size;
27920            }
27921
27922            let next_out_of_line = decoder.next_out_of_line();
27923            let handles_before = decoder.remaining_handles();
27924            if let Some((inlined, num_bytes, num_handles)) =
27925                fidl::encoding::decode_envelope_header(decoder, next_offset)?
27926            {
27927                let member_inline_size =
27928                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
27929                if inlined != (member_inline_size <= 4) {
27930                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
27931                }
27932                let inner_offset;
27933                let mut inner_depth = depth.clone();
27934                if inlined {
27935                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
27936                    inner_offset = next_offset;
27937                } else {
27938                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
27939                    inner_depth.increment()?;
27940                }
27941                let val_ref = self.channel_index.get_or_insert_with(|| fidl::new_empty!(u16, D));
27942                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
27943                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
27944                {
27945                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
27946                }
27947                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
27948                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
27949                }
27950            }
27951
27952            next_offset += envelope_size;
27953            _next_ordinal_to_read += 1;
27954            if next_offset >= end_offset {
27955                return Ok(());
27956            }
27957
27958            // Decode unknown envelopes for gaps in ordinals.
27959            while _next_ordinal_to_read < 4 {
27960                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
27961                _next_ordinal_to_read += 1;
27962                next_offset += envelope_size;
27963            }
27964
27965            let next_out_of_line = decoder.next_out_of_line();
27966            let handles_before = decoder.remaining_handles();
27967            if let Some((inlined, num_bytes, num_handles)) =
27968                fidl::encoding::decode_envelope_header(decoder, next_offset)?
27969            {
27970                let member_inline_size =
27971                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
27972                if inlined != (member_inline_size <= 4) {
27973                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
27974                }
27975                let inner_offset;
27976                let mut inner_depth = depth.clone();
27977                if inlined {
27978                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
27979                    inner_offset = next_offset;
27980                } else {
27981                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
27982                    inner_depth.increment()?;
27983                }
27984                let val_ref = self.partition_id.get_or_insert_with(|| fidl::new_empty!(u32, D));
27985                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
27986                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
27987                {
27988                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
27989                }
27990                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
27991                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
27992                }
27993            }
27994
27995            next_offset += envelope_size;
27996            _next_ordinal_to_read += 1;
27997            if next_offset >= end_offset {
27998                return Ok(());
27999            }
28000
28001            // Decode unknown envelopes for gaps in ordinals.
28002            while _next_ordinal_to_read < 5 {
28003                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
28004                _next_ordinal_to_read += 1;
28005                next_offset += envelope_size;
28006            }
28007
28008            let next_out_of_line = decoder.next_out_of_line();
28009            let handles_before = decoder.remaining_handles();
28010            if let Some((inlined, num_bytes, num_handles)) =
28011                fidl::encoding::decode_envelope_header(decoder, next_offset)?
28012            {
28013                let member_inline_size =
28014                    <fidl::encoding::BoundedString<256> as fidl::encoding::TypeMarker>::inline_size(
28015                        decoder.context,
28016                    );
28017                if inlined != (member_inline_size <= 4) {
28018                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
28019                }
28020                let inner_offset;
28021                let mut inner_depth = depth.clone();
28022                if inlined {
28023                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
28024                    inner_offset = next_offset;
28025                } else {
28026                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
28027                    inner_depth.increment()?;
28028                }
28029                let val_ref = self
28030                    .stack_version
28031                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<256>, D));
28032                fidl::decode!(
28033                    fidl::encoding::BoundedString<256>,
28034                    D,
28035                    val_ref,
28036                    decoder,
28037                    inner_offset,
28038                    inner_depth
28039                )?;
28040                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
28041                {
28042                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
28043                }
28044                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
28045                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
28046                }
28047            }
28048
28049            next_offset += envelope_size;
28050            _next_ordinal_to_read += 1;
28051            if next_offset >= end_offset {
28052                return Ok(());
28053            }
28054
28055            // Decode unknown envelopes for gaps in ordinals.
28056            while _next_ordinal_to_read < 6 {
28057                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
28058                _next_ordinal_to_read += 1;
28059                next_offset += envelope_size;
28060            }
28061
28062            let next_out_of_line = decoder.next_out_of_line();
28063            let handles_before = decoder.remaining_handles();
28064            if let Some((inlined, num_bytes, num_handles)) =
28065                fidl::encoding::decode_envelope_header(decoder, next_offset)?
28066            {
28067                let member_inline_size =
28068                    <fidl::encoding::BoundedString<256> as fidl::encoding::TypeMarker>::inline_size(
28069                        decoder.context,
28070                    );
28071                if inlined != (member_inline_size <= 4) {
28072                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
28073                }
28074                let inner_offset;
28075                let mut inner_depth = depth.clone();
28076                if inlined {
28077                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
28078                    inner_offset = next_offset;
28079                } else {
28080                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
28081                    inner_depth.increment()?;
28082                }
28083                let val_ref = self
28084                    .rcp_version
28085                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<256>, D));
28086                fidl::decode!(
28087                    fidl::encoding::BoundedString<256>,
28088                    D,
28089                    val_ref,
28090                    decoder,
28091                    inner_offset,
28092                    inner_depth
28093                )?;
28094                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
28095                {
28096                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
28097                }
28098                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
28099                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
28100                }
28101            }
28102
28103            next_offset += envelope_size;
28104            _next_ordinal_to_read += 1;
28105            if next_offset >= end_offset {
28106                return Ok(());
28107            }
28108
28109            // Decode unknown envelopes for gaps in ordinals.
28110            while _next_ordinal_to_read < 7 {
28111                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
28112                _next_ordinal_to_read += 1;
28113                next_offset += envelope_size;
28114            }
28115
28116            let next_out_of_line = decoder.next_out_of_line();
28117            let handles_before = decoder.remaining_handles();
28118            if let Some((inlined, num_bytes, num_handles)) =
28119                fidl::encoding::decode_envelope_header(decoder, next_offset)?
28120            {
28121                let member_inline_size =
28122                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
28123                if inlined != (member_inline_size <= 4) {
28124                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
28125                }
28126                let inner_offset;
28127                let mut inner_depth = depth.clone();
28128                if inlined {
28129                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
28130                    inner_offset = next_offset;
28131                } else {
28132                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
28133                    inner_depth.increment()?;
28134                }
28135                let val_ref = self.thread_link_mode.get_or_insert_with(|| fidl::new_empty!(u8, D));
28136                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
28137                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
28138                {
28139                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
28140                }
28141                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
28142                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
28143                }
28144            }
28145
28146            next_offset += envelope_size;
28147            _next_ordinal_to_read += 1;
28148            if next_offset >= end_offset {
28149                return Ok(());
28150            }
28151
28152            // Decode unknown envelopes for gaps in ordinals.
28153            while _next_ordinal_to_read < 8 {
28154                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
28155                _next_ordinal_to_read += 1;
28156                next_offset += envelope_size;
28157            }
28158
28159            let next_out_of_line = decoder.next_out_of_line();
28160            let handles_before = decoder.remaining_handles();
28161            if let Some((inlined, num_bytes, num_handles)) =
28162                fidl::encoding::decode_envelope_header(decoder, next_offset)?
28163            {
28164                let member_inline_size =
28165                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
28166                if inlined != (member_inline_size <= 4) {
28167                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
28168                }
28169                let inner_offset;
28170                let mut inner_depth = depth.clone();
28171                if inlined {
28172                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
28173                    inner_offset = next_offset;
28174                } else {
28175                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
28176                    inner_depth.increment()?;
28177                }
28178                let val_ref = self.thread_router_id.get_or_insert_with(|| fidl::new_empty!(u8, D));
28179                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
28180                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
28181                {
28182                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
28183                }
28184                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
28185                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
28186                }
28187            }
28188
28189            next_offset += envelope_size;
28190            _next_ordinal_to_read += 1;
28191            if next_offset >= end_offset {
28192                return Ok(());
28193            }
28194
28195            // Decode unknown envelopes for gaps in ordinals.
28196            while _next_ordinal_to_read < 9 {
28197                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
28198                _next_ordinal_to_read += 1;
28199                next_offset += envelope_size;
28200            }
28201
28202            let next_out_of_line = decoder.next_out_of_line();
28203            let handles_before = decoder.remaining_handles();
28204            if let Some((inlined, num_bytes, num_handles)) =
28205                fidl::encoding::decode_envelope_header(decoder, next_offset)?
28206            {
28207                let member_inline_size =
28208                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
28209                if inlined != (member_inline_size <= 4) {
28210                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
28211                }
28212                let inner_offset;
28213                let mut inner_depth = depth.clone();
28214                if inlined {
28215                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
28216                    inner_offset = next_offset;
28217                } else {
28218                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
28219                    inner_depth.increment()?;
28220                }
28221                let val_ref = self.thread_rloc.get_or_insert_with(|| fidl::new_empty!(u16, D));
28222                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
28223                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
28224                {
28225                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
28226                }
28227                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
28228                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
28229                }
28230            }
28231
28232            next_offset += envelope_size;
28233            _next_ordinal_to_read += 1;
28234            if next_offset >= end_offset {
28235                return Ok(());
28236            }
28237
28238            // Decode unknown envelopes for gaps in ordinals.
28239            while _next_ordinal_to_read < 10 {
28240                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
28241                _next_ordinal_to_read += 1;
28242                next_offset += envelope_size;
28243            }
28244
28245            let next_out_of_line = decoder.next_out_of_line();
28246            let handles_before = decoder.remaining_handles();
28247            if let Some((inlined, num_bytes, num_handles)) =
28248                fidl::encoding::decode_envelope_header(decoder, next_offset)?
28249            {
28250                let member_inline_size =
28251                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
28252                if inlined != (member_inline_size <= 4) {
28253                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
28254                }
28255                let inner_offset;
28256                let mut inner_depth = depth.clone();
28257                if inlined {
28258                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
28259                    inner_offset = next_offset;
28260                } else {
28261                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
28262                    inner_depth.increment()?;
28263                }
28264                let val_ref =
28265                    self.thread_network_data_version.get_or_insert_with(|| fidl::new_empty!(u8, D));
28266                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
28267                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
28268                {
28269                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
28270                }
28271                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
28272                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
28273                }
28274            }
28275
28276            next_offset += envelope_size;
28277            _next_ordinal_to_read += 1;
28278            if next_offset >= end_offset {
28279                return Ok(());
28280            }
28281
28282            // Decode unknown envelopes for gaps in ordinals.
28283            while _next_ordinal_to_read < 11 {
28284                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
28285                _next_ordinal_to_read += 1;
28286                next_offset += envelope_size;
28287            }
28288
28289            let next_out_of_line = decoder.next_out_of_line();
28290            let handles_before = decoder.remaining_handles();
28291            if let Some((inlined, num_bytes, num_handles)) =
28292                fidl::encoding::decode_envelope_header(decoder, next_offset)?
28293            {
28294                let member_inline_size =
28295                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
28296                if inlined != (member_inline_size <= 4) {
28297                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
28298                }
28299                let inner_offset;
28300                let mut inner_depth = depth.clone();
28301                if inlined {
28302                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
28303                    inner_offset = next_offset;
28304                } else {
28305                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
28306                    inner_depth.increment()?;
28307                }
28308                let val_ref = self
28309                    .thread_stable_network_data_version
28310                    .get_or_insert_with(|| fidl::new_empty!(u8, D));
28311                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
28312                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
28313                {
28314                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
28315                }
28316                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
28317                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
28318                }
28319            }
28320
28321            next_offset += envelope_size;
28322            _next_ordinal_to_read += 1;
28323            if next_offset >= end_offset {
28324                return Ok(());
28325            }
28326
28327            // Decode unknown envelopes for gaps in ordinals.
28328            while _next_ordinal_to_read < 12 {
28329                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
28330                _next_ordinal_to_read += 1;
28331                next_offset += envelope_size;
28332            }
28333
28334            let next_out_of_line = decoder.next_out_of_line();
28335            let handles_before = decoder.remaining_handles();
28336            if let Some((inlined, num_bytes, num_handles)) =
28337                fidl::encoding::decode_envelope_header(decoder, next_offset)?
28338            {
28339                let member_inline_size =
28340                    <fidl::encoding::Vector<u8, 255> as fidl::encoding::TypeMarker>::inline_size(
28341                        decoder.context,
28342                    );
28343                if inlined != (member_inline_size <= 4) {
28344                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
28345                }
28346                let inner_offset;
28347                let mut inner_depth = depth.clone();
28348                if inlined {
28349                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
28350                    inner_offset = next_offset;
28351                } else {
28352                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
28353                    inner_depth.increment()?;
28354                }
28355                let val_ref = self
28356                    .thread_network_data
28357                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u8, 255>, D));
28358                fidl::decode!(fidl::encoding::Vector<u8, 255>, D, val_ref, decoder, inner_offset, inner_depth)?;
28359                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
28360                {
28361                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
28362                }
28363                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
28364                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
28365                }
28366            }
28367
28368            next_offset += envelope_size;
28369            _next_ordinal_to_read += 1;
28370            if next_offset >= end_offset {
28371                return Ok(());
28372            }
28373
28374            // Decode unknown envelopes for gaps in ordinals.
28375            while _next_ordinal_to_read < 13 {
28376                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
28377                _next_ordinal_to_read += 1;
28378                next_offset += envelope_size;
28379            }
28380
28381            let next_out_of_line = decoder.next_out_of_line();
28382            let handles_before = decoder.remaining_handles();
28383            if let Some((inlined, num_bytes, num_handles)) =
28384                fidl::encoding::decode_envelope_header(decoder, next_offset)?
28385            {
28386                let member_inline_size =
28387                    <fidl::encoding::Vector<u8, 255> as fidl::encoding::TypeMarker>::inline_size(
28388                        decoder.context,
28389                    );
28390                if inlined != (member_inline_size <= 4) {
28391                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
28392                }
28393                let inner_offset;
28394                let mut inner_depth = depth.clone();
28395                if inlined {
28396                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
28397                    inner_offset = next_offset;
28398                } else {
28399                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
28400                    inner_depth.increment()?;
28401                }
28402                let val_ref = self
28403                    .thread_stable_network_data
28404                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u8, 255>, D));
28405                fidl::decode!(fidl::encoding::Vector<u8, 255>, D, val_ref, decoder, inner_offset, inner_depth)?;
28406                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
28407                {
28408                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
28409                }
28410                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
28411                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
28412                }
28413            }
28414
28415            next_offset += envelope_size;
28416            _next_ordinal_to_read += 1;
28417            if next_offset >= end_offset {
28418                return Ok(());
28419            }
28420
28421            // Decode unknown envelopes for gaps in ordinals.
28422            while _next_ordinal_to_read < 14 {
28423                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
28424                _next_ordinal_to_read += 1;
28425                next_offset += envelope_size;
28426            }
28427
28428            let next_out_of_line = decoder.next_out_of_line();
28429            let handles_before = decoder.remaining_handles();
28430            if let Some((inlined, num_bytes, num_handles)) =
28431                fidl::encoding::decode_envelope_header(decoder, next_offset)?
28432            {
28433                let member_inline_size =
28434                    <BorderRoutingCounters as fidl::encoding::TypeMarker>::inline_size(
28435                        decoder.context,
28436                    );
28437                if inlined != (member_inline_size <= 4) {
28438                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
28439                }
28440                let inner_offset;
28441                let mut inner_depth = depth.clone();
28442                if inlined {
28443                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
28444                    inner_offset = next_offset;
28445                } else {
28446                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
28447                    inner_depth.increment()?;
28448                }
28449                let val_ref = self
28450                    .thread_border_routing_counters
28451                    .get_or_insert_with(|| fidl::new_empty!(BorderRoutingCounters, D));
28452                fidl::decode!(
28453                    BorderRoutingCounters,
28454                    D,
28455                    val_ref,
28456                    decoder,
28457                    inner_offset,
28458                    inner_depth
28459                )?;
28460                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
28461                {
28462                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
28463                }
28464                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
28465                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
28466                }
28467            }
28468
28469            next_offset += envelope_size;
28470            _next_ordinal_to_read += 1;
28471            if next_offset >= end_offset {
28472                return Ok(());
28473            }
28474
28475            // Decode unknown envelopes for gaps in ordinals.
28476            while _next_ordinal_to_read < 15 {
28477                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
28478                _next_ordinal_to_read += 1;
28479                next_offset += envelope_size;
28480            }
28481
28482            let next_out_of_line = decoder.next_out_of_line();
28483            let handles_before = decoder.remaining_handles();
28484            if let Some((inlined, num_bytes, num_handles)) =
28485                fidl::encoding::decode_envelope_header(decoder, next_offset)?
28486            {
28487                let member_inline_size =
28488                    <SrpServerInfo as fidl::encoding::TypeMarker>::inline_size(decoder.context);
28489                if inlined != (member_inline_size <= 4) {
28490                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
28491                }
28492                let inner_offset;
28493                let mut inner_depth = depth.clone();
28494                if inlined {
28495                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
28496                    inner_offset = next_offset;
28497                } else {
28498                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
28499                    inner_depth.increment()?;
28500                }
28501                let val_ref =
28502                    self.srp_server_info.get_or_insert_with(|| fidl::new_empty!(SrpServerInfo, D));
28503                fidl::decode!(SrpServerInfo, D, val_ref, decoder, inner_offset, inner_depth)?;
28504                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
28505                {
28506                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
28507                }
28508                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
28509                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
28510                }
28511            }
28512
28513            next_offset += envelope_size;
28514            _next_ordinal_to_read += 1;
28515            if next_offset >= end_offset {
28516                return Ok(());
28517            }
28518
28519            // Decode unknown envelopes for gaps in ordinals.
28520            while _next_ordinal_to_read < 16 {
28521                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
28522                _next_ordinal_to_read += 1;
28523                next_offset += envelope_size;
28524            }
28525
28526            let next_out_of_line = decoder.next_out_of_line();
28527            let handles_before = decoder.remaining_handles();
28528            if let Some((inlined, num_bytes, num_handles)) =
28529                fidl::encoding::decode_envelope_header(decoder, next_offset)?
28530            {
28531                let member_inline_size =
28532                    <DnssdCounters as fidl::encoding::TypeMarker>::inline_size(decoder.context);
28533                if inlined != (member_inline_size <= 4) {
28534                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
28535                }
28536                let inner_offset;
28537                let mut inner_depth = depth.clone();
28538                if inlined {
28539                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
28540                    inner_offset = next_offset;
28541                } else {
28542                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
28543                    inner_depth.increment()?;
28544                }
28545                let val_ref =
28546                    self.dnssd_counters.get_or_insert_with(|| fidl::new_empty!(DnssdCounters, D));
28547                fidl::decode!(DnssdCounters, D, val_ref, decoder, inner_offset, inner_depth)?;
28548                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
28549                {
28550                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
28551                }
28552                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
28553                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
28554                }
28555            }
28556
28557            next_offset += envelope_size;
28558            _next_ordinal_to_read += 1;
28559            if next_offset >= end_offset {
28560                return Ok(());
28561            }
28562
28563            // Decode unknown envelopes for gaps in ordinals.
28564            while _next_ordinal_to_read < 17 {
28565                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
28566                _next_ordinal_to_read += 1;
28567                next_offset += envelope_size;
28568            }
28569
28570            let next_out_of_line = decoder.next_out_of_line();
28571            let handles_before = decoder.remaining_handles();
28572            if let Some((inlined, num_bytes, num_handles)) =
28573                fidl::encoding::decode_envelope_header(decoder, next_offset)?
28574            {
28575                let member_inline_size =
28576                    <LeaderData as fidl::encoding::TypeMarker>::inline_size(decoder.context);
28577                if inlined != (member_inline_size <= 4) {
28578                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
28579                }
28580                let inner_offset;
28581                let mut inner_depth = depth.clone();
28582                if inlined {
28583                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
28584                    inner_offset = next_offset;
28585                } else {
28586                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
28587                    inner_depth.increment()?;
28588                }
28589                let val_ref =
28590                    self.leader_data.get_or_insert_with(|| fidl::new_empty!(LeaderData, D));
28591                fidl::decode!(LeaderData, D, val_ref, decoder, inner_offset, inner_depth)?;
28592                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
28593                {
28594                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
28595                }
28596                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
28597                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
28598                }
28599            }
28600
28601            next_offset += envelope_size;
28602            _next_ordinal_to_read += 1;
28603            if next_offset >= end_offset {
28604                return Ok(());
28605            }
28606
28607            // Decode unknown envelopes for gaps in ordinals.
28608            while _next_ordinal_to_read < 18 {
28609                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
28610                _next_ordinal_to_read += 1;
28611                next_offset += envelope_size;
28612            }
28613
28614            let next_out_of_line = decoder.next_out_of_line();
28615            let handles_before = decoder.remaining_handles();
28616            if let Some((inlined, num_bytes, num_handles)) =
28617                fidl::encoding::decode_envelope_header(decoder, next_offset)?
28618            {
28619                let member_inline_size =
28620                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
28621                if inlined != (member_inline_size <= 4) {
28622                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
28623                }
28624                let inner_offset;
28625                let mut inner_depth = depth.clone();
28626                if inlined {
28627                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
28628                    inner_offset = next_offset;
28629                } else {
28630                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
28631                    inner_depth.increment()?;
28632                }
28633                let val_ref = self.uptime.get_or_insert_with(|| fidl::new_empty!(i64, D));
28634                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
28635                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
28636                {
28637                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
28638                }
28639                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
28640                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
28641                }
28642            }
28643
28644            next_offset += envelope_size;
28645            _next_ordinal_to_read += 1;
28646            if next_offset >= end_offset {
28647                return Ok(());
28648            }
28649
28650            // Decode unknown envelopes for gaps in ordinals.
28651            while _next_ordinal_to_read < 19 {
28652                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
28653                _next_ordinal_to_read += 1;
28654                next_offset += envelope_size;
28655            }
28656
28657            let next_out_of_line = decoder.next_out_of_line();
28658            let handles_before = decoder.remaining_handles();
28659            if let Some((inlined, num_bytes, num_handles)) =
28660                fidl::encoding::decode_envelope_header(decoder, next_offset)?
28661            {
28662                let member_inline_size =
28663                    <Nat64Info as fidl::encoding::TypeMarker>::inline_size(decoder.context);
28664                if inlined != (member_inline_size <= 4) {
28665                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
28666                }
28667                let inner_offset;
28668                let mut inner_depth = depth.clone();
28669                if inlined {
28670                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
28671                    inner_offset = next_offset;
28672                } else {
28673                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
28674                    inner_depth.increment()?;
28675                }
28676                let val_ref = self.nat64_info.get_or_insert_with(|| fidl::new_empty!(Nat64Info, D));
28677                fidl::decode!(Nat64Info, D, val_ref, decoder, inner_offset, inner_depth)?;
28678                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
28679                {
28680                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
28681                }
28682                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
28683                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
28684                }
28685            }
28686
28687            next_offset += envelope_size;
28688            _next_ordinal_to_read += 1;
28689            if next_offset >= end_offset {
28690                return Ok(());
28691            }
28692
28693            // Decode unknown envelopes for gaps in ordinals.
28694            while _next_ordinal_to_read < 20 {
28695                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
28696                _next_ordinal_to_read += 1;
28697                next_offset += envelope_size;
28698            }
28699
28700            let next_out_of_line = decoder.next_out_of_line();
28701            let handles_before = decoder.remaining_handles();
28702            if let Some((inlined, num_bytes, num_handles)) =
28703                fidl::encoding::decode_envelope_header(decoder, next_offset)?
28704            {
28705                let member_inline_size =
28706                    <TrelCounters as fidl::encoding::TypeMarker>::inline_size(decoder.context);
28707                if inlined != (member_inline_size <= 4) {
28708                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
28709                }
28710                let inner_offset;
28711                let mut inner_depth = depth.clone();
28712                if inlined {
28713                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
28714                    inner_offset = next_offset;
28715                } else {
28716                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
28717                    inner_depth.increment()?;
28718                }
28719                let val_ref =
28720                    self.trel_counters.get_or_insert_with(|| fidl::new_empty!(TrelCounters, D));
28721                fidl::decode!(TrelCounters, D, val_ref, decoder, inner_offset, inner_depth)?;
28722                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
28723                {
28724                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
28725                }
28726                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
28727                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
28728                }
28729            }
28730
28731            next_offset += envelope_size;
28732            _next_ordinal_to_read += 1;
28733            if next_offset >= end_offset {
28734                return Ok(());
28735            }
28736
28737            // Decode unknown envelopes for gaps in ordinals.
28738            while _next_ordinal_to_read < 21 {
28739                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
28740                _next_ordinal_to_read += 1;
28741                next_offset += envelope_size;
28742            }
28743
28744            let next_out_of_line = decoder.next_out_of_line();
28745            let handles_before = decoder.remaining_handles();
28746            if let Some((inlined, num_bytes, num_handles)) =
28747                fidl::encoding::decode_envelope_header(decoder, next_offset)?
28748            {
28749                let member_inline_size =
28750                    <TrelPeersInfo as fidl::encoding::TypeMarker>::inline_size(decoder.context);
28751                if inlined != (member_inline_size <= 4) {
28752                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
28753                }
28754                let inner_offset;
28755                let mut inner_depth = depth.clone();
28756                if inlined {
28757                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
28758                    inner_offset = next_offset;
28759                } else {
28760                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
28761                    inner_depth.increment()?;
28762                }
28763                let val_ref =
28764                    self.trel_peers_info.get_or_insert_with(|| fidl::new_empty!(TrelPeersInfo, D));
28765                fidl::decode!(TrelPeersInfo, D, val_ref, decoder, inner_offset, inner_depth)?;
28766                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
28767                {
28768                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
28769                }
28770                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
28771                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
28772                }
28773            }
28774
28775            next_offset += envelope_size;
28776            _next_ordinal_to_read += 1;
28777            if next_offset >= end_offset {
28778                return Ok(());
28779            }
28780
28781            // Decode unknown envelopes for gaps in ordinals.
28782            while _next_ordinal_to_read < 22 {
28783                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
28784                _next_ordinal_to_read += 1;
28785                next_offset += envelope_size;
28786            }
28787
28788            let next_out_of_line = decoder.next_out_of_line();
28789            let handles_before = decoder.remaining_handles();
28790            if let Some((inlined, num_bytes, num_handles)) =
28791                fidl::encoding::decode_envelope_header(decoder, next_offset)?
28792            {
28793                let member_inline_size =
28794                    <UpstreamDnsInfo as fidl::encoding::TypeMarker>::inline_size(decoder.context);
28795                if inlined != (member_inline_size <= 4) {
28796                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
28797                }
28798                let inner_offset;
28799                let mut inner_depth = depth.clone();
28800                if inlined {
28801                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
28802                    inner_offset = next_offset;
28803                } else {
28804                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
28805                    inner_depth.increment()?;
28806                }
28807                let val_ref = self
28808                    .upstream_dns_info
28809                    .get_or_insert_with(|| fidl::new_empty!(UpstreamDnsInfo, D));
28810                fidl::decode!(UpstreamDnsInfo, D, val_ref, decoder, inner_offset, inner_depth)?;
28811                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
28812                {
28813                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
28814                }
28815                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
28816                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
28817                }
28818            }
28819
28820            next_offset += envelope_size;
28821            _next_ordinal_to_read += 1;
28822            if next_offset >= end_offset {
28823                return Ok(());
28824            }
28825
28826            // Decode unknown envelopes for gaps in ordinals.
28827            while _next_ordinal_to_read < 23 {
28828                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
28829                _next_ordinal_to_read += 1;
28830                next_offset += envelope_size;
28831            }
28832
28833            let next_out_of_line = decoder.next_out_of_line();
28834            let handles_before = decoder.remaining_handles();
28835            if let Some((inlined, num_bytes, num_handles)) =
28836                fidl::encoding::decode_envelope_header(decoder, next_offset)?
28837            {
28838                let member_inline_size =
28839                    <Dhcp6PdInfo as fidl::encoding::TypeMarker>::inline_size(decoder.context);
28840                if inlined != (member_inline_size <= 4) {
28841                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
28842                }
28843                let inner_offset;
28844                let mut inner_depth = depth.clone();
28845                if inlined {
28846                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
28847                    inner_offset = next_offset;
28848                } else {
28849                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
28850                    inner_depth.increment()?;
28851                }
28852                let val_ref =
28853                    self.dhcp6pd_info.get_or_insert_with(|| fidl::new_empty!(Dhcp6PdInfo, D));
28854                fidl::decode!(Dhcp6PdInfo, D, val_ref, decoder, inner_offset, inner_depth)?;
28855                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
28856                {
28857                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
28858                }
28859                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
28860                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
28861                }
28862            }
28863
28864            next_offset += envelope_size;
28865            _next_ordinal_to_read += 1;
28866            if next_offset >= end_offset {
28867                return Ok(());
28868            }
28869
28870            // Decode unknown envelopes for gaps in ordinals.
28871            while _next_ordinal_to_read < 24 {
28872                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
28873                _next_ordinal_to_read += 1;
28874                next_offset += envelope_size;
28875            }
28876
28877            let next_out_of_line = decoder.next_out_of_line();
28878            let handles_before = decoder.remaining_handles();
28879            if let Some((inlined, num_bytes, num_handles)) =
28880                fidl::encoding::decode_envelope_header(decoder, next_offset)?
28881            {
28882                let member_inline_size = <fidl::encoding::Vector<LinkMetricsEntry, 64> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
28883                if inlined != (member_inline_size <= 4) {
28884                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
28885                }
28886                let inner_offset;
28887                let mut inner_depth = depth.clone();
28888                if inlined {
28889                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
28890                    inner_offset = next_offset;
28891                } else {
28892                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
28893                    inner_depth.increment()?;
28894                }
28895                let val_ref = self.link_metrics_entries.get_or_insert_with(
28896                    || fidl::new_empty!(fidl::encoding::Vector<LinkMetricsEntry, 64>, D),
28897                );
28898                fidl::decode!(fidl::encoding::Vector<LinkMetricsEntry, 64>, D, val_ref, decoder, inner_offset, inner_depth)?;
28899                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
28900                {
28901                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
28902                }
28903                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
28904                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
28905                }
28906            }
28907
28908            next_offset += envelope_size;
28909            _next_ordinal_to_read += 1;
28910            if next_offset >= end_offset {
28911                return Ok(());
28912            }
28913
28914            // Decode unknown envelopes for gaps in ordinals.
28915            while _next_ordinal_to_read < 25 {
28916                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
28917                _next_ordinal_to_read += 1;
28918                next_offset += envelope_size;
28919            }
28920
28921            let next_out_of_line = decoder.next_out_of_line();
28922            let handles_before = decoder.remaining_handles();
28923            if let Some((inlined, num_bytes, num_handles)) =
28924                fidl::encoding::decode_envelope_header(decoder, next_offset)?
28925            {
28926                let member_inline_size = <fidl_fuchsia_lowpan_device_common::BorderAgentCounters as fidl::encoding::TypeMarker>::inline_size(decoder.context);
28927                if inlined != (member_inline_size <= 4) {
28928                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
28929                }
28930                let inner_offset;
28931                let mut inner_depth = depth.clone();
28932                if inlined {
28933                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
28934                    inner_offset = next_offset;
28935                } else {
28936                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
28937                    inner_depth.increment()?;
28938                }
28939                let val_ref = self.border_agent_counters.get_or_insert_with(|| {
28940                    fidl::new_empty!(fidl_fuchsia_lowpan_device_common::BorderAgentCounters, D)
28941                });
28942                fidl::decode!(
28943                    fidl_fuchsia_lowpan_device_common::BorderAgentCounters,
28944                    D,
28945                    val_ref,
28946                    decoder,
28947                    inner_offset,
28948                    inner_depth
28949                )?;
28950                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
28951                {
28952                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
28953                }
28954                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
28955                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
28956                }
28957            }
28958
28959            next_offset += envelope_size;
28960            _next_ordinal_to_read += 1;
28961            if next_offset >= end_offset {
28962                return Ok(());
28963            }
28964
28965            // Decode unknown envelopes for gaps in ordinals.
28966            while _next_ordinal_to_read < 26 {
28967                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
28968                _next_ordinal_to_read += 1;
28969                next_offset += envelope_size;
28970            }
28971
28972            let next_out_of_line = decoder.next_out_of_line();
28973            let handles_before = decoder.remaining_handles();
28974            if let Some((inlined, num_bytes, num_handles)) =
28975                fidl::encoding::decode_envelope_header(decoder, next_offset)?
28976            {
28977                let member_inline_size =
28978                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
28979                if inlined != (member_inline_size <= 4) {
28980                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
28981                }
28982                let inner_offset;
28983                let mut inner_depth = depth.clone();
28984                if inlined {
28985                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
28986                    inner_offset = next_offset;
28987                } else {
28988                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
28989                    inner_depth.increment()?;
28990                }
28991                let val_ref =
28992                    self.multi_ail_detected.get_or_insert_with(|| fidl::new_empty!(bool, D));
28993                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
28994                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
28995                {
28996                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
28997                }
28998                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
28999                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
29000                }
29001            }
29002
29003            next_offset += envelope_size;
29004            _next_ordinal_to_read += 1;
29005            if next_offset >= end_offset {
29006                return Ok(());
29007            }
29008
29009            // Decode unknown envelopes for gaps in ordinals.
29010            while _next_ordinal_to_read < 27 {
29011                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
29012                _next_ordinal_to_read += 1;
29013                next_offset += envelope_size;
29014            }
29015
29016            let next_out_of_line = decoder.next_out_of_line();
29017            let handles_before = decoder.remaining_handles();
29018            if let Some((inlined, num_bytes, num_handles)) =
29019                fidl::encoding::decode_envelope_header(decoder, next_offset)?
29020            {
29021                let member_inline_size =
29022                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
29023                if inlined != (member_inline_size <= 4) {
29024                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
29025                }
29026                let inner_offset;
29027                let mut inner_depth = depth.clone();
29028                if inlined {
29029                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
29030                    inner_offset = next_offset;
29031                } else {
29032                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
29033                    inner_depth.increment()?;
29034                }
29035                let val_ref = self.extended_pan_id.get_or_insert_with(|| fidl::new_empty!(u64, D));
29036                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
29037                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
29038                {
29039                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
29040                }
29041                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
29042                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
29043                }
29044            }
29045
29046            next_offset += envelope_size;
29047            _next_ordinal_to_read += 1;
29048            if next_offset >= end_offset {
29049                return Ok(());
29050            }
29051
29052            // Decode unknown envelopes for gaps in ordinals.
29053            while _next_ordinal_to_read < 28 {
29054                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
29055                _next_ordinal_to_read += 1;
29056                next_offset += envelope_size;
29057            }
29058
29059            let next_out_of_line = decoder.next_out_of_line();
29060            let handles_before = decoder.remaining_handles();
29061            if let Some((inlined, num_bytes, num_handles)) =
29062                fidl::encoding::decode_envelope_header(decoder, next_offset)?
29063            {
29064                let member_inline_size = <fidl::encoding::Vector<BorderRoutingPeer, 64> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
29065                if inlined != (member_inline_size <= 4) {
29066                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
29067                }
29068                let inner_offset;
29069                let mut inner_depth = depth.clone();
29070                if inlined {
29071                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
29072                    inner_offset = next_offset;
29073                } else {
29074                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
29075                    inner_depth.increment()?;
29076                }
29077                let val_ref = self.border_routing_peers.get_or_insert_with(
29078                    || fidl::new_empty!(fidl::encoding::Vector<BorderRoutingPeer, 64>, D),
29079                );
29080                fidl::decode!(fidl::encoding::Vector<BorderRoutingPeer, 64>, D, val_ref, decoder, inner_offset, inner_depth)?;
29081                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
29082                {
29083                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
29084                }
29085                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
29086                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
29087                }
29088            }
29089
29090            next_offset += envelope_size;
29091            _next_ordinal_to_read += 1;
29092            if next_offset >= end_offset {
29093                return Ok(());
29094            }
29095
29096            // Decode unknown envelopes for gaps in ordinals.
29097            while _next_ordinal_to_read < 29 {
29098                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
29099                _next_ordinal_to_read += 1;
29100                next_offset += envelope_size;
29101            }
29102
29103            let next_out_of_line = decoder.next_out_of_line();
29104            let handles_before = decoder.remaining_handles();
29105            if let Some((inlined, num_bytes, num_handles)) =
29106                fidl::encoding::decode_envelope_header(decoder, next_offset)?
29107            {
29108                let member_inline_size = <fidl::encoding::Vector<BorderRoutingRouter, 64> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
29109                if inlined != (member_inline_size <= 4) {
29110                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
29111                }
29112                let inner_offset;
29113                let mut inner_depth = depth.clone();
29114                if inlined {
29115                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
29116                    inner_offset = next_offset;
29117                } else {
29118                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
29119                    inner_depth.increment()?;
29120                }
29121                let val_ref = self.border_routing_routers.get_or_insert_with(
29122                    || fidl::new_empty!(fidl::encoding::Vector<BorderRoutingRouter, 64>, D),
29123                );
29124                fidl::decode!(fidl::encoding::Vector<BorderRoutingRouter, 64>, D, val_ref, decoder, inner_offset, inner_depth)?;
29125                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
29126                {
29127                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
29128                }
29129                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
29130                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
29131                }
29132            }
29133
29134            next_offset += envelope_size;
29135            _next_ordinal_to_read += 1;
29136            if next_offset >= end_offset {
29137                return Ok(());
29138            }
29139
29140            // Decode unknown envelopes for gaps in ordinals.
29141            while _next_ordinal_to_read < 30 {
29142                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
29143                _next_ordinal_to_read += 1;
29144                next_offset += envelope_size;
29145            }
29146
29147            let next_out_of_line = decoder.next_out_of_line();
29148            let handles_before = decoder.remaining_handles();
29149            if let Some((inlined, num_bytes, num_handles)) =
29150                fidl::encoding::decode_envelope_header(decoder, next_offset)?
29151            {
29152                let member_inline_size =
29153                    <OperationalDataset as fidl::encoding::TypeMarker>::inline_size(
29154                        decoder.context,
29155                    );
29156                if inlined != (member_inline_size <= 4) {
29157                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
29158                }
29159                let inner_offset;
29160                let mut inner_depth = depth.clone();
29161                if inlined {
29162                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
29163                    inner_offset = next_offset;
29164                } else {
29165                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
29166                    inner_depth.increment()?;
29167                }
29168                let val_ref = self
29169                    .active_dataset
29170                    .get_or_insert_with(|| fidl::new_empty!(OperationalDataset, D));
29171                fidl::decode!(OperationalDataset, D, val_ref, decoder, inner_offset, inner_depth)?;
29172                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
29173                {
29174                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
29175                }
29176                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
29177                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
29178                }
29179            }
29180
29181            next_offset += envelope_size;
29182            _next_ordinal_to_read += 1;
29183            if next_offset >= end_offset {
29184                return Ok(());
29185            }
29186
29187            // Decode unknown envelopes for gaps in ordinals.
29188            while _next_ordinal_to_read < 31 {
29189                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
29190                _next_ordinal_to_read += 1;
29191                next_offset += envelope_size;
29192            }
29193
29194            let next_out_of_line = decoder.next_out_of_line();
29195            let handles_before = decoder.remaining_handles();
29196            if let Some((inlined, num_bytes, num_handles)) =
29197                fidl::encoding::decode_envelope_header(decoder, next_offset)?
29198            {
29199                let member_inline_size = <fidl::encoding::Vector<MultiRadioNeighborInfo, 64> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
29200                if inlined != (member_inline_size <= 4) {
29201                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
29202                }
29203                let inner_offset;
29204                let mut inner_depth = depth.clone();
29205                if inlined {
29206                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
29207                    inner_offset = next_offset;
29208                } else {
29209                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
29210                    inner_depth.increment()?;
29211                }
29212                let val_ref = self.multiradio_neighbor_info.get_or_insert_with(
29213                    || fidl::new_empty!(fidl::encoding::Vector<MultiRadioNeighborInfo, 64>, D),
29214                );
29215                fidl::decode!(fidl::encoding::Vector<MultiRadioNeighborInfo, 64>, D, val_ref, decoder, inner_offset, inner_depth)?;
29216                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
29217                {
29218                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
29219                }
29220                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
29221                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
29222                }
29223            }
29224
29225            next_offset += envelope_size;
29226            _next_ordinal_to_read += 1;
29227            if next_offset >= end_offset {
29228                return Ok(());
29229            }
29230
29231            // Decode unknown envelopes for gaps in ordinals.
29232            while _next_ordinal_to_read < 32 {
29233                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
29234                _next_ordinal_to_read += 1;
29235                next_offset += envelope_size;
29236            }
29237
29238            let next_out_of_line = decoder.next_out_of_line();
29239            let handles_before = decoder.remaining_handles();
29240            if let Some((inlined, num_bytes, num_handles)) =
29241                fidl::encoding::decode_envelope_header(decoder, next_offset)?
29242            {
29243                let member_inline_size = <fidl::encoding::Vector<RouterInfo, 64> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
29244                if inlined != (member_inline_size <= 4) {
29245                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
29246                }
29247                let inner_offset;
29248                let mut inner_depth = depth.clone();
29249                if inlined {
29250                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
29251                    inner_offset = next_offset;
29252                } else {
29253                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
29254                    inner_depth.increment()?;
29255                }
29256                let val_ref = self.router_info.get_or_insert_with(
29257                    || fidl::new_empty!(fidl::encoding::Vector<RouterInfo, 64>, D),
29258                );
29259                fidl::decode!(fidl::encoding::Vector<RouterInfo, 64>, D, val_ref, decoder, inner_offset, inner_depth)?;
29260                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
29261                {
29262                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
29263                }
29264                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
29265                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
29266                }
29267            }
29268
29269            next_offset += envelope_size;
29270            _next_ordinal_to_read += 1;
29271            if next_offset >= end_offset {
29272                return Ok(());
29273            }
29274
29275            // Decode unknown envelopes for gaps in ordinals.
29276            while _next_ordinal_to_read < 33 {
29277                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
29278                _next_ordinal_to_read += 1;
29279                next_offset += envelope_size;
29280            }
29281
29282            let next_out_of_line = decoder.next_out_of_line();
29283            let handles_before = decoder.remaining_handles();
29284            if let Some((inlined, num_bytes, num_handles)) =
29285                fidl::encoding::decode_envelope_header(decoder, next_offset)?
29286            {
29287                let member_inline_size =
29288                    <NetworkData as fidl::encoding::TypeMarker>::inline_size(decoder.context);
29289                if inlined != (member_inline_size <= 4) {
29290                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
29291                }
29292                let inner_offset;
29293                let mut inner_depth = depth.clone();
29294                if inlined {
29295                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
29296                    inner_offset = next_offset;
29297                } else {
29298                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
29299                    inner_depth.increment()?;
29300                }
29301                let val_ref =
29302                    self.network_data.get_or_insert_with(|| fidl::new_empty!(NetworkData, D));
29303                fidl::decode!(NetworkData, D, val_ref, decoder, inner_offset, inner_depth)?;
29304                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
29305                {
29306                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
29307                }
29308                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
29309                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
29310                }
29311            }
29312
29313            next_offset += envelope_size;
29314            _next_ordinal_to_read += 1;
29315            if next_offset >= end_offset {
29316                return Ok(());
29317            }
29318
29319            // Decode unknown envelopes for gaps in ordinals.
29320            while _next_ordinal_to_read < 34 {
29321                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
29322                _next_ordinal_to_read += 1;
29323                next_offset += envelope_size;
29324            }
29325
29326            let next_out_of_line = decoder.next_out_of_line();
29327            let handles_before = decoder.remaining_handles();
29328            if let Some((inlined, num_bytes, num_handles)) =
29329                fidl::encoding::decode_envelope_header(decoder, next_offset)?
29330            {
29331                let member_inline_size =
29332                    <ThreadHistoryReport as fidl::encoding::TypeMarker>::inline_size(
29333                        decoder.context,
29334                    );
29335                if inlined != (member_inline_size <= 4) {
29336                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
29337                }
29338                let inner_offset;
29339                let mut inner_depth = depth.clone();
29340                if inlined {
29341                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
29342                    inner_offset = next_offset;
29343                } else {
29344                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
29345                    inner_depth.increment()?;
29346                }
29347                let val_ref = self
29348                    .history_report
29349                    .get_or_insert_with(|| fidl::new_empty!(ThreadHistoryReport, D));
29350                fidl::decode!(ThreadHistoryReport, D, val_ref, decoder, inner_offset, inner_depth)?;
29351                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
29352                {
29353                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
29354                }
29355                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
29356                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
29357                }
29358            }
29359
29360            next_offset += envelope_size;
29361            _next_ordinal_to_read += 1;
29362            if next_offset >= end_offset {
29363                return Ok(());
29364            }
29365
29366            // Decode unknown envelopes for gaps in ordinals.
29367            while _next_ordinal_to_read < 35 {
29368                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
29369                _next_ordinal_to_read += 1;
29370                next_offset += envelope_size;
29371            }
29372
29373            let next_out_of_line = decoder.next_out_of_line();
29374            let handles_before = decoder.remaining_handles();
29375            if let Some((inlined, num_bytes, num_handles)) =
29376                fidl::encoding::decode_envelope_header(decoder, next_offset)?
29377            {
29378                let member_inline_size = <fidl::encoding::Vector<NetifAddress, 32> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
29379                if inlined != (member_inline_size <= 4) {
29380                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
29381                }
29382                let inner_offset;
29383                let mut inner_depth = depth.clone();
29384                if inlined {
29385                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
29386                    inner_offset = next_offset;
29387                } else {
29388                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
29389                    inner_depth.increment()?;
29390                }
29391                let val_ref = self.ipaddrs.get_or_insert_with(
29392                    || fidl::new_empty!(fidl::encoding::Vector<NetifAddress, 32>, D),
29393                );
29394                fidl::decode!(fidl::encoding::Vector<NetifAddress, 32>, D, val_ref, decoder, inner_offset, inner_depth)?;
29395                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
29396                {
29397                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
29398                }
29399                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
29400                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
29401                }
29402            }
29403
29404            next_offset += envelope_size;
29405            _next_ordinal_to_read += 1;
29406            if next_offset >= end_offset {
29407                return Ok(());
29408            }
29409
29410            // Decode unknown envelopes for gaps in ordinals.
29411            while _next_ordinal_to_read < 36 {
29412                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
29413                _next_ordinal_to_read += 1;
29414                next_offset += envelope_size;
29415            }
29416
29417            let next_out_of_line = decoder.next_out_of_line();
29418            let handles_before = decoder.remaining_handles();
29419            if let Some((inlined, num_bytes, num_handles)) =
29420                fidl::encoding::decode_envelope_header(decoder, next_offset)?
29421            {
29422                let member_inline_size = <fidl::encoding::Vector<
29423                    fidl_fuchsia_net_common::Ipv6Address,
29424                    32,
29425                > as fidl::encoding::TypeMarker>::inline_size(
29426                    decoder.context
29427                );
29428                if inlined != (member_inline_size <= 4) {
29429                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
29430                }
29431                let inner_offset;
29432                let mut inner_depth = depth.clone();
29433                if inlined {
29434                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
29435                    inner_offset = next_offset;
29436                } else {
29437                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
29438                    inner_depth.increment()?;
29439                }
29440                let val_ref =
29441                self.ipmaddrs.get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<fidl_fuchsia_net_common::Ipv6Address, 32>, D));
29442                fidl::decode!(fidl::encoding::Vector<fidl_fuchsia_net_common::Ipv6Address, 32>, D, val_ref, decoder, inner_offset, inner_depth)?;
29443                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
29444                {
29445                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
29446                }
29447                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
29448                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
29449                }
29450            }
29451
29452            next_offset += envelope_size;
29453            _next_ordinal_to_read += 1;
29454            if next_offset >= end_offset {
29455                return Ok(());
29456            }
29457
29458            // Decode unknown envelopes for gaps in ordinals.
29459            while _next_ordinal_to_read < 37 {
29460                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
29461                _next_ordinal_to_read += 1;
29462                next_offset += envelope_size;
29463            }
29464
29465            let next_out_of_line = decoder.next_out_of_line();
29466            let handles_before = decoder.remaining_handles();
29467            if let Some((inlined, num_bytes, num_handles)) =
29468                fidl::encoding::decode_envelope_header(decoder, next_offset)?
29469            {
29470                let member_inline_size = <fidl::encoding::Vector<BorderRoutingPrefixTable, 64> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
29471                if inlined != (member_inline_size <= 4) {
29472                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
29473                }
29474                let inner_offset;
29475                let mut inner_depth = depth.clone();
29476                if inlined {
29477                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
29478                    inner_offset = next_offset;
29479                } else {
29480                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
29481                    inner_depth.increment()?;
29482                }
29483                let val_ref = self.border_routing_prefixes.get_or_insert_with(
29484                    || fidl::new_empty!(fidl::encoding::Vector<BorderRoutingPrefixTable, 64>, D),
29485                );
29486                fidl::decode!(fidl::encoding::Vector<BorderRoutingPrefixTable, 64>, D, val_ref, decoder, inner_offset, inner_depth)?;
29487                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
29488                {
29489                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
29490                }
29491                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
29492                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
29493                }
29494            }
29495
29496            next_offset += envelope_size;
29497            _next_ordinal_to_read += 1;
29498            if next_offset >= end_offset {
29499                return Ok(());
29500            }
29501
29502            // Decode unknown envelopes for gaps in ordinals.
29503            while _next_ordinal_to_read < 38 {
29504                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
29505                _next_ordinal_to_read += 1;
29506                next_offset += envelope_size;
29507            }
29508
29509            let next_out_of_line = decoder.next_out_of_line();
29510            let handles_before = decoder.remaining_handles();
29511            if let Some((inlined, num_bytes, num_handles)) =
29512                fidl::encoding::decode_envelope_header(decoder, next_offset)?
29513            {
29514                let member_inline_size = <fidl::encoding::Vector<BorderRoutingRdnss, 64> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
29515                if inlined != (member_inline_size <= 4) {
29516                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
29517                }
29518                let inner_offset;
29519                let mut inner_depth = depth.clone();
29520                if inlined {
29521                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
29522                    inner_offset = next_offset;
29523                } else {
29524                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
29525                    inner_depth.increment()?;
29526                }
29527                let val_ref = self.border_routing_rdnsses.get_or_insert_with(
29528                    || fidl::new_empty!(fidl::encoding::Vector<BorderRoutingRdnss, 64>, D),
29529                );
29530                fidl::decode!(fidl::encoding::Vector<BorderRoutingRdnss, 64>, D, val_ref, decoder, inner_offset, inner_depth)?;
29531                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
29532                {
29533                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
29534                }
29535                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
29536                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
29537                }
29538            }
29539
29540            next_offset += envelope_size;
29541            _next_ordinal_to_read += 1;
29542            if next_offset >= end_offset {
29543                return Ok(());
29544            }
29545
29546            // Decode unknown envelopes for gaps in ordinals.
29547            while _next_ordinal_to_read < 39 {
29548                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
29549                _next_ordinal_to_read += 1;
29550                next_offset += envelope_size;
29551            }
29552
29553            let next_out_of_line = decoder.next_out_of_line();
29554            let handles_before = decoder.remaining_handles();
29555            if let Some((inlined, num_bytes, num_handles)) =
29556                fidl::encoding::decode_envelope_header(decoder, next_offset)?
29557            {
29558                let member_inline_size = <fidl::encoding::Vector<UdpSocket, 32> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
29559                if inlined != (member_inline_size <= 4) {
29560                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
29561                }
29562                let inner_offset;
29563                let mut inner_depth = depth.clone();
29564                if inlined {
29565                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
29566                    inner_offset = next_offset;
29567                } else {
29568                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
29569                    inner_depth.increment()?;
29570                }
29571                let val_ref = self.netstat.get_or_insert_with(
29572                    || fidl::new_empty!(fidl::encoding::Vector<UdpSocket, 32>, D),
29573                );
29574                fidl::decode!(fidl::encoding::Vector<UdpSocket, 32>, D, val_ref, decoder, inner_offset, inner_depth)?;
29575                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
29576                {
29577                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
29578                }
29579                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
29580                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
29581                }
29582            }
29583
29584            next_offset += envelope_size;
29585            _next_ordinal_to_read += 1;
29586            if next_offset >= end_offset {
29587                return Ok(());
29588            }
29589
29590            // Decode unknown envelopes for gaps in ordinals.
29591            while _next_ordinal_to_read < 40 {
29592                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
29593                _next_ordinal_to_read += 1;
29594                next_offset += envelope_size;
29595            }
29596
29597            let next_out_of_line = decoder.next_out_of_line();
29598            let handles_before = decoder.remaining_handles();
29599            if let Some((inlined, num_bytes, num_handles)) =
29600                fidl::encoding::decode_envelope_header(decoder, next_offset)?
29601            {
29602                let member_inline_size = <fidl::encoding::Vector<EidCacheEntry, 64> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
29603                if inlined != (member_inline_size <= 4) {
29604                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
29605                }
29606                let inner_offset;
29607                let mut inner_depth = depth.clone();
29608                if inlined {
29609                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
29610                    inner_offset = next_offset;
29611                } else {
29612                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
29613                    inner_depth.increment()?;
29614                }
29615                let val_ref = self.eid_cache_entries.get_or_insert_with(
29616                    || fidl::new_empty!(fidl::encoding::Vector<EidCacheEntry, 64>, D),
29617                );
29618                fidl::decode!(fidl::encoding::Vector<EidCacheEntry, 64>, D, val_ref, decoder, inner_offset, inner_depth)?;
29619                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
29620                {
29621                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
29622                }
29623                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
29624                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
29625                }
29626            }
29627
29628            next_offset += envelope_size;
29629            _next_ordinal_to_read += 1;
29630            if next_offset >= end_offset {
29631                return Ok(());
29632            }
29633
29634            // Decode unknown envelopes for gaps in ordinals.
29635            while _next_ordinal_to_read < 41 {
29636                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
29637                _next_ordinal_to_read += 1;
29638                next_offset += envelope_size;
29639            }
29640
29641            let next_out_of_line = decoder.next_out_of_line();
29642            let handles_before = decoder.remaining_handles();
29643            if let Some((inlined, num_bytes, num_handles)) =
29644                fidl::encoding::decode_envelope_header(decoder, next_offset)?
29645            {
29646                let member_inline_size =
29647                    <i8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
29648                if inlined != (member_inline_size <= 4) {
29649                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
29650                }
29651                let inner_offset;
29652                let mut inner_depth = depth.clone();
29653                if inlined {
29654                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
29655                    inner_offset = next_offset;
29656                } else {
29657                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
29658                    inner_depth.increment()?;
29659                }
29660                let val_ref = self.cca_threshold.get_or_insert_with(|| fidl::new_empty!(i8, D));
29661                fidl::decode!(i8, D, val_ref, decoder, inner_offset, inner_depth)?;
29662                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
29663                {
29664                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
29665                }
29666                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
29667                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
29668                }
29669            }
29670
29671            next_offset += envelope_size;
29672
29673            // Decode the remaining unknown envelopes.
29674            while next_offset < end_offset {
29675                _next_ordinal_to_read += 1;
29676                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
29677                next_offset += envelope_size;
29678            }
29679
29680            Ok(())
29681        }
29682    }
29683
29684    impl ThreadHistoryReport {
29685        #[inline(always)]
29686        fn max_ordinal_present(&self) -> u64 {
29687            if let Some(_) = self.route_info_history {
29688                return 5;
29689            }
29690            if let Some(_) = self.prefix_info_history {
29691                return 4;
29692            }
29693            if let Some(_) = self.router_info_history {
29694                return 3;
29695            }
29696            if let Some(_) = self.neighbor_info_history {
29697                return 2;
29698            }
29699            if let Some(_) = self.net_info_history {
29700                return 1;
29701            }
29702            0
29703        }
29704    }
29705
29706    impl fidl::encoding::ValueTypeMarker for ThreadHistoryReport {
29707        type Borrowed<'a> = &'a Self;
29708        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
29709            value
29710        }
29711    }
29712
29713    unsafe impl fidl::encoding::TypeMarker for ThreadHistoryReport {
29714        type Owned = Self;
29715
29716        #[inline(always)]
29717        fn inline_align(_context: fidl::encoding::Context) -> usize {
29718            8
29719        }
29720
29721        #[inline(always)]
29722        fn inline_size(_context: fidl::encoding::Context) -> usize {
29723            16
29724        }
29725    }
29726
29727    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<ThreadHistoryReport, D>
29728        for &ThreadHistoryReport
29729    {
29730        unsafe fn encode(
29731            self,
29732            encoder: &mut fidl::encoding::Encoder<'_, D>,
29733            offset: usize,
29734            mut depth: fidl::encoding::Depth,
29735        ) -> fidl::Result<()> {
29736            encoder.debug_check_bounds::<ThreadHistoryReport>(offset);
29737            // Vector header
29738            let max_ordinal: u64 = self.max_ordinal_present();
29739            encoder.write_num(max_ordinal, offset);
29740            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
29741            // Calling encoder.out_of_line_offset(0) is not allowed.
29742            if max_ordinal == 0 {
29743                return Ok(());
29744            }
29745            depth.increment()?;
29746            let envelope_size = 8;
29747            let bytes_len = max_ordinal as usize * envelope_size;
29748            #[allow(unused_variables)]
29749            let offset = encoder.out_of_line_offset(bytes_len);
29750            let mut _prev_end_offset: usize = 0;
29751            if 1 > max_ordinal {
29752                return Ok(());
29753            }
29754
29755            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
29756            // are envelope_size bytes.
29757            let cur_offset: usize = (1 - 1) * envelope_size;
29758
29759            // Zero reserved fields.
29760            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
29761
29762            // Safety:
29763            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
29764            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
29765            //   envelope_size bytes, there is always sufficient room.
29766            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<ThreadNetworkInfoEntry, 32>, D>(
29767            self.net_info_history.as_ref().map(<fidl::encoding::Vector<ThreadNetworkInfoEntry, 32> as fidl::encoding::ValueTypeMarker>::borrow),
29768            encoder, offset + cur_offset, depth
29769        )?;
29770
29771            _prev_end_offset = cur_offset + envelope_size;
29772            if 2 > max_ordinal {
29773                return Ok(());
29774            }
29775
29776            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
29777            // are envelope_size bytes.
29778            let cur_offset: usize = (2 - 1) * envelope_size;
29779
29780            // Zero reserved fields.
29781            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
29782
29783            // Safety:
29784            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
29785            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
29786            //   envelope_size bytes, there is always sufficient room.
29787            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<ThreadNeighborInfoEntry, 64>, D>(
29788            self.neighbor_info_history.as_ref().map(<fidl::encoding::Vector<ThreadNeighborInfoEntry, 64> as fidl::encoding::ValueTypeMarker>::borrow),
29789            encoder, offset + cur_offset, depth
29790        )?;
29791
29792            _prev_end_offset = cur_offset + envelope_size;
29793            if 3 > max_ordinal {
29794                return Ok(());
29795            }
29796
29797            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
29798            // are envelope_size bytes.
29799            let cur_offset: usize = (3 - 1) * envelope_size;
29800
29801            // Zero reserved fields.
29802            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
29803
29804            // Safety:
29805            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
29806            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
29807            //   envelope_size bytes, there is always sufficient room.
29808            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<ThreadRouterInfoEntry, 256>, D>(
29809            self.router_info_history.as_ref().map(<fidl::encoding::Vector<ThreadRouterInfoEntry, 256> as fidl::encoding::ValueTypeMarker>::borrow),
29810            encoder, offset + cur_offset, depth
29811        )?;
29812
29813            _prev_end_offset = cur_offset + envelope_size;
29814            if 4 > max_ordinal {
29815                return Ok(());
29816            }
29817
29818            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
29819            // are envelope_size bytes.
29820            let cur_offset: usize = (4 - 1) * envelope_size;
29821
29822            // Zero reserved fields.
29823            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
29824
29825            // Safety:
29826            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
29827            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
29828            //   envelope_size bytes, there is always sufficient room.
29829            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<ThreadNetDataPrefixInfoEntry, 32>, D>(
29830            self.prefix_info_history.as_ref().map(<fidl::encoding::Vector<ThreadNetDataPrefixInfoEntry, 32> as fidl::encoding::ValueTypeMarker>::borrow),
29831            encoder, offset + cur_offset, depth
29832        )?;
29833
29834            _prev_end_offset = cur_offset + envelope_size;
29835            if 5 > max_ordinal {
29836                return Ok(());
29837            }
29838
29839            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
29840            // are envelope_size bytes.
29841            let cur_offset: usize = (5 - 1) * envelope_size;
29842
29843            // Zero reserved fields.
29844            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
29845
29846            // Safety:
29847            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
29848            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
29849            //   envelope_size bytes, there is always sufficient room.
29850            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<ThreadNetDataRouteInfoEntry, 32>, D>(
29851            self.route_info_history.as_ref().map(<fidl::encoding::Vector<ThreadNetDataRouteInfoEntry, 32> as fidl::encoding::ValueTypeMarker>::borrow),
29852            encoder, offset + cur_offset, depth
29853        )?;
29854
29855            _prev_end_offset = cur_offset + envelope_size;
29856
29857            Ok(())
29858        }
29859    }
29860
29861    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ThreadHistoryReport {
29862        #[inline(always)]
29863        fn new_empty() -> Self {
29864            Self::default()
29865        }
29866
29867        unsafe fn decode(
29868            &mut self,
29869            decoder: &mut fidl::encoding::Decoder<'_, D>,
29870            offset: usize,
29871            mut depth: fidl::encoding::Depth,
29872        ) -> fidl::Result<()> {
29873            decoder.debug_check_bounds::<Self>(offset);
29874            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
29875                None => return Err(fidl::Error::NotNullable),
29876                Some(len) => len,
29877            };
29878            // Calling decoder.out_of_line_offset(0) is not allowed.
29879            if len == 0 {
29880                return Ok(());
29881            };
29882            depth.increment()?;
29883            let envelope_size = 8;
29884            let bytes_len = len * envelope_size;
29885            let offset = decoder.out_of_line_offset(bytes_len)?;
29886            // Decode the envelope for each type.
29887            let mut _next_ordinal_to_read = 0;
29888            let mut next_offset = offset;
29889            let end_offset = offset + bytes_len;
29890            _next_ordinal_to_read += 1;
29891            if next_offset >= end_offset {
29892                return Ok(());
29893            }
29894
29895            // Decode unknown envelopes for gaps in ordinals.
29896            while _next_ordinal_to_read < 1 {
29897                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
29898                _next_ordinal_to_read += 1;
29899                next_offset += envelope_size;
29900            }
29901
29902            let next_out_of_line = decoder.next_out_of_line();
29903            let handles_before = decoder.remaining_handles();
29904            if let Some((inlined, num_bytes, num_handles)) =
29905                fidl::encoding::decode_envelope_header(decoder, next_offset)?
29906            {
29907                let member_inline_size = <fidl::encoding::Vector<ThreadNetworkInfoEntry, 32> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
29908                if inlined != (member_inline_size <= 4) {
29909                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
29910                }
29911                let inner_offset;
29912                let mut inner_depth = depth.clone();
29913                if inlined {
29914                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
29915                    inner_offset = next_offset;
29916                } else {
29917                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
29918                    inner_depth.increment()?;
29919                }
29920                let val_ref = self.net_info_history.get_or_insert_with(
29921                    || fidl::new_empty!(fidl::encoding::Vector<ThreadNetworkInfoEntry, 32>, D),
29922                );
29923                fidl::decode!(fidl::encoding::Vector<ThreadNetworkInfoEntry, 32>, D, val_ref, decoder, inner_offset, inner_depth)?;
29924                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
29925                {
29926                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
29927                }
29928                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
29929                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
29930                }
29931            }
29932
29933            next_offset += envelope_size;
29934            _next_ordinal_to_read += 1;
29935            if next_offset >= end_offset {
29936                return Ok(());
29937            }
29938
29939            // Decode unknown envelopes for gaps in ordinals.
29940            while _next_ordinal_to_read < 2 {
29941                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
29942                _next_ordinal_to_read += 1;
29943                next_offset += envelope_size;
29944            }
29945
29946            let next_out_of_line = decoder.next_out_of_line();
29947            let handles_before = decoder.remaining_handles();
29948            if let Some((inlined, num_bytes, num_handles)) =
29949                fidl::encoding::decode_envelope_header(decoder, next_offset)?
29950            {
29951                let member_inline_size = <fidl::encoding::Vector<ThreadNeighborInfoEntry, 64> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
29952                if inlined != (member_inline_size <= 4) {
29953                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
29954                }
29955                let inner_offset;
29956                let mut inner_depth = depth.clone();
29957                if inlined {
29958                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
29959                    inner_offset = next_offset;
29960                } else {
29961                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
29962                    inner_depth.increment()?;
29963                }
29964                let val_ref = self.neighbor_info_history.get_or_insert_with(
29965                    || fidl::new_empty!(fidl::encoding::Vector<ThreadNeighborInfoEntry, 64>, D),
29966                );
29967                fidl::decode!(fidl::encoding::Vector<ThreadNeighborInfoEntry, 64>, D, val_ref, decoder, inner_offset, inner_depth)?;
29968                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
29969                {
29970                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
29971                }
29972                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
29973                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
29974                }
29975            }
29976
29977            next_offset += envelope_size;
29978            _next_ordinal_to_read += 1;
29979            if next_offset >= end_offset {
29980                return Ok(());
29981            }
29982
29983            // Decode unknown envelopes for gaps in ordinals.
29984            while _next_ordinal_to_read < 3 {
29985                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
29986                _next_ordinal_to_read += 1;
29987                next_offset += envelope_size;
29988            }
29989
29990            let next_out_of_line = decoder.next_out_of_line();
29991            let handles_before = decoder.remaining_handles();
29992            if let Some((inlined, num_bytes, num_handles)) =
29993                fidl::encoding::decode_envelope_header(decoder, next_offset)?
29994            {
29995                let member_inline_size = <fidl::encoding::Vector<ThreadRouterInfoEntry, 256> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
29996                if inlined != (member_inline_size <= 4) {
29997                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
29998                }
29999                let inner_offset;
30000                let mut inner_depth = depth.clone();
30001                if inlined {
30002                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
30003                    inner_offset = next_offset;
30004                } else {
30005                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
30006                    inner_depth.increment()?;
30007                }
30008                let val_ref = self.router_info_history.get_or_insert_with(
30009                    || fidl::new_empty!(fidl::encoding::Vector<ThreadRouterInfoEntry, 256>, D),
30010                );
30011                fidl::decode!(fidl::encoding::Vector<ThreadRouterInfoEntry, 256>, D, val_ref, decoder, inner_offset, inner_depth)?;
30012                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
30013                {
30014                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
30015                }
30016                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
30017                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
30018                }
30019            }
30020
30021            next_offset += envelope_size;
30022            _next_ordinal_to_read += 1;
30023            if next_offset >= end_offset {
30024                return Ok(());
30025            }
30026
30027            // Decode unknown envelopes for gaps in ordinals.
30028            while _next_ordinal_to_read < 4 {
30029                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
30030                _next_ordinal_to_read += 1;
30031                next_offset += envelope_size;
30032            }
30033
30034            let next_out_of_line = decoder.next_out_of_line();
30035            let handles_before = decoder.remaining_handles();
30036            if let Some((inlined, num_bytes, num_handles)) =
30037                fidl::encoding::decode_envelope_header(decoder, next_offset)?
30038            {
30039                let member_inline_size = <fidl::encoding::Vector<ThreadNetDataPrefixInfoEntry, 32> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
30040                if inlined != (member_inline_size <= 4) {
30041                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
30042                }
30043                let inner_offset;
30044                let mut inner_depth = depth.clone();
30045                if inlined {
30046                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
30047                    inner_offset = next_offset;
30048                } else {
30049                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
30050                    inner_depth.increment()?;
30051                }
30052                let val_ref =
30053                self.prefix_info_history.get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<ThreadNetDataPrefixInfoEntry, 32>, D));
30054                fidl::decode!(fidl::encoding::Vector<ThreadNetDataPrefixInfoEntry, 32>, D, val_ref, decoder, inner_offset, inner_depth)?;
30055                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
30056                {
30057                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
30058                }
30059                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
30060                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
30061                }
30062            }
30063
30064            next_offset += envelope_size;
30065            _next_ordinal_to_read += 1;
30066            if next_offset >= end_offset {
30067                return Ok(());
30068            }
30069
30070            // Decode unknown envelopes for gaps in ordinals.
30071            while _next_ordinal_to_read < 5 {
30072                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
30073                _next_ordinal_to_read += 1;
30074                next_offset += envelope_size;
30075            }
30076
30077            let next_out_of_line = decoder.next_out_of_line();
30078            let handles_before = decoder.remaining_handles();
30079            if let Some((inlined, num_bytes, num_handles)) =
30080                fidl::encoding::decode_envelope_header(decoder, next_offset)?
30081            {
30082                let member_inline_size = <fidl::encoding::Vector<ThreadNetDataRouteInfoEntry, 32> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
30083                if inlined != (member_inline_size <= 4) {
30084                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
30085                }
30086                let inner_offset;
30087                let mut inner_depth = depth.clone();
30088                if inlined {
30089                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
30090                    inner_offset = next_offset;
30091                } else {
30092                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
30093                    inner_depth.increment()?;
30094                }
30095                let val_ref = self.route_info_history.get_or_insert_with(
30096                    || fidl::new_empty!(fidl::encoding::Vector<ThreadNetDataRouteInfoEntry, 32>, D),
30097                );
30098                fidl::decode!(fidl::encoding::Vector<ThreadNetDataRouteInfoEntry, 32>, D, val_ref, decoder, inner_offset, inner_depth)?;
30099                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
30100                {
30101                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
30102                }
30103                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
30104                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
30105                }
30106            }
30107
30108            next_offset += envelope_size;
30109
30110            // Decode the remaining unknown envelopes.
30111            while next_offset < end_offset {
30112                _next_ordinal_to_read += 1;
30113                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
30114                next_offset += envelope_size;
30115            }
30116
30117            Ok(())
30118        }
30119    }
30120
30121    impl ThreadLinkMode {
30122        #[inline(always)]
30123        fn max_ordinal_present(&self) -> u64 {
30124            if let Some(_) = self.network_data {
30125                return 3;
30126            }
30127            if let Some(_) = self.device_type {
30128                return 2;
30129            }
30130            if let Some(_) = self.rx_on_when_idle {
30131                return 1;
30132            }
30133            0
30134        }
30135    }
30136
30137    impl fidl::encoding::ValueTypeMarker for ThreadLinkMode {
30138        type Borrowed<'a> = &'a Self;
30139        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
30140            value
30141        }
30142    }
30143
30144    unsafe impl fidl::encoding::TypeMarker for ThreadLinkMode {
30145        type Owned = Self;
30146
30147        #[inline(always)]
30148        fn inline_align(_context: fidl::encoding::Context) -> usize {
30149            8
30150        }
30151
30152        #[inline(always)]
30153        fn inline_size(_context: fidl::encoding::Context) -> usize {
30154            16
30155        }
30156    }
30157
30158    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<ThreadLinkMode, D>
30159        for &ThreadLinkMode
30160    {
30161        unsafe fn encode(
30162            self,
30163            encoder: &mut fidl::encoding::Encoder<'_, D>,
30164            offset: usize,
30165            mut depth: fidl::encoding::Depth,
30166        ) -> fidl::Result<()> {
30167            encoder.debug_check_bounds::<ThreadLinkMode>(offset);
30168            // Vector header
30169            let max_ordinal: u64 = self.max_ordinal_present();
30170            encoder.write_num(max_ordinal, offset);
30171            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
30172            // Calling encoder.out_of_line_offset(0) is not allowed.
30173            if max_ordinal == 0 {
30174                return Ok(());
30175            }
30176            depth.increment()?;
30177            let envelope_size = 8;
30178            let bytes_len = max_ordinal as usize * envelope_size;
30179            #[allow(unused_variables)]
30180            let offset = encoder.out_of_line_offset(bytes_len);
30181            let mut _prev_end_offset: usize = 0;
30182            if 1 > max_ordinal {
30183                return Ok(());
30184            }
30185
30186            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
30187            // are envelope_size bytes.
30188            let cur_offset: usize = (1 - 1) * envelope_size;
30189
30190            // Zero reserved fields.
30191            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
30192
30193            // Safety:
30194            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
30195            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
30196            //   envelope_size bytes, there is always sufficient room.
30197            fidl::encoding::encode_in_envelope_optional::<bool, D>(
30198                self.rx_on_when_idle
30199                    .as_ref()
30200                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
30201                encoder,
30202                offset + cur_offset,
30203                depth,
30204            )?;
30205
30206            _prev_end_offset = cur_offset + envelope_size;
30207            if 2 > max_ordinal {
30208                return Ok(());
30209            }
30210
30211            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
30212            // are envelope_size bytes.
30213            let cur_offset: usize = (2 - 1) * envelope_size;
30214
30215            // Zero reserved fields.
30216            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
30217
30218            // Safety:
30219            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
30220            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
30221            //   envelope_size bytes, there is always sufficient room.
30222            fidl::encoding::encode_in_envelope_optional::<bool, D>(
30223                self.device_type.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
30224                encoder,
30225                offset + cur_offset,
30226                depth,
30227            )?;
30228
30229            _prev_end_offset = cur_offset + envelope_size;
30230            if 3 > max_ordinal {
30231                return Ok(());
30232            }
30233
30234            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
30235            // are envelope_size bytes.
30236            let cur_offset: usize = (3 - 1) * envelope_size;
30237
30238            // Zero reserved fields.
30239            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
30240
30241            // Safety:
30242            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
30243            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
30244            //   envelope_size bytes, there is always sufficient room.
30245            fidl::encoding::encode_in_envelope_optional::<bool, D>(
30246                self.network_data.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
30247                encoder,
30248                offset + cur_offset,
30249                depth,
30250            )?;
30251
30252            _prev_end_offset = cur_offset + envelope_size;
30253
30254            Ok(())
30255        }
30256    }
30257
30258    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ThreadLinkMode {
30259        #[inline(always)]
30260        fn new_empty() -> Self {
30261            Self::default()
30262        }
30263
30264        unsafe fn decode(
30265            &mut self,
30266            decoder: &mut fidl::encoding::Decoder<'_, D>,
30267            offset: usize,
30268            mut depth: fidl::encoding::Depth,
30269        ) -> fidl::Result<()> {
30270            decoder.debug_check_bounds::<Self>(offset);
30271            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
30272                None => return Err(fidl::Error::NotNullable),
30273                Some(len) => len,
30274            };
30275            // Calling decoder.out_of_line_offset(0) is not allowed.
30276            if len == 0 {
30277                return Ok(());
30278            };
30279            depth.increment()?;
30280            let envelope_size = 8;
30281            let bytes_len = len * envelope_size;
30282            let offset = decoder.out_of_line_offset(bytes_len)?;
30283            // Decode the envelope for each type.
30284            let mut _next_ordinal_to_read = 0;
30285            let mut next_offset = offset;
30286            let end_offset = offset + bytes_len;
30287            _next_ordinal_to_read += 1;
30288            if next_offset >= end_offset {
30289                return Ok(());
30290            }
30291
30292            // Decode unknown envelopes for gaps in ordinals.
30293            while _next_ordinal_to_read < 1 {
30294                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
30295                _next_ordinal_to_read += 1;
30296                next_offset += envelope_size;
30297            }
30298
30299            let next_out_of_line = decoder.next_out_of_line();
30300            let handles_before = decoder.remaining_handles();
30301            if let Some((inlined, num_bytes, num_handles)) =
30302                fidl::encoding::decode_envelope_header(decoder, next_offset)?
30303            {
30304                let member_inline_size =
30305                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
30306                if inlined != (member_inline_size <= 4) {
30307                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
30308                }
30309                let inner_offset;
30310                let mut inner_depth = depth.clone();
30311                if inlined {
30312                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
30313                    inner_offset = next_offset;
30314                } else {
30315                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
30316                    inner_depth.increment()?;
30317                }
30318                let val_ref = self.rx_on_when_idle.get_or_insert_with(|| fidl::new_empty!(bool, D));
30319                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
30320                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
30321                {
30322                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
30323                }
30324                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
30325                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
30326                }
30327            }
30328
30329            next_offset += envelope_size;
30330            _next_ordinal_to_read += 1;
30331            if next_offset >= end_offset {
30332                return Ok(());
30333            }
30334
30335            // Decode unknown envelopes for gaps in ordinals.
30336            while _next_ordinal_to_read < 2 {
30337                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
30338                _next_ordinal_to_read += 1;
30339                next_offset += envelope_size;
30340            }
30341
30342            let next_out_of_line = decoder.next_out_of_line();
30343            let handles_before = decoder.remaining_handles();
30344            if let Some((inlined, num_bytes, num_handles)) =
30345                fidl::encoding::decode_envelope_header(decoder, next_offset)?
30346            {
30347                let member_inline_size =
30348                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
30349                if inlined != (member_inline_size <= 4) {
30350                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
30351                }
30352                let inner_offset;
30353                let mut inner_depth = depth.clone();
30354                if inlined {
30355                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
30356                    inner_offset = next_offset;
30357                } else {
30358                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
30359                    inner_depth.increment()?;
30360                }
30361                let val_ref = self.device_type.get_or_insert_with(|| fidl::new_empty!(bool, D));
30362                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
30363                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
30364                {
30365                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
30366                }
30367                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
30368                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
30369                }
30370            }
30371
30372            next_offset += envelope_size;
30373            _next_ordinal_to_read += 1;
30374            if next_offset >= end_offset {
30375                return Ok(());
30376            }
30377
30378            // Decode unknown envelopes for gaps in ordinals.
30379            while _next_ordinal_to_read < 3 {
30380                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
30381                _next_ordinal_to_read += 1;
30382                next_offset += envelope_size;
30383            }
30384
30385            let next_out_of_line = decoder.next_out_of_line();
30386            let handles_before = decoder.remaining_handles();
30387            if let Some((inlined, num_bytes, num_handles)) =
30388                fidl::encoding::decode_envelope_header(decoder, next_offset)?
30389            {
30390                let member_inline_size =
30391                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
30392                if inlined != (member_inline_size <= 4) {
30393                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
30394                }
30395                let inner_offset;
30396                let mut inner_depth = depth.clone();
30397                if inlined {
30398                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
30399                    inner_offset = next_offset;
30400                } else {
30401                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
30402                    inner_depth.increment()?;
30403                }
30404                let val_ref = self.network_data.get_or_insert_with(|| fidl::new_empty!(bool, D));
30405                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
30406                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
30407                {
30408                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
30409                }
30410                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
30411                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
30412                }
30413            }
30414
30415            next_offset += envelope_size;
30416
30417            // Decode the remaining unknown envelopes.
30418            while next_offset < end_offset {
30419                _next_ordinal_to_read += 1;
30420                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
30421                next_offset += envelope_size;
30422            }
30423
30424            Ok(())
30425        }
30426    }
30427
30428    impl ThreadNeighborInfoEntry {
30429        #[inline(always)]
30430        fn max_ordinal_present(&self) -> u64 {
30431            if let Some(_) = self.avg_rssi {
30432                return 7;
30433            }
30434            if let Some(_) = self.mode {
30435                return 6;
30436            }
30437            if let Some(_) = self.rloc16 {
30438                return 5;
30439            }
30440            if let Some(_) = self.extended_address {
30441                return 4;
30442            }
30443            if let Some(_) = self.event {
30444                return 3;
30445            }
30446            if let Some(_) = self.is_child {
30447                return 2;
30448            }
30449            if let Some(_) = self.age {
30450                return 1;
30451            }
30452            0
30453        }
30454    }
30455
30456    impl fidl::encoding::ValueTypeMarker for ThreadNeighborInfoEntry {
30457        type Borrowed<'a> = &'a Self;
30458        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
30459            value
30460        }
30461    }
30462
30463    unsafe impl fidl::encoding::TypeMarker for ThreadNeighborInfoEntry {
30464        type Owned = Self;
30465
30466        #[inline(always)]
30467        fn inline_align(_context: fidl::encoding::Context) -> usize {
30468            8
30469        }
30470
30471        #[inline(always)]
30472        fn inline_size(_context: fidl::encoding::Context) -> usize {
30473            16
30474        }
30475    }
30476
30477    unsafe impl<D: fidl::encoding::ResourceDialect>
30478        fidl::encoding::Encode<ThreadNeighborInfoEntry, D> for &ThreadNeighborInfoEntry
30479    {
30480        unsafe fn encode(
30481            self,
30482            encoder: &mut fidl::encoding::Encoder<'_, D>,
30483            offset: usize,
30484            mut depth: fidl::encoding::Depth,
30485        ) -> fidl::Result<()> {
30486            encoder.debug_check_bounds::<ThreadNeighborInfoEntry>(offset);
30487            // Vector header
30488            let max_ordinal: u64 = self.max_ordinal_present();
30489            encoder.write_num(max_ordinal, offset);
30490            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
30491            // Calling encoder.out_of_line_offset(0) is not allowed.
30492            if max_ordinal == 0 {
30493                return Ok(());
30494            }
30495            depth.increment()?;
30496            let envelope_size = 8;
30497            let bytes_len = max_ordinal as usize * envelope_size;
30498            #[allow(unused_variables)]
30499            let offset = encoder.out_of_line_offset(bytes_len);
30500            let mut _prev_end_offset: usize = 0;
30501            if 1 > max_ordinal {
30502                return Ok(());
30503            }
30504
30505            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
30506            // are envelope_size bytes.
30507            let cur_offset: usize = (1 - 1) * envelope_size;
30508
30509            // Zero reserved fields.
30510            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
30511
30512            // Safety:
30513            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
30514            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
30515            //   envelope_size bytes, there is always sufficient room.
30516            fidl::encoding::encode_in_envelope_optional::<i64, D>(
30517                self.age.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
30518                encoder,
30519                offset + cur_offset,
30520                depth,
30521            )?;
30522
30523            _prev_end_offset = cur_offset + envelope_size;
30524            if 2 > max_ordinal {
30525                return Ok(());
30526            }
30527
30528            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
30529            // are envelope_size bytes.
30530            let cur_offset: usize = (2 - 1) * envelope_size;
30531
30532            // Zero reserved fields.
30533            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
30534
30535            // Safety:
30536            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
30537            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
30538            //   envelope_size bytes, there is always sufficient room.
30539            fidl::encoding::encode_in_envelope_optional::<bool, D>(
30540                self.is_child.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
30541                encoder,
30542                offset + cur_offset,
30543                depth,
30544            )?;
30545
30546            _prev_end_offset = cur_offset + envelope_size;
30547            if 3 > max_ordinal {
30548                return Ok(());
30549            }
30550
30551            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
30552            // are envelope_size bytes.
30553            let cur_offset: usize = (3 - 1) * envelope_size;
30554
30555            // Zero reserved fields.
30556            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
30557
30558            // Safety:
30559            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
30560            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
30561            //   envelope_size bytes, there is always sufficient room.
30562            fidl::encoding::encode_in_envelope_optional::<HistoryTrackerNeighborEvent, D>(
30563                self.event
30564                    .as_ref()
30565                    .map(<HistoryTrackerNeighborEvent as fidl::encoding::ValueTypeMarker>::borrow),
30566                encoder,
30567                offset + cur_offset,
30568                depth,
30569            )?;
30570
30571            _prev_end_offset = cur_offset + envelope_size;
30572            if 4 > max_ordinal {
30573                return Ok(());
30574            }
30575
30576            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
30577            // are envelope_size bytes.
30578            let cur_offset: usize = (4 - 1) * envelope_size;
30579
30580            // Zero reserved fields.
30581            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
30582
30583            // Safety:
30584            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
30585            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
30586            //   envelope_size bytes, there is always sufficient room.
30587            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u8, 8>, D>(
30588                self.extended_address.as_ref().map(
30589                    <fidl::encoding::Vector<u8, 8> as fidl::encoding::ValueTypeMarker>::borrow,
30590                ),
30591                encoder,
30592                offset + cur_offset,
30593                depth,
30594            )?;
30595
30596            _prev_end_offset = cur_offset + envelope_size;
30597            if 5 > max_ordinal {
30598                return Ok(());
30599            }
30600
30601            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
30602            // are envelope_size bytes.
30603            let cur_offset: usize = (5 - 1) * envelope_size;
30604
30605            // Zero reserved fields.
30606            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
30607
30608            // Safety:
30609            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
30610            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
30611            //   envelope_size bytes, there is always sufficient room.
30612            fidl::encoding::encode_in_envelope_optional::<u16, D>(
30613                self.rloc16.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
30614                encoder,
30615                offset + cur_offset,
30616                depth,
30617            )?;
30618
30619            _prev_end_offset = cur_offset + envelope_size;
30620            if 6 > max_ordinal {
30621                return Ok(());
30622            }
30623
30624            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
30625            // are envelope_size bytes.
30626            let cur_offset: usize = (6 - 1) * envelope_size;
30627
30628            // Zero reserved fields.
30629            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
30630
30631            // Safety:
30632            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
30633            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
30634            //   envelope_size bytes, there is always sufficient room.
30635            fidl::encoding::encode_in_envelope_optional::<ThreadLinkMode, D>(
30636                self.mode.as_ref().map(<ThreadLinkMode as fidl::encoding::ValueTypeMarker>::borrow),
30637                encoder,
30638                offset + cur_offset,
30639                depth,
30640            )?;
30641
30642            _prev_end_offset = cur_offset + envelope_size;
30643            if 7 > max_ordinal {
30644                return Ok(());
30645            }
30646
30647            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
30648            // are envelope_size bytes.
30649            let cur_offset: usize = (7 - 1) * envelope_size;
30650
30651            // Zero reserved fields.
30652            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
30653
30654            // Safety:
30655            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
30656            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
30657            //   envelope_size bytes, there is always sufficient room.
30658            fidl::encoding::encode_in_envelope_optional::<i32, D>(
30659                self.avg_rssi.as_ref().map(<i32 as fidl::encoding::ValueTypeMarker>::borrow),
30660                encoder,
30661                offset + cur_offset,
30662                depth,
30663            )?;
30664
30665            _prev_end_offset = cur_offset + envelope_size;
30666
30667            Ok(())
30668        }
30669    }
30670
30671    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
30672        for ThreadNeighborInfoEntry
30673    {
30674        #[inline(always)]
30675        fn new_empty() -> Self {
30676            Self::default()
30677        }
30678
30679        unsafe fn decode(
30680            &mut self,
30681            decoder: &mut fidl::encoding::Decoder<'_, D>,
30682            offset: usize,
30683            mut depth: fidl::encoding::Depth,
30684        ) -> fidl::Result<()> {
30685            decoder.debug_check_bounds::<Self>(offset);
30686            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
30687                None => return Err(fidl::Error::NotNullable),
30688                Some(len) => len,
30689            };
30690            // Calling decoder.out_of_line_offset(0) is not allowed.
30691            if len == 0 {
30692                return Ok(());
30693            };
30694            depth.increment()?;
30695            let envelope_size = 8;
30696            let bytes_len = len * envelope_size;
30697            let offset = decoder.out_of_line_offset(bytes_len)?;
30698            // Decode the envelope for each type.
30699            let mut _next_ordinal_to_read = 0;
30700            let mut next_offset = offset;
30701            let end_offset = offset + bytes_len;
30702            _next_ordinal_to_read += 1;
30703            if next_offset >= end_offset {
30704                return Ok(());
30705            }
30706
30707            // Decode unknown envelopes for gaps in ordinals.
30708            while _next_ordinal_to_read < 1 {
30709                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
30710                _next_ordinal_to_read += 1;
30711                next_offset += envelope_size;
30712            }
30713
30714            let next_out_of_line = decoder.next_out_of_line();
30715            let handles_before = decoder.remaining_handles();
30716            if let Some((inlined, num_bytes, num_handles)) =
30717                fidl::encoding::decode_envelope_header(decoder, next_offset)?
30718            {
30719                let member_inline_size =
30720                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
30721                if inlined != (member_inline_size <= 4) {
30722                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
30723                }
30724                let inner_offset;
30725                let mut inner_depth = depth.clone();
30726                if inlined {
30727                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
30728                    inner_offset = next_offset;
30729                } else {
30730                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
30731                    inner_depth.increment()?;
30732                }
30733                let val_ref = self.age.get_or_insert_with(|| fidl::new_empty!(i64, D));
30734                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
30735                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
30736                {
30737                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
30738                }
30739                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
30740                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
30741                }
30742            }
30743
30744            next_offset += envelope_size;
30745            _next_ordinal_to_read += 1;
30746            if next_offset >= end_offset {
30747                return Ok(());
30748            }
30749
30750            // Decode unknown envelopes for gaps in ordinals.
30751            while _next_ordinal_to_read < 2 {
30752                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
30753                _next_ordinal_to_read += 1;
30754                next_offset += envelope_size;
30755            }
30756
30757            let next_out_of_line = decoder.next_out_of_line();
30758            let handles_before = decoder.remaining_handles();
30759            if let Some((inlined, num_bytes, num_handles)) =
30760                fidl::encoding::decode_envelope_header(decoder, next_offset)?
30761            {
30762                let member_inline_size =
30763                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
30764                if inlined != (member_inline_size <= 4) {
30765                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
30766                }
30767                let inner_offset;
30768                let mut inner_depth = depth.clone();
30769                if inlined {
30770                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
30771                    inner_offset = next_offset;
30772                } else {
30773                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
30774                    inner_depth.increment()?;
30775                }
30776                let val_ref = self.is_child.get_or_insert_with(|| fidl::new_empty!(bool, D));
30777                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
30778                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
30779                {
30780                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
30781                }
30782                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
30783                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
30784                }
30785            }
30786
30787            next_offset += envelope_size;
30788            _next_ordinal_to_read += 1;
30789            if next_offset >= end_offset {
30790                return Ok(());
30791            }
30792
30793            // Decode unknown envelopes for gaps in ordinals.
30794            while _next_ordinal_to_read < 3 {
30795                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
30796                _next_ordinal_to_read += 1;
30797                next_offset += envelope_size;
30798            }
30799
30800            let next_out_of_line = decoder.next_out_of_line();
30801            let handles_before = decoder.remaining_handles();
30802            if let Some((inlined, num_bytes, num_handles)) =
30803                fidl::encoding::decode_envelope_header(decoder, next_offset)?
30804            {
30805                let member_inline_size =
30806                    <HistoryTrackerNeighborEvent as fidl::encoding::TypeMarker>::inline_size(
30807                        decoder.context,
30808                    );
30809                if inlined != (member_inline_size <= 4) {
30810                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
30811                }
30812                let inner_offset;
30813                let mut inner_depth = depth.clone();
30814                if inlined {
30815                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
30816                    inner_offset = next_offset;
30817                } else {
30818                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
30819                    inner_depth.increment()?;
30820                }
30821                let val_ref = self
30822                    .event
30823                    .get_or_insert_with(|| fidl::new_empty!(HistoryTrackerNeighborEvent, D));
30824                fidl::decode!(
30825                    HistoryTrackerNeighborEvent,
30826                    D,
30827                    val_ref,
30828                    decoder,
30829                    inner_offset,
30830                    inner_depth
30831                )?;
30832                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
30833                {
30834                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
30835                }
30836                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
30837                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
30838                }
30839            }
30840
30841            next_offset += envelope_size;
30842            _next_ordinal_to_read += 1;
30843            if next_offset >= end_offset {
30844                return Ok(());
30845            }
30846
30847            // Decode unknown envelopes for gaps in ordinals.
30848            while _next_ordinal_to_read < 4 {
30849                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
30850                _next_ordinal_to_read += 1;
30851                next_offset += envelope_size;
30852            }
30853
30854            let next_out_of_line = decoder.next_out_of_line();
30855            let handles_before = decoder.remaining_handles();
30856            if let Some((inlined, num_bytes, num_handles)) =
30857                fidl::encoding::decode_envelope_header(decoder, next_offset)?
30858            {
30859                let member_inline_size =
30860                    <fidl::encoding::Vector<u8, 8> as fidl::encoding::TypeMarker>::inline_size(
30861                        decoder.context,
30862                    );
30863                if inlined != (member_inline_size <= 4) {
30864                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
30865                }
30866                let inner_offset;
30867                let mut inner_depth = depth.clone();
30868                if inlined {
30869                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
30870                    inner_offset = next_offset;
30871                } else {
30872                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
30873                    inner_depth.increment()?;
30874                }
30875                let val_ref = self
30876                    .extended_address
30877                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u8, 8>, D));
30878                fidl::decode!(fidl::encoding::Vector<u8, 8>, D, val_ref, decoder, inner_offset, inner_depth)?;
30879                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
30880                {
30881                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
30882                }
30883                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
30884                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
30885                }
30886            }
30887
30888            next_offset += envelope_size;
30889            _next_ordinal_to_read += 1;
30890            if next_offset >= end_offset {
30891                return Ok(());
30892            }
30893
30894            // Decode unknown envelopes for gaps in ordinals.
30895            while _next_ordinal_to_read < 5 {
30896                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
30897                _next_ordinal_to_read += 1;
30898                next_offset += envelope_size;
30899            }
30900
30901            let next_out_of_line = decoder.next_out_of_line();
30902            let handles_before = decoder.remaining_handles();
30903            if let Some((inlined, num_bytes, num_handles)) =
30904                fidl::encoding::decode_envelope_header(decoder, next_offset)?
30905            {
30906                let member_inline_size =
30907                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
30908                if inlined != (member_inline_size <= 4) {
30909                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
30910                }
30911                let inner_offset;
30912                let mut inner_depth = depth.clone();
30913                if inlined {
30914                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
30915                    inner_offset = next_offset;
30916                } else {
30917                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
30918                    inner_depth.increment()?;
30919                }
30920                let val_ref = self.rloc16.get_or_insert_with(|| fidl::new_empty!(u16, D));
30921                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
30922                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
30923                {
30924                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
30925                }
30926                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
30927                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
30928                }
30929            }
30930
30931            next_offset += envelope_size;
30932            _next_ordinal_to_read += 1;
30933            if next_offset >= end_offset {
30934                return Ok(());
30935            }
30936
30937            // Decode unknown envelopes for gaps in ordinals.
30938            while _next_ordinal_to_read < 6 {
30939                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
30940                _next_ordinal_to_read += 1;
30941                next_offset += envelope_size;
30942            }
30943
30944            let next_out_of_line = decoder.next_out_of_line();
30945            let handles_before = decoder.remaining_handles();
30946            if let Some((inlined, num_bytes, num_handles)) =
30947                fidl::encoding::decode_envelope_header(decoder, next_offset)?
30948            {
30949                let member_inline_size =
30950                    <ThreadLinkMode as fidl::encoding::TypeMarker>::inline_size(decoder.context);
30951                if inlined != (member_inline_size <= 4) {
30952                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
30953                }
30954                let inner_offset;
30955                let mut inner_depth = depth.clone();
30956                if inlined {
30957                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
30958                    inner_offset = next_offset;
30959                } else {
30960                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
30961                    inner_depth.increment()?;
30962                }
30963                let val_ref = self.mode.get_or_insert_with(|| fidl::new_empty!(ThreadLinkMode, D));
30964                fidl::decode!(ThreadLinkMode, D, val_ref, decoder, inner_offset, inner_depth)?;
30965                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
30966                {
30967                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
30968                }
30969                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
30970                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
30971                }
30972            }
30973
30974            next_offset += envelope_size;
30975            _next_ordinal_to_read += 1;
30976            if next_offset >= end_offset {
30977                return Ok(());
30978            }
30979
30980            // Decode unknown envelopes for gaps in ordinals.
30981            while _next_ordinal_to_read < 7 {
30982                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
30983                _next_ordinal_to_read += 1;
30984                next_offset += envelope_size;
30985            }
30986
30987            let next_out_of_line = decoder.next_out_of_line();
30988            let handles_before = decoder.remaining_handles();
30989            if let Some((inlined, num_bytes, num_handles)) =
30990                fidl::encoding::decode_envelope_header(decoder, next_offset)?
30991            {
30992                let member_inline_size =
30993                    <i32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
30994                if inlined != (member_inline_size <= 4) {
30995                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
30996                }
30997                let inner_offset;
30998                let mut inner_depth = depth.clone();
30999                if inlined {
31000                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
31001                    inner_offset = next_offset;
31002                } else {
31003                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
31004                    inner_depth.increment()?;
31005                }
31006                let val_ref = self.avg_rssi.get_or_insert_with(|| fidl::new_empty!(i32, D));
31007                fidl::decode!(i32, D, val_ref, decoder, inner_offset, inner_depth)?;
31008                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
31009                {
31010                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
31011                }
31012                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
31013                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
31014                }
31015            }
31016
31017            next_offset += envelope_size;
31018
31019            // Decode the remaining unknown envelopes.
31020            while next_offset < end_offset {
31021                _next_ordinal_to_read += 1;
31022                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
31023                next_offset += envelope_size;
31024            }
31025
31026            Ok(())
31027        }
31028    }
31029
31030    impl ThreadNetDataPrefixInfoEntry {
31031        #[inline(always)]
31032        fn max_ordinal_present(&self) -> u64 {
31033            if let Some(_) = self.on_mesh_prefix {
31034                return 3;
31035            }
31036            if let Some(_) = self.event {
31037                return 2;
31038            }
31039            if let Some(_) = self.age {
31040                return 1;
31041            }
31042            0
31043        }
31044    }
31045
31046    impl fidl::encoding::ValueTypeMarker for ThreadNetDataPrefixInfoEntry {
31047        type Borrowed<'a> = &'a Self;
31048        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
31049            value
31050        }
31051    }
31052
31053    unsafe impl fidl::encoding::TypeMarker for ThreadNetDataPrefixInfoEntry {
31054        type Owned = Self;
31055
31056        #[inline(always)]
31057        fn inline_align(_context: fidl::encoding::Context) -> usize {
31058            8
31059        }
31060
31061        #[inline(always)]
31062        fn inline_size(_context: fidl::encoding::Context) -> usize {
31063            16
31064        }
31065    }
31066
31067    unsafe impl<D: fidl::encoding::ResourceDialect>
31068        fidl::encoding::Encode<ThreadNetDataPrefixInfoEntry, D> for &ThreadNetDataPrefixInfoEntry
31069    {
31070        unsafe fn encode(
31071            self,
31072            encoder: &mut fidl::encoding::Encoder<'_, D>,
31073            offset: usize,
31074            mut depth: fidl::encoding::Depth,
31075        ) -> fidl::Result<()> {
31076            encoder.debug_check_bounds::<ThreadNetDataPrefixInfoEntry>(offset);
31077            // Vector header
31078            let max_ordinal: u64 = self.max_ordinal_present();
31079            encoder.write_num(max_ordinal, offset);
31080            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
31081            // Calling encoder.out_of_line_offset(0) is not allowed.
31082            if max_ordinal == 0 {
31083                return Ok(());
31084            }
31085            depth.increment()?;
31086            let envelope_size = 8;
31087            let bytes_len = max_ordinal as usize * envelope_size;
31088            #[allow(unused_variables)]
31089            let offset = encoder.out_of_line_offset(bytes_len);
31090            let mut _prev_end_offset: usize = 0;
31091            if 1 > max_ordinal {
31092                return Ok(());
31093            }
31094
31095            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
31096            // are envelope_size bytes.
31097            let cur_offset: usize = (1 - 1) * envelope_size;
31098
31099            // Zero reserved fields.
31100            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
31101
31102            // Safety:
31103            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
31104            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
31105            //   envelope_size bytes, there is always sufficient room.
31106            fidl::encoding::encode_in_envelope_optional::<i64, D>(
31107                self.age.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
31108                encoder,
31109                offset + cur_offset,
31110                depth,
31111            )?;
31112
31113            _prev_end_offset = cur_offset + envelope_size;
31114            if 2 > max_ordinal {
31115                return Ok(());
31116            }
31117
31118            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
31119            // are envelope_size bytes.
31120            let cur_offset: usize = (2 - 1) * envelope_size;
31121
31122            // Zero reserved fields.
31123            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
31124
31125            // Safety:
31126            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
31127            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
31128            //   envelope_size bytes, there is always sufficient room.
31129            fidl::encoding::encode_in_envelope_optional::<HistoryTrackerNetDataEvent, D>(
31130                self.event
31131                    .as_ref()
31132                    .map(<HistoryTrackerNetDataEvent as fidl::encoding::ValueTypeMarker>::borrow),
31133                encoder,
31134                offset + cur_offset,
31135                depth,
31136            )?;
31137
31138            _prev_end_offset = cur_offset + envelope_size;
31139            if 3 > max_ordinal {
31140                return Ok(());
31141            }
31142
31143            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
31144            // are envelope_size bytes.
31145            let cur_offset: usize = (3 - 1) * envelope_size;
31146
31147            // Zero reserved fields.
31148            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
31149
31150            // Safety:
31151            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
31152            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
31153            //   envelope_size bytes, there is always sufficient room.
31154            fidl::encoding::encode_in_envelope_optional::<BorderRouterConfig, D>(
31155                self.on_mesh_prefix
31156                    .as_ref()
31157                    .map(<BorderRouterConfig as fidl::encoding::ValueTypeMarker>::borrow),
31158                encoder,
31159                offset + cur_offset,
31160                depth,
31161            )?;
31162
31163            _prev_end_offset = cur_offset + envelope_size;
31164
31165            Ok(())
31166        }
31167    }
31168
31169    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
31170        for ThreadNetDataPrefixInfoEntry
31171    {
31172        #[inline(always)]
31173        fn new_empty() -> Self {
31174            Self::default()
31175        }
31176
31177        unsafe fn decode(
31178            &mut self,
31179            decoder: &mut fidl::encoding::Decoder<'_, D>,
31180            offset: usize,
31181            mut depth: fidl::encoding::Depth,
31182        ) -> fidl::Result<()> {
31183            decoder.debug_check_bounds::<Self>(offset);
31184            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
31185                None => return Err(fidl::Error::NotNullable),
31186                Some(len) => len,
31187            };
31188            // Calling decoder.out_of_line_offset(0) is not allowed.
31189            if len == 0 {
31190                return Ok(());
31191            };
31192            depth.increment()?;
31193            let envelope_size = 8;
31194            let bytes_len = len * envelope_size;
31195            let offset = decoder.out_of_line_offset(bytes_len)?;
31196            // Decode the envelope for each type.
31197            let mut _next_ordinal_to_read = 0;
31198            let mut next_offset = offset;
31199            let end_offset = offset + bytes_len;
31200            _next_ordinal_to_read += 1;
31201            if next_offset >= end_offset {
31202                return Ok(());
31203            }
31204
31205            // Decode unknown envelopes for gaps in ordinals.
31206            while _next_ordinal_to_read < 1 {
31207                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
31208                _next_ordinal_to_read += 1;
31209                next_offset += envelope_size;
31210            }
31211
31212            let next_out_of_line = decoder.next_out_of_line();
31213            let handles_before = decoder.remaining_handles();
31214            if let Some((inlined, num_bytes, num_handles)) =
31215                fidl::encoding::decode_envelope_header(decoder, next_offset)?
31216            {
31217                let member_inline_size =
31218                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
31219                if inlined != (member_inline_size <= 4) {
31220                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
31221                }
31222                let inner_offset;
31223                let mut inner_depth = depth.clone();
31224                if inlined {
31225                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
31226                    inner_offset = next_offset;
31227                } else {
31228                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
31229                    inner_depth.increment()?;
31230                }
31231                let val_ref = self.age.get_or_insert_with(|| fidl::new_empty!(i64, D));
31232                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
31233                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
31234                {
31235                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
31236                }
31237                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
31238                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
31239                }
31240            }
31241
31242            next_offset += envelope_size;
31243            _next_ordinal_to_read += 1;
31244            if next_offset >= end_offset {
31245                return Ok(());
31246            }
31247
31248            // Decode unknown envelopes for gaps in ordinals.
31249            while _next_ordinal_to_read < 2 {
31250                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
31251                _next_ordinal_to_read += 1;
31252                next_offset += envelope_size;
31253            }
31254
31255            let next_out_of_line = decoder.next_out_of_line();
31256            let handles_before = decoder.remaining_handles();
31257            if let Some((inlined, num_bytes, num_handles)) =
31258                fidl::encoding::decode_envelope_header(decoder, next_offset)?
31259            {
31260                let member_inline_size =
31261                    <HistoryTrackerNetDataEvent as fidl::encoding::TypeMarker>::inline_size(
31262                        decoder.context,
31263                    );
31264                if inlined != (member_inline_size <= 4) {
31265                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
31266                }
31267                let inner_offset;
31268                let mut inner_depth = depth.clone();
31269                if inlined {
31270                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
31271                    inner_offset = next_offset;
31272                } else {
31273                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
31274                    inner_depth.increment()?;
31275                }
31276                let val_ref = self
31277                    .event
31278                    .get_or_insert_with(|| fidl::new_empty!(HistoryTrackerNetDataEvent, D));
31279                fidl::decode!(
31280                    HistoryTrackerNetDataEvent,
31281                    D,
31282                    val_ref,
31283                    decoder,
31284                    inner_offset,
31285                    inner_depth
31286                )?;
31287                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
31288                {
31289                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
31290                }
31291                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
31292                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
31293                }
31294            }
31295
31296            next_offset += envelope_size;
31297            _next_ordinal_to_read += 1;
31298            if next_offset >= end_offset {
31299                return Ok(());
31300            }
31301
31302            // Decode unknown envelopes for gaps in ordinals.
31303            while _next_ordinal_to_read < 3 {
31304                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
31305                _next_ordinal_to_read += 1;
31306                next_offset += envelope_size;
31307            }
31308
31309            let next_out_of_line = decoder.next_out_of_line();
31310            let handles_before = decoder.remaining_handles();
31311            if let Some((inlined, num_bytes, num_handles)) =
31312                fidl::encoding::decode_envelope_header(decoder, next_offset)?
31313            {
31314                let member_inline_size =
31315                    <BorderRouterConfig as fidl::encoding::TypeMarker>::inline_size(
31316                        decoder.context,
31317                    );
31318                if inlined != (member_inline_size <= 4) {
31319                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
31320                }
31321                let inner_offset;
31322                let mut inner_depth = depth.clone();
31323                if inlined {
31324                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
31325                    inner_offset = next_offset;
31326                } else {
31327                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
31328                    inner_depth.increment()?;
31329                }
31330                let val_ref = self
31331                    .on_mesh_prefix
31332                    .get_or_insert_with(|| fidl::new_empty!(BorderRouterConfig, D));
31333                fidl::decode!(BorderRouterConfig, D, val_ref, decoder, inner_offset, inner_depth)?;
31334                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
31335                {
31336                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
31337                }
31338                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
31339                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
31340                }
31341            }
31342
31343            next_offset += envelope_size;
31344
31345            // Decode the remaining unknown envelopes.
31346            while next_offset < end_offset {
31347                _next_ordinal_to_read += 1;
31348                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
31349                next_offset += envelope_size;
31350            }
31351
31352            Ok(())
31353        }
31354    }
31355
31356    impl ThreadNetDataRouteInfoEntry {
31357        #[inline(always)]
31358        fn max_ordinal_present(&self) -> u64 {
31359            if let Some(_) = self.external_route {
31360                return 3;
31361            }
31362            if let Some(_) = self.event {
31363                return 2;
31364            }
31365            if let Some(_) = self.age {
31366                return 1;
31367            }
31368            0
31369        }
31370    }
31371
31372    impl fidl::encoding::ValueTypeMarker for ThreadNetDataRouteInfoEntry {
31373        type Borrowed<'a> = &'a Self;
31374        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
31375            value
31376        }
31377    }
31378
31379    unsafe impl fidl::encoding::TypeMarker for ThreadNetDataRouteInfoEntry {
31380        type Owned = Self;
31381
31382        #[inline(always)]
31383        fn inline_align(_context: fidl::encoding::Context) -> usize {
31384            8
31385        }
31386
31387        #[inline(always)]
31388        fn inline_size(_context: fidl::encoding::Context) -> usize {
31389            16
31390        }
31391    }
31392
31393    unsafe impl<D: fidl::encoding::ResourceDialect>
31394        fidl::encoding::Encode<ThreadNetDataRouteInfoEntry, D> for &ThreadNetDataRouteInfoEntry
31395    {
31396        unsafe fn encode(
31397            self,
31398            encoder: &mut fidl::encoding::Encoder<'_, D>,
31399            offset: usize,
31400            mut depth: fidl::encoding::Depth,
31401        ) -> fidl::Result<()> {
31402            encoder.debug_check_bounds::<ThreadNetDataRouteInfoEntry>(offset);
31403            // Vector header
31404            let max_ordinal: u64 = self.max_ordinal_present();
31405            encoder.write_num(max_ordinal, offset);
31406            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
31407            // Calling encoder.out_of_line_offset(0) is not allowed.
31408            if max_ordinal == 0 {
31409                return Ok(());
31410            }
31411            depth.increment()?;
31412            let envelope_size = 8;
31413            let bytes_len = max_ordinal as usize * envelope_size;
31414            #[allow(unused_variables)]
31415            let offset = encoder.out_of_line_offset(bytes_len);
31416            let mut _prev_end_offset: usize = 0;
31417            if 1 > max_ordinal {
31418                return Ok(());
31419            }
31420
31421            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
31422            // are envelope_size bytes.
31423            let cur_offset: usize = (1 - 1) * envelope_size;
31424
31425            // Zero reserved fields.
31426            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
31427
31428            // Safety:
31429            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
31430            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
31431            //   envelope_size bytes, there is always sufficient room.
31432            fidl::encoding::encode_in_envelope_optional::<i64, D>(
31433                self.age.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
31434                encoder,
31435                offset + cur_offset,
31436                depth,
31437            )?;
31438
31439            _prev_end_offset = cur_offset + envelope_size;
31440            if 2 > max_ordinal {
31441                return Ok(());
31442            }
31443
31444            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
31445            // are envelope_size bytes.
31446            let cur_offset: usize = (2 - 1) * envelope_size;
31447
31448            // Zero reserved fields.
31449            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
31450
31451            // Safety:
31452            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
31453            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
31454            //   envelope_size bytes, there is always sufficient room.
31455            fidl::encoding::encode_in_envelope_optional::<HistoryTrackerNetDataEvent, D>(
31456                self.event
31457                    .as_ref()
31458                    .map(<HistoryTrackerNetDataEvent as fidl::encoding::ValueTypeMarker>::borrow),
31459                encoder,
31460                offset + cur_offset,
31461                depth,
31462            )?;
31463
31464            _prev_end_offset = cur_offset + envelope_size;
31465            if 3 > max_ordinal {
31466                return Ok(());
31467            }
31468
31469            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
31470            // are envelope_size bytes.
31471            let cur_offset: usize = (3 - 1) * envelope_size;
31472
31473            // Zero reserved fields.
31474            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
31475
31476            // Safety:
31477            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
31478            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
31479            //   envelope_size bytes, there is always sufficient room.
31480            fidl::encoding::encode_in_envelope_optional::<ExternalRouteConfig, D>(
31481                self.external_route
31482                    .as_ref()
31483                    .map(<ExternalRouteConfig as fidl::encoding::ValueTypeMarker>::borrow),
31484                encoder,
31485                offset + cur_offset,
31486                depth,
31487            )?;
31488
31489            _prev_end_offset = cur_offset + envelope_size;
31490
31491            Ok(())
31492        }
31493    }
31494
31495    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
31496        for ThreadNetDataRouteInfoEntry
31497    {
31498        #[inline(always)]
31499        fn new_empty() -> Self {
31500            Self::default()
31501        }
31502
31503        unsafe fn decode(
31504            &mut self,
31505            decoder: &mut fidl::encoding::Decoder<'_, D>,
31506            offset: usize,
31507            mut depth: fidl::encoding::Depth,
31508        ) -> fidl::Result<()> {
31509            decoder.debug_check_bounds::<Self>(offset);
31510            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
31511                None => return Err(fidl::Error::NotNullable),
31512                Some(len) => len,
31513            };
31514            // Calling decoder.out_of_line_offset(0) is not allowed.
31515            if len == 0 {
31516                return Ok(());
31517            };
31518            depth.increment()?;
31519            let envelope_size = 8;
31520            let bytes_len = len * envelope_size;
31521            let offset = decoder.out_of_line_offset(bytes_len)?;
31522            // Decode the envelope for each type.
31523            let mut _next_ordinal_to_read = 0;
31524            let mut next_offset = offset;
31525            let end_offset = offset + bytes_len;
31526            _next_ordinal_to_read += 1;
31527            if next_offset >= end_offset {
31528                return Ok(());
31529            }
31530
31531            // Decode unknown envelopes for gaps in ordinals.
31532            while _next_ordinal_to_read < 1 {
31533                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
31534                _next_ordinal_to_read += 1;
31535                next_offset += envelope_size;
31536            }
31537
31538            let next_out_of_line = decoder.next_out_of_line();
31539            let handles_before = decoder.remaining_handles();
31540            if let Some((inlined, num_bytes, num_handles)) =
31541                fidl::encoding::decode_envelope_header(decoder, next_offset)?
31542            {
31543                let member_inline_size =
31544                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
31545                if inlined != (member_inline_size <= 4) {
31546                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
31547                }
31548                let inner_offset;
31549                let mut inner_depth = depth.clone();
31550                if inlined {
31551                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
31552                    inner_offset = next_offset;
31553                } else {
31554                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
31555                    inner_depth.increment()?;
31556                }
31557                let val_ref = self.age.get_or_insert_with(|| fidl::new_empty!(i64, D));
31558                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
31559                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
31560                {
31561                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
31562                }
31563                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
31564                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
31565                }
31566            }
31567
31568            next_offset += envelope_size;
31569            _next_ordinal_to_read += 1;
31570            if next_offset >= end_offset {
31571                return Ok(());
31572            }
31573
31574            // Decode unknown envelopes for gaps in ordinals.
31575            while _next_ordinal_to_read < 2 {
31576                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
31577                _next_ordinal_to_read += 1;
31578                next_offset += envelope_size;
31579            }
31580
31581            let next_out_of_line = decoder.next_out_of_line();
31582            let handles_before = decoder.remaining_handles();
31583            if let Some((inlined, num_bytes, num_handles)) =
31584                fidl::encoding::decode_envelope_header(decoder, next_offset)?
31585            {
31586                let member_inline_size =
31587                    <HistoryTrackerNetDataEvent as fidl::encoding::TypeMarker>::inline_size(
31588                        decoder.context,
31589                    );
31590                if inlined != (member_inline_size <= 4) {
31591                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
31592                }
31593                let inner_offset;
31594                let mut inner_depth = depth.clone();
31595                if inlined {
31596                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
31597                    inner_offset = next_offset;
31598                } else {
31599                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
31600                    inner_depth.increment()?;
31601                }
31602                let val_ref = self
31603                    .event
31604                    .get_or_insert_with(|| fidl::new_empty!(HistoryTrackerNetDataEvent, D));
31605                fidl::decode!(
31606                    HistoryTrackerNetDataEvent,
31607                    D,
31608                    val_ref,
31609                    decoder,
31610                    inner_offset,
31611                    inner_depth
31612                )?;
31613                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
31614                {
31615                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
31616                }
31617                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
31618                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
31619                }
31620            }
31621
31622            next_offset += envelope_size;
31623            _next_ordinal_to_read += 1;
31624            if next_offset >= end_offset {
31625                return Ok(());
31626            }
31627
31628            // Decode unknown envelopes for gaps in ordinals.
31629            while _next_ordinal_to_read < 3 {
31630                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
31631                _next_ordinal_to_read += 1;
31632                next_offset += envelope_size;
31633            }
31634
31635            let next_out_of_line = decoder.next_out_of_line();
31636            let handles_before = decoder.remaining_handles();
31637            if let Some((inlined, num_bytes, num_handles)) =
31638                fidl::encoding::decode_envelope_header(decoder, next_offset)?
31639            {
31640                let member_inline_size =
31641                    <ExternalRouteConfig as fidl::encoding::TypeMarker>::inline_size(
31642                        decoder.context,
31643                    );
31644                if inlined != (member_inline_size <= 4) {
31645                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
31646                }
31647                let inner_offset;
31648                let mut inner_depth = depth.clone();
31649                if inlined {
31650                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
31651                    inner_offset = next_offset;
31652                } else {
31653                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
31654                    inner_depth.increment()?;
31655                }
31656                let val_ref = self
31657                    .external_route
31658                    .get_or_insert_with(|| fidl::new_empty!(ExternalRouteConfig, D));
31659                fidl::decode!(ExternalRouteConfig, D, val_ref, decoder, inner_offset, inner_depth)?;
31660                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
31661                {
31662                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
31663                }
31664                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
31665                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
31666                }
31667            }
31668
31669            next_offset += envelope_size;
31670
31671            // Decode the remaining unknown envelopes.
31672            while next_offset < end_offset {
31673                _next_ordinal_to_read += 1;
31674                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
31675                next_offset += envelope_size;
31676            }
31677
31678            Ok(())
31679        }
31680    }
31681
31682    impl ThreadNetworkInfoEntry {
31683        #[inline(always)]
31684        fn max_ordinal_present(&self) -> u64 {
31685            if let Some(_) = self.partition_id {
31686                return 5;
31687            }
31688            if let Some(_) = self.rloc16 {
31689                return 4;
31690            }
31691            if let Some(_) = self.mode {
31692                return 3;
31693            }
31694            if let Some(_) = self.role {
31695                return 2;
31696            }
31697            if let Some(_) = self.age {
31698                return 1;
31699            }
31700            0
31701        }
31702    }
31703
31704    impl fidl::encoding::ValueTypeMarker for ThreadNetworkInfoEntry {
31705        type Borrowed<'a> = &'a Self;
31706        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
31707            value
31708        }
31709    }
31710
31711    unsafe impl fidl::encoding::TypeMarker for ThreadNetworkInfoEntry {
31712        type Owned = Self;
31713
31714        #[inline(always)]
31715        fn inline_align(_context: fidl::encoding::Context) -> usize {
31716            8
31717        }
31718
31719        #[inline(always)]
31720        fn inline_size(_context: fidl::encoding::Context) -> usize {
31721            16
31722        }
31723    }
31724
31725    unsafe impl<D: fidl::encoding::ResourceDialect>
31726        fidl::encoding::Encode<ThreadNetworkInfoEntry, D> for &ThreadNetworkInfoEntry
31727    {
31728        unsafe fn encode(
31729            self,
31730            encoder: &mut fidl::encoding::Encoder<'_, D>,
31731            offset: usize,
31732            mut depth: fidl::encoding::Depth,
31733        ) -> fidl::Result<()> {
31734            encoder.debug_check_bounds::<ThreadNetworkInfoEntry>(offset);
31735            // Vector header
31736            let max_ordinal: u64 = self.max_ordinal_present();
31737            encoder.write_num(max_ordinal, offset);
31738            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
31739            // Calling encoder.out_of_line_offset(0) is not allowed.
31740            if max_ordinal == 0 {
31741                return Ok(());
31742            }
31743            depth.increment()?;
31744            let envelope_size = 8;
31745            let bytes_len = max_ordinal as usize * envelope_size;
31746            #[allow(unused_variables)]
31747            let offset = encoder.out_of_line_offset(bytes_len);
31748            let mut _prev_end_offset: usize = 0;
31749            if 1 > max_ordinal {
31750                return Ok(());
31751            }
31752
31753            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
31754            // are envelope_size bytes.
31755            let cur_offset: usize = (1 - 1) * envelope_size;
31756
31757            // Zero reserved fields.
31758            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
31759
31760            // Safety:
31761            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
31762            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
31763            //   envelope_size bytes, there is always sufficient room.
31764            fidl::encoding::encode_in_envelope_optional::<i64, D>(
31765                self.age.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
31766                encoder,
31767                offset + cur_offset,
31768                depth,
31769            )?;
31770
31771            _prev_end_offset = cur_offset + envelope_size;
31772            if 2 > max_ordinal {
31773                return Ok(());
31774            }
31775
31776            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
31777            // are envelope_size bytes.
31778            let cur_offset: usize = (2 - 1) * envelope_size;
31779
31780            // Zero reserved fields.
31781            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
31782
31783            // Safety:
31784            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
31785            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
31786            //   envelope_size bytes, there is always sufficient room.
31787            fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_lowpan_device_common::Role, D>(
31788            self.role.as_ref().map(<fidl_fuchsia_lowpan_device_common::Role as fidl::encoding::ValueTypeMarker>::borrow),
31789            encoder, offset + cur_offset, depth
31790        )?;
31791
31792            _prev_end_offset = cur_offset + envelope_size;
31793            if 3 > max_ordinal {
31794                return Ok(());
31795            }
31796
31797            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
31798            // are envelope_size bytes.
31799            let cur_offset: usize = (3 - 1) * envelope_size;
31800
31801            // Zero reserved fields.
31802            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
31803
31804            // Safety:
31805            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
31806            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
31807            //   envelope_size bytes, there is always sufficient room.
31808            fidl::encoding::encode_in_envelope_optional::<ThreadLinkMode, D>(
31809                self.mode.as_ref().map(<ThreadLinkMode as fidl::encoding::ValueTypeMarker>::borrow),
31810                encoder,
31811                offset + cur_offset,
31812                depth,
31813            )?;
31814
31815            _prev_end_offset = cur_offset + envelope_size;
31816            if 4 > max_ordinal {
31817                return Ok(());
31818            }
31819
31820            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
31821            // are envelope_size bytes.
31822            let cur_offset: usize = (4 - 1) * envelope_size;
31823
31824            // Zero reserved fields.
31825            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
31826
31827            // Safety:
31828            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
31829            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
31830            //   envelope_size bytes, there is always sufficient room.
31831            fidl::encoding::encode_in_envelope_optional::<u16, D>(
31832                self.rloc16.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
31833                encoder,
31834                offset + cur_offset,
31835                depth,
31836            )?;
31837
31838            _prev_end_offset = cur_offset + envelope_size;
31839            if 5 > max_ordinal {
31840                return Ok(());
31841            }
31842
31843            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
31844            // are envelope_size bytes.
31845            let cur_offset: usize = (5 - 1) * envelope_size;
31846
31847            // Zero reserved fields.
31848            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
31849
31850            // Safety:
31851            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
31852            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
31853            //   envelope_size bytes, there is always sufficient room.
31854            fidl::encoding::encode_in_envelope_optional::<u32, D>(
31855                self.partition_id.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
31856                encoder,
31857                offset + cur_offset,
31858                depth,
31859            )?;
31860
31861            _prev_end_offset = cur_offset + envelope_size;
31862
31863            Ok(())
31864        }
31865    }
31866
31867    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
31868        for ThreadNetworkInfoEntry
31869    {
31870        #[inline(always)]
31871        fn new_empty() -> Self {
31872            Self::default()
31873        }
31874
31875        unsafe fn decode(
31876            &mut self,
31877            decoder: &mut fidl::encoding::Decoder<'_, D>,
31878            offset: usize,
31879            mut depth: fidl::encoding::Depth,
31880        ) -> fidl::Result<()> {
31881            decoder.debug_check_bounds::<Self>(offset);
31882            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
31883                None => return Err(fidl::Error::NotNullable),
31884                Some(len) => len,
31885            };
31886            // Calling decoder.out_of_line_offset(0) is not allowed.
31887            if len == 0 {
31888                return Ok(());
31889            };
31890            depth.increment()?;
31891            let envelope_size = 8;
31892            let bytes_len = len * envelope_size;
31893            let offset = decoder.out_of_line_offset(bytes_len)?;
31894            // Decode the envelope for each type.
31895            let mut _next_ordinal_to_read = 0;
31896            let mut next_offset = offset;
31897            let end_offset = offset + bytes_len;
31898            _next_ordinal_to_read += 1;
31899            if next_offset >= end_offset {
31900                return Ok(());
31901            }
31902
31903            // Decode unknown envelopes for gaps in ordinals.
31904            while _next_ordinal_to_read < 1 {
31905                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
31906                _next_ordinal_to_read += 1;
31907                next_offset += envelope_size;
31908            }
31909
31910            let next_out_of_line = decoder.next_out_of_line();
31911            let handles_before = decoder.remaining_handles();
31912            if let Some((inlined, num_bytes, num_handles)) =
31913                fidl::encoding::decode_envelope_header(decoder, next_offset)?
31914            {
31915                let member_inline_size =
31916                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
31917                if inlined != (member_inline_size <= 4) {
31918                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
31919                }
31920                let inner_offset;
31921                let mut inner_depth = depth.clone();
31922                if inlined {
31923                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
31924                    inner_offset = next_offset;
31925                } else {
31926                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
31927                    inner_depth.increment()?;
31928                }
31929                let val_ref = self.age.get_or_insert_with(|| fidl::new_empty!(i64, D));
31930                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
31931                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
31932                {
31933                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
31934                }
31935                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
31936                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
31937                }
31938            }
31939
31940            next_offset += envelope_size;
31941            _next_ordinal_to_read += 1;
31942            if next_offset >= end_offset {
31943                return Ok(());
31944            }
31945
31946            // Decode unknown envelopes for gaps in ordinals.
31947            while _next_ordinal_to_read < 2 {
31948                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
31949                _next_ordinal_to_read += 1;
31950                next_offset += envelope_size;
31951            }
31952
31953            let next_out_of_line = decoder.next_out_of_line();
31954            let handles_before = decoder.remaining_handles();
31955            if let Some((inlined, num_bytes, num_handles)) =
31956                fidl::encoding::decode_envelope_header(decoder, next_offset)?
31957            {
31958                let member_inline_size = <fidl_fuchsia_lowpan_device_common::Role as fidl::encoding::TypeMarker>::inline_size(decoder.context);
31959                if inlined != (member_inline_size <= 4) {
31960                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
31961                }
31962                let inner_offset;
31963                let mut inner_depth = depth.clone();
31964                if inlined {
31965                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
31966                    inner_offset = next_offset;
31967                } else {
31968                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
31969                    inner_depth.increment()?;
31970                }
31971                let val_ref = self.role.get_or_insert_with(|| {
31972                    fidl::new_empty!(fidl_fuchsia_lowpan_device_common::Role, D)
31973                });
31974                fidl::decode!(
31975                    fidl_fuchsia_lowpan_device_common::Role,
31976                    D,
31977                    val_ref,
31978                    decoder,
31979                    inner_offset,
31980                    inner_depth
31981                )?;
31982                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
31983                {
31984                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
31985                }
31986                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
31987                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
31988                }
31989            }
31990
31991            next_offset += envelope_size;
31992            _next_ordinal_to_read += 1;
31993            if next_offset >= end_offset {
31994                return Ok(());
31995            }
31996
31997            // Decode unknown envelopes for gaps in ordinals.
31998            while _next_ordinal_to_read < 3 {
31999                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
32000                _next_ordinal_to_read += 1;
32001                next_offset += envelope_size;
32002            }
32003
32004            let next_out_of_line = decoder.next_out_of_line();
32005            let handles_before = decoder.remaining_handles();
32006            if let Some((inlined, num_bytes, num_handles)) =
32007                fidl::encoding::decode_envelope_header(decoder, next_offset)?
32008            {
32009                let member_inline_size =
32010                    <ThreadLinkMode as fidl::encoding::TypeMarker>::inline_size(decoder.context);
32011                if inlined != (member_inline_size <= 4) {
32012                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
32013                }
32014                let inner_offset;
32015                let mut inner_depth = depth.clone();
32016                if inlined {
32017                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
32018                    inner_offset = next_offset;
32019                } else {
32020                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
32021                    inner_depth.increment()?;
32022                }
32023                let val_ref = self.mode.get_or_insert_with(|| fidl::new_empty!(ThreadLinkMode, D));
32024                fidl::decode!(ThreadLinkMode, D, val_ref, decoder, inner_offset, inner_depth)?;
32025                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
32026                {
32027                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
32028                }
32029                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
32030                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
32031                }
32032            }
32033
32034            next_offset += envelope_size;
32035            _next_ordinal_to_read += 1;
32036            if next_offset >= end_offset {
32037                return Ok(());
32038            }
32039
32040            // Decode unknown envelopes for gaps in ordinals.
32041            while _next_ordinal_to_read < 4 {
32042                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
32043                _next_ordinal_to_read += 1;
32044                next_offset += envelope_size;
32045            }
32046
32047            let next_out_of_line = decoder.next_out_of_line();
32048            let handles_before = decoder.remaining_handles();
32049            if let Some((inlined, num_bytes, num_handles)) =
32050                fidl::encoding::decode_envelope_header(decoder, next_offset)?
32051            {
32052                let member_inline_size =
32053                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
32054                if inlined != (member_inline_size <= 4) {
32055                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
32056                }
32057                let inner_offset;
32058                let mut inner_depth = depth.clone();
32059                if inlined {
32060                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
32061                    inner_offset = next_offset;
32062                } else {
32063                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
32064                    inner_depth.increment()?;
32065                }
32066                let val_ref = self.rloc16.get_or_insert_with(|| fidl::new_empty!(u16, D));
32067                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
32068                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
32069                {
32070                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
32071                }
32072                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
32073                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
32074                }
32075            }
32076
32077            next_offset += envelope_size;
32078            _next_ordinal_to_read += 1;
32079            if next_offset >= end_offset {
32080                return Ok(());
32081            }
32082
32083            // Decode unknown envelopes for gaps in ordinals.
32084            while _next_ordinal_to_read < 5 {
32085                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
32086                _next_ordinal_to_read += 1;
32087                next_offset += envelope_size;
32088            }
32089
32090            let next_out_of_line = decoder.next_out_of_line();
32091            let handles_before = decoder.remaining_handles();
32092            if let Some((inlined, num_bytes, num_handles)) =
32093                fidl::encoding::decode_envelope_header(decoder, next_offset)?
32094            {
32095                let member_inline_size =
32096                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
32097                if inlined != (member_inline_size <= 4) {
32098                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
32099                }
32100                let inner_offset;
32101                let mut inner_depth = depth.clone();
32102                if inlined {
32103                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
32104                    inner_offset = next_offset;
32105                } else {
32106                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
32107                    inner_depth.increment()?;
32108                }
32109                let val_ref = self.partition_id.get_or_insert_with(|| fidl::new_empty!(u32, D));
32110                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
32111                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
32112                {
32113                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
32114                }
32115                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
32116                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
32117                }
32118            }
32119
32120            next_offset += envelope_size;
32121
32122            // Decode the remaining unknown envelopes.
32123            while next_offset < end_offset {
32124                _next_ordinal_to_read += 1;
32125                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
32126                next_offset += envelope_size;
32127            }
32128
32129            Ok(())
32130        }
32131    }
32132
32133    impl ThreadRouterInfoEntry {
32134        #[inline(always)]
32135        fn max_ordinal_present(&self) -> u64 {
32136            if let Some(_) = self.new_path_cost {
32137                return 8;
32138            }
32139            if let Some(_) = self.old_path_cost {
32140                return 7;
32141            }
32142            if let Some(_) = self.next_hop_rloc16 {
32143                return 6;
32144            }
32145            if let Some(_) = self.next_hop_id {
32146                return 5;
32147            }
32148            if let Some(_) = self.router_rloc16 {
32149                return 4;
32150            }
32151            if let Some(_) = self.router_id {
32152                return 3;
32153            }
32154            if let Some(_) = self.event {
32155                return 2;
32156            }
32157            if let Some(_) = self.age {
32158                return 1;
32159            }
32160            0
32161        }
32162    }
32163
32164    impl fidl::encoding::ValueTypeMarker for ThreadRouterInfoEntry {
32165        type Borrowed<'a> = &'a Self;
32166        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
32167            value
32168        }
32169    }
32170
32171    unsafe impl fidl::encoding::TypeMarker for ThreadRouterInfoEntry {
32172        type Owned = Self;
32173
32174        #[inline(always)]
32175        fn inline_align(_context: fidl::encoding::Context) -> usize {
32176            8
32177        }
32178
32179        #[inline(always)]
32180        fn inline_size(_context: fidl::encoding::Context) -> usize {
32181            16
32182        }
32183    }
32184
32185    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<ThreadRouterInfoEntry, D>
32186        for &ThreadRouterInfoEntry
32187    {
32188        unsafe fn encode(
32189            self,
32190            encoder: &mut fidl::encoding::Encoder<'_, D>,
32191            offset: usize,
32192            mut depth: fidl::encoding::Depth,
32193        ) -> fidl::Result<()> {
32194            encoder.debug_check_bounds::<ThreadRouterInfoEntry>(offset);
32195            // Vector header
32196            let max_ordinal: u64 = self.max_ordinal_present();
32197            encoder.write_num(max_ordinal, offset);
32198            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
32199            // Calling encoder.out_of_line_offset(0) is not allowed.
32200            if max_ordinal == 0 {
32201                return Ok(());
32202            }
32203            depth.increment()?;
32204            let envelope_size = 8;
32205            let bytes_len = max_ordinal as usize * envelope_size;
32206            #[allow(unused_variables)]
32207            let offset = encoder.out_of_line_offset(bytes_len);
32208            let mut _prev_end_offset: usize = 0;
32209            if 1 > max_ordinal {
32210                return Ok(());
32211            }
32212
32213            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
32214            // are envelope_size bytes.
32215            let cur_offset: usize = (1 - 1) * envelope_size;
32216
32217            // Zero reserved fields.
32218            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
32219
32220            // Safety:
32221            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
32222            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
32223            //   envelope_size bytes, there is always sufficient room.
32224            fidl::encoding::encode_in_envelope_optional::<i64, D>(
32225                self.age.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
32226                encoder,
32227                offset + cur_offset,
32228                depth,
32229            )?;
32230
32231            _prev_end_offset = cur_offset + envelope_size;
32232            if 2 > max_ordinal {
32233                return Ok(());
32234            }
32235
32236            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
32237            // are envelope_size bytes.
32238            let cur_offset: usize = (2 - 1) * envelope_size;
32239
32240            // Zero reserved fields.
32241            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
32242
32243            // Safety:
32244            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
32245            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
32246            //   envelope_size bytes, there is always sufficient room.
32247            fidl::encoding::encode_in_envelope_optional::<HistoryTrackerRouterEvent, D>(
32248                self.event
32249                    .as_ref()
32250                    .map(<HistoryTrackerRouterEvent as fidl::encoding::ValueTypeMarker>::borrow),
32251                encoder,
32252                offset + cur_offset,
32253                depth,
32254            )?;
32255
32256            _prev_end_offset = cur_offset + envelope_size;
32257            if 3 > max_ordinal {
32258                return Ok(());
32259            }
32260
32261            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
32262            // are envelope_size bytes.
32263            let cur_offset: usize = (3 - 1) * envelope_size;
32264
32265            // Zero reserved fields.
32266            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
32267
32268            // Safety:
32269            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
32270            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
32271            //   envelope_size bytes, there is always sufficient room.
32272            fidl::encoding::encode_in_envelope_optional::<u8, D>(
32273                self.router_id.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
32274                encoder,
32275                offset + cur_offset,
32276                depth,
32277            )?;
32278
32279            _prev_end_offset = cur_offset + envelope_size;
32280            if 4 > max_ordinal {
32281                return Ok(());
32282            }
32283
32284            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
32285            // are envelope_size bytes.
32286            let cur_offset: usize = (4 - 1) * envelope_size;
32287
32288            // Zero reserved fields.
32289            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
32290
32291            // Safety:
32292            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
32293            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
32294            //   envelope_size bytes, there is always sufficient room.
32295            fidl::encoding::encode_in_envelope_optional::<u16, D>(
32296                self.router_rloc16.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
32297                encoder,
32298                offset + cur_offset,
32299                depth,
32300            )?;
32301
32302            _prev_end_offset = cur_offset + envelope_size;
32303            if 5 > max_ordinal {
32304                return Ok(());
32305            }
32306
32307            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
32308            // are envelope_size bytes.
32309            let cur_offset: usize = (5 - 1) * envelope_size;
32310
32311            // Zero reserved fields.
32312            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
32313
32314            // Safety:
32315            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
32316            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
32317            //   envelope_size bytes, there is always sufficient room.
32318            fidl::encoding::encode_in_envelope_optional::<u8, D>(
32319                self.next_hop_id.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
32320                encoder,
32321                offset + cur_offset,
32322                depth,
32323            )?;
32324
32325            _prev_end_offset = cur_offset + envelope_size;
32326            if 6 > max_ordinal {
32327                return Ok(());
32328            }
32329
32330            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
32331            // are envelope_size bytes.
32332            let cur_offset: usize = (6 - 1) * envelope_size;
32333
32334            // Zero reserved fields.
32335            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
32336
32337            // Safety:
32338            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
32339            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
32340            //   envelope_size bytes, there is always sufficient room.
32341            fidl::encoding::encode_in_envelope_optional::<u16, D>(
32342                self.next_hop_rloc16.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
32343                encoder,
32344                offset + cur_offset,
32345                depth,
32346            )?;
32347
32348            _prev_end_offset = cur_offset + envelope_size;
32349            if 7 > max_ordinal {
32350                return Ok(());
32351            }
32352
32353            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
32354            // are envelope_size bytes.
32355            let cur_offset: usize = (7 - 1) * envelope_size;
32356
32357            // Zero reserved fields.
32358            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
32359
32360            // Safety:
32361            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
32362            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
32363            //   envelope_size bytes, there is always sufficient room.
32364            fidl::encoding::encode_in_envelope_optional::<u8, D>(
32365                self.old_path_cost.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
32366                encoder,
32367                offset + cur_offset,
32368                depth,
32369            )?;
32370
32371            _prev_end_offset = cur_offset + envelope_size;
32372            if 8 > max_ordinal {
32373                return Ok(());
32374            }
32375
32376            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
32377            // are envelope_size bytes.
32378            let cur_offset: usize = (8 - 1) * envelope_size;
32379
32380            // Zero reserved fields.
32381            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
32382
32383            // Safety:
32384            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
32385            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
32386            //   envelope_size bytes, there is always sufficient room.
32387            fidl::encoding::encode_in_envelope_optional::<u8, D>(
32388                self.new_path_cost.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
32389                encoder,
32390                offset + cur_offset,
32391                depth,
32392            )?;
32393
32394            _prev_end_offset = cur_offset + envelope_size;
32395
32396            Ok(())
32397        }
32398    }
32399
32400    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ThreadRouterInfoEntry {
32401        #[inline(always)]
32402        fn new_empty() -> Self {
32403            Self::default()
32404        }
32405
32406        unsafe fn decode(
32407            &mut self,
32408            decoder: &mut fidl::encoding::Decoder<'_, D>,
32409            offset: usize,
32410            mut depth: fidl::encoding::Depth,
32411        ) -> fidl::Result<()> {
32412            decoder.debug_check_bounds::<Self>(offset);
32413            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
32414                None => return Err(fidl::Error::NotNullable),
32415                Some(len) => len,
32416            };
32417            // Calling decoder.out_of_line_offset(0) is not allowed.
32418            if len == 0 {
32419                return Ok(());
32420            };
32421            depth.increment()?;
32422            let envelope_size = 8;
32423            let bytes_len = len * envelope_size;
32424            let offset = decoder.out_of_line_offset(bytes_len)?;
32425            // Decode the envelope for each type.
32426            let mut _next_ordinal_to_read = 0;
32427            let mut next_offset = offset;
32428            let end_offset = offset + bytes_len;
32429            _next_ordinal_to_read += 1;
32430            if next_offset >= end_offset {
32431                return Ok(());
32432            }
32433
32434            // Decode unknown envelopes for gaps in ordinals.
32435            while _next_ordinal_to_read < 1 {
32436                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
32437                _next_ordinal_to_read += 1;
32438                next_offset += envelope_size;
32439            }
32440
32441            let next_out_of_line = decoder.next_out_of_line();
32442            let handles_before = decoder.remaining_handles();
32443            if let Some((inlined, num_bytes, num_handles)) =
32444                fidl::encoding::decode_envelope_header(decoder, next_offset)?
32445            {
32446                let member_inline_size =
32447                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
32448                if inlined != (member_inline_size <= 4) {
32449                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
32450                }
32451                let inner_offset;
32452                let mut inner_depth = depth.clone();
32453                if inlined {
32454                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
32455                    inner_offset = next_offset;
32456                } else {
32457                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
32458                    inner_depth.increment()?;
32459                }
32460                let val_ref = self.age.get_or_insert_with(|| fidl::new_empty!(i64, D));
32461                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
32462                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
32463                {
32464                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
32465                }
32466                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
32467                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
32468                }
32469            }
32470
32471            next_offset += envelope_size;
32472            _next_ordinal_to_read += 1;
32473            if next_offset >= end_offset {
32474                return Ok(());
32475            }
32476
32477            // Decode unknown envelopes for gaps in ordinals.
32478            while _next_ordinal_to_read < 2 {
32479                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
32480                _next_ordinal_to_read += 1;
32481                next_offset += envelope_size;
32482            }
32483
32484            let next_out_of_line = decoder.next_out_of_line();
32485            let handles_before = decoder.remaining_handles();
32486            if let Some((inlined, num_bytes, num_handles)) =
32487                fidl::encoding::decode_envelope_header(decoder, next_offset)?
32488            {
32489                let member_inline_size =
32490                    <HistoryTrackerRouterEvent as fidl::encoding::TypeMarker>::inline_size(
32491                        decoder.context,
32492                    );
32493                if inlined != (member_inline_size <= 4) {
32494                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
32495                }
32496                let inner_offset;
32497                let mut inner_depth = depth.clone();
32498                if inlined {
32499                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
32500                    inner_offset = next_offset;
32501                } else {
32502                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
32503                    inner_depth.increment()?;
32504                }
32505                let val_ref = self
32506                    .event
32507                    .get_or_insert_with(|| fidl::new_empty!(HistoryTrackerRouterEvent, D));
32508                fidl::decode!(
32509                    HistoryTrackerRouterEvent,
32510                    D,
32511                    val_ref,
32512                    decoder,
32513                    inner_offset,
32514                    inner_depth
32515                )?;
32516                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
32517                {
32518                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
32519                }
32520                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
32521                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
32522                }
32523            }
32524
32525            next_offset += envelope_size;
32526            _next_ordinal_to_read += 1;
32527            if next_offset >= end_offset {
32528                return Ok(());
32529            }
32530
32531            // Decode unknown envelopes for gaps in ordinals.
32532            while _next_ordinal_to_read < 3 {
32533                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
32534                _next_ordinal_to_read += 1;
32535                next_offset += envelope_size;
32536            }
32537
32538            let next_out_of_line = decoder.next_out_of_line();
32539            let handles_before = decoder.remaining_handles();
32540            if let Some((inlined, num_bytes, num_handles)) =
32541                fidl::encoding::decode_envelope_header(decoder, next_offset)?
32542            {
32543                let member_inline_size =
32544                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
32545                if inlined != (member_inline_size <= 4) {
32546                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
32547                }
32548                let inner_offset;
32549                let mut inner_depth = depth.clone();
32550                if inlined {
32551                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
32552                    inner_offset = next_offset;
32553                } else {
32554                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
32555                    inner_depth.increment()?;
32556                }
32557                let val_ref = self.router_id.get_or_insert_with(|| fidl::new_empty!(u8, D));
32558                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
32559                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
32560                {
32561                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
32562                }
32563                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
32564                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
32565                }
32566            }
32567
32568            next_offset += envelope_size;
32569            _next_ordinal_to_read += 1;
32570            if next_offset >= end_offset {
32571                return Ok(());
32572            }
32573
32574            // Decode unknown envelopes for gaps in ordinals.
32575            while _next_ordinal_to_read < 4 {
32576                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
32577                _next_ordinal_to_read += 1;
32578                next_offset += envelope_size;
32579            }
32580
32581            let next_out_of_line = decoder.next_out_of_line();
32582            let handles_before = decoder.remaining_handles();
32583            if let Some((inlined, num_bytes, num_handles)) =
32584                fidl::encoding::decode_envelope_header(decoder, next_offset)?
32585            {
32586                let member_inline_size =
32587                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
32588                if inlined != (member_inline_size <= 4) {
32589                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
32590                }
32591                let inner_offset;
32592                let mut inner_depth = depth.clone();
32593                if inlined {
32594                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
32595                    inner_offset = next_offset;
32596                } else {
32597                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
32598                    inner_depth.increment()?;
32599                }
32600                let val_ref = self.router_rloc16.get_or_insert_with(|| fidl::new_empty!(u16, D));
32601                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
32602                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
32603                {
32604                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
32605                }
32606                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
32607                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
32608                }
32609            }
32610
32611            next_offset += envelope_size;
32612            _next_ordinal_to_read += 1;
32613            if next_offset >= end_offset {
32614                return Ok(());
32615            }
32616
32617            // Decode unknown envelopes for gaps in ordinals.
32618            while _next_ordinal_to_read < 5 {
32619                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
32620                _next_ordinal_to_read += 1;
32621                next_offset += envelope_size;
32622            }
32623
32624            let next_out_of_line = decoder.next_out_of_line();
32625            let handles_before = decoder.remaining_handles();
32626            if let Some((inlined, num_bytes, num_handles)) =
32627                fidl::encoding::decode_envelope_header(decoder, next_offset)?
32628            {
32629                let member_inline_size =
32630                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
32631                if inlined != (member_inline_size <= 4) {
32632                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
32633                }
32634                let inner_offset;
32635                let mut inner_depth = depth.clone();
32636                if inlined {
32637                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
32638                    inner_offset = next_offset;
32639                } else {
32640                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
32641                    inner_depth.increment()?;
32642                }
32643                let val_ref = self.next_hop_id.get_or_insert_with(|| fidl::new_empty!(u8, D));
32644                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
32645                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
32646                {
32647                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
32648                }
32649                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
32650                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
32651                }
32652            }
32653
32654            next_offset += envelope_size;
32655            _next_ordinal_to_read += 1;
32656            if next_offset >= end_offset {
32657                return Ok(());
32658            }
32659
32660            // Decode unknown envelopes for gaps in ordinals.
32661            while _next_ordinal_to_read < 6 {
32662                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
32663                _next_ordinal_to_read += 1;
32664                next_offset += envelope_size;
32665            }
32666
32667            let next_out_of_line = decoder.next_out_of_line();
32668            let handles_before = decoder.remaining_handles();
32669            if let Some((inlined, num_bytes, num_handles)) =
32670                fidl::encoding::decode_envelope_header(decoder, next_offset)?
32671            {
32672                let member_inline_size =
32673                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
32674                if inlined != (member_inline_size <= 4) {
32675                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
32676                }
32677                let inner_offset;
32678                let mut inner_depth = depth.clone();
32679                if inlined {
32680                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
32681                    inner_offset = next_offset;
32682                } else {
32683                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
32684                    inner_depth.increment()?;
32685                }
32686                let val_ref = self.next_hop_rloc16.get_or_insert_with(|| fidl::new_empty!(u16, D));
32687                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
32688                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
32689                {
32690                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
32691                }
32692                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
32693                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
32694                }
32695            }
32696
32697            next_offset += envelope_size;
32698            _next_ordinal_to_read += 1;
32699            if next_offset >= end_offset {
32700                return Ok(());
32701            }
32702
32703            // Decode unknown envelopes for gaps in ordinals.
32704            while _next_ordinal_to_read < 7 {
32705                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
32706                _next_ordinal_to_read += 1;
32707                next_offset += envelope_size;
32708            }
32709
32710            let next_out_of_line = decoder.next_out_of_line();
32711            let handles_before = decoder.remaining_handles();
32712            if let Some((inlined, num_bytes, num_handles)) =
32713                fidl::encoding::decode_envelope_header(decoder, next_offset)?
32714            {
32715                let member_inline_size =
32716                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
32717                if inlined != (member_inline_size <= 4) {
32718                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
32719                }
32720                let inner_offset;
32721                let mut inner_depth = depth.clone();
32722                if inlined {
32723                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
32724                    inner_offset = next_offset;
32725                } else {
32726                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
32727                    inner_depth.increment()?;
32728                }
32729                let val_ref = self.old_path_cost.get_or_insert_with(|| fidl::new_empty!(u8, D));
32730                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
32731                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
32732                {
32733                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
32734                }
32735                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
32736                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
32737                }
32738            }
32739
32740            next_offset += envelope_size;
32741            _next_ordinal_to_read += 1;
32742            if next_offset >= end_offset {
32743                return Ok(());
32744            }
32745
32746            // Decode unknown envelopes for gaps in ordinals.
32747            while _next_ordinal_to_read < 8 {
32748                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
32749                _next_ordinal_to_read += 1;
32750                next_offset += envelope_size;
32751            }
32752
32753            let next_out_of_line = decoder.next_out_of_line();
32754            let handles_before = decoder.remaining_handles();
32755            if let Some((inlined, num_bytes, num_handles)) =
32756                fidl::encoding::decode_envelope_header(decoder, next_offset)?
32757            {
32758                let member_inline_size =
32759                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
32760                if inlined != (member_inline_size <= 4) {
32761                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
32762                }
32763                let inner_offset;
32764                let mut inner_depth = depth.clone();
32765                if inlined {
32766                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
32767                    inner_offset = next_offset;
32768                } else {
32769                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
32770                    inner_depth.increment()?;
32771                }
32772                let val_ref = self.new_path_cost.get_or_insert_with(|| fidl::new_empty!(u8, D));
32773                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
32774                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
32775                {
32776                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
32777                }
32778                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
32779                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
32780                }
32781            }
32782
32783            next_offset += envelope_size;
32784
32785            // Decode the remaining unknown envelopes.
32786            while next_offset < end_offset {
32787                _next_ordinal_to_read += 1;
32788                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
32789                next_offset += envelope_size;
32790            }
32791
32792            Ok(())
32793        }
32794    }
32795
32796    impl TrelCounters {
32797        #[inline(always)]
32798        fn max_ordinal_present(&self) -> u64 {
32799            if let Some(_) = self.tx_packets {
32800                return 5;
32801            }
32802            if let Some(_) = self.tx_failure {
32803                return 4;
32804            }
32805            if let Some(_) = self.tx_bytes {
32806                return 3;
32807            }
32808            if let Some(_) = self.rx_packets {
32809                return 2;
32810            }
32811            if let Some(_) = self.rx_bytes {
32812                return 1;
32813            }
32814            0
32815        }
32816    }
32817
32818    impl fidl::encoding::ValueTypeMarker for TrelCounters {
32819        type Borrowed<'a> = &'a Self;
32820        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
32821            value
32822        }
32823    }
32824
32825    unsafe impl fidl::encoding::TypeMarker for TrelCounters {
32826        type Owned = Self;
32827
32828        #[inline(always)]
32829        fn inline_align(_context: fidl::encoding::Context) -> usize {
32830            8
32831        }
32832
32833        #[inline(always)]
32834        fn inline_size(_context: fidl::encoding::Context) -> usize {
32835            16
32836        }
32837    }
32838
32839    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<TrelCounters, D>
32840        for &TrelCounters
32841    {
32842        unsafe fn encode(
32843            self,
32844            encoder: &mut fidl::encoding::Encoder<'_, D>,
32845            offset: usize,
32846            mut depth: fidl::encoding::Depth,
32847        ) -> fidl::Result<()> {
32848            encoder.debug_check_bounds::<TrelCounters>(offset);
32849            // Vector header
32850            let max_ordinal: u64 = self.max_ordinal_present();
32851            encoder.write_num(max_ordinal, offset);
32852            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
32853            // Calling encoder.out_of_line_offset(0) is not allowed.
32854            if max_ordinal == 0 {
32855                return Ok(());
32856            }
32857            depth.increment()?;
32858            let envelope_size = 8;
32859            let bytes_len = max_ordinal as usize * envelope_size;
32860            #[allow(unused_variables)]
32861            let offset = encoder.out_of_line_offset(bytes_len);
32862            let mut _prev_end_offset: usize = 0;
32863            if 1 > max_ordinal {
32864                return Ok(());
32865            }
32866
32867            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
32868            // are envelope_size bytes.
32869            let cur_offset: usize = (1 - 1) * envelope_size;
32870
32871            // Zero reserved fields.
32872            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
32873
32874            // Safety:
32875            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
32876            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
32877            //   envelope_size bytes, there is always sufficient room.
32878            fidl::encoding::encode_in_envelope_optional::<u64, D>(
32879                self.rx_bytes.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
32880                encoder,
32881                offset + cur_offset,
32882                depth,
32883            )?;
32884
32885            _prev_end_offset = cur_offset + envelope_size;
32886            if 2 > max_ordinal {
32887                return Ok(());
32888            }
32889
32890            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
32891            // are envelope_size bytes.
32892            let cur_offset: usize = (2 - 1) * envelope_size;
32893
32894            // Zero reserved fields.
32895            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
32896
32897            // Safety:
32898            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
32899            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
32900            //   envelope_size bytes, there is always sufficient room.
32901            fidl::encoding::encode_in_envelope_optional::<u64, D>(
32902                self.rx_packets.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
32903                encoder,
32904                offset + cur_offset,
32905                depth,
32906            )?;
32907
32908            _prev_end_offset = cur_offset + envelope_size;
32909            if 3 > max_ordinal {
32910                return Ok(());
32911            }
32912
32913            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
32914            // are envelope_size bytes.
32915            let cur_offset: usize = (3 - 1) * envelope_size;
32916
32917            // Zero reserved fields.
32918            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
32919
32920            // Safety:
32921            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
32922            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
32923            //   envelope_size bytes, there is always sufficient room.
32924            fidl::encoding::encode_in_envelope_optional::<u64, D>(
32925                self.tx_bytes.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
32926                encoder,
32927                offset + cur_offset,
32928                depth,
32929            )?;
32930
32931            _prev_end_offset = cur_offset + envelope_size;
32932            if 4 > max_ordinal {
32933                return Ok(());
32934            }
32935
32936            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
32937            // are envelope_size bytes.
32938            let cur_offset: usize = (4 - 1) * envelope_size;
32939
32940            // Zero reserved fields.
32941            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
32942
32943            // Safety:
32944            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
32945            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
32946            //   envelope_size bytes, there is always sufficient room.
32947            fidl::encoding::encode_in_envelope_optional::<u64, D>(
32948                self.tx_failure.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
32949                encoder,
32950                offset + cur_offset,
32951                depth,
32952            )?;
32953
32954            _prev_end_offset = cur_offset + envelope_size;
32955            if 5 > max_ordinal {
32956                return Ok(());
32957            }
32958
32959            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
32960            // are envelope_size bytes.
32961            let cur_offset: usize = (5 - 1) * envelope_size;
32962
32963            // Zero reserved fields.
32964            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
32965
32966            // Safety:
32967            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
32968            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
32969            //   envelope_size bytes, there is always sufficient room.
32970            fidl::encoding::encode_in_envelope_optional::<u64, D>(
32971                self.tx_packets.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
32972                encoder,
32973                offset + cur_offset,
32974                depth,
32975            )?;
32976
32977            _prev_end_offset = cur_offset + envelope_size;
32978
32979            Ok(())
32980        }
32981    }
32982
32983    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for TrelCounters {
32984        #[inline(always)]
32985        fn new_empty() -> Self {
32986            Self::default()
32987        }
32988
32989        unsafe fn decode(
32990            &mut self,
32991            decoder: &mut fidl::encoding::Decoder<'_, D>,
32992            offset: usize,
32993            mut depth: fidl::encoding::Depth,
32994        ) -> fidl::Result<()> {
32995            decoder.debug_check_bounds::<Self>(offset);
32996            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
32997                None => return Err(fidl::Error::NotNullable),
32998                Some(len) => len,
32999            };
33000            // Calling decoder.out_of_line_offset(0) is not allowed.
33001            if len == 0 {
33002                return Ok(());
33003            };
33004            depth.increment()?;
33005            let envelope_size = 8;
33006            let bytes_len = len * envelope_size;
33007            let offset = decoder.out_of_line_offset(bytes_len)?;
33008            // Decode the envelope for each type.
33009            let mut _next_ordinal_to_read = 0;
33010            let mut next_offset = offset;
33011            let end_offset = offset + bytes_len;
33012            _next_ordinal_to_read += 1;
33013            if next_offset >= end_offset {
33014                return Ok(());
33015            }
33016
33017            // Decode unknown envelopes for gaps in ordinals.
33018            while _next_ordinal_to_read < 1 {
33019                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
33020                _next_ordinal_to_read += 1;
33021                next_offset += envelope_size;
33022            }
33023
33024            let next_out_of_line = decoder.next_out_of_line();
33025            let handles_before = decoder.remaining_handles();
33026            if let Some((inlined, num_bytes, num_handles)) =
33027                fidl::encoding::decode_envelope_header(decoder, next_offset)?
33028            {
33029                let member_inline_size =
33030                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
33031                if inlined != (member_inline_size <= 4) {
33032                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
33033                }
33034                let inner_offset;
33035                let mut inner_depth = depth.clone();
33036                if inlined {
33037                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
33038                    inner_offset = next_offset;
33039                } else {
33040                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
33041                    inner_depth.increment()?;
33042                }
33043                let val_ref = self.rx_bytes.get_or_insert_with(|| fidl::new_empty!(u64, D));
33044                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
33045                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
33046                {
33047                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
33048                }
33049                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
33050                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
33051                }
33052            }
33053
33054            next_offset += envelope_size;
33055            _next_ordinal_to_read += 1;
33056            if next_offset >= end_offset {
33057                return Ok(());
33058            }
33059
33060            // Decode unknown envelopes for gaps in ordinals.
33061            while _next_ordinal_to_read < 2 {
33062                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
33063                _next_ordinal_to_read += 1;
33064                next_offset += envelope_size;
33065            }
33066
33067            let next_out_of_line = decoder.next_out_of_line();
33068            let handles_before = decoder.remaining_handles();
33069            if let Some((inlined, num_bytes, num_handles)) =
33070                fidl::encoding::decode_envelope_header(decoder, next_offset)?
33071            {
33072                let member_inline_size =
33073                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
33074                if inlined != (member_inline_size <= 4) {
33075                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
33076                }
33077                let inner_offset;
33078                let mut inner_depth = depth.clone();
33079                if inlined {
33080                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
33081                    inner_offset = next_offset;
33082                } else {
33083                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
33084                    inner_depth.increment()?;
33085                }
33086                let val_ref = self.rx_packets.get_or_insert_with(|| fidl::new_empty!(u64, D));
33087                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
33088                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
33089                {
33090                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
33091                }
33092                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
33093                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
33094                }
33095            }
33096
33097            next_offset += envelope_size;
33098            _next_ordinal_to_read += 1;
33099            if next_offset >= end_offset {
33100                return Ok(());
33101            }
33102
33103            // Decode unknown envelopes for gaps in ordinals.
33104            while _next_ordinal_to_read < 3 {
33105                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
33106                _next_ordinal_to_read += 1;
33107                next_offset += envelope_size;
33108            }
33109
33110            let next_out_of_line = decoder.next_out_of_line();
33111            let handles_before = decoder.remaining_handles();
33112            if let Some((inlined, num_bytes, num_handles)) =
33113                fidl::encoding::decode_envelope_header(decoder, next_offset)?
33114            {
33115                let member_inline_size =
33116                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
33117                if inlined != (member_inline_size <= 4) {
33118                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
33119                }
33120                let inner_offset;
33121                let mut inner_depth = depth.clone();
33122                if inlined {
33123                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
33124                    inner_offset = next_offset;
33125                } else {
33126                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
33127                    inner_depth.increment()?;
33128                }
33129                let val_ref = self.tx_bytes.get_or_insert_with(|| fidl::new_empty!(u64, D));
33130                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
33131                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
33132                {
33133                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
33134                }
33135                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
33136                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
33137                }
33138            }
33139
33140            next_offset += envelope_size;
33141            _next_ordinal_to_read += 1;
33142            if next_offset >= end_offset {
33143                return Ok(());
33144            }
33145
33146            // Decode unknown envelopes for gaps in ordinals.
33147            while _next_ordinal_to_read < 4 {
33148                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
33149                _next_ordinal_to_read += 1;
33150                next_offset += envelope_size;
33151            }
33152
33153            let next_out_of_line = decoder.next_out_of_line();
33154            let handles_before = decoder.remaining_handles();
33155            if let Some((inlined, num_bytes, num_handles)) =
33156                fidl::encoding::decode_envelope_header(decoder, next_offset)?
33157            {
33158                let member_inline_size =
33159                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
33160                if inlined != (member_inline_size <= 4) {
33161                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
33162                }
33163                let inner_offset;
33164                let mut inner_depth = depth.clone();
33165                if inlined {
33166                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
33167                    inner_offset = next_offset;
33168                } else {
33169                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
33170                    inner_depth.increment()?;
33171                }
33172                let val_ref = self.tx_failure.get_or_insert_with(|| fidl::new_empty!(u64, D));
33173                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
33174                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
33175                {
33176                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
33177                }
33178                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
33179                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
33180                }
33181            }
33182
33183            next_offset += envelope_size;
33184            _next_ordinal_to_read += 1;
33185            if next_offset >= end_offset {
33186                return Ok(());
33187            }
33188
33189            // Decode unknown envelopes for gaps in ordinals.
33190            while _next_ordinal_to_read < 5 {
33191                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
33192                _next_ordinal_to_read += 1;
33193                next_offset += envelope_size;
33194            }
33195
33196            let next_out_of_line = decoder.next_out_of_line();
33197            let handles_before = decoder.remaining_handles();
33198            if let Some((inlined, num_bytes, num_handles)) =
33199                fidl::encoding::decode_envelope_header(decoder, next_offset)?
33200            {
33201                let member_inline_size =
33202                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
33203                if inlined != (member_inline_size <= 4) {
33204                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
33205                }
33206                let inner_offset;
33207                let mut inner_depth = depth.clone();
33208                if inlined {
33209                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
33210                    inner_offset = next_offset;
33211                } else {
33212                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
33213                    inner_depth.increment()?;
33214                }
33215                let val_ref = self.tx_packets.get_or_insert_with(|| fidl::new_empty!(u64, D));
33216                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
33217                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
33218                {
33219                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
33220                }
33221                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
33222                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
33223                }
33224            }
33225
33226            next_offset += envelope_size;
33227
33228            // Decode the remaining unknown envelopes.
33229            while next_offset < end_offset {
33230                _next_ordinal_to_read += 1;
33231                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
33232                next_offset += envelope_size;
33233            }
33234
33235            Ok(())
33236        }
33237    }
33238
33239    impl TrelPeer {
33240        #[inline(always)]
33241        fn max_ordinal_present(&self) -> u64 {
33242            if let Some(_) = self.sock_address {
33243                return 3;
33244            }
33245            if let Some(_) = self.extended_pan_id {
33246                return 2;
33247            }
33248            if let Some(_) = self.extended_address {
33249                return 1;
33250            }
33251            0
33252        }
33253    }
33254
33255    impl fidl::encoding::ValueTypeMarker for TrelPeer {
33256        type Borrowed<'a> = &'a Self;
33257        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
33258            value
33259        }
33260    }
33261
33262    unsafe impl fidl::encoding::TypeMarker for TrelPeer {
33263        type Owned = Self;
33264
33265        #[inline(always)]
33266        fn inline_align(_context: fidl::encoding::Context) -> usize {
33267            8
33268        }
33269
33270        #[inline(always)]
33271        fn inline_size(_context: fidl::encoding::Context) -> usize {
33272            16
33273        }
33274    }
33275
33276    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<TrelPeer, D> for &TrelPeer {
33277        unsafe fn encode(
33278            self,
33279            encoder: &mut fidl::encoding::Encoder<'_, D>,
33280            offset: usize,
33281            mut depth: fidl::encoding::Depth,
33282        ) -> fidl::Result<()> {
33283            encoder.debug_check_bounds::<TrelPeer>(offset);
33284            // Vector header
33285            let max_ordinal: u64 = self.max_ordinal_present();
33286            encoder.write_num(max_ordinal, offset);
33287            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
33288            // Calling encoder.out_of_line_offset(0) is not allowed.
33289            if max_ordinal == 0 {
33290                return Ok(());
33291            }
33292            depth.increment()?;
33293            let envelope_size = 8;
33294            let bytes_len = max_ordinal as usize * envelope_size;
33295            #[allow(unused_variables)]
33296            let offset = encoder.out_of_line_offset(bytes_len);
33297            let mut _prev_end_offset: usize = 0;
33298            if 1 > max_ordinal {
33299                return Ok(());
33300            }
33301
33302            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
33303            // are envelope_size bytes.
33304            let cur_offset: usize = (1 - 1) * envelope_size;
33305
33306            // Zero reserved fields.
33307            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
33308
33309            // Safety:
33310            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
33311            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
33312            //   envelope_size bytes, there is always sufficient room.
33313            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u8, 8>, D>(
33314                self.extended_address.as_ref().map(
33315                    <fidl::encoding::Vector<u8, 8> as fidl::encoding::ValueTypeMarker>::borrow,
33316                ),
33317                encoder,
33318                offset + cur_offset,
33319                depth,
33320            )?;
33321
33322            _prev_end_offset = cur_offset + envelope_size;
33323            if 2 > max_ordinal {
33324                return Ok(());
33325            }
33326
33327            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
33328            // are envelope_size bytes.
33329            let cur_offset: usize = (2 - 1) * envelope_size;
33330
33331            // Zero reserved fields.
33332            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
33333
33334            // Safety:
33335            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
33336            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
33337            //   envelope_size bytes, there is always sufficient room.
33338            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u8, 8>, D>(
33339                self.extended_pan_id.as_ref().map(
33340                    <fidl::encoding::Vector<u8, 8> as fidl::encoding::ValueTypeMarker>::borrow,
33341                ),
33342                encoder,
33343                offset + cur_offset,
33344                depth,
33345            )?;
33346
33347            _prev_end_offset = cur_offset + envelope_size;
33348            if 3 > max_ordinal {
33349                return Ok(());
33350            }
33351
33352            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
33353            // are envelope_size bytes.
33354            let cur_offset: usize = (3 - 1) * envelope_size;
33355
33356            // Zero reserved fields.
33357            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
33358
33359            // Safety:
33360            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
33361            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
33362            //   envelope_size bytes, there is always sufficient room.
33363            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<48>, D>(
33364                self.sock_address.as_ref().map(
33365                    <fidl::encoding::BoundedString<48> as fidl::encoding::ValueTypeMarker>::borrow,
33366                ),
33367                encoder,
33368                offset + cur_offset,
33369                depth,
33370            )?;
33371
33372            _prev_end_offset = cur_offset + envelope_size;
33373
33374            Ok(())
33375        }
33376    }
33377
33378    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for TrelPeer {
33379        #[inline(always)]
33380        fn new_empty() -> Self {
33381            Self::default()
33382        }
33383
33384        unsafe fn decode(
33385            &mut self,
33386            decoder: &mut fidl::encoding::Decoder<'_, D>,
33387            offset: usize,
33388            mut depth: fidl::encoding::Depth,
33389        ) -> fidl::Result<()> {
33390            decoder.debug_check_bounds::<Self>(offset);
33391            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
33392                None => return Err(fidl::Error::NotNullable),
33393                Some(len) => len,
33394            };
33395            // Calling decoder.out_of_line_offset(0) is not allowed.
33396            if len == 0 {
33397                return Ok(());
33398            };
33399            depth.increment()?;
33400            let envelope_size = 8;
33401            let bytes_len = len * envelope_size;
33402            let offset = decoder.out_of_line_offset(bytes_len)?;
33403            // Decode the envelope for each type.
33404            let mut _next_ordinal_to_read = 0;
33405            let mut next_offset = offset;
33406            let end_offset = offset + bytes_len;
33407            _next_ordinal_to_read += 1;
33408            if next_offset >= end_offset {
33409                return Ok(());
33410            }
33411
33412            // Decode unknown envelopes for gaps in ordinals.
33413            while _next_ordinal_to_read < 1 {
33414                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
33415                _next_ordinal_to_read += 1;
33416                next_offset += envelope_size;
33417            }
33418
33419            let next_out_of_line = decoder.next_out_of_line();
33420            let handles_before = decoder.remaining_handles();
33421            if let Some((inlined, num_bytes, num_handles)) =
33422                fidl::encoding::decode_envelope_header(decoder, next_offset)?
33423            {
33424                let member_inline_size =
33425                    <fidl::encoding::Vector<u8, 8> as fidl::encoding::TypeMarker>::inline_size(
33426                        decoder.context,
33427                    );
33428                if inlined != (member_inline_size <= 4) {
33429                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
33430                }
33431                let inner_offset;
33432                let mut inner_depth = depth.clone();
33433                if inlined {
33434                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
33435                    inner_offset = next_offset;
33436                } else {
33437                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
33438                    inner_depth.increment()?;
33439                }
33440                let val_ref = self
33441                    .extended_address
33442                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u8, 8>, D));
33443                fidl::decode!(fidl::encoding::Vector<u8, 8>, D, val_ref, decoder, inner_offset, inner_depth)?;
33444                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
33445                {
33446                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
33447                }
33448                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
33449                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
33450                }
33451            }
33452
33453            next_offset += envelope_size;
33454            _next_ordinal_to_read += 1;
33455            if next_offset >= end_offset {
33456                return Ok(());
33457            }
33458
33459            // Decode unknown envelopes for gaps in ordinals.
33460            while _next_ordinal_to_read < 2 {
33461                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
33462                _next_ordinal_to_read += 1;
33463                next_offset += envelope_size;
33464            }
33465
33466            let next_out_of_line = decoder.next_out_of_line();
33467            let handles_before = decoder.remaining_handles();
33468            if let Some((inlined, num_bytes, num_handles)) =
33469                fidl::encoding::decode_envelope_header(decoder, next_offset)?
33470            {
33471                let member_inline_size =
33472                    <fidl::encoding::Vector<u8, 8> as fidl::encoding::TypeMarker>::inline_size(
33473                        decoder.context,
33474                    );
33475                if inlined != (member_inline_size <= 4) {
33476                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
33477                }
33478                let inner_offset;
33479                let mut inner_depth = depth.clone();
33480                if inlined {
33481                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
33482                    inner_offset = next_offset;
33483                } else {
33484                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
33485                    inner_depth.increment()?;
33486                }
33487                let val_ref = self
33488                    .extended_pan_id
33489                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u8, 8>, D));
33490                fidl::decode!(fidl::encoding::Vector<u8, 8>, D, val_ref, decoder, inner_offset, inner_depth)?;
33491                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
33492                {
33493                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
33494                }
33495                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
33496                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
33497                }
33498            }
33499
33500            next_offset += envelope_size;
33501            _next_ordinal_to_read += 1;
33502            if next_offset >= end_offset {
33503                return Ok(());
33504            }
33505
33506            // Decode unknown envelopes for gaps in ordinals.
33507            while _next_ordinal_to_read < 3 {
33508                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
33509                _next_ordinal_to_read += 1;
33510                next_offset += envelope_size;
33511            }
33512
33513            let next_out_of_line = decoder.next_out_of_line();
33514            let handles_before = decoder.remaining_handles();
33515            if let Some((inlined, num_bytes, num_handles)) =
33516                fidl::encoding::decode_envelope_header(decoder, next_offset)?
33517            {
33518                let member_inline_size =
33519                    <fidl::encoding::BoundedString<48> as fidl::encoding::TypeMarker>::inline_size(
33520                        decoder.context,
33521                    );
33522                if inlined != (member_inline_size <= 4) {
33523                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
33524                }
33525                let inner_offset;
33526                let mut inner_depth = depth.clone();
33527                if inlined {
33528                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
33529                    inner_offset = next_offset;
33530                } else {
33531                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
33532                    inner_depth.increment()?;
33533                }
33534                let val_ref = self
33535                    .sock_address
33536                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<48>, D));
33537                fidl::decode!(
33538                    fidl::encoding::BoundedString<48>,
33539                    D,
33540                    val_ref,
33541                    decoder,
33542                    inner_offset,
33543                    inner_depth
33544                )?;
33545                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
33546                {
33547                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
33548                }
33549                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
33550                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
33551                }
33552            }
33553
33554            next_offset += envelope_size;
33555
33556            // Decode the remaining unknown envelopes.
33557            while next_offset < end_offset {
33558                _next_ordinal_to_read += 1;
33559                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
33560                next_offset += envelope_size;
33561            }
33562
33563            Ok(())
33564        }
33565    }
33566
33567    impl TrelPeersInfo {
33568        #[inline(always)]
33569        fn max_ordinal_present(&self) -> u64 {
33570            if let Some(_) = self.trel_peers {
33571                return 2;
33572            }
33573            if let Some(_) = self.num_trel_peers {
33574                return 1;
33575            }
33576            0
33577        }
33578    }
33579
33580    impl fidl::encoding::ValueTypeMarker for TrelPeersInfo {
33581        type Borrowed<'a> = &'a Self;
33582        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
33583            value
33584        }
33585    }
33586
33587    unsafe impl fidl::encoding::TypeMarker for TrelPeersInfo {
33588        type Owned = Self;
33589
33590        #[inline(always)]
33591        fn inline_align(_context: fidl::encoding::Context) -> usize {
33592            8
33593        }
33594
33595        #[inline(always)]
33596        fn inline_size(_context: fidl::encoding::Context) -> usize {
33597            16
33598        }
33599    }
33600
33601    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<TrelPeersInfo, D>
33602        for &TrelPeersInfo
33603    {
33604        unsafe fn encode(
33605            self,
33606            encoder: &mut fidl::encoding::Encoder<'_, D>,
33607            offset: usize,
33608            mut depth: fidl::encoding::Depth,
33609        ) -> fidl::Result<()> {
33610            encoder.debug_check_bounds::<TrelPeersInfo>(offset);
33611            // Vector header
33612            let max_ordinal: u64 = self.max_ordinal_present();
33613            encoder.write_num(max_ordinal, offset);
33614            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
33615            // Calling encoder.out_of_line_offset(0) is not allowed.
33616            if max_ordinal == 0 {
33617                return Ok(());
33618            }
33619            depth.increment()?;
33620            let envelope_size = 8;
33621            let bytes_len = max_ordinal as usize * envelope_size;
33622            #[allow(unused_variables)]
33623            let offset = encoder.out_of_line_offset(bytes_len);
33624            let mut _prev_end_offset: usize = 0;
33625            if 1 > max_ordinal {
33626                return Ok(());
33627            }
33628
33629            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
33630            // are envelope_size bytes.
33631            let cur_offset: usize = (1 - 1) * envelope_size;
33632
33633            // Zero reserved fields.
33634            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
33635
33636            // Safety:
33637            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
33638            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
33639            //   envelope_size bytes, there is always sufficient room.
33640            fidl::encoding::encode_in_envelope_optional::<u16, D>(
33641                self.num_trel_peers.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
33642                encoder,
33643                offset + cur_offset,
33644                depth,
33645            )?;
33646
33647            _prev_end_offset = cur_offset + envelope_size;
33648            if 2 > max_ordinal {
33649                return Ok(());
33650            }
33651
33652            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
33653            // are envelope_size bytes.
33654            let cur_offset: usize = (2 - 1) * envelope_size;
33655
33656            // Zero reserved fields.
33657            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
33658
33659            // Safety:
33660            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
33661            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
33662            //   envelope_size bytes, there is always sufficient room.
33663            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<TrelPeer, 64>, D>(
33664            self.trel_peers.as_ref().map(<fidl::encoding::Vector<TrelPeer, 64> as fidl::encoding::ValueTypeMarker>::borrow),
33665            encoder, offset + cur_offset, depth
33666        )?;
33667
33668            _prev_end_offset = cur_offset + envelope_size;
33669
33670            Ok(())
33671        }
33672    }
33673
33674    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for TrelPeersInfo {
33675        #[inline(always)]
33676        fn new_empty() -> Self {
33677            Self::default()
33678        }
33679
33680        unsafe fn decode(
33681            &mut self,
33682            decoder: &mut fidl::encoding::Decoder<'_, D>,
33683            offset: usize,
33684            mut depth: fidl::encoding::Depth,
33685        ) -> fidl::Result<()> {
33686            decoder.debug_check_bounds::<Self>(offset);
33687            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
33688                None => return Err(fidl::Error::NotNullable),
33689                Some(len) => len,
33690            };
33691            // Calling decoder.out_of_line_offset(0) is not allowed.
33692            if len == 0 {
33693                return Ok(());
33694            };
33695            depth.increment()?;
33696            let envelope_size = 8;
33697            let bytes_len = len * envelope_size;
33698            let offset = decoder.out_of_line_offset(bytes_len)?;
33699            // Decode the envelope for each type.
33700            let mut _next_ordinal_to_read = 0;
33701            let mut next_offset = offset;
33702            let end_offset = offset + bytes_len;
33703            _next_ordinal_to_read += 1;
33704            if next_offset >= end_offset {
33705                return Ok(());
33706            }
33707
33708            // Decode unknown envelopes for gaps in ordinals.
33709            while _next_ordinal_to_read < 1 {
33710                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
33711                _next_ordinal_to_read += 1;
33712                next_offset += envelope_size;
33713            }
33714
33715            let next_out_of_line = decoder.next_out_of_line();
33716            let handles_before = decoder.remaining_handles();
33717            if let Some((inlined, num_bytes, num_handles)) =
33718                fidl::encoding::decode_envelope_header(decoder, next_offset)?
33719            {
33720                let member_inline_size =
33721                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
33722                if inlined != (member_inline_size <= 4) {
33723                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
33724                }
33725                let inner_offset;
33726                let mut inner_depth = depth.clone();
33727                if inlined {
33728                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
33729                    inner_offset = next_offset;
33730                } else {
33731                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
33732                    inner_depth.increment()?;
33733                }
33734                let val_ref = self.num_trel_peers.get_or_insert_with(|| fidl::new_empty!(u16, D));
33735                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
33736                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
33737                {
33738                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
33739                }
33740                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
33741                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
33742                }
33743            }
33744
33745            next_offset += envelope_size;
33746            _next_ordinal_to_read += 1;
33747            if next_offset >= end_offset {
33748                return Ok(());
33749            }
33750
33751            // Decode unknown envelopes for gaps in ordinals.
33752            while _next_ordinal_to_read < 2 {
33753                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
33754                _next_ordinal_to_read += 1;
33755                next_offset += envelope_size;
33756            }
33757
33758            let next_out_of_line = decoder.next_out_of_line();
33759            let handles_before = decoder.remaining_handles();
33760            if let Some((inlined, num_bytes, num_handles)) =
33761                fidl::encoding::decode_envelope_header(decoder, next_offset)?
33762            {
33763                let member_inline_size = <fidl::encoding::Vector<TrelPeer, 64> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
33764                if inlined != (member_inline_size <= 4) {
33765                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
33766                }
33767                let inner_offset;
33768                let mut inner_depth = depth.clone();
33769                if inlined {
33770                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
33771                    inner_offset = next_offset;
33772                } else {
33773                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
33774                    inner_depth.increment()?;
33775                }
33776                let val_ref = self.trel_peers.get_or_insert_with(
33777                    || fidl::new_empty!(fidl::encoding::Vector<TrelPeer, 64>, D),
33778                );
33779                fidl::decode!(fidl::encoding::Vector<TrelPeer, 64>, D, val_ref, decoder, inner_offset, inner_depth)?;
33780                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
33781                {
33782                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
33783                }
33784                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
33785                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
33786                }
33787            }
33788
33789            next_offset += envelope_size;
33790
33791            // Decode the remaining unknown envelopes.
33792            while next_offset < end_offset {
33793                _next_ordinal_to_read += 1;
33794                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
33795                next_offset += envelope_size;
33796            }
33797
33798            Ok(())
33799        }
33800    }
33801
33802    impl UdpSocket {
33803        #[inline(always)]
33804        fn max_ordinal_present(&self) -> u64 {
33805            if let Some(_) = self.peer_name {
33806                return 2;
33807            }
33808            if let Some(_) = self.sock_name {
33809                return 1;
33810            }
33811            0
33812        }
33813    }
33814
33815    impl fidl::encoding::ValueTypeMarker for UdpSocket {
33816        type Borrowed<'a> = &'a Self;
33817        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
33818            value
33819        }
33820    }
33821
33822    unsafe impl fidl::encoding::TypeMarker for UdpSocket {
33823        type Owned = Self;
33824
33825        #[inline(always)]
33826        fn inline_align(_context: fidl::encoding::Context) -> usize {
33827            8
33828        }
33829
33830        #[inline(always)]
33831        fn inline_size(_context: fidl::encoding::Context) -> usize {
33832            16
33833        }
33834    }
33835
33836    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<UdpSocket, D>
33837        for &UdpSocket
33838    {
33839        unsafe fn encode(
33840            self,
33841            encoder: &mut fidl::encoding::Encoder<'_, D>,
33842            offset: usize,
33843            mut depth: fidl::encoding::Depth,
33844        ) -> fidl::Result<()> {
33845            encoder.debug_check_bounds::<UdpSocket>(offset);
33846            // Vector header
33847            let max_ordinal: u64 = self.max_ordinal_present();
33848            encoder.write_num(max_ordinal, offset);
33849            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
33850            // Calling encoder.out_of_line_offset(0) is not allowed.
33851            if max_ordinal == 0 {
33852                return Ok(());
33853            }
33854            depth.increment()?;
33855            let envelope_size = 8;
33856            let bytes_len = max_ordinal as usize * envelope_size;
33857            #[allow(unused_variables)]
33858            let offset = encoder.out_of_line_offset(bytes_len);
33859            let mut _prev_end_offset: usize = 0;
33860            if 1 > max_ordinal {
33861                return Ok(());
33862            }
33863
33864            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
33865            // are envelope_size bytes.
33866            let cur_offset: usize = (1 - 1) * envelope_size;
33867
33868            // Zero reserved fields.
33869            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
33870
33871            // Safety:
33872            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
33873            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
33874            //   envelope_size bytes, there is always sufficient room.
33875            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<48>, D>(
33876                self.sock_name.as_ref().map(
33877                    <fidl::encoding::BoundedString<48> as fidl::encoding::ValueTypeMarker>::borrow,
33878                ),
33879                encoder,
33880                offset + cur_offset,
33881                depth,
33882            )?;
33883
33884            _prev_end_offset = cur_offset + envelope_size;
33885            if 2 > max_ordinal {
33886                return Ok(());
33887            }
33888
33889            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
33890            // are envelope_size bytes.
33891            let cur_offset: usize = (2 - 1) * envelope_size;
33892
33893            // Zero reserved fields.
33894            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
33895
33896            // Safety:
33897            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
33898            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
33899            //   envelope_size bytes, there is always sufficient room.
33900            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<48>, D>(
33901                self.peer_name.as_ref().map(
33902                    <fidl::encoding::BoundedString<48> as fidl::encoding::ValueTypeMarker>::borrow,
33903                ),
33904                encoder,
33905                offset + cur_offset,
33906                depth,
33907            )?;
33908
33909            _prev_end_offset = cur_offset + envelope_size;
33910
33911            Ok(())
33912        }
33913    }
33914
33915    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for UdpSocket {
33916        #[inline(always)]
33917        fn new_empty() -> Self {
33918            Self::default()
33919        }
33920
33921        unsafe fn decode(
33922            &mut self,
33923            decoder: &mut fidl::encoding::Decoder<'_, D>,
33924            offset: usize,
33925            mut depth: fidl::encoding::Depth,
33926        ) -> fidl::Result<()> {
33927            decoder.debug_check_bounds::<Self>(offset);
33928            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
33929                None => return Err(fidl::Error::NotNullable),
33930                Some(len) => len,
33931            };
33932            // Calling decoder.out_of_line_offset(0) is not allowed.
33933            if len == 0 {
33934                return Ok(());
33935            };
33936            depth.increment()?;
33937            let envelope_size = 8;
33938            let bytes_len = len * envelope_size;
33939            let offset = decoder.out_of_line_offset(bytes_len)?;
33940            // Decode the envelope for each type.
33941            let mut _next_ordinal_to_read = 0;
33942            let mut next_offset = offset;
33943            let end_offset = offset + bytes_len;
33944            _next_ordinal_to_read += 1;
33945            if next_offset >= end_offset {
33946                return Ok(());
33947            }
33948
33949            // Decode unknown envelopes for gaps in ordinals.
33950            while _next_ordinal_to_read < 1 {
33951                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
33952                _next_ordinal_to_read += 1;
33953                next_offset += envelope_size;
33954            }
33955
33956            let next_out_of_line = decoder.next_out_of_line();
33957            let handles_before = decoder.remaining_handles();
33958            if let Some((inlined, num_bytes, num_handles)) =
33959                fidl::encoding::decode_envelope_header(decoder, next_offset)?
33960            {
33961                let member_inline_size =
33962                    <fidl::encoding::BoundedString<48> as fidl::encoding::TypeMarker>::inline_size(
33963                        decoder.context,
33964                    );
33965                if inlined != (member_inline_size <= 4) {
33966                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
33967                }
33968                let inner_offset;
33969                let mut inner_depth = depth.clone();
33970                if inlined {
33971                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
33972                    inner_offset = next_offset;
33973                } else {
33974                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
33975                    inner_depth.increment()?;
33976                }
33977                let val_ref = self
33978                    .sock_name
33979                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<48>, D));
33980                fidl::decode!(
33981                    fidl::encoding::BoundedString<48>,
33982                    D,
33983                    val_ref,
33984                    decoder,
33985                    inner_offset,
33986                    inner_depth
33987                )?;
33988                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
33989                {
33990                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
33991                }
33992                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
33993                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
33994                }
33995            }
33996
33997            next_offset += envelope_size;
33998            _next_ordinal_to_read += 1;
33999            if next_offset >= end_offset {
34000                return Ok(());
34001            }
34002
34003            // Decode unknown envelopes for gaps in ordinals.
34004            while _next_ordinal_to_read < 2 {
34005                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
34006                _next_ordinal_to_read += 1;
34007                next_offset += envelope_size;
34008            }
34009
34010            let next_out_of_line = decoder.next_out_of_line();
34011            let handles_before = decoder.remaining_handles();
34012            if let Some((inlined, num_bytes, num_handles)) =
34013                fidl::encoding::decode_envelope_header(decoder, next_offset)?
34014            {
34015                let member_inline_size =
34016                    <fidl::encoding::BoundedString<48> as fidl::encoding::TypeMarker>::inline_size(
34017                        decoder.context,
34018                    );
34019                if inlined != (member_inline_size <= 4) {
34020                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
34021                }
34022                let inner_offset;
34023                let mut inner_depth = depth.clone();
34024                if inlined {
34025                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
34026                    inner_offset = next_offset;
34027                } else {
34028                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
34029                    inner_depth.increment()?;
34030                }
34031                let val_ref = self
34032                    .peer_name
34033                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<48>, D));
34034                fidl::decode!(
34035                    fidl::encoding::BoundedString<48>,
34036                    D,
34037                    val_ref,
34038                    decoder,
34039                    inner_offset,
34040                    inner_depth
34041                )?;
34042                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
34043                {
34044                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
34045                }
34046                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
34047                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
34048                }
34049            }
34050
34051            next_offset += envelope_size;
34052
34053            // Decode the remaining unknown envelopes.
34054            while next_offset < end_offset {
34055                _next_ordinal_to_read += 1;
34056                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
34057                next_offset += envelope_size;
34058            }
34059
34060            Ok(())
34061        }
34062    }
34063
34064    impl UpstreamDnsCounters {
34065        #[inline(always)]
34066        fn max_ordinal_present(&self) -> u64 {
34067            if let Some(_) = self.failures {
34068                return 3;
34069            }
34070            if let Some(_) = self.responses {
34071                return 2;
34072            }
34073            if let Some(_) = self.queries {
34074                return 1;
34075            }
34076            0
34077        }
34078    }
34079
34080    impl fidl::encoding::ValueTypeMarker for UpstreamDnsCounters {
34081        type Borrowed<'a> = &'a Self;
34082        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
34083            value
34084        }
34085    }
34086
34087    unsafe impl fidl::encoding::TypeMarker for UpstreamDnsCounters {
34088        type Owned = Self;
34089
34090        #[inline(always)]
34091        fn inline_align(_context: fidl::encoding::Context) -> usize {
34092            8
34093        }
34094
34095        #[inline(always)]
34096        fn inline_size(_context: fidl::encoding::Context) -> usize {
34097            16
34098        }
34099    }
34100
34101    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<UpstreamDnsCounters, D>
34102        for &UpstreamDnsCounters
34103    {
34104        unsafe fn encode(
34105            self,
34106            encoder: &mut fidl::encoding::Encoder<'_, D>,
34107            offset: usize,
34108            mut depth: fidl::encoding::Depth,
34109        ) -> fidl::Result<()> {
34110            encoder.debug_check_bounds::<UpstreamDnsCounters>(offset);
34111            // Vector header
34112            let max_ordinal: u64 = self.max_ordinal_present();
34113            encoder.write_num(max_ordinal, offset);
34114            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
34115            // Calling encoder.out_of_line_offset(0) is not allowed.
34116            if max_ordinal == 0 {
34117                return Ok(());
34118            }
34119            depth.increment()?;
34120            let envelope_size = 8;
34121            let bytes_len = max_ordinal as usize * envelope_size;
34122            #[allow(unused_variables)]
34123            let offset = encoder.out_of_line_offset(bytes_len);
34124            let mut _prev_end_offset: usize = 0;
34125            if 1 > max_ordinal {
34126                return Ok(());
34127            }
34128
34129            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
34130            // are envelope_size bytes.
34131            let cur_offset: usize = (1 - 1) * envelope_size;
34132
34133            // Zero reserved fields.
34134            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
34135
34136            // Safety:
34137            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
34138            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
34139            //   envelope_size bytes, there is always sufficient room.
34140            fidl::encoding::encode_in_envelope_optional::<u32, D>(
34141                self.queries.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
34142                encoder,
34143                offset + cur_offset,
34144                depth,
34145            )?;
34146
34147            _prev_end_offset = cur_offset + envelope_size;
34148            if 2 > max_ordinal {
34149                return Ok(());
34150            }
34151
34152            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
34153            // are envelope_size bytes.
34154            let cur_offset: usize = (2 - 1) * envelope_size;
34155
34156            // Zero reserved fields.
34157            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
34158
34159            // Safety:
34160            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
34161            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
34162            //   envelope_size bytes, there is always sufficient room.
34163            fidl::encoding::encode_in_envelope_optional::<u32, D>(
34164                self.responses.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
34165                encoder,
34166                offset + cur_offset,
34167                depth,
34168            )?;
34169
34170            _prev_end_offset = cur_offset + envelope_size;
34171            if 3 > max_ordinal {
34172                return Ok(());
34173            }
34174
34175            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
34176            // are envelope_size bytes.
34177            let cur_offset: usize = (3 - 1) * envelope_size;
34178
34179            // Zero reserved fields.
34180            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
34181
34182            // Safety:
34183            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
34184            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
34185            //   envelope_size bytes, there is always sufficient room.
34186            fidl::encoding::encode_in_envelope_optional::<u32, D>(
34187                self.failures.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
34188                encoder,
34189                offset + cur_offset,
34190                depth,
34191            )?;
34192
34193            _prev_end_offset = cur_offset + envelope_size;
34194
34195            Ok(())
34196        }
34197    }
34198
34199    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for UpstreamDnsCounters {
34200        #[inline(always)]
34201        fn new_empty() -> Self {
34202            Self::default()
34203        }
34204
34205        unsafe fn decode(
34206            &mut self,
34207            decoder: &mut fidl::encoding::Decoder<'_, D>,
34208            offset: usize,
34209            mut depth: fidl::encoding::Depth,
34210        ) -> fidl::Result<()> {
34211            decoder.debug_check_bounds::<Self>(offset);
34212            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
34213                None => return Err(fidl::Error::NotNullable),
34214                Some(len) => len,
34215            };
34216            // Calling decoder.out_of_line_offset(0) is not allowed.
34217            if len == 0 {
34218                return Ok(());
34219            };
34220            depth.increment()?;
34221            let envelope_size = 8;
34222            let bytes_len = len * envelope_size;
34223            let offset = decoder.out_of_line_offset(bytes_len)?;
34224            // Decode the envelope for each type.
34225            let mut _next_ordinal_to_read = 0;
34226            let mut next_offset = offset;
34227            let end_offset = offset + bytes_len;
34228            _next_ordinal_to_read += 1;
34229            if next_offset >= end_offset {
34230                return Ok(());
34231            }
34232
34233            // Decode unknown envelopes for gaps in ordinals.
34234            while _next_ordinal_to_read < 1 {
34235                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
34236                _next_ordinal_to_read += 1;
34237                next_offset += envelope_size;
34238            }
34239
34240            let next_out_of_line = decoder.next_out_of_line();
34241            let handles_before = decoder.remaining_handles();
34242            if let Some((inlined, num_bytes, num_handles)) =
34243                fidl::encoding::decode_envelope_header(decoder, next_offset)?
34244            {
34245                let member_inline_size =
34246                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
34247                if inlined != (member_inline_size <= 4) {
34248                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
34249                }
34250                let inner_offset;
34251                let mut inner_depth = depth.clone();
34252                if inlined {
34253                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
34254                    inner_offset = next_offset;
34255                } else {
34256                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
34257                    inner_depth.increment()?;
34258                }
34259                let val_ref = self.queries.get_or_insert_with(|| fidl::new_empty!(u32, D));
34260                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
34261                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
34262                {
34263                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
34264                }
34265                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
34266                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
34267                }
34268            }
34269
34270            next_offset += envelope_size;
34271            _next_ordinal_to_read += 1;
34272            if next_offset >= end_offset {
34273                return Ok(());
34274            }
34275
34276            // Decode unknown envelopes for gaps in ordinals.
34277            while _next_ordinal_to_read < 2 {
34278                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
34279                _next_ordinal_to_read += 1;
34280                next_offset += envelope_size;
34281            }
34282
34283            let next_out_of_line = decoder.next_out_of_line();
34284            let handles_before = decoder.remaining_handles();
34285            if let Some((inlined, num_bytes, num_handles)) =
34286                fidl::encoding::decode_envelope_header(decoder, next_offset)?
34287            {
34288                let member_inline_size =
34289                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
34290                if inlined != (member_inline_size <= 4) {
34291                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
34292                }
34293                let inner_offset;
34294                let mut inner_depth = depth.clone();
34295                if inlined {
34296                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
34297                    inner_offset = next_offset;
34298                } else {
34299                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
34300                    inner_depth.increment()?;
34301                }
34302                let val_ref = self.responses.get_or_insert_with(|| fidl::new_empty!(u32, D));
34303                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
34304                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
34305                {
34306                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
34307                }
34308                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
34309                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
34310                }
34311            }
34312
34313            next_offset += envelope_size;
34314            _next_ordinal_to_read += 1;
34315            if next_offset >= end_offset {
34316                return Ok(());
34317            }
34318
34319            // Decode unknown envelopes for gaps in ordinals.
34320            while _next_ordinal_to_read < 3 {
34321                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
34322                _next_ordinal_to_read += 1;
34323                next_offset += envelope_size;
34324            }
34325
34326            let next_out_of_line = decoder.next_out_of_line();
34327            let handles_before = decoder.remaining_handles();
34328            if let Some((inlined, num_bytes, num_handles)) =
34329                fidl::encoding::decode_envelope_header(decoder, next_offset)?
34330            {
34331                let member_inline_size =
34332                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
34333                if inlined != (member_inline_size <= 4) {
34334                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
34335                }
34336                let inner_offset;
34337                let mut inner_depth = depth.clone();
34338                if inlined {
34339                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
34340                    inner_offset = next_offset;
34341                } else {
34342                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
34343                    inner_depth.increment()?;
34344                }
34345                let val_ref = self.failures.get_or_insert_with(|| fidl::new_empty!(u32, D));
34346                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
34347                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
34348                {
34349                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
34350                }
34351                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
34352                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
34353                }
34354            }
34355
34356            next_offset += envelope_size;
34357
34358            // Decode the remaining unknown envelopes.
34359            while next_offset < end_offset {
34360                _next_ordinal_to_read += 1;
34361                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
34362                next_offset += envelope_size;
34363            }
34364
34365            Ok(())
34366        }
34367    }
34368
34369    impl UpstreamDnsInfo {
34370        #[inline(always)]
34371        fn max_ordinal_present(&self) -> u64 {
34372            if let Some(_) = self.upstream_dns_query_state {
34373                return 1;
34374            }
34375            0
34376        }
34377    }
34378
34379    impl fidl::encoding::ValueTypeMarker for UpstreamDnsInfo {
34380        type Borrowed<'a> = &'a Self;
34381        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
34382            value
34383        }
34384    }
34385
34386    unsafe impl fidl::encoding::TypeMarker for UpstreamDnsInfo {
34387        type Owned = Self;
34388
34389        #[inline(always)]
34390        fn inline_align(_context: fidl::encoding::Context) -> usize {
34391            8
34392        }
34393
34394        #[inline(always)]
34395        fn inline_size(_context: fidl::encoding::Context) -> usize {
34396            16
34397        }
34398    }
34399
34400    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<UpstreamDnsInfo, D>
34401        for &UpstreamDnsInfo
34402    {
34403        unsafe fn encode(
34404            self,
34405            encoder: &mut fidl::encoding::Encoder<'_, D>,
34406            offset: usize,
34407            mut depth: fidl::encoding::Depth,
34408        ) -> fidl::Result<()> {
34409            encoder.debug_check_bounds::<UpstreamDnsInfo>(offset);
34410            // Vector header
34411            let max_ordinal: u64 = self.max_ordinal_present();
34412            encoder.write_num(max_ordinal, offset);
34413            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
34414            // Calling encoder.out_of_line_offset(0) is not allowed.
34415            if max_ordinal == 0 {
34416                return Ok(());
34417            }
34418            depth.increment()?;
34419            let envelope_size = 8;
34420            let bytes_len = max_ordinal as usize * envelope_size;
34421            #[allow(unused_variables)]
34422            let offset = encoder.out_of_line_offset(bytes_len);
34423            let mut _prev_end_offset: usize = 0;
34424            if 1 > max_ordinal {
34425                return Ok(());
34426            }
34427
34428            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
34429            // are envelope_size bytes.
34430            let cur_offset: usize = (1 - 1) * envelope_size;
34431
34432            // Zero reserved fields.
34433            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
34434
34435            // Safety:
34436            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
34437            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
34438            //   envelope_size bytes, there is always sufficient room.
34439            fidl::encoding::encode_in_envelope_optional::<UpstreamDnsQueryState, D>(
34440                self.upstream_dns_query_state
34441                    .as_ref()
34442                    .map(<UpstreamDnsQueryState as fidl::encoding::ValueTypeMarker>::borrow),
34443                encoder,
34444                offset + cur_offset,
34445                depth,
34446            )?;
34447
34448            _prev_end_offset = cur_offset + envelope_size;
34449
34450            Ok(())
34451        }
34452    }
34453
34454    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for UpstreamDnsInfo {
34455        #[inline(always)]
34456        fn new_empty() -> Self {
34457            Self::default()
34458        }
34459
34460        unsafe fn decode(
34461            &mut self,
34462            decoder: &mut fidl::encoding::Decoder<'_, D>,
34463            offset: usize,
34464            mut depth: fidl::encoding::Depth,
34465        ) -> fidl::Result<()> {
34466            decoder.debug_check_bounds::<Self>(offset);
34467            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
34468                None => return Err(fidl::Error::NotNullable),
34469                Some(len) => len,
34470            };
34471            // Calling decoder.out_of_line_offset(0) is not allowed.
34472            if len == 0 {
34473                return Ok(());
34474            };
34475            depth.increment()?;
34476            let envelope_size = 8;
34477            let bytes_len = len * envelope_size;
34478            let offset = decoder.out_of_line_offset(bytes_len)?;
34479            // Decode the envelope for each type.
34480            let mut _next_ordinal_to_read = 0;
34481            let mut next_offset = offset;
34482            let end_offset = offset + bytes_len;
34483            _next_ordinal_to_read += 1;
34484            if next_offset >= end_offset {
34485                return Ok(());
34486            }
34487
34488            // Decode unknown envelopes for gaps in ordinals.
34489            while _next_ordinal_to_read < 1 {
34490                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
34491                _next_ordinal_to_read += 1;
34492                next_offset += envelope_size;
34493            }
34494
34495            let next_out_of_line = decoder.next_out_of_line();
34496            let handles_before = decoder.remaining_handles();
34497            if let Some((inlined, num_bytes, num_handles)) =
34498                fidl::encoding::decode_envelope_header(decoder, next_offset)?
34499            {
34500                let member_inline_size =
34501                    <UpstreamDnsQueryState as fidl::encoding::TypeMarker>::inline_size(
34502                        decoder.context,
34503                    );
34504                if inlined != (member_inline_size <= 4) {
34505                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
34506                }
34507                let inner_offset;
34508                let mut inner_depth = depth.clone();
34509                if inlined {
34510                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
34511                    inner_offset = next_offset;
34512                } else {
34513                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
34514                    inner_depth.increment()?;
34515                }
34516                let val_ref = self
34517                    .upstream_dns_query_state
34518                    .get_or_insert_with(|| fidl::new_empty!(UpstreamDnsQueryState, D));
34519                fidl::decode!(
34520                    UpstreamDnsQueryState,
34521                    D,
34522                    val_ref,
34523                    decoder,
34524                    inner_offset,
34525                    inner_depth
34526                )?;
34527                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
34528                {
34529                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
34530                }
34531                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
34532                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
34533                }
34534            }
34535
34536            next_offset += envelope_size;
34537
34538            // Decode the remaining unknown envelopes.
34539            while next_offset < end_offset {
34540                _next_ordinal_to_read += 1;
34541                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
34542                next_offset += envelope_size;
34543            }
34544
34545            Ok(())
34546        }
34547    }
34548
34549    impl fidl::encoding::ValueTypeMarker for JoinParams {
34550        type Borrowed<'a> = &'a Self;
34551        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
34552            value
34553        }
34554    }
34555
34556    unsafe impl fidl::encoding::TypeMarker for JoinParams {
34557        type Owned = Self;
34558
34559        #[inline(always)]
34560        fn inline_align(_context: fidl::encoding::Context) -> usize {
34561            8
34562        }
34563
34564        #[inline(always)]
34565        fn inline_size(_context: fidl::encoding::Context) -> usize {
34566            16
34567        }
34568    }
34569
34570    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<JoinParams, D>
34571        for &JoinParams
34572    {
34573        #[inline]
34574        unsafe fn encode(
34575            self,
34576            encoder: &mut fidl::encoding::Encoder<'_, D>,
34577            offset: usize,
34578            _depth: fidl::encoding::Depth,
34579        ) -> fidl::Result<()> {
34580            encoder.debug_check_bounds::<JoinParams>(offset);
34581            encoder.write_num::<u64>(self.ordinal(), offset);
34582            match self {
34583            JoinParams::ProvisioningParameter(ref val) => {
34584                fidl::encoding::encode_in_envelope::<fidl_fuchsia_lowpan_device_common::ProvisioningParams, D>(
34585                    <fidl_fuchsia_lowpan_device_common::ProvisioningParams as fidl::encoding::ValueTypeMarker>::borrow(val),
34586                    encoder, offset + 8, _depth
34587                )
34588            }
34589            JoinParams::JoinerParameter(ref val) => {
34590                fidl::encoding::encode_in_envelope::<JoinerCommissioningParams, D>(
34591                    <JoinerCommissioningParams as fidl::encoding::ValueTypeMarker>::borrow(val),
34592                    encoder, offset + 8, _depth
34593                )
34594            }
34595            JoinParams::__SourceBreaking { .. } => Err(fidl::Error::UnknownUnionTag),
34596        }
34597        }
34598    }
34599
34600    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for JoinParams {
34601        #[inline(always)]
34602        fn new_empty() -> Self {
34603            Self::__SourceBreaking { unknown_ordinal: 0 }
34604        }
34605
34606        #[inline]
34607        unsafe fn decode(
34608            &mut self,
34609            decoder: &mut fidl::encoding::Decoder<'_, D>,
34610            offset: usize,
34611            mut depth: fidl::encoding::Depth,
34612        ) -> fidl::Result<()> {
34613            decoder.debug_check_bounds::<Self>(offset);
34614            #[allow(unused_variables)]
34615            let next_out_of_line = decoder.next_out_of_line();
34616            let handles_before = decoder.remaining_handles();
34617            let (ordinal, inlined, num_bytes, num_handles) =
34618                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
34619
34620            let member_inline_size = match ordinal {
34621            1 => <fidl_fuchsia_lowpan_device_common::ProvisioningParams as fidl::encoding::TypeMarker>::inline_size(decoder.context),
34622            2 => <JoinerCommissioningParams as fidl::encoding::TypeMarker>::inline_size(decoder.context),
34623            0 => return Err(fidl::Error::UnknownUnionTag),
34624            _ => num_bytes as usize,
34625        };
34626
34627            if inlined != (member_inline_size <= 4) {
34628                return Err(fidl::Error::InvalidInlineBitInEnvelope);
34629            }
34630            let _inner_offset;
34631            if inlined {
34632                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
34633                _inner_offset = offset + 8;
34634            } else {
34635                depth.increment()?;
34636                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
34637            }
34638            match ordinal {
34639                1 => {
34640                    #[allow(irrefutable_let_patterns)]
34641                    if let JoinParams::ProvisioningParameter(_) = self {
34642                        // Do nothing, read the value into the object
34643                    } else {
34644                        // Initialize `self` to the right variant
34645                        *self = JoinParams::ProvisioningParameter(fidl::new_empty!(
34646                            fidl_fuchsia_lowpan_device_common::ProvisioningParams,
34647                            D
34648                        ));
34649                    }
34650                    #[allow(irrefutable_let_patterns)]
34651                    if let JoinParams::ProvisioningParameter(ref mut val) = self {
34652                        fidl::decode!(
34653                            fidl_fuchsia_lowpan_device_common::ProvisioningParams,
34654                            D,
34655                            val,
34656                            decoder,
34657                            _inner_offset,
34658                            depth
34659                        )?;
34660                    } else {
34661                        unreachable!()
34662                    }
34663                }
34664                2 => {
34665                    #[allow(irrefutable_let_patterns)]
34666                    if let JoinParams::JoinerParameter(_) = self {
34667                        // Do nothing, read the value into the object
34668                    } else {
34669                        // Initialize `self` to the right variant
34670                        *self = JoinParams::JoinerParameter(fidl::new_empty!(
34671                            JoinerCommissioningParams,
34672                            D
34673                        ));
34674                    }
34675                    #[allow(irrefutable_let_patterns)]
34676                    if let JoinParams::JoinerParameter(ref mut val) = self {
34677                        fidl::decode!(
34678                            JoinerCommissioningParams,
34679                            D,
34680                            val,
34681                            decoder,
34682                            _inner_offset,
34683                            depth
34684                        )?;
34685                    } else {
34686                        unreachable!()
34687                    }
34688                }
34689                #[allow(deprecated)]
34690                ordinal => {
34691                    for _ in 0..num_handles {
34692                        decoder.drop_next_handle()?;
34693                    }
34694                    *self = JoinParams::__SourceBreaking { unknown_ordinal: ordinal };
34695                }
34696            }
34697            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
34698                return Err(fidl::Error::InvalidNumBytesInEnvelope);
34699            }
34700            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
34701                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
34702            }
34703            Ok(())
34704        }
34705    }
34706
34707    impl fidl::encoding::ValueTypeMarker for ProvisioningProgress {
34708        type Borrowed<'a> = &'a Self;
34709        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
34710            value
34711        }
34712    }
34713
34714    unsafe impl fidl::encoding::TypeMarker for ProvisioningProgress {
34715        type Owned = Self;
34716
34717        #[inline(always)]
34718        fn inline_align(_context: fidl::encoding::Context) -> usize {
34719            8
34720        }
34721
34722        #[inline(always)]
34723        fn inline_size(_context: fidl::encoding::Context) -> usize {
34724            16
34725        }
34726    }
34727
34728    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<ProvisioningProgress, D>
34729        for &ProvisioningProgress
34730    {
34731        #[inline]
34732        unsafe fn encode(
34733            self,
34734            encoder: &mut fidl::encoding::Encoder<'_, D>,
34735            offset: usize,
34736            _depth: fidl::encoding::Depth,
34737        ) -> fidl::Result<()> {
34738            encoder.debug_check_bounds::<ProvisioningProgress>(offset);
34739            encoder.write_num::<u64>(self.ordinal(), offset);
34740            match self {
34741            ProvisioningProgress::Progress(ref val) => {
34742                fidl::encoding::encode_in_envelope::<f32, D>(
34743                    <f32 as fidl::encoding::ValueTypeMarker>::borrow(val),
34744                    encoder, offset + 8, _depth
34745                )
34746            }
34747            ProvisioningProgress::Identity(ref val) => {
34748                fidl::encoding::encode_in_envelope::<fidl_fuchsia_lowpan_device_common::Identity, D>(
34749                    <fidl_fuchsia_lowpan_device_common::Identity as fidl::encoding::ValueTypeMarker>::borrow(val),
34750                    encoder, offset + 8, _depth
34751                )
34752            }
34753            ProvisioningProgress::__SourceBreaking { .. } => Err(fidl::Error::UnknownUnionTag),
34754        }
34755        }
34756    }
34757
34758    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ProvisioningProgress {
34759        #[inline(always)]
34760        fn new_empty() -> Self {
34761            Self::__SourceBreaking { unknown_ordinal: 0 }
34762        }
34763
34764        #[inline]
34765        unsafe fn decode(
34766            &mut self,
34767            decoder: &mut fidl::encoding::Decoder<'_, D>,
34768            offset: usize,
34769            mut depth: fidl::encoding::Depth,
34770        ) -> fidl::Result<()> {
34771            decoder.debug_check_bounds::<Self>(offset);
34772            #[allow(unused_variables)]
34773            let next_out_of_line = decoder.next_out_of_line();
34774            let handles_before = decoder.remaining_handles();
34775            let (ordinal, inlined, num_bytes, num_handles) =
34776                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
34777
34778            let member_inline_size = match ordinal {
34779            1 => <f32 as fidl::encoding::TypeMarker>::inline_size(decoder.context),
34780            2 => <fidl_fuchsia_lowpan_device_common::Identity as fidl::encoding::TypeMarker>::inline_size(decoder.context),
34781            0 => return Err(fidl::Error::UnknownUnionTag),
34782            _ => num_bytes as usize,
34783        };
34784
34785            if inlined != (member_inline_size <= 4) {
34786                return Err(fidl::Error::InvalidInlineBitInEnvelope);
34787            }
34788            let _inner_offset;
34789            if inlined {
34790                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
34791                _inner_offset = offset + 8;
34792            } else {
34793                depth.increment()?;
34794                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
34795            }
34796            match ordinal {
34797                1 => {
34798                    #[allow(irrefutable_let_patterns)]
34799                    if let ProvisioningProgress::Progress(_) = self {
34800                        // Do nothing, read the value into the object
34801                    } else {
34802                        // Initialize `self` to the right variant
34803                        *self = ProvisioningProgress::Progress(fidl::new_empty!(f32, D));
34804                    }
34805                    #[allow(irrefutable_let_patterns)]
34806                    if let ProvisioningProgress::Progress(ref mut val) = self {
34807                        fidl::decode!(f32, D, val, decoder, _inner_offset, depth)?;
34808                    } else {
34809                        unreachable!()
34810                    }
34811                }
34812                2 => {
34813                    #[allow(irrefutable_let_patterns)]
34814                    if let ProvisioningProgress::Identity(_) = self {
34815                        // Do nothing, read the value into the object
34816                    } else {
34817                        // Initialize `self` to the right variant
34818                        *self = ProvisioningProgress::Identity(fidl::new_empty!(
34819                            fidl_fuchsia_lowpan_device_common::Identity,
34820                            D
34821                        ));
34822                    }
34823                    #[allow(irrefutable_let_patterns)]
34824                    if let ProvisioningProgress::Identity(ref mut val) = self {
34825                        fidl::decode!(
34826                            fidl_fuchsia_lowpan_device_common::Identity,
34827                            D,
34828                            val,
34829                            decoder,
34830                            _inner_offset,
34831                            depth
34832                        )?;
34833                    } else {
34834                        unreachable!()
34835                    }
34836                }
34837                #[allow(deprecated)]
34838                ordinal => {
34839                    for _ in 0..num_handles {
34840                        decoder.drop_next_handle()?;
34841                    }
34842                    *self = ProvisioningProgress::__SourceBreaking { unknown_ordinal: ordinal };
34843                }
34844            }
34845            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
34846                return Err(fidl::Error::InvalidNumBytesInEnvelope);
34847            }
34848            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
34849                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
34850            }
34851            Ok(())
34852        }
34853    }
34854}