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/// Message pool related info.
997#[derive(Clone, Debug, Default, PartialEq)]
998pub struct BufferInfo {
999    /// The total number of buffers in the message pool.
1000    pub msg_total_buffers: Option<u16>,
1001    /// The number of free buffers in the message pool.
1002    pub msg_free_buffers: Option<u16>,
1003    /// The maximum number of used buffers at the same time.
1004    pub msg_max_used_buffers: Option<u16>,
1005    /// Info about 6LoWPAN send queue.
1006    pub msg_6lo_send_queue: Option<MessageQueueInfo>,
1007    /// Info about 6LoWPAN reassembly queue.
1008    pub msg_6lo_reassembly_queue: Option<MessageQueueInfo>,
1009    /// Info about IPv6 send queue.
1010    pub msg_ip6_queue: Option<MessageQueueInfo>,
1011    /// Info about MPL send queue.
1012    pub msg_mpl_queue: Option<MessageQueueInfo>,
1013    /// Info about MLE delayed message queue.
1014    pub msg_mle_queue: Option<MessageQueueInfo>,
1015    /// Info about CoAP/TMF send queue.
1016    pub msg_coap_queue: Option<MessageQueueInfo>,
1017    /// Info about CoAP secure send queue.
1018    pub msg_coap_secure_queue: Option<MessageQueueInfo>,
1019    /// Info about application CoAP send queue.
1020    pub msg_application_coap_queue: Option<MessageQueueInfo>,
1021    #[doc(hidden)]
1022    pub __source_breaking: fidl::marker::SourceBreaking,
1023}
1024
1025impl fidl::Persistable for BufferInfo {}
1026
1027#[derive(Clone, Debug, Default, PartialEq)]
1028pub struct ChannelInfo {
1029    /// The index used by the interface to identify
1030    /// this channel.
1031    pub index: Option<u16>,
1032    /// Human-readable identifier for channel.
1033    ///
1034    /// For most network types, this is just
1035    /// the string representation of the index.
1036    /// However, some network types might have
1037    /// non-integer ways of identifying specific
1038    /// channels. This field allows the application
1039    /// to display the name of the channel correctly
1040    /// under such circumstances.
1041    ///
1042    /// The allowed characters include:
1043    ///
1044    ///  * Dash (`-`), Underscore (`_`), Plus(`+`), Semicolon(`:`)
1045    ///  * Numbers (`0`-`9`)
1046    ///  * Letters (`a`-`z`, `A`-`Z`)
1047    pub id: Option<String>,
1048    /// The maximum transmit power allowed on
1049    /// this channel, in dBm.
1050    pub max_transmit_power_dbm: Option<i8>,
1051    /// The center RF frequency of this channel, in Hz.
1052    ///
1053    /// For example, 802.15.4 has the following values:
1054    ///
1055    /// Channel | Center Frequency (Hz)
1056    /// --------|----------------------
1057    /// 11      | 2,405,000,000
1058    /// 12      | 2,410,000,000
1059    /// 13      | 2,415,000,000
1060    /// 14      | 2,420,000,000
1061    /// 15      | 2,425,000,000
1062    /// 16      | 2,430,000,000
1063    /// 17      | 2,435,000,000
1064    /// 18      | 2,440,000,000
1065    /// 19      | 2,445,000,000
1066    /// 20      | 2,450,000,000
1067    /// 21      | 2,455,000,000
1068    /// 22      | 2,460,000,000
1069    /// 23      | 2,465,000,000
1070    /// 24      | 2,470,000,000
1071    /// 25      | 2,475,000,000
1072    /// 26      | 2,480,000,000
1073    pub spectrum_center_frequency_hz: Option<u64>,
1074    /// The RF spectrum bandwidth used by this
1075    /// channel where the power level is expected to
1076    /// be higher than -20dBr, in Hz.
1077    ///
1078    /// For example, 802.15.4 channels 11 thru 26 would
1079    /// have the value 2,000,000 (2 MHz).
1080    pub spectrum_bandwidth_hz: Option<u64>,
1081    /// Indicates if this channel is masked by the
1082    /// current regulatory domain and is thus unable
1083    /// to be used.
1084    pub masked_by_regulatory_domain: Option<bool>,
1085    #[doc(hidden)]
1086    pub __source_breaking: fidl::marker::SourceBreaking,
1087}
1088
1089impl fidl::Persistable for ChannelInfo {}
1090
1091/// Represents a Commissioning Dataset.
1092///
1093/// Derived from `otCommissioningDataset`(https://openthread.io/reference/struct/ot-commissioning-dataset)
1094#[derive(Clone, Debug, Default, PartialEq)]
1095pub struct CommissioningDataset {
1096    /// Border Router RLOC16.
1097    ///
1098    /// Required.
1099    pub locator: Option<u16>,
1100    /// Commissioner Session Id.
1101    ///
1102    /// Required.
1103    pub session_id: Option<u16>,
1104    /// Steering Data.
1105    ///
1106    /// Required.
1107    pub steering_data: Option<Vec<u8>>,
1108    /// Joiner UDP Port.
1109    ///
1110    /// Required.
1111    pub joiner_udp_port: Option<u16>,
1112    /// Whether Border Router RLOC16 is set.
1113    ///
1114    /// Required.
1115    pub is_locator_set: Option<bool>,
1116    /// Whether Commissioner Session Id is set.
1117    ///
1118    /// Required.
1119    pub is_session_id_set: Option<bool>,
1120    /// Whether Steering Data is set.
1121    ///
1122    /// Required.
1123    pub is_steering_data_set: Option<bool>,
1124    /// Whether Joiner UDP Port is set.
1125    ///
1126    /// Required.
1127    pub is_joiner_udp_port_set: Option<bool>,
1128    /// Whether the Dataset contains any extra unknown sub-TLV.
1129    ///
1130    /// Required.
1131    pub has_extra_tlv: Option<bool>,
1132    #[doc(hidden)]
1133    pub __source_breaking: fidl::marker::SourceBreaking,
1134}
1135
1136impl fidl::Persistable for CommissioningDataset {}
1137
1138/// CSL related info.
1139#[derive(Clone, Debug, Default, PartialEq)]
1140pub struct CslInfo {
1141    /// CSL Accuracy value of the neighbor in units of PPM.
1142    pub csl_accuracy: Option<u8>,
1143    /// CSL Uncertainty value of the neighbor in units of 10 microseconds.
1144    pub csl_uncertainty: Option<u8>,
1145    #[doc(hidden)]
1146    pub __source_breaking: fidl::marker::SourceBreaking,
1147}
1148
1149impl fidl::Persistable for CslInfo {}
1150
1151/// DHCPv6 PD related info.
1152#[derive(Clone, Debug, Default, PartialEq)]
1153pub struct Dhcp6PdInfo {
1154    /// DHCPv6 PD state.
1155    ///
1156    /// Required.
1157    pub dhcp6pd_state: Option<Dhcp6PdState>,
1158    /// DHCPv6 PD processed RA Info.
1159    ///
1160    /// Optional.
1161    pub pd_processed_ra_info: Option<PdProcessedRaInfo>,
1162    /// DHCPv6 PD prefix.
1163    ///
1164    /// Optional.
1165    pub hashed_pd_prefix: Option<Vec<u8>>,
1166    #[doc(hidden)]
1167    pub __source_breaking: fidl::marker::SourceBreaking,
1168}
1169
1170impl fidl::Persistable for Dhcp6PdInfo {}
1171
1172/// Represents a TXT record entry representing a key/value pair (RFC 6763 - section 6.3).
1173#[derive(Clone, Debug, Default, PartialEq)]
1174pub struct DnsTxtEntry {
1175    /// The key string of the TXT record.
1176    ///
1177    /// Maximum length of TXT key string supported by `otDnsTxtEntryIterator` is 64,
1178    /// see OT_DNS_TXT_KEY_ITER_MAX_LENGTH.
1179    ///
1180    /// Required.
1181    pub key: Option<String>,
1182    /// The value of the TXT record.
1183    ///
1184    /// The overall key-value pair encoded length (including the key and "=") must be 255
1185    /// bytes or less.
1186    ///
1187    /// Required.
1188    pub value: Option<Vec<u8>>,
1189    #[doc(hidden)]
1190    pub __source_breaking: fidl::marker::SourceBreaking,
1191}
1192
1193impl fidl::Persistable for DnsTxtEntry {}
1194
1195/// Counters associated with the DNS-SD server.
1196#[derive(Clone, Debug, Default, PartialEq)]
1197pub struct DnssdCounters {
1198    /// The number of successful responses.
1199    ///
1200    /// Required.
1201    pub success_response: Option<u32>,
1202    /// The number of 'server failure' responses.
1203    ///
1204    /// Required.
1205    pub server_failure_response: Option<u32>,
1206    /// The number of 'format error' responses.
1207    ///
1208    /// Required.
1209    pub format_error_response: Option<u32>,
1210    /// The number of 'name error' responses.
1211    ///
1212    /// Required.
1213    pub name_error_response: Option<u32>,
1214    /// The number of 'not implemented' responses.
1215    ///
1216    /// Required.
1217    pub not_implemented_response: Option<u32>,
1218    /// The number of 'other' responses.
1219    ///
1220    /// Required.
1221    pub other_response: Option<u32>,
1222    /// The number of queries completely resolved by the local SRP server.
1223    ///
1224    /// Required.
1225    pub resolved_by_srp: Option<u32>,
1226    /// The counters of upstream DNS feature.
1227    ///
1228    /// Optional.
1229    pub upstream_dns_counters: Option<UpstreamDnsCounters>,
1230    #[doc(hidden)]
1231    pub __source_breaking: fidl::marker::SourceBreaking,
1232}
1233
1234impl fidl::Persistable for DnssdCounters {}
1235
1236/// Represents EID-to-RLOC cache entry info.
1237#[derive(Clone, Debug, Default, PartialEq)]
1238pub struct EidCacheEntry {
1239    /// Target EID.
1240    ///
1241    /// Required.
1242    pub target: Option<fidl_fuchsia_net_common::Ipv6Address>,
1243    /// Rloc16.
1244    ///
1245    /// Required.
1246    pub rloc16: Option<u16>,
1247    /// Entry state.
1248    ///
1249    /// Required.
1250    pub state: Option<CacheEntryState>,
1251    /// Indicates whether the entry can be evicted.
1252    ///
1253    /// Required.
1254    pub can_evict: Option<bool>,
1255    /// Indicates whether in ramp-down mode while in `OT_CACHE_ENTRY_STATE_RETRY_QUERY`.
1256    ///
1257    /// Required.
1258    pub ramp_down: Option<bool>,
1259    /// Indicates whether last transaction time and ML-EID are valid.
1260    ///
1261    /// Required.
1262    pub valid_last_trans: Option<bool>,
1263    /// Last transaction time (applicable in cached state).
1264    ///
1265    /// Required.
1266    pub last_trans_time: Option<i64>,
1267    /// Mesh Local EID (applicable if entry in cached state).
1268    ///
1269    /// Required.
1270    pub mesh_local_eid: Option<fidl_fuchsia_net_common::Ipv6Address>,
1271    /// Timeout (applicable if in snooped/query/retry-query states).
1272    ///
1273    /// Required.
1274    pub timeout: Option<i64>,
1275    /// Retry delay (applicable if in query-retry state).
1276    ///
1277    /// Required.
1278    pub retry_delay: Option<i64>,
1279    #[doc(hidden)]
1280    pub __source_breaking: fidl::marker::SourceBreaking,
1281}
1282
1283impl fidl::Persistable for EidCacheEntry {}
1284
1285/// LoWPAN External Route.
1286///
1287/// Informed by the Thread 1.1.1 Specification, section 5.13.3.
1288#[derive(Clone, Debug, Default, PartialEq)]
1289pub struct ExternalRoute {
1290    /// Subnet for route. Required.
1291    pub subnet: Option<fidl_fuchsia_net_common::Ipv6AddressWithPrefix>,
1292    /// Indicates the what preference this route should be given relative
1293    /// to other devices offering the same external route. If not present,
1294    /// `MEDIUM` preference is assumed.
1295    ///
1296    /// Based on `R_preference` from Section 5.13.3 of the Thread 1.1.1
1297    /// Specification.
1298    pub route_preference: Option<RoutePreference>,
1299    /// True if the route is expected to be available for at least Thread's
1300    /// `MIN_STABLE_LIFETIME`; otherwise, `false`. If not present, assumed to
1301    /// be `false`.
1302    ///
1303    /// The Thread specification defines `MIN_STABLE_LIFETIME` as 168 hours.
1304    ///
1305    /// Based on `R_stable` from Section 5.13.3 of the Thread 1.1.1
1306    /// Specification.
1307    pub stable: Option<bool>,
1308    #[doc(hidden)]
1309    pub __source_breaking: fidl::marker::SourceBreaking,
1310}
1311
1312impl fidl::Persistable for ExternalRoute {}
1313
1314/// Represents an External Route configuration.
1315///
1316/// Derived from `otExternalRouteConfig`(https://openthread.io/reference/struct/ot-external-route-config)
1317#[derive(Clone, Debug, Default, PartialEq)]
1318pub struct ExternalRouteConfig {
1319    /// IPv6 prefix.
1320    ///
1321    /// Required.
1322    pub prefix: Option<String>,
1323    /// The border router's RLOC16.
1324    ///
1325    /// Required.
1326    pub rloc16: Option<u16>,
1327    /// A 2-bit signed int preference.
1328    ///
1329    /// Required.
1330    pub preference: Option<i8>,
1331    /// Whether this is a NAT64 prefix.
1332    ///
1333    /// Required.
1334    pub nat64: Option<bool>,
1335    /// Whether this configuration is considered Stable Network Data.
1336    ///
1337    /// Required.
1338    pub stable: Option<bool>,
1339    /// Whether the next hop is this device.
1340    ///
1341    /// Required.
1342    pub next_hop_is_this_device: Option<bool>,
1343    /// Whether or not BR is advertising a ULA prefix in PIO (AP flag).
1344    ///
1345    /// Required.
1346    pub adv_pio: Option<bool>,
1347    #[doc(hidden)]
1348    pub __source_breaking: fidl::marker::SourceBreaking,
1349}
1350
1351impl fidl::Persistable for ExternalRouteConfig {}
1352
1353/// Parameters for joiner commissioning.
1354///
1355/// More information:
1356/// https://www.threadgroup.org/Portals/0/documents/support/CommissioningWhitePaper_658_2.pdf
1357#[derive(Clone, Debug, Default, PartialEq)]
1358pub struct JoinerCommissioningParams {
1359    /// Commissioning PSKd. Required.
1360    pub pskd: Option<String>,
1361    /// Provisioning URL. Optional.
1362    pub provisioning_url: Option<String>,
1363    /// Vendor name. Optional.
1364    pub vendor_name: Option<String>,
1365    /// Vendor model. Optional.
1366    pub vendor_model: Option<String>,
1367    /// Vendor Software Version. Optional.
1368    pub vendor_sw_version: Option<String>,
1369    /// Vendor data string. Optional.
1370    pub vendor_data_string: Option<String>,
1371    #[doc(hidden)]
1372    pub __source_breaking: fidl::marker::SourceBreaking,
1373}
1374
1375impl fidl::Persistable for JoinerCommissioningParams {}
1376
1377/// Node information for Thread network leaders.
1378#[derive(Clone, Debug, Default, PartialEq)]
1379pub struct LeaderData {
1380    /// The network partition ID of the leader.
1381    ///
1382    /// Required.
1383    pub partition_id: Option<u32>,
1384    /// The weight of this leader on the network.
1385    ///
1386    /// Required.
1387    pub weight: Option<u8>,
1388    /// The full network data version.
1389    ///
1390    /// Required.
1391    pub network_data_version: Option<u8>,
1392    /// The stable network data version.
1393    ///
1394    /// Required.
1395    pub stable_network_data_version: Option<u8>,
1396    /// The router ID of the leader.
1397    ///
1398    /// Required.
1399    pub router_id: Option<u8>,
1400    #[doc(hidden)]
1401    pub __source_breaking: fidl::marker::SourceBreaking,
1402}
1403
1404impl fidl::Persistable for LeaderData {}
1405
1406/// Link Metrics info of the neighbors.
1407#[derive(Clone, Debug, Default, PartialEq)]
1408pub struct LinkMetricsEntry {
1409    /// Link Margin value of the neighbor
1410    pub link_margin: Option<u8>,
1411    /// RSSI value of the neighbor
1412    pub rssi: Option<i8>,
1413    /// IEEE 802.15.4 Extended Address of the neighbor
1414    pub extended_address: Option<Vec<u8>>,
1415    #[doc(hidden)]
1416    pub __source_breaking: fidl::marker::SourceBreaking,
1417}
1418
1419impl fidl::Persistable for LinkMetricsEntry {}
1420
1421/// Represents 6LoWPAN Context ID information associated with a prefix in Network Data.
1422///
1423/// Derived from `otLowpanContextInfo`(https://openthread.io/reference/struct/ot-lowpan-context-info)
1424#[derive(Clone, Debug, Default, PartialEq)]
1425pub struct LowpanContextInfo {
1426    /// The 6LoWPAN Context ID.
1427    ///
1428    /// Required.
1429    pub context_id: Option<u8>,
1430    /// The compress flag.
1431    ///
1432    /// Required.
1433    pub compress_flag: Option<bool>,
1434    /// Whether the Context TLV is marked as Stable Network Data.
1435    ///
1436    /// Required.
1437    pub stable: Option<bool>,
1438    /// The associated IPv6 prefix.
1439    ///
1440    /// Required.
1441    pub prefix: Option<String>,
1442    #[doc(hidden)]
1443    pub __source_breaking: fidl::marker::SourceBreaking,
1444}
1445
1446impl fidl::Persistable for LowpanContextInfo {}
1447
1448/// Message queue related info.
1449#[derive(Clone, Debug, Default, PartialEq)]
1450pub struct MessageQueueInfo {
1451    /// Number of messages in the queue.
1452    pub num_messages: Option<u16>,
1453    /// Number of buffers used by all messages in the queue.
1454    pub num_buffers: Option<u16>,
1455    /// Total number of bytes of all messages in the queue.
1456    pub total_bytes: Option<u32>,
1457    #[doc(hidden)]
1458    pub __source_breaking: fidl::marker::SourceBreaking,
1459}
1460
1461impl fidl::Persistable for MessageQueueInfo {}
1462
1463/// Multi radio link info associated with a neighbor.
1464#[derive(Clone, Debug, Default, PartialEq)]
1465pub struct MultiRadioNeighborInfo {
1466    /// IEEE 802.15.4 Extended Address.
1467    ///
1468    /// Required.
1469    pub extended_address: Option<Vec<u8>>,
1470    /// IEEE 802.15.4 short address of neighbor.
1471    ///
1472    /// Required.
1473    pub thread_rloc: Option<u16>,
1474    /// Multi radio link info. So far only '15.4' and 'TREL' links.
1475    /// Considering a potential future expansion to other links, set
1476    /// the MAX capability to 5.
1477    ///
1478    /// Required.
1479    pub radio_link_info: Option<Vec<RadioLinkInfo>>,
1480    #[doc(hidden)]
1481    pub __source_breaking: fidl::marker::SourceBreaking,
1482}
1483
1484impl fidl::Persistable for MultiRadioNeighborInfo {}
1485
1486#[derive(Clone, Debug, Default, PartialEq)]
1487pub struct Nat64ErrorCounters {
1488    /// Packet drop for unknown reasons
1489    pub unknown: Option<Nat64PacketCounters>,
1490    /// Packet drop due to failed to parse the datagram
1491    pub illegal_packet: Option<Nat64PacketCounters>,
1492    /// Packet drop due to unsupported IP protocol
1493    pub unsupported_protocol: Option<Nat64PacketCounters>,
1494    /// Packet drop due to no mappings found or mapping pool exhausted
1495    pub no_mapping: Option<Nat64PacketCounters>,
1496    #[doc(hidden)]
1497    pub __source_breaking: fidl::marker::SourceBreaking,
1498}
1499
1500impl fidl::Persistable for Nat64ErrorCounters {}
1501
1502#[derive(Clone, Debug, Default, PartialEq)]
1503pub struct Nat64Info {
1504    /// NAT64 border routing state
1505    pub nat64_state: Option<BorderRoutingNat64State>,
1506    /// NAT64 mapping
1507    pub nat64_mappings: Option<Vec<Nat64Mapping>>,
1508    /// NAT64 error counters
1509    pub nat64_error_counters: Option<Nat64ErrorCounters>,
1510    /// NAT64 protocol counters
1511    pub nat64_protocol_counters: Option<Nat64ProtocolCounters>,
1512    #[doc(hidden)]
1513    pub __source_breaking: fidl::marker::SourceBreaking,
1514}
1515
1516impl fidl::Persistable for Nat64Info {}
1517
1518/// Information about the mappings of NAT64 translator
1519#[derive(Clone, Debug, Default, PartialEq)]
1520pub struct Nat64Mapping {
1521    /// The unique id for a mapping session
1522    pub mapping_id: Option<u64>,
1523    /// The IPv4 address of the mapping
1524    pub ip4_addr: Option<Vec<u8>>,
1525    /// The IPv6 address of the mapping
1526    pub ip6_addr: Option<Vec<u8>>,
1527    /// Remaining time before expiry in milliseconds
1528    pub remaining_time_ms: Option<u32>,
1529    /// Nat64 Counters
1530    pub counters: Option<Nat64ProtocolCounters>,
1531    #[doc(hidden)]
1532    pub __source_breaking: fidl::marker::SourceBreaking,
1533}
1534
1535impl fidl::Persistable for Nat64Mapping {}
1536
1537#[derive(Clone, Debug, Default, PartialEq)]
1538pub struct Nat64PacketCounters {
1539    /// Number of packets translated from IPv4 to IPv6
1540    pub ipv4_to_ipv6_packets: Option<u64>,
1541    /// Number of packets translated from IPv6 to IPv4
1542    pub ipv6_to_ipv4_packets: Option<u64>,
1543    #[doc(hidden)]
1544    pub __source_breaking: fidl::marker::SourceBreaking,
1545}
1546
1547impl fidl::Persistable for Nat64PacketCounters {}
1548
1549#[derive(Clone, Debug, Default, PartialEq)]
1550pub struct Nat64ProtocolCounters {
1551    /// TCP counters
1552    pub tcp: Option<Nat64TrafficCounters>,
1553    /// UDP counters
1554    pub udp: Option<Nat64TrafficCounters>,
1555    /// ICMP counters
1556    pub icmp: Option<Nat64TrafficCounters>,
1557    /// Total counters
1558    pub total: Option<Nat64TrafficCounters>,
1559    #[doc(hidden)]
1560    pub __source_breaking: fidl::marker::SourceBreaking,
1561}
1562
1563impl fidl::Persistable for Nat64ProtocolCounters {}
1564
1565#[derive(Clone, Debug, Default, PartialEq)]
1566pub struct Nat64TrafficCounters {
1567    /// Number of packets translated from IPv4 to IPv6
1568    pub ipv4_to_ipv6_packets: Option<u64>,
1569    /// Sum of size of packets translated from IPv4 to IPv6
1570    pub ipv4_to_ipv6_bytes: Option<u64>,
1571    /// Number of packets translated from IPv6 to IPv4
1572    pub ipv6_to_ipv4_packets: Option<u64>,
1573    /// Sum of size of packets translated from IPv6 to IPv4
1574    pub ipv6_to_ipv4_bytes: Option<u64>,
1575    #[doc(hidden)]
1576    pub __source_breaking: fidl::marker::SourceBreaking,
1577}
1578
1579impl fidl::Persistable for Nat64TrafficCounters {}
1580
1581/// Represents an IPv6 network interface unicast address.
1582///
1583///  Derived from `otNetifAddress`(https://openthread.io/reference/struct/ot-netif-address)
1584#[derive(Clone, Debug, Default, PartialEq)]
1585pub struct NetifAddress {
1586    /// The IPv6 unicast address.
1587    ///
1588    /// Required.
1589    pub address: Option<fidl_fuchsia_net_common::Ipv6Address>,
1590    /// The IPv6 unicast address prefix length.
1591    ///
1592    /// Required.
1593    pub prefix_length: Option<u8>,
1594    /// The IPv6 address origin.
1595    ///
1596    /// Required.
1597    pub origin: Option<AddressOrigin>,
1598    /// Whether the address is preferred or not.
1599    ///
1600    /// Required.
1601    pub preferred: Option<bool>,
1602    /// Whether the address is valid or not.
1603    ///
1604    /// Required.
1605    pub valid: Option<bool>,
1606    #[doc(hidden)]
1607    pub __source_breaking: fidl::marker::SourceBreaking,
1608}
1609
1610impl fidl::Persistable for NetifAddress {}
1611
1612/// Represents the full Network Data received from the Leader.
1613#[derive(Clone, Debug, Default, PartialEq)]
1614pub struct NetworkData {
1615    /// On-mesh prefixes.
1616    ///
1617    /// Required.
1618    pub on_mesh_prefixes: Option<Vec<BorderRouterConfig>>,
1619    /// External Routes.
1620    ///
1621    /// Required.
1622    pub external_routes: Option<Vec<ExternalRouteConfig>>,
1623    /// SRP service entries.
1624    ///
1625    /// Required.
1626    pub services: Option<Vec<ServiceConfig>>,
1627    /// 6LoWPAN Context IDs.
1628    ///
1629    /// Required.
1630    pub contexts: Option<Vec<LowpanContextInfo>>,
1631    /// Commissioning Dataset information.
1632    ///
1633    /// Required.
1634    pub commissioning_dataset: Option<CommissioningDataset>,
1635    #[doc(hidden)]
1636    pub __source_breaking: fidl::marker::SourceBreaking,
1637}
1638
1639impl fidl::Persistable for NetworkData {}
1640
1641/// Describes the parameters of a network scan.
1642#[derive(Clone, Debug, Default, PartialEq)]
1643pub struct NetworkScanParameters {
1644    /// Subset of channels to scan.
1645    ///
1646    /// If unspecified, all channels will be scanned.
1647    pub channels: Option<Vec<u16>>,
1648    /// Transmit power (in dBm to the antenna) for transmitting
1649    /// beacon requests.
1650    ///
1651    /// Note that hardware limitations may cause the actual
1652    /// used transmit power to differ from what is specified.
1653    /// In that case the used transmit power will always be
1654    /// the highest available transmit power that is less than
1655    /// the specified transmit power. If the desired transmit
1656    /// power is lower than the lowest transmit power supported
1657    /// by the hardware, then that will be used instead.
1658    pub tx_power_dbm: Option<i8>,
1659    #[doc(hidden)]
1660    pub __source_breaking: fidl::marker::SourceBreaking,
1661}
1662
1663impl fidl::Persistable for NetworkScanParameters {}
1664
1665/// LoWPAN On-Mesh Prefix.
1666///
1667/// Informed by the Thread 1.1.1 Specification, section 5.13.2.
1668#[derive(Clone, Debug, Default, PartialEq)]
1669pub struct OnMeshPrefix {
1670    /// Subnet to advertise for devices to use on the network. Required.
1671    pub subnet: Option<fidl_fuchsia_net_common::Ipv6AddressWithPrefix>,
1672    /// If present, indicates that this device is offering a default route
1673    /// as well as indicating the what preference this default
1674    /// route should be given relative to other devices offering default
1675    /// routes. If not present, no default route is advertised.
1676    ///
1677    /// Based on `P_default` and `P_preference` from Section 5.13.2 of the
1678    /// Thread 1.1.1 Specification.
1679    pub default_route_preference: Option<RoutePreference>,
1680    /// True if the route is expected to be available for at least Thread's
1681    /// `MIN_STABLE_LIFETIME`; otherwise `false`. If not present, assumed to
1682    /// be `false`.
1683    ///
1684    /// The Thread specification defines `MIN_STABLE_LIFETIME` as 168 hours.
1685    ///
1686    /// Based on `P_stable` from Section 5.13.2 of the
1687    /// Thread 1.1.1 Specification.
1688    pub stable: Option<bool>,
1689    /// True if network devices are allowed to use previously configured
1690    /// addresses using this prefix. If not present, assumed to be `false`.
1691    ///
1692    /// "SLAAC" referrs to StateLess Address Auto Configuration, described in
1693    /// [RFC4862](https://tools.ietf.org/html/rfc4862).
1694    ///
1695    /// Based on `P_slaac_preferred` from Section 5.13.2 of the
1696    /// Thread 1.1.1 Specification.
1697    pub slaac_preferred: Option<bool>,
1698    /// True if network devices are allowed to autoconfigure addresses using
1699    /// this prefix. If not present, assumed to be `false`.
1700    ///
1701    /// "SLAAC" referrs to StateLess Address Auto Configuration, described in
1702    /// [RFC4862](https://tools.ietf.org/html/rfc4862).
1703    ///
1704    /// Based on `P_slaac_valid` from Section 5.13.2 of the
1705    /// Thread 1.1.1 Specification.
1706    pub slaac_valid: Option<bool>,
1707    #[doc(hidden)]
1708    pub __source_breaking: fidl::marker::SourceBreaking,
1709}
1710
1711impl fidl::Persistable for OnMeshPrefix {}
1712
1713/// Represents an Thread Active or Pending Operational Dataset.
1714#[derive(Clone, Debug, Default, PartialEq)]
1715pub struct OperationalDataset {
1716    /// Active Timestamp.
1717    ///
1718    /// Required.
1719    pub active_timestamp: Option<i64>,
1720    /// Pending Timestamp.
1721    ///
1722    /// Required.
1723    pub pending_timestamp: Option<i64>,
1724    /// Network Key.
1725    ///
1726    /// Required.
1727    pub network_key: Option<Vec<u8>>,
1728    /// Network Name.
1729    ///
1730    /// Required.
1731    pub network_name: Option<Vec<u8>>,
1732    /// Extended PAN ID.
1733    ///
1734    /// Required.
1735    pub extended_pan_id: Option<Vec<u8>>,
1736    /// Mesh Local Prefix.
1737    ///
1738    /// Required.
1739    pub mesh_local_prefix: Option<Vec<u8>>,
1740    /// Delay Timer.
1741    ///
1742    /// Required.
1743    pub delay: Option<u32>,
1744    /// PAN ID.
1745    ///
1746    /// Required.
1747    pub pan_id: Option<u16>,
1748    /// Channel.
1749    ///
1750    /// Required.
1751    pub channel: Option<u16>,
1752    /// Wake-up Channel.
1753    ///
1754    /// Required.
1755    pub wakeup_channel: Option<u16>,
1756    /// PSKc.
1757    ///
1758    /// Required.
1759    pub pskc: Option<Vec<u8>>,
1760    /// Security Policy.
1761    ///
1762    /// Required.
1763    pub security_policy: Option<SecurityPolicy>,
1764    /// Channel Mask.
1765    ///
1766    /// Required.
1767    pub channel_mask: Option<u32>,
1768    #[doc(hidden)]
1769    pub __source_breaking: fidl::marker::SourceBreaking,
1770}
1771
1772impl fidl::Persistable for OperationalDataset {}
1773
1774/// Platform counters related to processed RA info when DHCPv6 PD is enabled.
1775#[derive(Clone, Debug, Default, PartialEq)]
1776pub struct PdProcessedRaInfo {
1777    /// The number of platform generated RA handled by ApplyPlatformGeneratedRa.
1778    ///
1779    /// Required.
1780    pub num_platform_ra_received: Option<u32>,
1781    /// The number of PIO processed for adding OMR prefixes.
1782    ///
1783    /// Required.
1784    pub num_platform_pio_processed: Option<u32>,
1785    /// The duration since the last processed RA message.
1786    ///
1787    /// Required.
1788    pub last_platform_ra_msec: Option<u32>,
1789    #[doc(hidden)]
1790    pub __source_breaking: fidl::marker::SourceBreaking,
1791}
1792
1793impl fidl::Persistable for PdProcessedRaInfo {}
1794
1795/// Represents information associated with a radio link.
1796#[derive(Clone, Debug, Default, PartialEq)]
1797pub struct RadioLinkInfo {
1798    /// Radio Link Type, e.g., '15.4' or 'TREL'.
1799    /// Considering a potential future expansion to other links, set
1800    /// the MAX capability to 10.
1801    ///
1802    /// Required.
1803    pub link_type: Option<String>,
1804    /// Preference level of radio link.
1805    ///
1806    /// Required.
1807    pub preference: Option<u8>,
1808    #[doc(hidden)]
1809    pub __source_breaking: fidl::marker::SourceBreaking,
1810}
1811
1812impl fidl::Persistable for RadioLinkInfo {}
1813
1814/// Represents the diagnostic information for a Thread Router.
1815#[derive(Clone, Debug, Default, PartialEq)]
1816pub struct RouterInfo {
1817    /// IEEE 802.15.4 Extended Address
1818    ///
1819    /// Required.
1820    pub extended_address: Option<Vec<u8>>,
1821    /// IEEE 802.15.4 short address of neighbor.
1822    ///
1823    /// Required.
1824    pub thread_rloc: Option<u16>,
1825    /// Router ID.
1826    ///
1827    /// Required.
1828    pub router_id: Option<u8>,
1829    /// Next hop to router.
1830    ///
1831    /// Required.
1832    pub next_hop: Option<u8>,
1833    /// Path cost to router.
1834    ///
1835    /// Required.
1836    pub path_cost: Option<u8>,
1837    /// Link Quality In.
1838    ///
1839    /// Required.
1840    pub link_quality_in: Option<u8>,
1841    /// Link Quality Out.
1842    ///
1843    /// Required.
1844    pub link_quality_out: Option<u8>,
1845    /// The router's age (duration since last heard).
1846    ///
1847    /// Required.
1848    pub age: Option<i64>,
1849    /// Whether link established with Router ID or not.
1850    ///
1851    /// Required.
1852    pub link_established: Option<bool>,
1853    #[doc(hidden)]
1854    pub __source_breaking: fidl::marker::SourceBreaking,
1855}
1856
1857impl fidl::Persistable for RouterInfo {}
1858
1859/// Represents the Thread Security Policy.
1860#[derive(Clone, Debug, Default, PartialEq)]
1861pub struct SecurityPolicy {
1862    /// Key Rotation time value, in uints of hours.
1863    ///
1864    /// Required.
1865    pub rotation_time: Option<u16>,
1866    /// Whether Obtaining the Network Key for out-of-band commissioning is enabled.
1867    ///
1868    /// Required.
1869    pub obtain_network_key_enabled: Option<bool>,
1870    /// Whether Native Commissioning using PSKc is allowed.
1871    ///
1872    /// Required.
1873    pub native_commissioning_enabled: Option<bool>,
1874    /// Whether Thread 1.0/1.1.x Routers are enabled.
1875    ///
1876    /// Required.
1877    pub routers_enabled: Option<bool>,
1878    /// Whether External Commissioner authentication is allowed.
1879    ///
1880    /// Required.
1881    pub external_commissioning_enabled: Option<bool>,
1882    /// Whether Autonomous Enrollment is enabled.
1883    ///
1884    /// Required.
1885    pub autonomous_enrollment_enabled: Option<bool>,
1886    /// Whether Network Key Provisioning is enabled.
1887    ///
1888    /// Required.
1889    pub network_key_provisioning_enabled: Option<bool>,
1890    /// Whether ToBLE link is enabled.
1891    ///
1892    /// Required.
1893    pub toble_link_enabled: Option<bool>,
1894    /// Whether Non-CCM Routers enabled.
1895    ///
1896    /// Required.
1897    pub nonccm_routers_enabled: Option<bool>,
1898    /// The Version-threshold for Routing.
1899    ///
1900    /// Required.
1901    pub version_threshold_for_routing: Option<u8>,
1902    #[doc(hidden)]
1903    pub __source_breaking: fidl::marker::SourceBreaking,
1904}
1905
1906impl fidl::Persistable for SecurityPolicy {}
1907
1908/// Represents a Server configuration.
1909///
1910/// Derived from `otServerConfig`(https://openthread.io/reference/struct/ot-server-config)
1911#[derive(Clone, Debug, Default, PartialEq)]
1912pub struct ServerConfig {
1913    /// Whether this config is considered Stable Network Data.
1914    ///
1915    /// Required.
1916    pub stable: Option<bool>,
1917    /// Length of server data.
1918    ///
1919    /// Required.
1920    pub server_data_length: Option<u8>,
1921    /// Server data bytes.
1922    ///
1923    /// Required.
1924    pub server_data: Option<Vec<u8>>,
1925    /// The Server RLOC16.
1926    ///
1927    /// Required.
1928    pub rloc16: Option<u16>,
1929    #[doc(hidden)]
1930    pub __source_breaking: fidl::marker::SourceBreaking,
1931}
1932
1933impl fidl::Persistable for ServerConfig {}
1934
1935/// Represents a Service configuration.
1936///
1937/// Derived from `otServiceConfig`(https://openthread.io/reference/struct/ot-service-config)
1938#[derive(Clone, Debug, Default, PartialEq)]
1939pub struct ServiceConfig {
1940    /// The service ID.
1941    ///
1942    /// Required.
1943    pub service_id: Option<u8>,
1944    /// IANA Enterprise Number.
1945    ///
1946    /// Required.
1947    pub enterprise_number: Option<u32>,
1948    /// Length of service data.
1949    ///
1950    /// Required.
1951    pub service_data_length: Option<u8>,
1952    /// Service data bytes.
1953    ///
1954    /// Required.
1955    pub service_data: Option<Vec<u8>>,
1956    /// The Server configuration.
1957    ///
1958    /// Required.
1959    pub server_config: Option<ServerConfig>,
1960    #[doc(hidden)]
1961    pub __source_breaking: fidl::marker::SourceBreaking,
1962}
1963
1964impl fidl::Persistable for ServiceConfig {}
1965
1966/// Represents a SRP service host.
1967#[derive(Clone, Debug, Default, PartialEq)]
1968pub struct SrpServerHost {
1969    /// The full name of host.
1970    ///
1971    /// Required.
1972    pub name: Option<String>,
1973    /// Whether the SRP service host has been deleted.
1974    ///
1975    /// Required.
1976    pub deleted: Option<bool>,
1977    /// The IPv6 addresses of the SPR service host.
1978    ///
1979    /// Required.
1980    pub addresses: Option<Vec<fidl_fuchsia_net_common::Ipv6Address>>,
1981    #[doc(hidden)]
1982    pub __source_breaking: fidl::marker::SourceBreaking,
1983}
1984
1985impl fidl::Persistable for SrpServerHost {}
1986
1987/// State information about the SRP server.
1988#[derive(Clone, Debug, Default, PartialEq)]
1989pub struct SrpServerInfo {
1990    /// The operational state of the SRP server.
1991    ///
1992    /// Required.
1993    pub state: Option<SrpServerState>,
1994    /// The port the SRP server is listening to.
1995    ///
1996    /// Optional. The port may be omitted when `state` is `DISABLED`.
1997    pub port: Option<u16>,
1998    /// The address mode of the SRP server.
1999    ///
2000    /// Required.
2001    pub address_mode: Option<SrpServerAddressMode>,
2002    /// The response counters of the SRP server.
2003    ///
2004    /// Required.
2005    pub response_counters: Option<SrpServerResponseCounters>,
2006    /// The registration information of SRP hosts.
2007    ///
2008    /// Required.
2009    pub hosts_registration: Option<SrpServerRegistration>,
2010    /// The registration information of SRP services.
2011    ///
2012    /// Required.
2013    pub services_registration: Option<SrpServerRegistration>,
2014    /// The detailed registration information of SRP hosts.
2015    ///
2016    /// Required.
2017    pub hosts: Option<Vec<SrpServerHost>>,
2018    /// The detailed registration information of SRP services.
2019    ///
2020    /// Required.
2021    pub services: Option<Vec<SrpServerService>>,
2022    #[doc(hidden)]
2023    pub __source_breaking: fidl::marker::SourceBreaking,
2024}
2025
2026impl fidl::Persistable for SrpServerInfo {}
2027
2028/// Registration information about the SRP server.
2029#[derive(Clone, Debug, Default, PartialEq)]
2030pub struct SrpServerRegistration {
2031    /// Number of hosts/services that have not been deleted.
2032    ///
2033    /// Required.
2034    pub fresh_count: Option<u32>,
2035    /// Number of hosts/services that have been deleted.
2036    ///
2037    /// Required.
2038    pub deleted_count: Option<u32>,
2039    /// Total lease time.
2040    ///
2041    /// Required.
2042    pub lease_time_total: Option<i64>,
2043    /// Total key lease time.
2044    ///
2045    /// Required.
2046    pub key_lease_time_total: Option<i64>,
2047    /// Total remaining lease time.
2048    ///
2049    /// Required.
2050    pub remaining_lease_time_total: Option<i64>,
2051    /// Total remaining key lease time.
2052    ///
2053    /// Required.
2054    pub remaining_key_lease_time_total: Option<i64>,
2055    #[doc(hidden)]
2056    pub __source_breaking: fidl::marker::SourceBreaking,
2057}
2058
2059impl fidl::Persistable for SrpServerRegistration {}
2060
2061#[derive(Clone, Debug, Default, PartialEq)]
2062pub struct SrpServerResponseCounters {
2063    /// The number of successful responses.
2064    ///
2065    /// Required.
2066    pub success_response: Option<u32>,
2067    /// The number of 'server failure' responses.
2068    ///
2069    /// Required.
2070    pub server_failure_response: Option<u32>,
2071    /// The number of 'format error' responses.
2072    ///
2073    /// Required.
2074    pub format_error_response: Option<u32>,
2075    /// The number of 'name exists' responses.
2076    ///
2077    /// Required.
2078    pub name_exists_response: Option<u32>,
2079    /// The number of 'refused' responses.
2080    ///
2081    /// Required.
2082    pub refused_response: Option<u32>,
2083    /// The number of 'other' responses.
2084    ///
2085    /// Required.
2086    pub other_response: Option<u32>,
2087    #[doc(hidden)]
2088    pub __source_breaking: fidl::marker::SourceBreaking,
2089}
2090
2091impl fidl::Persistable for SrpServerResponseCounters {}
2092
2093/// Represents a SRP service.
2094#[derive(Clone, Debug, Default, PartialEq)]
2095pub struct SrpServerService {
2096    /// The full service instance name of the service.
2097    ///
2098    /// Required.
2099    pub instance_name: Option<String>,
2100    /// Whether the SRP service host has been deleted.
2101    ///
2102    /// Required.
2103    pub deleted: Option<bool>,
2104    /// The sub-type service name (full name) of the service.
2105    ///
2106    /// The maximum number of service subtype labels in the SRP service is 6,
2107    /// see OPENTHREAD_CONFIG_SRP_CLIENT_BUFFERS_SERVICE_MAX_SUB_TYPES.
2108    ///
2109    /// The maximum length for a single DNS label (sub-type) is 63 characters.
2110    ///
2111    /// Required.
2112    pub subtypes: Option<Vec<String>>,
2113    /// The port of the service instance.
2114    ///
2115    /// Required.
2116    pub port: Option<u16>,
2117    /// The priority of the service instance.
2118    ///
2119    /// Required.
2120    pub priority: Option<u16>,
2121    /// The weight of the service instance.
2122    ///
2123    /// Required.
2124    pub weight: Option<u16>,
2125    /// The TTL of the service instance.
2126    ///
2127    /// Required.
2128    pub ttl: Option<i64>,
2129    /// The lease time of a service.
2130    ///
2131    /// Required.
2132    pub lease: Option<i64>,
2133    /// The key lease time of a host/service.
2134    ///
2135    /// Required.
2136    pub key_lease: Option<i64>,
2137    /// The TXT record data.
2138    ///
2139    /// Required.
2140    pub txt_data: Option<Vec<DnsTxtEntry>>,
2141    /// The information of a service host.
2142    ///
2143    /// Required.
2144    pub host: Option<SrpServerHost>,
2145    #[doc(hidden)]
2146    pub __source_breaking: fidl::marker::SourceBreaking,
2147}
2148
2149impl fidl::Persistable for SrpServerService {}
2150
2151/// LoWPAN Interface Telemetry Information.
2152///
2153/// The fields in this table are used for providing low-level telemetry and information about the
2154/// LoWPAN interface for debugging and statistics purposes.
2155///
2156/// All fields are optional.
2157#[derive(Clone, Debug, Default, PartialEq)]
2158pub struct Telemetry {
2159    /// The current RSSI of the radio.
2160    pub rssi: Option<i8>,
2161    /// The configured transmit power of the radio.
2162    pub tx_power: Option<i8>,
2163    /// The current channel index of the radio.
2164    pub channel_index: Option<u16>,
2165    /// The partition ID of the currently associated network partition.
2166    pub partition_id: Option<u32>,
2167    /// The version string describing the underlying mesh stack.
2168    pub stack_version: Option<String>,
2169    /// The version string describing the underlying radio control firmware.
2170    pub rcp_version: Option<String>,
2171    /// Thread link mode byte.
2172    ///
2173    /// Only present on Thread networks.
2174    ///
2175    /// Defined by section 4.5.2 of the Thread 1.1.1 specification ("Mode TLV").
2176    pub thread_link_mode: Option<u8>,
2177    /// The router ID of this device in the currently associated network.
2178    ///
2179    /// Only present on Thread networks.
2180    pub thread_router_id: Option<u8>,
2181    /// The current RLOC16 address of this node.
2182    ///
2183    /// Only present on Thread networks.
2184    pub thread_rloc: Option<u16>,
2185    /// The full network data version.
2186    ///
2187    /// Only present on Thread networks.
2188    pub thread_network_data_version: Option<u8>,
2189    /// The stable network data version.
2190    ///
2191    /// Only present on Thread networks.
2192    pub thread_stable_network_data_version: Option<u8>,
2193    /// The current Thread network data, in raw binary form, as defined in section 5.13 of
2194    /// the Thread 1.1.1 specification.
2195    ///
2196    /// Only present on Thread networks.
2197    pub thread_network_data: Option<Vec<u8>>,
2198    /// The current Thread stable network data, in raw binary form, as defined in section 5.13 of
2199    /// the Thread 1.1.1 specification.
2200    ///
2201    /// Only present on Thread networks.
2202    pub thread_stable_network_data: Option<Vec<u8>>,
2203    /// The counters associated with border routing messages.
2204    ///
2205    /// Only present on Thread networks.
2206    pub thread_border_routing_counters: Option<BorderRoutingCounters>,
2207    /// The SRP server information.
2208    ///
2209    /// Only present on Thread networks.
2210    pub srp_server_info: Option<SrpServerInfo>,
2211    /// The DNS-SD server counters.
2212    ///
2213    /// Only present on Thread networks.
2214    pub dnssd_counters: Option<DnssdCounters>,
2215    /// The data associated with the leader of the currently associated Thread network.
2216    ///
2217    /// Only present on Thread networks.
2218    pub leader_data: Option<LeaderData>,
2219    /// The uptime of the current instance.
2220    ///
2221    /// Required.
2222    pub uptime: Option<i64>,
2223    /// Information about the NAT64
2224    ///
2225    /// Only present on Thread networks.
2226    pub nat64_info: Option<Nat64Info>,
2227    /// Information about the TREL interface, if available.
2228    ///
2229    /// Only present on Thread networks.
2230    pub trel_counters: Option<TrelCounters>,
2231    /// Information about the TREL peers, if available.
2232    ///
2233    /// Only present on Thread networks.
2234    pub trel_peers_info: Option<TrelPeersInfo>,
2235    /// Information about the Upstream DNS feature, if available.
2236    ///
2237    /// Only present on Thread networks.
2238    pub upstream_dns_info: Option<UpstreamDnsInfo>,
2239    /// Information about the DHCPv6 PD feature, if available.
2240    ///
2241    /// Only present on Thread networks.
2242    pub dhcp6pd_info: Option<Dhcp6PdInfo>,
2243    /// Link Metrics Manager related info, if available.
2244    ///
2245    /// Only present on Thread networks.
2246    pub link_metrics_entries: Option<Vec<LinkMetricsEntry>>,
2247    /// Counters related to border agent functionality.
2248    ///
2249    /// Only present on Thread networks.
2250    pub border_agent_counters: Option<fidl_fuchsia_lowpan_device_common::BorderAgentCounters>,
2251    /// Whether multi-AIL (Adjacent Infrastructure Link) scenario is detected.
2252    ///
2253    /// Only present on Thread networks.
2254    pub multi_ail_detected: Option<bool>,
2255    /// The Extended PAN ID of the currently associated Thread network. This 8-byte unique
2256    /// identifier is used to distinguish different Thread networks.
2257    ///
2258    /// Only present on Thread networks.
2259    pub extended_pan_id: Option<u64>,
2260    /// Thread Border Routing peers information.
2261    ///
2262    /// Only present on Thread networks.
2263    pub border_routing_peers: Option<Vec<BorderRoutingPeer>>,
2264    /// Thread Border Routing discovered routers by Border Routing Manager on the infrastructure link.
2265    ///
2266    /// Only present on Thread networks.
2267    pub border_routing_routers: Option<Vec<BorderRoutingRouter>>,
2268    /// Thread Active Operational Dataset.
2269    ///
2270    /// Only present on Thread networks.
2271    pub active_dataset: Option<OperationalDataset>,
2272    /// The multi radio link information associated with a neighbor with a given Extended Address.
2273    ///
2274    /// Only present on Thread networks.
2275    pub multiradio_neighbor_info: Option<Vec<MultiRadioNeighborInfo>>,
2276    /// Information regarding all active routers within the Thread network.
2277    ///
2278    /// Only present on Thread networks.
2279    pub router_info: Option<Vec<RouterInfo>>,
2280    /// Full Network Data received from the Leader.
2281    ///
2282    /// Only present on Thread networks.
2283    pub network_data: Option<NetworkData>,
2284    /// Aggregates Thread network events histories from the History Tracker.
2285    ///
2286    /// Only present on Thread networks.
2287    pub history_report: Option<ThreadHistoryReport>,
2288    /// IPv6 unicast address list configured on a Thread interface.
2289    ///
2290    /// Only present on Thread Networks.
2291    pub ipaddrs: Option<Vec<NetifAddress>>,
2292    /// IPv6 multicast address list configured on a Thread interface.
2293    ///
2294    /// Only present on Thread Networks.
2295    pub ipmaddrs: Option<Vec<fidl_fuchsia_net_common::Ipv6Address>>,
2296    /// Thread Border Routing discovered prefixes by Border Routing Manager
2297    /// on the infrastructure link.
2298    ///
2299    /// Only present on Thread networks.
2300    pub border_routing_prefixes: Option<Vec<BorderRoutingPrefixTable>>,
2301    /// Thread Border Routing discovered Recursive DNS Server (RDNSS) by Border
2302    /// Routing Manager on the infrastructure link.
2303    ///
2304    /// Only present on Thread networks.
2305    pub border_routing_rdnsses: Option<Vec<BorderRoutingRdnss>>,
2306    /// The UDP Sockets information.
2307    ///
2308    /// Only present on Thread networks.
2309    pub netstat: Option<Vec<UdpSocket>>,
2310    /// The EID-to-RLOC cache entries.
2311    ///
2312    /// Only present on Thread networks.
2313    pub eid_cache_entries: Option<Vec<EidCacheEntry>>,
2314    /// CCA threshold in dBm measured at the antenna connector.
2315    ///
2316    /// Only present on Thread networks.
2317    pub cca_threshold: Option<i8>,
2318    /// CSL information.
2319    ///
2320    /// Only present on Thread networks.
2321    pub csl_info: Option<CslInfo>,
2322    /// Buffer information.
2323    ///
2324    /// Only present on Thread networks.
2325    pub buffer_info: Option<BufferInfo>,
2326    /// The counters of the MLE protocol.
2327    ///
2328    /// Only present on Thread networks.
2329    pub mle_counters: Option<fidl_fuchsia_lowpan_device_common::MleCounters>,
2330    #[doc(hidden)]
2331    pub __source_breaking: fidl::marker::SourceBreaking,
2332}
2333
2334impl fidl::Persistable for Telemetry {}
2335
2336/// Represents Thread network event histories from the History Tracker.
2337#[derive(Clone, Debug, Default, PartialEq)]
2338pub struct ThreadHistoryReport {
2339    /// Thread network info history.
2340    ///
2341    /// Required.
2342    pub net_info_history: Option<Vec<ThreadNetworkInfoEntry>>,
2343    /// Thread neighbor info history.
2344    ///
2345    /// Required.
2346    pub neighbor_info_history: Option<Vec<ThreadNeighborInfoEntry>>,
2347    /// Thread router table entry event history.
2348    ///
2349    /// Required.
2350    pub router_info_history: Option<Vec<ThreadRouterInfoEntry>>,
2351    /// Thread network data on-mesh prefix info history.
2352    ///
2353    /// Required.
2354    pub prefix_info_history: Option<Vec<ThreadNetDataPrefixInfoEntry>>,
2355    /// Thread network data external route info history.
2356    ///
2357    /// Required.
2358    pub route_info_history: Option<Vec<ThreadNetDataRouteInfoEntry>>,
2359    #[doc(hidden)]
2360    pub __source_breaking: fidl::marker::SourceBreaking,
2361}
2362
2363impl fidl::Persistable for ThreadHistoryReport {}
2364
2365/// Represents an MLE Link Mode configuration.
2366///
2367/// Derived from `otLinkModeConfig`(https://openthread.io/reference/struct/ot-link-mode-config)
2368#[derive(Clone, Debug, Default, PartialEq)]
2369pub struct ThreadLinkMode {
2370    /// Whether the sender has its receiver on when not transmitting.
2371    ///
2372    /// Required.
2373    pub rx_on_when_idle: Option<bool>,
2374    /// Whether the sender is an FTD.
2375    ///
2376    /// Required.
2377    pub device_type: Option<bool>,
2378    /// Whether the sender requires the full Network Data.
2379    ///
2380    /// Required.
2381    pub network_data: Option<bool>,
2382    #[doc(hidden)]
2383    pub __source_breaking: fidl::marker::SourceBreaking,
2384}
2385
2386impl fidl::Persistable for ThreadLinkMode {}
2387
2388/// Represents a single entry in the Thread Neighbor Table history.
2389#[derive(Clone, Debug, Default, PartialEq)]
2390pub struct ThreadNeighborInfoEntry {
2391    /// Time elapsed since the command was issued.
2392    ///
2393    /// Required.
2394    pub age: Option<i64>,
2395    /// Device type: either "Child" or "Router".
2396    ///
2397    /// Required.
2398    pub is_child: Option<bool>,
2399    /// Neighbor Event. Possible values:
2400    /// `otHistoryTrackerNeighborEvent::OT_HISTORY_TRACKER_NEIGHBOR_EVENT_ADDED`,
2401    /// `otHistoryTrackerNeighborEvent::OT_HISTORY_TRACKER_NEIGHBOR_EVENT_REMOVED`,
2402    /// `otHistoryTrackerNeighborEvent::OT_HISTORY_TRACKER_NEIGHBOR_EVENT_CHANGED`,
2403    /// `otHistoryTrackerNeighborEvent::OT_HISTORY_TRACKER_NEIGHBOR_EVENT_RESTORING`.
2404    ///
2405    /// Required.
2406    pub event: Option<HistoryTrackerNeighborEvent>,
2407    /// The extended address of this neighbor.
2408    ///
2409    /// Required.
2410    pub extended_address: Option<Vec<u8>>,
2411    /// Neighbor's RLOC16.
2412    ///
2413    /// Required.
2414    pub rloc16: Option<u16>,
2415    /// MLE link mode.
2416    ///
2417    /// Required.
2418    pub mode: Option<ThreadLinkMode>,
2419    /// Average received signal strength (in dBm) associated with the
2420    /// frames received from the neighbors.
2421    ///
2422    /// Required.
2423    pub avg_rssi: Option<i32>,
2424    #[doc(hidden)]
2425    pub __source_breaking: fidl::marker::SourceBreaking,
2426}
2427
2428impl fidl::Persistable for ThreadNeighborInfoEntry {}
2429
2430/// Represents a single entry for an on-mesh prefix in the Network Data history.
2431#[derive(Clone, Debug, Default, PartialEq)]
2432pub struct ThreadNetDataPrefixInfoEntry {
2433    /// Time elapsed since the command was issued.
2434    ///
2435    /// Required.
2436    pub age: Option<i64>,
2437    /// Net data event for this prefix. Possible values:
2438    /// `otHistoryTrackerNetDataEvent::OT_HISTORY_TRACKER_NET_DATA_ENTRY_ADDED`,
2439    /// `otHistoryTrackerNetDataEvent::OT_HISTORY_TRACKER_NET_DATA_ENTRY_REMOVED`.
2440    ///
2441    /// Required.
2442    pub event: Option<HistoryTrackerNetDataEvent>,
2443    /// Border Router configuration.
2444    ///
2445    /// Required.
2446    pub on_mesh_prefix: Option<BorderRouterConfig>,
2447    #[doc(hidden)]
2448    pub __source_breaking: fidl::marker::SourceBreaking,
2449}
2450
2451impl fidl::Persistable for ThreadNetDataPrefixInfoEntry {}
2452
2453/// Represents a single entry for an external route in the Network Data history.
2454#[derive(Clone, Debug, Default, PartialEq)]
2455pub struct ThreadNetDataRouteInfoEntry {
2456    /// Time elapsed since the command was issued.
2457    ///
2458    /// Required.
2459    pub age: Option<i64>,
2460    /// Net data event for this route. Possible values:
2461    /// `otHistoryTrackerNetDataEvent::OT_HISTORY_TRACKER_NET_DATA_ENTRY_ADDED`,
2462    /// `otHistoryTrackerNetDataEvent::OT_HISTORY_TRACKER_NET_DATA_ENTRY_REMOVED`.
2463    ///
2464    /// Required.
2465    pub event: Option<HistoryTrackerNetDataEvent>,
2466    /// External Route configuration.
2467    ///
2468    /// Required.
2469    pub external_route: Option<ExternalRouteConfig>,
2470    #[doc(hidden)]
2471    pub __source_breaking: fidl::marker::SourceBreaking,
2472}
2473
2474impl fidl::Persistable for ThreadNetDataRouteInfoEntry {}
2475
2476/// Represents a single entry in the Thread Network Information history.
2477#[derive(Clone, Debug, Default, PartialEq)]
2478pub struct ThreadNetworkInfoEntry {
2479    /// Time elapsed since the command was issued.
2480    ///
2481    /// Required.
2482    pub age: Option<i64>,
2483    /// Device role. Possible values:
2484    /// `otDeviceRole::OT_DEVICE_ROLE_DISABLED`,
2485    /// `otDeviceRole::OT_DEVICE_ROLE_DETACHED`,
2486    /// `otDeviceRole::OT_DEVICE_ROLE_CHILD`,
2487    /// `otDeviceRole::OT_DEVICE_ROLE_ROUTER`.
2488    ///
2489    /// Required.
2490    pub role: Option<fidl_fuchsia_lowpan_device_common::Role>,
2491    /// MLE link mode.
2492    ///
2493    /// Required.
2494    pub mode: Option<ThreadLinkMode>,
2495    /// The device RLOC16.
2496    ///
2497    /// Required.
2498    pub rloc16: Option<u16>,
2499    /// Thread Network Partition ID.
2500    ///
2501    /// Required.
2502    pub partition_id: Option<u32>,
2503    #[doc(hidden)]
2504    pub __source_breaking: fidl::marker::SourceBreaking,
2505}
2506
2507impl fidl::Persistable for ThreadNetworkInfoEntry {}
2508
2509/// Represents a single entry in the Thread Router Table history.
2510#[derive(Clone, Debug, Default, PartialEq)]
2511pub struct ThreadRouterInfoEntry {
2512    /// Time elapsed since the command was issued.
2513    ///
2514    /// Required.
2515    pub age: Option<i64>,
2516    /// Router Event. Possible values:
2517    /// `otHistoryTrackerRouterEvent::OT_HISTORY_TRACKER_ROUTER_EVENT_ADDED`,
2518    /// `otHistoryTrackerRouterEvent::OT_HISTORY_TRACKER_ROUTER_EVENT_REMOVED`,
2519    /// `otHistoryTrackerRouterEvent::OT_HISTORY_TRACKER_ROUTER_EVENT_NEXT_HOP_CHANGED`,
2520    /// `otHistoryTrackerRouterEvent::OT_HISTORY_TRACKER_ROUTER_EVENT_COST_CHANGED`.
2521    ///
2522    /// Required.
2523    pub event: Option<HistoryTrackerRouterEvent>,
2524    /// Router ID.
2525    ///
2526    /// Required.
2527    pub router_id: Option<u8>,
2528    /// Router's RLOC16.
2529    ///
2530    /// Required.
2531    pub router_rloc16: Option<u16>,
2532    /// Router ID of the next hop.
2533    ///
2534    /// Required.
2535    pub next_hop_id: Option<u8>,
2536    /// RLOC16 of the next hop.
2537    ///
2538    /// Required.
2539    pub next_hop_rloc16: Option<u16>,
2540    /// Old path cost to the router.
2541    ///
2542    /// Required.
2543    pub old_path_cost: Option<u8>,
2544    /// New path cost to the router.
2545    ///
2546    /// Required.
2547    pub new_path_cost: Option<u8>,
2548    #[doc(hidden)]
2549    pub __source_breaking: fidl::marker::SourceBreaking,
2550}
2551
2552impl fidl::Persistable for ThreadRouterInfoEntry {}
2553
2554/// Represents a group of TREL related counters in the platform layer.
2555///
2556/// Derived from [`otPlatTrelCounters`]
2557/// (https://openthread.io/reference/struct/ot-plat-trel-counters).
2558#[derive(Clone, Debug, Default, PartialEq)]
2559pub struct TrelCounters {
2560    /// Sum of size of packets received through TREL.
2561    pub rx_bytes: Option<u64>,
2562    /// Number of packets received through TREL.
2563    pub rx_packets: Option<u64>,
2564    /// Sum of size of packets successfully transmitted through TREL.
2565    pub tx_bytes: Option<u64>,
2566    /// Number of packet transmission failures through TREL.
2567    pub tx_failure: Option<u64>,
2568    /// Number of packets successfully transmitted through TREL.
2569    pub tx_packets: Option<u64>,
2570    #[doc(hidden)]
2571    pub __source_breaking: fidl::marker::SourceBreaking,
2572}
2573
2574impl fidl::Persistable for TrelCounters {}
2575
2576/// Represents a TREL peer.
2577///
2578/// Derived from [`otPlatTrelCounters`](https://openthread.io/reference/struct/ot-plat-trel-counters).
2579#[derive(Clone, Debug, Default, PartialEq)]
2580pub struct TrelPeer {
2581    /// The Extended MAC Address of TREL peer.
2582    ///
2583    /// Required.
2584    pub extended_address: Option<Vec<u8>>,
2585    /// The Extended PAN Identifier of TREL peer.
2586    ///
2587    /// Required.
2588    pub extended_pan_id: Option<Vec<u8>>,
2589    /// The IPv6 socket address of TREL peer.
2590    ///
2591    /// Required.
2592    pub sock_address: Option<String>,
2593    #[doc(hidden)]
2594    pub __source_breaking: fidl::marker::SourceBreaking,
2595}
2596
2597impl fidl::Persistable for TrelPeer {}
2598
2599/// Represents the TREL peer related info.
2600///
2601/// The info is available in OpenThread via https://openthread.io/reference/group/api-trel
2602/// More fields may be added per request.
2603#[derive(Clone, Debug, Default, PartialEq)]
2604pub struct TrelPeersInfo {
2605    /// Number of TREL peers for this Thread Border Router.
2606    ///
2607    /// Required.
2608    pub num_trel_peers: Option<u16>,
2609    /// Represents TREL peers of this Thread Border Router.
2610    ///
2611    /// Required.
2612    pub trel_peers: Option<Vec<TrelPeer>>,
2613    #[doc(hidden)]
2614    pub __source_breaking: fidl::marker::SourceBreaking,
2615}
2616
2617impl fidl::Persistable for TrelPeersInfo {}
2618
2619/// Represents a UDP socket.
2620#[derive(Clone, Debug, Default, PartialEq)]
2621pub struct UdpSocket {
2622    /// The local IPv6 socket address.
2623    ///
2624    /// Required.
2625    pub sock_name: Option<String>,
2626    /// The peer IPv6 socket address.
2627    ///
2628    /// Required.
2629    pub peer_name: Option<String>,
2630    #[doc(hidden)]
2631    pub __source_breaking: fidl::marker::SourceBreaking,
2632}
2633
2634impl fidl::Persistable for UdpSocket {}
2635
2636/// Represents the count of queries, responses, failures handled by upstream DNS server
2637///
2638/// Derived from `otUpstreamDnsCounters`(https://openthread.io/reference/group/api-dnssd-server)
2639#[derive(Clone, Debug, Default, PartialEq)]
2640pub struct UpstreamDnsCounters {
2641    /// The number of queries forwarded
2642    ///
2643    /// Required.
2644    pub queries: Option<u32>,
2645    /// The number of responses forwarded
2646    ///
2647    /// Required.
2648    pub responses: Option<u32>,
2649    /// The number of upstream DNS failures
2650    ///
2651    /// Required.
2652    pub failures: Option<u32>,
2653    #[doc(hidden)]
2654    pub __source_breaking: fidl::marker::SourceBreaking,
2655}
2656
2657impl fidl::Persistable for UpstreamDnsCounters {}
2658
2659/// Represents the Upstream DNS related info.
2660///
2661/// The info is available in OpenThread via https://openthread.io/reference/group/api-dnssd-server
2662/// More fields may be added per request.
2663#[derive(Clone, Debug, Default, PartialEq)]
2664pub struct UpstreamDnsInfo {
2665    /// State of upstream DNS query.
2666    ///
2667    /// Required.
2668    pub upstream_dns_query_state: Option<UpstreamDnsQueryState>,
2669    #[doc(hidden)]
2670    pub __source_breaking: fidl::marker::SourceBreaking,
2671}
2672
2673impl fidl::Persistable for UpstreamDnsInfo {}
2674
2675/// Parameters for DeviceExtra::JoinNetwork command.
2676#[derive(Clone, Debug)]
2677pub enum JoinParams {
2678    /// Attempts to find and join a known pre-existing network.
2679    ProvisioningParameter(fidl_fuchsia_lowpan_device_common::ProvisioningParams),
2680    /// Attempts to find and join an unknown pre-existing network
2681    /// that is configured to accept and provision devices with
2682    /// the given shared secret, or PSKd. This allows new devices to
2683    /// join existing networks without knowing the credentials for
2684    /// the specific network.
2685    JoinerParameter(JoinerCommissioningParams),
2686    #[doc(hidden)]
2687    __SourceBreaking { unknown_ordinal: u64 },
2688}
2689
2690/// Pattern that matches an unknown `JoinParams` member.
2691#[macro_export]
2692macro_rules! JoinParamsUnknown {
2693    () => {
2694        _
2695    };
2696}
2697
2698// Custom PartialEq so that unknown variants are not equal to themselves.
2699impl PartialEq for JoinParams {
2700    fn eq(&self, other: &Self) -> bool {
2701        match (self, other) {
2702            (Self::ProvisioningParameter(x), Self::ProvisioningParameter(y)) => *x == *y,
2703            (Self::JoinerParameter(x), Self::JoinerParameter(y)) => *x == *y,
2704            _ => false,
2705        }
2706    }
2707}
2708
2709impl JoinParams {
2710    #[inline]
2711    pub fn ordinal(&self) -> u64 {
2712        match *self {
2713            Self::ProvisioningParameter(_) => 1,
2714            Self::JoinerParameter(_) => 2,
2715            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
2716        }
2717    }
2718
2719    #[inline]
2720    pub fn unknown_variant_for_testing() -> Self {
2721        Self::__SourceBreaking { unknown_ordinal: 0 }
2722    }
2723
2724    #[inline]
2725    pub fn is_unknown(&self) -> bool {
2726        match self {
2727            Self::__SourceBreaking { .. } => true,
2728            _ => false,
2729        }
2730    }
2731}
2732
2733impl fidl::Persistable for JoinParams {}
2734
2735/// Indicates the current status of the form/join operation.
2736///
2737/// Returned by [`ProvisioningMonitor.WatchProgress`].
2738#[derive(Clone, Debug)]
2739pub enum ProvisioningProgress {
2740    /// Approximate percent complete indication for a user interface.
2741    Progress(f32),
2742    /// The final Identity when the operation has completed successfully.
2743    Identity(fidl_fuchsia_lowpan_device_common::Identity),
2744    #[doc(hidden)]
2745    __SourceBreaking { unknown_ordinal: u64 },
2746}
2747
2748/// Pattern that matches an unknown `ProvisioningProgress` member.
2749#[macro_export]
2750macro_rules! ProvisioningProgressUnknown {
2751    () => {
2752        _
2753    };
2754}
2755
2756// Custom PartialEq so that unknown variants are not equal to themselves.
2757impl PartialEq for ProvisioningProgress {
2758    fn eq(&self, other: &Self) -> bool {
2759        match (self, other) {
2760            (Self::Progress(x), Self::Progress(y)) => *x == *y,
2761            (Self::Identity(x), Self::Identity(y)) => *x == *y,
2762            _ => false,
2763        }
2764    }
2765}
2766
2767impl ProvisioningProgress {
2768    #[inline]
2769    pub fn ordinal(&self) -> u64 {
2770        match *self {
2771            Self::Progress(_) => 1,
2772            Self::Identity(_) => 2,
2773            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
2774        }
2775    }
2776
2777    #[inline]
2778    pub fn unknown_variant_for_testing() -> Self {
2779        Self::__SourceBreaking { unknown_ordinal: 0 }
2780    }
2781
2782    #[inline]
2783    pub fn is_unknown(&self) -> bool {
2784        match self {
2785            Self::__SourceBreaking { .. } => true,
2786            _ => false,
2787        }
2788    }
2789}
2790
2791impl fidl::Persistable for ProvisioningProgress {}
2792
2793pub mod beacon_info_stream_ordinals {
2794    pub const NEXT: u64 = 0x367a557363a340b6;
2795}
2796
2797pub mod device_ordinals {
2798    pub const GET_SUPPORTED_CHANNELS: u64 = 0x2d8b969a9bd70f23;
2799}
2800
2801pub mod device_connector_ordinals {
2802    pub const CONNECT: u64 = 0x296896c9304836cd;
2803}
2804
2805pub mod device_extra_ordinals {
2806    pub const FORM_NETWORK: u64 = 0x6a8135f84bfc90e;
2807    pub const JOIN_NETWORK: u64 = 0x3ea583bab79f81c0;
2808    pub const START_NETWORK_SCAN: u64 = 0x6288c73b79188b40;
2809}
2810
2811pub mod device_extra_connector_ordinals {
2812    pub const CONNECT: u64 = 0x3fcb37e4226c81e9;
2813}
2814
2815pub mod device_route_ordinals {
2816    pub const REGISTER_ON_MESH_PREFIX: u64 = 0x2c4135231eb97f61;
2817    pub const UNREGISTER_ON_MESH_PREFIX: u64 = 0x82d5184028b797f;
2818    pub const REGISTER_EXTERNAL_ROUTE: u64 = 0x75f70f0fc34a5a73;
2819    pub const UNREGISTER_EXTERNAL_ROUTE: u64 = 0x3769be353b1d7088;
2820}
2821
2822pub mod device_route_connector_ordinals {
2823    pub const CONNECT: u64 = 0x19cd5fdcb971f4ac;
2824}
2825
2826pub mod device_route_extra_ordinals {
2827    pub const GET_LOCAL_ON_MESH_PREFIXES: u64 = 0xf192c43311c811;
2828    pub const GET_LOCAL_EXTERNAL_ROUTES: u64 = 0x5a688c2e62c766a6;
2829}
2830
2831pub mod device_route_extra_connector_ordinals {
2832    pub const CONNECT: u64 = 0x12f72df7b1348fe2;
2833}
2834
2835pub mod legacy_joining_ordinals {
2836    pub const MAKE_JOINABLE: u64 = 0x1739a6ae36d5c5aa;
2837}
2838
2839pub mod legacy_joining_connector_ordinals {
2840    pub const CONNECT: u64 = 0x3c8dfeb943bb8d06;
2841}
2842
2843pub mod provisioning_monitor_ordinals {
2844    pub const WATCH_PROGRESS: u64 = 0xc35336fc43ac0c;
2845}
2846
2847pub mod telemetry_provider_ordinals {
2848    pub const GET_TELEMETRY: u64 = 0xc34f2fff7dacc41;
2849}
2850
2851pub mod telemetry_provider_connector_ordinals {
2852    pub const CONNECT: u64 = 0x24a5bf1be73e2fad;
2853}
2854
2855mod internal {
2856    use super::*;
2857    unsafe impl fidl::encoding::TypeMarker for AddressOrigin {
2858        type Owned = Self;
2859
2860        #[inline(always)]
2861        fn inline_align(_context: fidl::encoding::Context) -> usize {
2862            std::mem::align_of::<u8>()
2863        }
2864
2865        #[inline(always)]
2866        fn inline_size(_context: fidl::encoding::Context) -> usize {
2867            std::mem::size_of::<u8>()
2868        }
2869
2870        #[inline(always)]
2871        fn encode_is_copy() -> bool {
2872            true
2873        }
2874
2875        #[inline(always)]
2876        fn decode_is_copy() -> bool {
2877            false
2878        }
2879    }
2880
2881    impl fidl::encoding::ValueTypeMarker for AddressOrigin {
2882        type Borrowed<'a> = Self;
2883        #[inline(always)]
2884        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2885            *value
2886        }
2887    }
2888
2889    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for AddressOrigin {
2890        #[inline]
2891        unsafe fn encode(
2892            self,
2893            encoder: &mut fidl::encoding::Encoder<'_, D>,
2894            offset: usize,
2895            _depth: fidl::encoding::Depth,
2896        ) -> fidl::Result<()> {
2897            encoder.debug_check_bounds::<Self>(offset);
2898            encoder.write_num(self.into_primitive(), offset);
2899            Ok(())
2900        }
2901    }
2902
2903    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AddressOrigin {
2904        #[inline(always)]
2905        fn new_empty() -> Self {
2906            Self::Thread
2907        }
2908
2909        #[inline]
2910        unsafe fn decode(
2911            &mut self,
2912            decoder: &mut fidl::encoding::Decoder<'_, D>,
2913            offset: usize,
2914            _depth: fidl::encoding::Depth,
2915        ) -> fidl::Result<()> {
2916            decoder.debug_check_bounds::<Self>(offset);
2917            let prim = decoder.read_num::<u8>(offset);
2918
2919            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
2920            Ok(())
2921        }
2922    }
2923    unsafe impl fidl::encoding::TypeMarker for CacheEntryState {
2924        type Owned = Self;
2925
2926        #[inline(always)]
2927        fn inline_align(_context: fidl::encoding::Context) -> usize {
2928            std::mem::align_of::<u8>()
2929        }
2930
2931        #[inline(always)]
2932        fn inline_size(_context: fidl::encoding::Context) -> usize {
2933            std::mem::size_of::<u8>()
2934        }
2935
2936        #[inline(always)]
2937        fn encode_is_copy() -> bool {
2938            true
2939        }
2940
2941        #[inline(always)]
2942        fn decode_is_copy() -> bool {
2943            false
2944        }
2945    }
2946
2947    impl fidl::encoding::ValueTypeMarker for CacheEntryState {
2948        type Borrowed<'a> = Self;
2949        #[inline(always)]
2950        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2951            *value
2952        }
2953    }
2954
2955    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
2956        for CacheEntryState
2957    {
2958        #[inline]
2959        unsafe fn encode(
2960            self,
2961            encoder: &mut fidl::encoding::Encoder<'_, D>,
2962            offset: usize,
2963            _depth: fidl::encoding::Depth,
2964        ) -> fidl::Result<()> {
2965            encoder.debug_check_bounds::<Self>(offset);
2966            encoder.write_num(self.into_primitive(), offset);
2967            Ok(())
2968        }
2969    }
2970
2971    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for CacheEntryState {
2972        #[inline(always)]
2973        fn new_empty() -> Self {
2974            Self::Cached
2975        }
2976
2977        #[inline]
2978        unsafe fn decode(
2979            &mut self,
2980            decoder: &mut fidl::encoding::Decoder<'_, D>,
2981            offset: usize,
2982            _depth: fidl::encoding::Depth,
2983        ) -> fidl::Result<()> {
2984            decoder.debug_check_bounds::<Self>(offset);
2985            let prim = decoder.read_num::<u8>(offset);
2986
2987            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
2988            Ok(())
2989        }
2990    }
2991    unsafe impl fidl::encoding::TypeMarker for Dhcp6PdState {
2992        type Owned = Self;
2993
2994        #[inline(always)]
2995        fn inline_align(_context: fidl::encoding::Context) -> usize {
2996            std::mem::align_of::<u32>()
2997        }
2998
2999        #[inline(always)]
3000        fn inline_size(_context: fidl::encoding::Context) -> usize {
3001            std::mem::size_of::<u32>()
3002        }
3003
3004        #[inline(always)]
3005        fn encode_is_copy() -> bool {
3006            false
3007        }
3008
3009        #[inline(always)]
3010        fn decode_is_copy() -> bool {
3011            false
3012        }
3013    }
3014
3015    impl fidl::encoding::ValueTypeMarker for Dhcp6PdState {
3016        type Borrowed<'a> = Self;
3017        #[inline(always)]
3018        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3019            *value
3020        }
3021    }
3022
3023    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for Dhcp6PdState {
3024        #[inline]
3025        unsafe fn encode(
3026            self,
3027            encoder: &mut fidl::encoding::Encoder<'_, D>,
3028            offset: usize,
3029            _depth: fidl::encoding::Depth,
3030        ) -> fidl::Result<()> {
3031            encoder.debug_check_bounds::<Self>(offset);
3032            encoder.write_num(self.into_primitive(), offset);
3033            Ok(())
3034        }
3035    }
3036
3037    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Dhcp6PdState {
3038        #[inline(always)]
3039        fn new_empty() -> Self {
3040            Self::unknown()
3041        }
3042
3043        #[inline]
3044        unsafe fn decode(
3045            &mut self,
3046            decoder: &mut fidl::encoding::Decoder<'_, D>,
3047            offset: usize,
3048            _depth: fidl::encoding::Depth,
3049        ) -> fidl::Result<()> {
3050            decoder.debug_check_bounds::<Self>(offset);
3051            let prim = decoder.read_num::<u32>(offset);
3052
3053            *self = Self::from_primitive_allow_unknown(prim);
3054            Ok(())
3055        }
3056    }
3057    unsafe impl fidl::encoding::TypeMarker for HistoryTrackerNeighborEvent {
3058        type Owned = Self;
3059
3060        #[inline(always)]
3061        fn inline_align(_context: fidl::encoding::Context) -> usize {
3062            std::mem::align_of::<u8>()
3063        }
3064
3065        #[inline(always)]
3066        fn inline_size(_context: fidl::encoding::Context) -> usize {
3067            std::mem::size_of::<u8>()
3068        }
3069
3070        #[inline(always)]
3071        fn encode_is_copy() -> bool {
3072            true
3073        }
3074
3075        #[inline(always)]
3076        fn decode_is_copy() -> bool {
3077            false
3078        }
3079    }
3080
3081    impl fidl::encoding::ValueTypeMarker for HistoryTrackerNeighborEvent {
3082        type Borrowed<'a> = Self;
3083        #[inline(always)]
3084        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3085            *value
3086        }
3087    }
3088
3089    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
3090        for HistoryTrackerNeighborEvent
3091    {
3092        #[inline]
3093        unsafe fn encode(
3094            self,
3095            encoder: &mut fidl::encoding::Encoder<'_, D>,
3096            offset: usize,
3097            _depth: fidl::encoding::Depth,
3098        ) -> fidl::Result<()> {
3099            encoder.debug_check_bounds::<Self>(offset);
3100            encoder.write_num(self.into_primitive(), offset);
3101            Ok(())
3102        }
3103    }
3104
3105    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
3106        for HistoryTrackerNeighborEvent
3107    {
3108        #[inline(always)]
3109        fn new_empty() -> Self {
3110            Self::Added
3111        }
3112
3113        #[inline]
3114        unsafe fn decode(
3115            &mut self,
3116            decoder: &mut fidl::encoding::Decoder<'_, D>,
3117            offset: usize,
3118            _depth: fidl::encoding::Depth,
3119        ) -> fidl::Result<()> {
3120            decoder.debug_check_bounds::<Self>(offset);
3121            let prim = decoder.read_num::<u8>(offset);
3122
3123            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
3124            Ok(())
3125        }
3126    }
3127    unsafe impl fidl::encoding::TypeMarker for HistoryTrackerNetDataEvent {
3128        type Owned = Self;
3129
3130        #[inline(always)]
3131        fn inline_align(_context: fidl::encoding::Context) -> usize {
3132            std::mem::align_of::<u8>()
3133        }
3134
3135        #[inline(always)]
3136        fn inline_size(_context: fidl::encoding::Context) -> usize {
3137            std::mem::size_of::<u8>()
3138        }
3139
3140        #[inline(always)]
3141        fn encode_is_copy() -> bool {
3142            true
3143        }
3144
3145        #[inline(always)]
3146        fn decode_is_copy() -> bool {
3147            false
3148        }
3149    }
3150
3151    impl fidl::encoding::ValueTypeMarker for HistoryTrackerNetDataEvent {
3152        type Borrowed<'a> = Self;
3153        #[inline(always)]
3154        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3155            *value
3156        }
3157    }
3158
3159    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
3160        for HistoryTrackerNetDataEvent
3161    {
3162        #[inline]
3163        unsafe fn encode(
3164            self,
3165            encoder: &mut fidl::encoding::Encoder<'_, D>,
3166            offset: usize,
3167            _depth: fidl::encoding::Depth,
3168        ) -> fidl::Result<()> {
3169            encoder.debug_check_bounds::<Self>(offset);
3170            encoder.write_num(self.into_primitive(), offset);
3171            Ok(())
3172        }
3173    }
3174
3175    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
3176        for HistoryTrackerNetDataEvent
3177    {
3178        #[inline(always)]
3179        fn new_empty() -> Self {
3180            Self::Added
3181        }
3182
3183        #[inline]
3184        unsafe fn decode(
3185            &mut self,
3186            decoder: &mut fidl::encoding::Decoder<'_, D>,
3187            offset: usize,
3188            _depth: fidl::encoding::Depth,
3189        ) -> fidl::Result<()> {
3190            decoder.debug_check_bounds::<Self>(offset);
3191            let prim = decoder.read_num::<u8>(offset);
3192
3193            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
3194            Ok(())
3195        }
3196    }
3197    unsafe impl fidl::encoding::TypeMarker for HistoryTrackerRouterEvent {
3198        type Owned = Self;
3199
3200        #[inline(always)]
3201        fn inline_align(_context: fidl::encoding::Context) -> usize {
3202            std::mem::align_of::<u8>()
3203        }
3204
3205        #[inline(always)]
3206        fn inline_size(_context: fidl::encoding::Context) -> usize {
3207            std::mem::size_of::<u8>()
3208        }
3209
3210        #[inline(always)]
3211        fn encode_is_copy() -> bool {
3212            true
3213        }
3214
3215        #[inline(always)]
3216        fn decode_is_copy() -> bool {
3217            false
3218        }
3219    }
3220
3221    impl fidl::encoding::ValueTypeMarker for HistoryTrackerRouterEvent {
3222        type Borrowed<'a> = Self;
3223        #[inline(always)]
3224        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3225            *value
3226        }
3227    }
3228
3229    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
3230        for HistoryTrackerRouterEvent
3231    {
3232        #[inline]
3233        unsafe fn encode(
3234            self,
3235            encoder: &mut fidl::encoding::Encoder<'_, D>,
3236            offset: usize,
3237            _depth: fidl::encoding::Depth,
3238        ) -> fidl::Result<()> {
3239            encoder.debug_check_bounds::<Self>(offset);
3240            encoder.write_num(self.into_primitive(), offset);
3241            Ok(())
3242        }
3243    }
3244
3245    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
3246        for HistoryTrackerRouterEvent
3247    {
3248        #[inline(always)]
3249        fn new_empty() -> Self {
3250            Self::Added
3251        }
3252
3253        #[inline]
3254        unsafe fn decode(
3255            &mut self,
3256            decoder: &mut fidl::encoding::Decoder<'_, D>,
3257            offset: usize,
3258            _depth: fidl::encoding::Depth,
3259        ) -> fidl::Result<()> {
3260            decoder.debug_check_bounds::<Self>(offset);
3261            let prim = decoder.read_num::<u8>(offset);
3262
3263            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
3264            Ok(())
3265        }
3266    }
3267    unsafe impl fidl::encoding::TypeMarker for Nat64State {
3268        type Owned = Self;
3269
3270        #[inline(always)]
3271        fn inline_align(_context: fidl::encoding::Context) -> usize {
3272            std::mem::align_of::<u32>()
3273        }
3274
3275        #[inline(always)]
3276        fn inline_size(_context: fidl::encoding::Context) -> usize {
3277            std::mem::size_of::<u32>()
3278        }
3279
3280        #[inline(always)]
3281        fn encode_is_copy() -> bool {
3282            false
3283        }
3284
3285        #[inline(always)]
3286        fn decode_is_copy() -> bool {
3287            false
3288        }
3289    }
3290
3291    impl fidl::encoding::ValueTypeMarker for Nat64State {
3292        type Borrowed<'a> = Self;
3293        #[inline(always)]
3294        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3295            *value
3296        }
3297    }
3298
3299    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for Nat64State {
3300        #[inline]
3301        unsafe fn encode(
3302            self,
3303            encoder: &mut fidl::encoding::Encoder<'_, D>,
3304            offset: usize,
3305            _depth: fidl::encoding::Depth,
3306        ) -> fidl::Result<()> {
3307            encoder.debug_check_bounds::<Self>(offset);
3308            encoder.write_num(self.into_primitive(), offset);
3309            Ok(())
3310        }
3311    }
3312
3313    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Nat64State {
3314        #[inline(always)]
3315        fn new_empty() -> Self {
3316            Self::unknown()
3317        }
3318
3319        #[inline]
3320        unsafe fn decode(
3321            &mut self,
3322            decoder: &mut fidl::encoding::Decoder<'_, D>,
3323            offset: usize,
3324            _depth: fidl::encoding::Depth,
3325        ) -> fidl::Result<()> {
3326            decoder.debug_check_bounds::<Self>(offset);
3327            let prim = decoder.read_num::<u32>(offset);
3328
3329            *self = Self::from_primitive_allow_unknown(prim);
3330            Ok(())
3331        }
3332    }
3333    unsafe impl fidl::encoding::TypeMarker for ProvisionError {
3334        type Owned = Self;
3335
3336        #[inline(always)]
3337        fn inline_align(_context: fidl::encoding::Context) -> usize {
3338            std::mem::align_of::<i32>()
3339        }
3340
3341        #[inline(always)]
3342        fn inline_size(_context: fidl::encoding::Context) -> usize {
3343            std::mem::size_of::<i32>()
3344        }
3345
3346        #[inline(always)]
3347        fn encode_is_copy() -> bool {
3348            false
3349        }
3350
3351        #[inline(always)]
3352        fn decode_is_copy() -> bool {
3353            false
3354        }
3355    }
3356
3357    impl fidl::encoding::ValueTypeMarker for ProvisionError {
3358        type Borrowed<'a> = Self;
3359        #[inline(always)]
3360        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3361            *value
3362        }
3363    }
3364
3365    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for ProvisionError {
3366        #[inline]
3367        unsafe fn encode(
3368            self,
3369            encoder: &mut fidl::encoding::Encoder<'_, D>,
3370            offset: usize,
3371            _depth: fidl::encoding::Depth,
3372        ) -> fidl::Result<()> {
3373            encoder.debug_check_bounds::<Self>(offset);
3374            encoder.write_num(self.into_primitive(), offset);
3375            Ok(())
3376        }
3377    }
3378
3379    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ProvisionError {
3380        #[inline(always)]
3381        fn new_empty() -> Self {
3382            Self::unknown()
3383        }
3384
3385        #[inline]
3386        unsafe fn decode(
3387            &mut self,
3388            decoder: &mut fidl::encoding::Decoder<'_, D>,
3389            offset: usize,
3390            _depth: fidl::encoding::Depth,
3391        ) -> fidl::Result<()> {
3392            decoder.debug_check_bounds::<Self>(offset);
3393            let prim = decoder.read_num::<i32>(offset);
3394
3395            *self = Self::from_primitive_allow_unknown(prim);
3396            Ok(())
3397        }
3398    }
3399    unsafe impl fidl::encoding::TypeMarker for RoutePreference {
3400        type Owned = Self;
3401
3402        #[inline(always)]
3403        fn inline_align(_context: fidl::encoding::Context) -> usize {
3404            std::mem::align_of::<i8>()
3405        }
3406
3407        #[inline(always)]
3408        fn inline_size(_context: fidl::encoding::Context) -> usize {
3409            std::mem::size_of::<i8>()
3410        }
3411
3412        #[inline(always)]
3413        fn encode_is_copy() -> bool {
3414            true
3415        }
3416
3417        #[inline(always)]
3418        fn decode_is_copy() -> bool {
3419            false
3420        }
3421    }
3422
3423    impl fidl::encoding::ValueTypeMarker for RoutePreference {
3424        type Borrowed<'a> = Self;
3425        #[inline(always)]
3426        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3427            *value
3428        }
3429    }
3430
3431    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
3432        for RoutePreference
3433    {
3434        #[inline]
3435        unsafe fn encode(
3436            self,
3437            encoder: &mut fidl::encoding::Encoder<'_, D>,
3438            offset: usize,
3439            _depth: fidl::encoding::Depth,
3440        ) -> fidl::Result<()> {
3441            encoder.debug_check_bounds::<Self>(offset);
3442            encoder.write_num(self.into_primitive(), offset);
3443            Ok(())
3444        }
3445    }
3446
3447    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for RoutePreference {
3448        #[inline(always)]
3449        fn new_empty() -> Self {
3450            Self::Low
3451        }
3452
3453        #[inline]
3454        unsafe fn decode(
3455            &mut self,
3456            decoder: &mut fidl::encoding::Decoder<'_, D>,
3457            offset: usize,
3458            _depth: fidl::encoding::Depth,
3459        ) -> fidl::Result<()> {
3460            decoder.debug_check_bounds::<Self>(offset);
3461            let prim = decoder.read_num::<i8>(offset);
3462
3463            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
3464            Ok(())
3465        }
3466    }
3467    unsafe impl fidl::encoding::TypeMarker for SrpServerAddressMode {
3468        type Owned = Self;
3469
3470        #[inline(always)]
3471        fn inline_align(_context: fidl::encoding::Context) -> usize {
3472            std::mem::align_of::<u32>()
3473        }
3474
3475        #[inline(always)]
3476        fn inline_size(_context: fidl::encoding::Context) -> usize {
3477            std::mem::size_of::<u32>()
3478        }
3479
3480        #[inline(always)]
3481        fn encode_is_copy() -> bool {
3482            true
3483        }
3484
3485        #[inline(always)]
3486        fn decode_is_copy() -> bool {
3487            false
3488        }
3489    }
3490
3491    impl fidl::encoding::ValueTypeMarker for SrpServerAddressMode {
3492        type Borrowed<'a> = Self;
3493        #[inline(always)]
3494        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3495            *value
3496        }
3497    }
3498
3499    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
3500        for SrpServerAddressMode
3501    {
3502        #[inline]
3503        unsafe fn encode(
3504            self,
3505            encoder: &mut fidl::encoding::Encoder<'_, D>,
3506            offset: usize,
3507            _depth: fidl::encoding::Depth,
3508        ) -> fidl::Result<()> {
3509            encoder.debug_check_bounds::<Self>(offset);
3510            encoder.write_num(self.into_primitive(), offset);
3511            Ok(())
3512        }
3513    }
3514
3515    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SrpServerAddressMode {
3516        #[inline(always)]
3517        fn new_empty() -> Self {
3518            Self::Unicast
3519        }
3520
3521        #[inline]
3522        unsafe fn decode(
3523            &mut self,
3524            decoder: &mut fidl::encoding::Decoder<'_, D>,
3525            offset: usize,
3526            _depth: fidl::encoding::Depth,
3527        ) -> fidl::Result<()> {
3528            decoder.debug_check_bounds::<Self>(offset);
3529            let prim = decoder.read_num::<u32>(offset);
3530
3531            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
3532            Ok(())
3533        }
3534    }
3535    unsafe impl fidl::encoding::TypeMarker for SrpServerState {
3536        type Owned = Self;
3537
3538        #[inline(always)]
3539        fn inline_align(_context: fidl::encoding::Context) -> usize {
3540            std::mem::align_of::<u32>()
3541        }
3542
3543        #[inline(always)]
3544        fn inline_size(_context: fidl::encoding::Context) -> usize {
3545            std::mem::size_of::<u32>()
3546        }
3547
3548        #[inline(always)]
3549        fn encode_is_copy() -> bool {
3550            true
3551        }
3552
3553        #[inline(always)]
3554        fn decode_is_copy() -> bool {
3555            false
3556        }
3557    }
3558
3559    impl fidl::encoding::ValueTypeMarker for SrpServerState {
3560        type Borrowed<'a> = Self;
3561        #[inline(always)]
3562        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3563            *value
3564        }
3565    }
3566
3567    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for SrpServerState {
3568        #[inline]
3569        unsafe fn encode(
3570            self,
3571            encoder: &mut fidl::encoding::Encoder<'_, D>,
3572            offset: usize,
3573            _depth: fidl::encoding::Depth,
3574        ) -> fidl::Result<()> {
3575            encoder.debug_check_bounds::<Self>(offset);
3576            encoder.write_num(self.into_primitive(), offset);
3577            Ok(())
3578        }
3579    }
3580
3581    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SrpServerState {
3582        #[inline(always)]
3583        fn new_empty() -> Self {
3584            Self::Disabled
3585        }
3586
3587        #[inline]
3588        unsafe fn decode(
3589            &mut self,
3590            decoder: &mut fidl::encoding::Decoder<'_, D>,
3591            offset: usize,
3592            _depth: fidl::encoding::Depth,
3593        ) -> fidl::Result<()> {
3594            decoder.debug_check_bounds::<Self>(offset);
3595            let prim = decoder.read_num::<u32>(offset);
3596
3597            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
3598            Ok(())
3599        }
3600    }
3601    unsafe impl fidl::encoding::TypeMarker for UpstreamDnsQueryState {
3602        type Owned = Self;
3603
3604        #[inline(always)]
3605        fn inline_align(_context: fidl::encoding::Context) -> usize {
3606            std::mem::align_of::<u32>()
3607        }
3608
3609        #[inline(always)]
3610        fn inline_size(_context: fidl::encoding::Context) -> usize {
3611            std::mem::size_of::<u32>()
3612        }
3613
3614        #[inline(always)]
3615        fn encode_is_copy() -> bool {
3616            false
3617        }
3618
3619        #[inline(always)]
3620        fn decode_is_copy() -> bool {
3621            false
3622        }
3623    }
3624
3625    impl fidl::encoding::ValueTypeMarker for UpstreamDnsQueryState {
3626        type Borrowed<'a> = Self;
3627        #[inline(always)]
3628        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3629            *value
3630        }
3631    }
3632
3633    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
3634        for UpstreamDnsQueryState
3635    {
3636        #[inline]
3637        unsafe fn encode(
3638            self,
3639            encoder: &mut fidl::encoding::Encoder<'_, D>,
3640            offset: usize,
3641            _depth: fidl::encoding::Depth,
3642        ) -> fidl::Result<()> {
3643            encoder.debug_check_bounds::<Self>(offset);
3644            encoder.write_num(self.into_primitive(), offset);
3645            Ok(())
3646        }
3647    }
3648
3649    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for UpstreamDnsQueryState {
3650        #[inline(always)]
3651        fn new_empty() -> Self {
3652            Self::unknown()
3653        }
3654
3655        #[inline]
3656        unsafe fn decode(
3657            &mut self,
3658            decoder: &mut fidl::encoding::Decoder<'_, D>,
3659            offset: usize,
3660            _depth: fidl::encoding::Depth,
3661        ) -> fidl::Result<()> {
3662            decoder.debug_check_bounds::<Self>(offset);
3663            let prim = decoder.read_num::<u32>(offset);
3664
3665            *self = Self::from_primitive_allow_unknown(prim);
3666            Ok(())
3667        }
3668    }
3669
3670    impl fidl::encoding::ValueTypeMarker for BeaconInfoStreamNextResponse {
3671        type Borrowed<'a> = &'a Self;
3672        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3673            value
3674        }
3675    }
3676
3677    unsafe impl fidl::encoding::TypeMarker for BeaconInfoStreamNextResponse {
3678        type Owned = Self;
3679
3680        #[inline(always)]
3681        fn inline_align(_context: fidl::encoding::Context) -> usize {
3682            8
3683        }
3684
3685        #[inline(always)]
3686        fn inline_size(_context: fidl::encoding::Context) -> usize {
3687            16
3688        }
3689    }
3690
3691    unsafe impl<D: fidl::encoding::ResourceDialect>
3692        fidl::encoding::Encode<BeaconInfoStreamNextResponse, D> for &BeaconInfoStreamNextResponse
3693    {
3694        #[inline]
3695        unsafe fn encode(
3696            self,
3697            encoder: &mut fidl::encoding::Encoder<'_, D>,
3698            offset: usize,
3699            _depth: fidl::encoding::Depth,
3700        ) -> fidl::Result<()> {
3701            encoder.debug_check_bounds::<BeaconInfoStreamNextResponse>(offset);
3702            // Delegate to tuple encoding.
3703            fidl::encoding::Encode::<BeaconInfoStreamNextResponse, D>::encode(
3704                (
3705                    <fidl::encoding::Vector<BeaconInfo, 32> as fidl::encoding::ValueTypeMarker>::borrow(&self.beacons),
3706                ),
3707                encoder, offset, _depth
3708            )
3709        }
3710    }
3711    unsafe impl<
3712        D: fidl::encoding::ResourceDialect,
3713        T0: fidl::encoding::Encode<fidl::encoding::Vector<BeaconInfo, 32>, D>,
3714    > fidl::encoding::Encode<BeaconInfoStreamNextResponse, D> for (T0,)
3715    {
3716        #[inline]
3717        unsafe fn encode(
3718            self,
3719            encoder: &mut fidl::encoding::Encoder<'_, D>,
3720            offset: usize,
3721            depth: fidl::encoding::Depth,
3722        ) -> fidl::Result<()> {
3723            encoder.debug_check_bounds::<BeaconInfoStreamNextResponse>(offset);
3724            // Zero out padding regions. There's no need to apply masks
3725            // because the unmasked parts will be overwritten by fields.
3726            // Write the fields.
3727            self.0.encode(encoder, offset + 0, depth)?;
3728            Ok(())
3729        }
3730    }
3731
3732    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
3733        for BeaconInfoStreamNextResponse
3734    {
3735        #[inline(always)]
3736        fn new_empty() -> Self {
3737            Self { beacons: fidl::new_empty!(fidl::encoding::Vector<BeaconInfo, 32>, D) }
3738        }
3739
3740        #[inline]
3741        unsafe fn decode(
3742            &mut self,
3743            decoder: &mut fidl::encoding::Decoder<'_, D>,
3744            offset: usize,
3745            _depth: fidl::encoding::Depth,
3746        ) -> fidl::Result<()> {
3747            decoder.debug_check_bounds::<Self>(offset);
3748            // Verify that padding bytes are zero.
3749            fidl::decode!(fidl::encoding::Vector<BeaconInfo, 32>, D, &mut self.beacons, decoder, offset + 0, _depth)?;
3750            Ok(())
3751        }
3752    }
3753
3754    impl fidl::encoding::ValueTypeMarker for DeviceGetSupportedChannelsResponse {
3755        type Borrowed<'a> = &'a Self;
3756        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3757            value
3758        }
3759    }
3760
3761    unsafe impl fidl::encoding::TypeMarker for DeviceGetSupportedChannelsResponse {
3762        type Owned = Self;
3763
3764        #[inline(always)]
3765        fn inline_align(_context: fidl::encoding::Context) -> usize {
3766            8
3767        }
3768
3769        #[inline(always)]
3770        fn inline_size(_context: fidl::encoding::Context) -> usize {
3771            16
3772        }
3773    }
3774
3775    unsafe impl<D: fidl::encoding::ResourceDialect>
3776        fidl::encoding::Encode<DeviceGetSupportedChannelsResponse, D>
3777        for &DeviceGetSupportedChannelsResponse
3778    {
3779        #[inline]
3780        unsafe fn encode(
3781            self,
3782            encoder: &mut fidl::encoding::Encoder<'_, D>,
3783            offset: usize,
3784            _depth: fidl::encoding::Depth,
3785        ) -> fidl::Result<()> {
3786            encoder.debug_check_bounds::<DeviceGetSupportedChannelsResponse>(offset);
3787            // Delegate to tuple encoding.
3788            fidl::encoding::Encode::<DeviceGetSupportedChannelsResponse, D>::encode(
3789                (
3790                    <fidl::encoding::Vector<ChannelInfo, 200> as fidl::encoding::ValueTypeMarker>::borrow(&self.channels_info),
3791                ),
3792                encoder, offset, _depth
3793            )
3794        }
3795    }
3796    unsafe impl<
3797        D: fidl::encoding::ResourceDialect,
3798        T0: fidl::encoding::Encode<fidl::encoding::Vector<ChannelInfo, 200>, D>,
3799    > fidl::encoding::Encode<DeviceGetSupportedChannelsResponse, D> for (T0,)
3800    {
3801        #[inline]
3802        unsafe fn encode(
3803            self,
3804            encoder: &mut fidl::encoding::Encoder<'_, D>,
3805            offset: usize,
3806            depth: fidl::encoding::Depth,
3807        ) -> fidl::Result<()> {
3808            encoder.debug_check_bounds::<DeviceGetSupportedChannelsResponse>(offset);
3809            // Zero out padding regions. There's no need to apply masks
3810            // because the unmasked parts will be overwritten by fields.
3811            // Write the fields.
3812            self.0.encode(encoder, offset + 0, depth)?;
3813            Ok(())
3814        }
3815    }
3816
3817    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
3818        for DeviceGetSupportedChannelsResponse
3819    {
3820        #[inline(always)]
3821        fn new_empty() -> Self {
3822            Self { channels_info: fidl::new_empty!(fidl::encoding::Vector<ChannelInfo, 200>, D) }
3823        }
3824
3825        #[inline]
3826        unsafe fn decode(
3827            &mut self,
3828            decoder: &mut fidl::encoding::Decoder<'_, D>,
3829            offset: usize,
3830            _depth: fidl::encoding::Depth,
3831        ) -> fidl::Result<()> {
3832            decoder.debug_check_bounds::<Self>(offset);
3833            // Verify that padding bytes are zero.
3834            fidl::decode!(fidl::encoding::Vector<ChannelInfo, 200>, D, &mut self.channels_info, decoder, offset + 0, _depth)?;
3835            Ok(())
3836        }
3837    }
3838
3839    impl fidl::encoding::ValueTypeMarker for DeviceRouteExtraGetLocalExternalRoutesResponse {
3840        type Borrowed<'a> = &'a Self;
3841        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3842            value
3843        }
3844    }
3845
3846    unsafe impl fidl::encoding::TypeMarker for DeviceRouteExtraGetLocalExternalRoutesResponse {
3847        type Owned = Self;
3848
3849        #[inline(always)]
3850        fn inline_align(_context: fidl::encoding::Context) -> usize {
3851            8
3852        }
3853
3854        #[inline(always)]
3855        fn inline_size(_context: fidl::encoding::Context) -> usize {
3856            16
3857        }
3858    }
3859
3860    unsafe impl<D: fidl::encoding::ResourceDialect>
3861        fidl::encoding::Encode<DeviceRouteExtraGetLocalExternalRoutesResponse, D>
3862        for &DeviceRouteExtraGetLocalExternalRoutesResponse
3863    {
3864        #[inline]
3865        unsafe fn encode(
3866            self,
3867            encoder: &mut fidl::encoding::Encoder<'_, D>,
3868            offset: usize,
3869            _depth: fidl::encoding::Depth,
3870        ) -> fidl::Result<()> {
3871            encoder.debug_check_bounds::<DeviceRouteExtraGetLocalExternalRoutesResponse>(offset);
3872            // Delegate to tuple encoding.
3873            fidl::encoding::Encode::<DeviceRouteExtraGetLocalExternalRoutesResponse, D>::encode(
3874                (
3875                    <fidl::encoding::Vector<ExternalRoute, 32> as fidl::encoding::ValueTypeMarker>::borrow(&self.external_routes),
3876                ),
3877                encoder, offset, _depth
3878            )
3879        }
3880    }
3881    unsafe impl<
3882        D: fidl::encoding::ResourceDialect,
3883        T0: fidl::encoding::Encode<fidl::encoding::Vector<ExternalRoute, 32>, D>,
3884    > fidl::encoding::Encode<DeviceRouteExtraGetLocalExternalRoutesResponse, D> for (T0,)
3885    {
3886        #[inline]
3887        unsafe fn encode(
3888            self,
3889            encoder: &mut fidl::encoding::Encoder<'_, D>,
3890            offset: usize,
3891            depth: fidl::encoding::Depth,
3892        ) -> fidl::Result<()> {
3893            encoder.debug_check_bounds::<DeviceRouteExtraGetLocalExternalRoutesResponse>(offset);
3894            // Zero out padding regions. There's no need to apply masks
3895            // because the unmasked parts will be overwritten by fields.
3896            // Write the fields.
3897            self.0.encode(encoder, offset + 0, depth)?;
3898            Ok(())
3899        }
3900    }
3901
3902    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
3903        for DeviceRouteExtraGetLocalExternalRoutesResponse
3904    {
3905        #[inline(always)]
3906        fn new_empty() -> Self {
3907            Self { external_routes: fidl::new_empty!(fidl::encoding::Vector<ExternalRoute, 32>, D) }
3908        }
3909
3910        #[inline]
3911        unsafe fn decode(
3912            &mut self,
3913            decoder: &mut fidl::encoding::Decoder<'_, D>,
3914            offset: usize,
3915            _depth: fidl::encoding::Depth,
3916        ) -> fidl::Result<()> {
3917            decoder.debug_check_bounds::<Self>(offset);
3918            // Verify that padding bytes are zero.
3919            fidl::decode!(fidl::encoding::Vector<ExternalRoute, 32>, D, &mut self.external_routes, decoder, offset + 0, _depth)?;
3920            Ok(())
3921        }
3922    }
3923
3924    impl fidl::encoding::ValueTypeMarker for DeviceRouteExtraGetLocalOnMeshPrefixesResponse {
3925        type Borrowed<'a> = &'a Self;
3926        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3927            value
3928        }
3929    }
3930
3931    unsafe impl fidl::encoding::TypeMarker for DeviceRouteExtraGetLocalOnMeshPrefixesResponse {
3932        type Owned = Self;
3933
3934        #[inline(always)]
3935        fn inline_align(_context: fidl::encoding::Context) -> usize {
3936            8
3937        }
3938
3939        #[inline(always)]
3940        fn inline_size(_context: fidl::encoding::Context) -> usize {
3941            16
3942        }
3943    }
3944
3945    unsafe impl<D: fidl::encoding::ResourceDialect>
3946        fidl::encoding::Encode<DeviceRouteExtraGetLocalOnMeshPrefixesResponse, D>
3947        for &DeviceRouteExtraGetLocalOnMeshPrefixesResponse
3948    {
3949        #[inline]
3950        unsafe fn encode(
3951            self,
3952            encoder: &mut fidl::encoding::Encoder<'_, D>,
3953            offset: usize,
3954            _depth: fidl::encoding::Depth,
3955        ) -> fidl::Result<()> {
3956            encoder.debug_check_bounds::<DeviceRouteExtraGetLocalOnMeshPrefixesResponse>(offset);
3957            // Delegate to tuple encoding.
3958            fidl::encoding::Encode::<DeviceRouteExtraGetLocalOnMeshPrefixesResponse, D>::encode(
3959                (
3960                    <fidl::encoding::Vector<OnMeshPrefix, 32> as fidl::encoding::ValueTypeMarker>::borrow(&self.prefixes),
3961                ),
3962                encoder, offset, _depth
3963            )
3964        }
3965    }
3966    unsafe impl<
3967        D: fidl::encoding::ResourceDialect,
3968        T0: fidl::encoding::Encode<fidl::encoding::Vector<OnMeshPrefix, 32>, D>,
3969    > fidl::encoding::Encode<DeviceRouteExtraGetLocalOnMeshPrefixesResponse, D> for (T0,)
3970    {
3971        #[inline]
3972        unsafe fn encode(
3973            self,
3974            encoder: &mut fidl::encoding::Encoder<'_, D>,
3975            offset: usize,
3976            depth: fidl::encoding::Depth,
3977        ) -> fidl::Result<()> {
3978            encoder.debug_check_bounds::<DeviceRouteExtraGetLocalOnMeshPrefixesResponse>(offset);
3979            // Zero out padding regions. There's no need to apply masks
3980            // because the unmasked parts will be overwritten by fields.
3981            // Write the fields.
3982            self.0.encode(encoder, offset + 0, depth)?;
3983            Ok(())
3984        }
3985    }
3986
3987    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
3988        for DeviceRouteExtraGetLocalOnMeshPrefixesResponse
3989    {
3990        #[inline(always)]
3991        fn new_empty() -> Self {
3992            Self { prefixes: fidl::new_empty!(fidl::encoding::Vector<OnMeshPrefix, 32>, D) }
3993        }
3994
3995        #[inline]
3996        unsafe fn decode(
3997            &mut self,
3998            decoder: &mut fidl::encoding::Decoder<'_, D>,
3999            offset: usize,
4000            _depth: fidl::encoding::Depth,
4001        ) -> fidl::Result<()> {
4002            decoder.debug_check_bounds::<Self>(offset);
4003            // Verify that padding bytes are zero.
4004            fidl::decode!(fidl::encoding::Vector<OnMeshPrefix, 32>, D, &mut self.prefixes, decoder, offset + 0, _depth)?;
4005            Ok(())
4006        }
4007    }
4008
4009    impl fidl::encoding::ValueTypeMarker for DeviceRouteRegisterExternalRouteRequest {
4010        type Borrowed<'a> = &'a Self;
4011        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4012            value
4013        }
4014    }
4015
4016    unsafe impl fidl::encoding::TypeMarker for DeviceRouteRegisterExternalRouteRequest {
4017        type Owned = Self;
4018
4019        #[inline(always)]
4020        fn inline_align(_context: fidl::encoding::Context) -> usize {
4021            8
4022        }
4023
4024        #[inline(always)]
4025        fn inline_size(_context: fidl::encoding::Context) -> usize {
4026            16
4027        }
4028    }
4029
4030    unsafe impl<D: fidl::encoding::ResourceDialect>
4031        fidl::encoding::Encode<DeviceRouteRegisterExternalRouteRequest, D>
4032        for &DeviceRouteRegisterExternalRouteRequest
4033    {
4034        #[inline]
4035        unsafe fn encode(
4036            self,
4037            encoder: &mut fidl::encoding::Encoder<'_, D>,
4038            offset: usize,
4039            _depth: fidl::encoding::Depth,
4040        ) -> fidl::Result<()> {
4041            encoder.debug_check_bounds::<DeviceRouteRegisterExternalRouteRequest>(offset);
4042            // Delegate to tuple encoding.
4043            fidl::encoding::Encode::<DeviceRouteRegisterExternalRouteRequest, D>::encode(
4044                (<ExternalRoute as fidl::encoding::ValueTypeMarker>::borrow(&self.external_route),),
4045                encoder,
4046                offset,
4047                _depth,
4048            )
4049        }
4050    }
4051    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<ExternalRoute, D>>
4052        fidl::encoding::Encode<DeviceRouteRegisterExternalRouteRequest, D> for (T0,)
4053    {
4054        #[inline]
4055        unsafe fn encode(
4056            self,
4057            encoder: &mut fidl::encoding::Encoder<'_, D>,
4058            offset: usize,
4059            depth: fidl::encoding::Depth,
4060        ) -> fidl::Result<()> {
4061            encoder.debug_check_bounds::<DeviceRouteRegisterExternalRouteRequest>(offset);
4062            // Zero out padding regions. There's no need to apply masks
4063            // because the unmasked parts will be overwritten by fields.
4064            // Write the fields.
4065            self.0.encode(encoder, offset + 0, depth)?;
4066            Ok(())
4067        }
4068    }
4069
4070    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
4071        for DeviceRouteRegisterExternalRouteRequest
4072    {
4073        #[inline(always)]
4074        fn new_empty() -> Self {
4075            Self { external_route: fidl::new_empty!(ExternalRoute, D) }
4076        }
4077
4078        #[inline]
4079        unsafe fn decode(
4080            &mut self,
4081            decoder: &mut fidl::encoding::Decoder<'_, D>,
4082            offset: usize,
4083            _depth: fidl::encoding::Depth,
4084        ) -> fidl::Result<()> {
4085            decoder.debug_check_bounds::<Self>(offset);
4086            // Verify that padding bytes are zero.
4087            fidl::decode!(ExternalRoute, D, &mut self.external_route, decoder, offset + 0, _depth)?;
4088            Ok(())
4089        }
4090    }
4091
4092    impl fidl::encoding::ValueTypeMarker for DeviceRouteRegisterOnMeshPrefixRequest {
4093        type Borrowed<'a> = &'a Self;
4094        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4095            value
4096        }
4097    }
4098
4099    unsafe impl fidl::encoding::TypeMarker for DeviceRouteRegisterOnMeshPrefixRequest {
4100        type Owned = Self;
4101
4102        #[inline(always)]
4103        fn inline_align(_context: fidl::encoding::Context) -> usize {
4104            8
4105        }
4106
4107        #[inline(always)]
4108        fn inline_size(_context: fidl::encoding::Context) -> usize {
4109            16
4110        }
4111    }
4112
4113    unsafe impl<D: fidl::encoding::ResourceDialect>
4114        fidl::encoding::Encode<DeviceRouteRegisterOnMeshPrefixRequest, D>
4115        for &DeviceRouteRegisterOnMeshPrefixRequest
4116    {
4117        #[inline]
4118        unsafe fn encode(
4119            self,
4120            encoder: &mut fidl::encoding::Encoder<'_, D>,
4121            offset: usize,
4122            _depth: fidl::encoding::Depth,
4123        ) -> fidl::Result<()> {
4124            encoder.debug_check_bounds::<DeviceRouteRegisterOnMeshPrefixRequest>(offset);
4125            // Delegate to tuple encoding.
4126            fidl::encoding::Encode::<DeviceRouteRegisterOnMeshPrefixRequest, D>::encode(
4127                (<OnMeshPrefix as fidl::encoding::ValueTypeMarker>::borrow(&self.prefix),),
4128                encoder,
4129                offset,
4130                _depth,
4131            )
4132        }
4133    }
4134    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<OnMeshPrefix, D>>
4135        fidl::encoding::Encode<DeviceRouteRegisterOnMeshPrefixRequest, D> for (T0,)
4136    {
4137        #[inline]
4138        unsafe fn encode(
4139            self,
4140            encoder: &mut fidl::encoding::Encoder<'_, D>,
4141            offset: usize,
4142            depth: fidl::encoding::Depth,
4143        ) -> fidl::Result<()> {
4144            encoder.debug_check_bounds::<DeviceRouteRegisterOnMeshPrefixRequest>(offset);
4145            // Zero out padding regions. There's no need to apply masks
4146            // because the unmasked parts will be overwritten by fields.
4147            // Write the fields.
4148            self.0.encode(encoder, offset + 0, depth)?;
4149            Ok(())
4150        }
4151    }
4152
4153    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
4154        for DeviceRouteRegisterOnMeshPrefixRequest
4155    {
4156        #[inline(always)]
4157        fn new_empty() -> Self {
4158            Self { prefix: fidl::new_empty!(OnMeshPrefix, D) }
4159        }
4160
4161        #[inline]
4162        unsafe fn decode(
4163            &mut self,
4164            decoder: &mut fidl::encoding::Decoder<'_, D>,
4165            offset: usize,
4166            _depth: fidl::encoding::Depth,
4167        ) -> fidl::Result<()> {
4168            decoder.debug_check_bounds::<Self>(offset);
4169            // Verify that padding bytes are zero.
4170            fidl::decode!(OnMeshPrefix, D, &mut self.prefix, decoder, offset + 0, _depth)?;
4171            Ok(())
4172        }
4173    }
4174
4175    impl fidl::encoding::ValueTypeMarker for DeviceRouteUnregisterExternalRouteRequest {
4176        type Borrowed<'a> = &'a Self;
4177        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4178            value
4179        }
4180    }
4181
4182    unsafe impl fidl::encoding::TypeMarker for DeviceRouteUnregisterExternalRouteRequest {
4183        type Owned = Self;
4184
4185        #[inline(always)]
4186        fn inline_align(_context: fidl::encoding::Context) -> usize {
4187            1
4188        }
4189
4190        #[inline(always)]
4191        fn inline_size(_context: fidl::encoding::Context) -> usize {
4192            17
4193        }
4194    }
4195
4196    unsafe impl<D: fidl::encoding::ResourceDialect>
4197        fidl::encoding::Encode<DeviceRouteUnregisterExternalRouteRequest, D>
4198        for &DeviceRouteUnregisterExternalRouteRequest
4199    {
4200        #[inline]
4201        unsafe fn encode(
4202            self,
4203            encoder: &mut fidl::encoding::Encoder<'_, D>,
4204            offset: usize,
4205            _depth: fidl::encoding::Depth,
4206        ) -> fidl::Result<()> {
4207            encoder.debug_check_bounds::<DeviceRouteUnregisterExternalRouteRequest>(offset);
4208            // Delegate to tuple encoding.
4209            fidl::encoding::Encode::<DeviceRouteUnregisterExternalRouteRequest, D>::encode(
4210                (
4211                    <fidl_fuchsia_net_common::Ipv6AddressWithPrefix as fidl::encoding::ValueTypeMarker>::borrow(&self.subnet),
4212                ),
4213                encoder, offset, _depth
4214            )
4215        }
4216    }
4217    unsafe impl<
4218        D: fidl::encoding::ResourceDialect,
4219        T0: fidl::encoding::Encode<fidl_fuchsia_net_common::Ipv6AddressWithPrefix, D>,
4220    > fidl::encoding::Encode<DeviceRouteUnregisterExternalRouteRequest, D> for (T0,)
4221    {
4222        #[inline]
4223        unsafe fn encode(
4224            self,
4225            encoder: &mut fidl::encoding::Encoder<'_, D>,
4226            offset: usize,
4227            depth: fidl::encoding::Depth,
4228        ) -> fidl::Result<()> {
4229            encoder.debug_check_bounds::<DeviceRouteUnregisterExternalRouteRequest>(offset);
4230            // Zero out padding regions. There's no need to apply masks
4231            // because the unmasked parts will be overwritten by fields.
4232            // Write the fields.
4233            self.0.encode(encoder, offset + 0, depth)?;
4234            Ok(())
4235        }
4236    }
4237
4238    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
4239        for DeviceRouteUnregisterExternalRouteRequest
4240    {
4241        #[inline(always)]
4242        fn new_empty() -> Self {
4243            Self { subnet: fidl::new_empty!(fidl_fuchsia_net_common::Ipv6AddressWithPrefix, D) }
4244        }
4245
4246        #[inline]
4247        unsafe fn decode(
4248            &mut self,
4249            decoder: &mut fidl::encoding::Decoder<'_, D>,
4250            offset: usize,
4251            _depth: fidl::encoding::Depth,
4252        ) -> fidl::Result<()> {
4253            decoder.debug_check_bounds::<Self>(offset);
4254            // Verify that padding bytes are zero.
4255            fidl::decode!(
4256                fidl_fuchsia_net_common::Ipv6AddressWithPrefix,
4257                D,
4258                &mut self.subnet,
4259                decoder,
4260                offset + 0,
4261                _depth
4262            )?;
4263            Ok(())
4264        }
4265    }
4266
4267    impl fidl::encoding::ValueTypeMarker for DeviceRouteUnregisterOnMeshPrefixRequest {
4268        type Borrowed<'a> = &'a Self;
4269        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4270            value
4271        }
4272    }
4273
4274    unsafe impl fidl::encoding::TypeMarker for DeviceRouteUnregisterOnMeshPrefixRequest {
4275        type Owned = Self;
4276
4277        #[inline(always)]
4278        fn inline_align(_context: fidl::encoding::Context) -> usize {
4279            1
4280        }
4281
4282        #[inline(always)]
4283        fn inline_size(_context: fidl::encoding::Context) -> usize {
4284            17
4285        }
4286    }
4287
4288    unsafe impl<D: fidl::encoding::ResourceDialect>
4289        fidl::encoding::Encode<DeviceRouteUnregisterOnMeshPrefixRequest, D>
4290        for &DeviceRouteUnregisterOnMeshPrefixRequest
4291    {
4292        #[inline]
4293        unsafe fn encode(
4294            self,
4295            encoder: &mut fidl::encoding::Encoder<'_, D>,
4296            offset: usize,
4297            _depth: fidl::encoding::Depth,
4298        ) -> fidl::Result<()> {
4299            encoder.debug_check_bounds::<DeviceRouteUnregisterOnMeshPrefixRequest>(offset);
4300            // Delegate to tuple encoding.
4301            fidl::encoding::Encode::<DeviceRouteUnregisterOnMeshPrefixRequest, D>::encode(
4302                (
4303                    <fidl_fuchsia_net_common::Ipv6AddressWithPrefix as fidl::encoding::ValueTypeMarker>::borrow(&self.subnet),
4304                ),
4305                encoder, offset, _depth
4306            )
4307        }
4308    }
4309    unsafe impl<
4310        D: fidl::encoding::ResourceDialect,
4311        T0: fidl::encoding::Encode<fidl_fuchsia_net_common::Ipv6AddressWithPrefix, D>,
4312    > fidl::encoding::Encode<DeviceRouteUnregisterOnMeshPrefixRequest, D> for (T0,)
4313    {
4314        #[inline]
4315        unsafe fn encode(
4316            self,
4317            encoder: &mut fidl::encoding::Encoder<'_, D>,
4318            offset: usize,
4319            depth: fidl::encoding::Depth,
4320        ) -> fidl::Result<()> {
4321            encoder.debug_check_bounds::<DeviceRouteUnregisterOnMeshPrefixRequest>(offset);
4322            // Zero out padding regions. There's no need to apply masks
4323            // because the unmasked parts will be overwritten by fields.
4324            // Write the fields.
4325            self.0.encode(encoder, offset + 0, depth)?;
4326            Ok(())
4327        }
4328    }
4329
4330    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
4331        for DeviceRouteUnregisterOnMeshPrefixRequest
4332    {
4333        #[inline(always)]
4334        fn new_empty() -> Self {
4335            Self { subnet: fidl::new_empty!(fidl_fuchsia_net_common::Ipv6AddressWithPrefix, D) }
4336        }
4337
4338        #[inline]
4339        unsafe fn decode(
4340            &mut self,
4341            decoder: &mut fidl::encoding::Decoder<'_, D>,
4342            offset: usize,
4343            _depth: fidl::encoding::Depth,
4344        ) -> fidl::Result<()> {
4345            decoder.debug_check_bounds::<Self>(offset);
4346            // Verify that padding bytes are zero.
4347            fidl::decode!(
4348                fidl_fuchsia_net_common::Ipv6AddressWithPrefix,
4349                D,
4350                &mut self.subnet,
4351                decoder,
4352                offset + 0,
4353                _depth
4354            )?;
4355            Ok(())
4356        }
4357    }
4358
4359    impl fidl::encoding::ValueTypeMarker for LegacyJoiningMakeJoinableRequest {
4360        type Borrowed<'a> = &'a Self;
4361        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4362            value
4363        }
4364    }
4365
4366    unsafe impl fidl::encoding::TypeMarker for LegacyJoiningMakeJoinableRequest {
4367        type Owned = Self;
4368
4369        #[inline(always)]
4370        fn inline_align(_context: fidl::encoding::Context) -> usize {
4371            8
4372        }
4373
4374        #[inline(always)]
4375        fn inline_size(_context: fidl::encoding::Context) -> usize {
4376            16
4377        }
4378    }
4379
4380    unsafe impl<D: fidl::encoding::ResourceDialect>
4381        fidl::encoding::Encode<LegacyJoiningMakeJoinableRequest, D>
4382        for &LegacyJoiningMakeJoinableRequest
4383    {
4384        #[inline]
4385        unsafe fn encode(
4386            self,
4387            encoder: &mut fidl::encoding::Encoder<'_, D>,
4388            offset: usize,
4389            _depth: fidl::encoding::Depth,
4390        ) -> fidl::Result<()> {
4391            encoder.debug_check_bounds::<LegacyJoiningMakeJoinableRequest>(offset);
4392            unsafe {
4393                // Copy the object into the buffer.
4394                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
4395                (buf_ptr as *mut LegacyJoiningMakeJoinableRequest)
4396                    .write_unaligned((self as *const LegacyJoiningMakeJoinableRequest).read());
4397                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
4398                // done second because the memcpy will write garbage to these bytes.
4399                let padding_ptr = buf_ptr.offset(8) as *mut u64;
4400                let padding_mask = 0xffffffffffff0000u64;
4401                padding_ptr.write_unaligned(padding_ptr.read_unaligned() & !padding_mask);
4402            }
4403            Ok(())
4404        }
4405    }
4406    unsafe impl<
4407        D: fidl::encoding::ResourceDialect,
4408        T0: fidl::encoding::Encode<i64, D>,
4409        T1: fidl::encoding::Encode<u16, D>,
4410    > fidl::encoding::Encode<LegacyJoiningMakeJoinableRequest, D> for (T0, T1)
4411    {
4412        #[inline]
4413        unsafe fn encode(
4414            self,
4415            encoder: &mut fidl::encoding::Encoder<'_, D>,
4416            offset: usize,
4417            depth: fidl::encoding::Depth,
4418        ) -> fidl::Result<()> {
4419            encoder.debug_check_bounds::<LegacyJoiningMakeJoinableRequest>(offset);
4420            // Zero out padding regions. There's no need to apply masks
4421            // because the unmasked parts will be overwritten by fields.
4422            unsafe {
4423                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(8);
4424                (ptr as *mut u64).write_unaligned(0);
4425            }
4426            // Write the fields.
4427            self.0.encode(encoder, offset + 0, depth)?;
4428            self.1.encode(encoder, offset + 8, depth)?;
4429            Ok(())
4430        }
4431    }
4432
4433    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
4434        for LegacyJoiningMakeJoinableRequest
4435    {
4436        #[inline(always)]
4437        fn new_empty() -> Self {
4438            Self { duration: fidl::new_empty!(i64, D), port: fidl::new_empty!(u16, D) }
4439        }
4440
4441        #[inline]
4442        unsafe fn decode(
4443            &mut self,
4444            decoder: &mut fidl::encoding::Decoder<'_, D>,
4445            offset: usize,
4446            _depth: fidl::encoding::Depth,
4447        ) -> fidl::Result<()> {
4448            decoder.debug_check_bounds::<Self>(offset);
4449            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
4450            // Verify that padding bytes are zero.
4451            let ptr = unsafe { buf_ptr.offset(8) };
4452            let padval = unsafe { (ptr as *const u64).read_unaligned() };
4453            let mask = 0xffffffffffff0000u64;
4454            let maskedval = padval & mask;
4455            if maskedval != 0 {
4456                return Err(fidl::Error::NonZeroPadding {
4457                    padding_start: offset + 8 + ((mask as u64).trailing_zeros() / 8) as usize,
4458                });
4459            }
4460            // Copy from the buffer into the object.
4461            unsafe {
4462                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 16);
4463            }
4464            Ok(())
4465        }
4466    }
4467
4468    impl fidl::encoding::ValueTypeMarker for ProvisioningMonitorWatchProgressResponse {
4469        type Borrowed<'a> = &'a Self;
4470        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4471            value
4472        }
4473    }
4474
4475    unsafe impl fidl::encoding::TypeMarker for ProvisioningMonitorWatchProgressResponse {
4476        type Owned = Self;
4477
4478        #[inline(always)]
4479        fn inline_align(_context: fidl::encoding::Context) -> usize {
4480            8
4481        }
4482
4483        #[inline(always)]
4484        fn inline_size(_context: fidl::encoding::Context) -> usize {
4485            16
4486        }
4487    }
4488
4489    unsafe impl<D: fidl::encoding::ResourceDialect>
4490        fidl::encoding::Encode<ProvisioningMonitorWatchProgressResponse, D>
4491        for &ProvisioningMonitorWatchProgressResponse
4492    {
4493        #[inline]
4494        unsafe fn encode(
4495            self,
4496            encoder: &mut fidl::encoding::Encoder<'_, D>,
4497            offset: usize,
4498            _depth: fidl::encoding::Depth,
4499        ) -> fidl::Result<()> {
4500            encoder.debug_check_bounds::<ProvisioningMonitorWatchProgressResponse>(offset);
4501            // Delegate to tuple encoding.
4502            fidl::encoding::Encode::<ProvisioningMonitorWatchProgressResponse, D>::encode(
4503                (<ProvisioningProgress as fidl::encoding::ValueTypeMarker>::borrow(&self.progress),),
4504                encoder,
4505                offset,
4506                _depth,
4507            )
4508        }
4509    }
4510    unsafe impl<
4511        D: fidl::encoding::ResourceDialect,
4512        T0: fidl::encoding::Encode<ProvisioningProgress, D>,
4513    > fidl::encoding::Encode<ProvisioningMonitorWatchProgressResponse, D> for (T0,)
4514    {
4515        #[inline]
4516        unsafe fn encode(
4517            self,
4518            encoder: &mut fidl::encoding::Encoder<'_, D>,
4519            offset: usize,
4520            depth: fidl::encoding::Depth,
4521        ) -> fidl::Result<()> {
4522            encoder.debug_check_bounds::<ProvisioningMonitorWatchProgressResponse>(offset);
4523            // Zero out padding regions. There's no need to apply masks
4524            // because the unmasked parts will be overwritten by fields.
4525            // Write the fields.
4526            self.0.encode(encoder, offset + 0, depth)?;
4527            Ok(())
4528        }
4529    }
4530
4531    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
4532        for ProvisioningMonitorWatchProgressResponse
4533    {
4534        #[inline(always)]
4535        fn new_empty() -> Self {
4536            Self { progress: fidl::new_empty!(ProvisioningProgress, D) }
4537        }
4538
4539        #[inline]
4540        unsafe fn decode(
4541            &mut self,
4542            decoder: &mut fidl::encoding::Decoder<'_, D>,
4543            offset: usize,
4544            _depth: fidl::encoding::Depth,
4545        ) -> fidl::Result<()> {
4546            decoder.debug_check_bounds::<Self>(offset);
4547            // Verify that padding bytes are zero.
4548            fidl::decode!(
4549                ProvisioningProgress,
4550                D,
4551                &mut self.progress,
4552                decoder,
4553                offset + 0,
4554                _depth
4555            )?;
4556            Ok(())
4557        }
4558    }
4559
4560    impl fidl::encoding::ValueTypeMarker for TelemetryProviderGetTelemetryResponse {
4561        type Borrowed<'a> = &'a Self;
4562        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4563            value
4564        }
4565    }
4566
4567    unsafe impl fidl::encoding::TypeMarker for TelemetryProviderGetTelemetryResponse {
4568        type Owned = Self;
4569
4570        #[inline(always)]
4571        fn inline_align(_context: fidl::encoding::Context) -> usize {
4572            8
4573        }
4574
4575        #[inline(always)]
4576        fn inline_size(_context: fidl::encoding::Context) -> usize {
4577            16
4578        }
4579    }
4580
4581    unsafe impl<D: fidl::encoding::ResourceDialect>
4582        fidl::encoding::Encode<TelemetryProviderGetTelemetryResponse, D>
4583        for &TelemetryProviderGetTelemetryResponse
4584    {
4585        #[inline]
4586        unsafe fn encode(
4587            self,
4588            encoder: &mut fidl::encoding::Encoder<'_, D>,
4589            offset: usize,
4590            _depth: fidl::encoding::Depth,
4591        ) -> fidl::Result<()> {
4592            encoder.debug_check_bounds::<TelemetryProviderGetTelemetryResponse>(offset);
4593            // Delegate to tuple encoding.
4594            fidl::encoding::Encode::<TelemetryProviderGetTelemetryResponse, D>::encode(
4595                (<Telemetry as fidl::encoding::ValueTypeMarker>::borrow(&self.telemetry),),
4596                encoder,
4597                offset,
4598                _depth,
4599            )
4600        }
4601    }
4602    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<Telemetry, D>>
4603        fidl::encoding::Encode<TelemetryProviderGetTelemetryResponse, D> for (T0,)
4604    {
4605        #[inline]
4606        unsafe fn encode(
4607            self,
4608            encoder: &mut fidl::encoding::Encoder<'_, D>,
4609            offset: usize,
4610            depth: fidl::encoding::Depth,
4611        ) -> fidl::Result<()> {
4612            encoder.debug_check_bounds::<TelemetryProviderGetTelemetryResponse>(offset);
4613            // Zero out padding regions. There's no need to apply masks
4614            // because the unmasked parts will be overwritten by fields.
4615            // Write the fields.
4616            self.0.encode(encoder, offset + 0, depth)?;
4617            Ok(())
4618        }
4619    }
4620
4621    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
4622        for TelemetryProviderGetTelemetryResponse
4623    {
4624        #[inline(always)]
4625        fn new_empty() -> Self {
4626            Self { telemetry: fidl::new_empty!(Telemetry, D) }
4627        }
4628
4629        #[inline]
4630        unsafe fn decode(
4631            &mut self,
4632            decoder: &mut fidl::encoding::Decoder<'_, D>,
4633            offset: usize,
4634            _depth: fidl::encoding::Depth,
4635        ) -> fidl::Result<()> {
4636            decoder.debug_check_bounds::<Self>(offset);
4637            // Verify that padding bytes are zero.
4638            fidl::decode!(Telemetry, D, &mut self.telemetry, decoder, offset + 0, _depth)?;
4639            Ok(())
4640        }
4641    }
4642
4643    impl BeaconInfo {
4644        #[inline(always)]
4645        fn max_ordinal_present(&self) -> u64 {
4646            if let Some(_) = self.lqi {
4647                return 4;
4648            }
4649            if let Some(_) = self.rssi {
4650                return 3;
4651            }
4652            if let Some(_) = self.identity {
4653                return 2;
4654            }
4655            if let Some(_) = self.address {
4656                return 1;
4657            }
4658            0
4659        }
4660    }
4661
4662    impl fidl::encoding::ValueTypeMarker for BeaconInfo {
4663        type Borrowed<'a> = &'a Self;
4664        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4665            value
4666        }
4667    }
4668
4669    unsafe impl fidl::encoding::TypeMarker for BeaconInfo {
4670        type Owned = Self;
4671
4672        #[inline(always)]
4673        fn inline_align(_context: fidl::encoding::Context) -> usize {
4674            8
4675        }
4676
4677        #[inline(always)]
4678        fn inline_size(_context: fidl::encoding::Context) -> usize {
4679            16
4680        }
4681    }
4682
4683    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<BeaconInfo, D>
4684        for &BeaconInfo
4685    {
4686        unsafe fn encode(
4687            self,
4688            encoder: &mut fidl::encoding::Encoder<'_, D>,
4689            offset: usize,
4690            mut depth: fidl::encoding::Depth,
4691        ) -> fidl::Result<()> {
4692            encoder.debug_check_bounds::<BeaconInfo>(offset);
4693            // Vector header
4694            let max_ordinal: u64 = self.max_ordinal_present();
4695            encoder.write_num(max_ordinal, offset);
4696            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
4697            // Calling encoder.out_of_line_offset(0) is not allowed.
4698            if max_ordinal == 0 {
4699                return Ok(());
4700            }
4701            depth.increment()?;
4702            let envelope_size = 8;
4703            let bytes_len = max_ordinal as usize * envelope_size;
4704            #[allow(unused_variables)]
4705            let offset = encoder.out_of_line_offset(bytes_len);
4706            let mut _prev_end_offset: usize = 0;
4707            if 1 > max_ordinal {
4708                return Ok(());
4709            }
4710
4711            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4712            // are envelope_size bytes.
4713            let cur_offset: usize = (1 - 1) * envelope_size;
4714
4715            // Zero reserved fields.
4716            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4717
4718            // Safety:
4719            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4720            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4721            //   envelope_size bytes, there is always sufficient room.
4722            fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_lowpan_common::MacAddress, D>(
4723            self.address.as_ref().map(<fidl_fuchsia_lowpan_common::MacAddress as fidl::encoding::ValueTypeMarker>::borrow),
4724            encoder, offset + cur_offset, depth
4725        )?;
4726
4727            _prev_end_offset = cur_offset + envelope_size;
4728            if 2 > max_ordinal {
4729                return Ok(());
4730            }
4731
4732            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4733            // are envelope_size bytes.
4734            let cur_offset: usize = (2 - 1) * envelope_size;
4735
4736            // Zero reserved fields.
4737            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4738
4739            // Safety:
4740            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4741            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4742            //   envelope_size bytes, there is always sufficient room.
4743            fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_lowpan_device_common::Identity, D>(
4744            self.identity.as_ref().map(<fidl_fuchsia_lowpan_device_common::Identity as fidl::encoding::ValueTypeMarker>::borrow),
4745            encoder, offset + cur_offset, depth
4746        )?;
4747
4748            _prev_end_offset = cur_offset + envelope_size;
4749            if 3 > max_ordinal {
4750                return Ok(());
4751            }
4752
4753            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4754            // are envelope_size bytes.
4755            let cur_offset: usize = (3 - 1) * envelope_size;
4756
4757            // Zero reserved fields.
4758            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4759
4760            // Safety:
4761            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4762            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4763            //   envelope_size bytes, there is always sufficient room.
4764            fidl::encoding::encode_in_envelope_optional::<i8, D>(
4765                self.rssi.as_ref().map(<i8 as fidl::encoding::ValueTypeMarker>::borrow),
4766                encoder,
4767                offset + cur_offset,
4768                depth,
4769            )?;
4770
4771            _prev_end_offset = cur_offset + envelope_size;
4772            if 4 > max_ordinal {
4773                return Ok(());
4774            }
4775
4776            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4777            // are envelope_size bytes.
4778            let cur_offset: usize = (4 - 1) * envelope_size;
4779
4780            // Zero reserved fields.
4781            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4782
4783            // Safety:
4784            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4785            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4786            //   envelope_size bytes, there is always sufficient room.
4787            fidl::encoding::encode_in_envelope_optional::<u8, D>(
4788                self.lqi.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
4789                encoder,
4790                offset + cur_offset,
4791                depth,
4792            )?;
4793
4794            _prev_end_offset = cur_offset + envelope_size;
4795
4796            Ok(())
4797        }
4798    }
4799
4800    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for BeaconInfo {
4801        #[inline(always)]
4802        fn new_empty() -> Self {
4803            Self::default()
4804        }
4805
4806        unsafe fn decode(
4807            &mut self,
4808            decoder: &mut fidl::encoding::Decoder<'_, D>,
4809            offset: usize,
4810            mut depth: fidl::encoding::Depth,
4811        ) -> fidl::Result<()> {
4812            decoder.debug_check_bounds::<Self>(offset);
4813            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
4814                None => return Err(fidl::Error::NotNullable),
4815                Some(len) => len,
4816            };
4817            // Calling decoder.out_of_line_offset(0) is not allowed.
4818            if len == 0 {
4819                return Ok(());
4820            };
4821            depth.increment()?;
4822            let envelope_size = 8;
4823            let bytes_len = len * envelope_size;
4824            let offset = decoder.out_of_line_offset(bytes_len)?;
4825            // Decode the envelope for each type.
4826            let mut _next_ordinal_to_read = 0;
4827            let mut next_offset = offset;
4828            let end_offset = offset + bytes_len;
4829            _next_ordinal_to_read += 1;
4830            if next_offset >= end_offset {
4831                return Ok(());
4832            }
4833
4834            // Decode unknown envelopes for gaps in ordinals.
4835            while _next_ordinal_to_read < 1 {
4836                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4837                _next_ordinal_to_read += 1;
4838                next_offset += envelope_size;
4839            }
4840
4841            let next_out_of_line = decoder.next_out_of_line();
4842            let handles_before = decoder.remaining_handles();
4843            if let Some((inlined, num_bytes, num_handles)) =
4844                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4845            {
4846                let member_inline_size = <fidl_fuchsia_lowpan_common::MacAddress as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4847                if inlined != (member_inline_size <= 4) {
4848                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4849                }
4850                let inner_offset;
4851                let mut inner_depth = depth.clone();
4852                if inlined {
4853                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4854                    inner_offset = next_offset;
4855                } else {
4856                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4857                    inner_depth.increment()?;
4858                }
4859                let val_ref = self.address.get_or_insert_with(|| {
4860                    fidl::new_empty!(fidl_fuchsia_lowpan_common::MacAddress, D)
4861                });
4862                fidl::decode!(
4863                    fidl_fuchsia_lowpan_common::MacAddress,
4864                    D,
4865                    val_ref,
4866                    decoder,
4867                    inner_offset,
4868                    inner_depth
4869                )?;
4870                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4871                {
4872                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4873                }
4874                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4875                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4876                }
4877            }
4878
4879            next_offset += envelope_size;
4880            _next_ordinal_to_read += 1;
4881            if next_offset >= end_offset {
4882                return Ok(());
4883            }
4884
4885            // Decode unknown envelopes for gaps in ordinals.
4886            while _next_ordinal_to_read < 2 {
4887                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4888                _next_ordinal_to_read += 1;
4889                next_offset += envelope_size;
4890            }
4891
4892            let next_out_of_line = decoder.next_out_of_line();
4893            let handles_before = decoder.remaining_handles();
4894            if let Some((inlined, num_bytes, num_handles)) =
4895                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4896            {
4897                let member_inline_size = <fidl_fuchsia_lowpan_device_common::Identity as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4898                if inlined != (member_inline_size <= 4) {
4899                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4900                }
4901                let inner_offset;
4902                let mut inner_depth = depth.clone();
4903                if inlined {
4904                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4905                    inner_offset = next_offset;
4906                } else {
4907                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4908                    inner_depth.increment()?;
4909                }
4910                let val_ref = self.identity.get_or_insert_with(|| {
4911                    fidl::new_empty!(fidl_fuchsia_lowpan_device_common::Identity, D)
4912                });
4913                fidl::decode!(
4914                    fidl_fuchsia_lowpan_device_common::Identity,
4915                    D,
4916                    val_ref,
4917                    decoder,
4918                    inner_offset,
4919                    inner_depth
4920                )?;
4921                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4922                {
4923                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4924                }
4925                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4926                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4927                }
4928            }
4929
4930            next_offset += envelope_size;
4931            _next_ordinal_to_read += 1;
4932            if next_offset >= end_offset {
4933                return Ok(());
4934            }
4935
4936            // Decode unknown envelopes for gaps in ordinals.
4937            while _next_ordinal_to_read < 3 {
4938                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4939                _next_ordinal_to_read += 1;
4940                next_offset += envelope_size;
4941            }
4942
4943            let next_out_of_line = decoder.next_out_of_line();
4944            let handles_before = decoder.remaining_handles();
4945            if let Some((inlined, num_bytes, num_handles)) =
4946                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4947            {
4948                let member_inline_size =
4949                    <i8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4950                if inlined != (member_inline_size <= 4) {
4951                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4952                }
4953                let inner_offset;
4954                let mut inner_depth = depth.clone();
4955                if inlined {
4956                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4957                    inner_offset = next_offset;
4958                } else {
4959                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4960                    inner_depth.increment()?;
4961                }
4962                let val_ref = self.rssi.get_or_insert_with(|| fidl::new_empty!(i8, D));
4963                fidl::decode!(i8, D, val_ref, decoder, inner_offset, inner_depth)?;
4964                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4965                {
4966                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4967                }
4968                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4969                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4970                }
4971            }
4972
4973            next_offset += envelope_size;
4974            _next_ordinal_to_read += 1;
4975            if next_offset >= end_offset {
4976                return Ok(());
4977            }
4978
4979            // Decode unknown envelopes for gaps in ordinals.
4980            while _next_ordinal_to_read < 4 {
4981                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4982                _next_ordinal_to_read += 1;
4983                next_offset += envelope_size;
4984            }
4985
4986            let next_out_of_line = decoder.next_out_of_line();
4987            let handles_before = decoder.remaining_handles();
4988            if let Some((inlined, num_bytes, num_handles)) =
4989                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4990            {
4991                let member_inline_size =
4992                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4993                if inlined != (member_inline_size <= 4) {
4994                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4995                }
4996                let inner_offset;
4997                let mut inner_depth = depth.clone();
4998                if inlined {
4999                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5000                    inner_offset = next_offset;
5001                } else {
5002                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5003                    inner_depth.increment()?;
5004                }
5005                let val_ref = self.lqi.get_or_insert_with(|| fidl::new_empty!(u8, D));
5006                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
5007                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5008                {
5009                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5010                }
5011                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5012                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5013                }
5014            }
5015
5016            next_offset += envelope_size;
5017
5018            // Decode the remaining unknown envelopes.
5019            while next_offset < end_offset {
5020                _next_ordinal_to_read += 1;
5021                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5022                next_offset += envelope_size;
5023            }
5024
5025            Ok(())
5026        }
5027    }
5028
5029    impl BorderRouterConfig {
5030        #[inline(always)]
5031        fn max_ordinal_present(&self) -> u64 {
5032            if let Some(_) = self.rloc16 {
5033                return 12;
5034            }
5035            if let Some(_) = self.dp {
5036                return 11;
5037            }
5038            if let Some(_) = self.nd_dns {
5039                return 10;
5040            }
5041            if let Some(_) = self.stable {
5042                return 9;
5043            }
5044            if let Some(_) = self.on_mesh {
5045                return 8;
5046            }
5047            if let Some(_) = self.default_route {
5048                return 7;
5049            }
5050            if let Some(_) = self.configure {
5051                return 6;
5052            }
5053            if let Some(_) = self.dhcp {
5054                return 5;
5055            }
5056            if let Some(_) = self.slaac {
5057                return 4;
5058            }
5059            if let Some(_) = self.preferred {
5060                return 3;
5061            }
5062            if let Some(_) = self.preference {
5063                return 2;
5064            }
5065            if let Some(_) = self.prefix {
5066                return 1;
5067            }
5068            0
5069        }
5070    }
5071
5072    impl fidl::encoding::ValueTypeMarker for BorderRouterConfig {
5073        type Borrowed<'a> = &'a Self;
5074        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5075            value
5076        }
5077    }
5078
5079    unsafe impl fidl::encoding::TypeMarker for BorderRouterConfig {
5080        type Owned = Self;
5081
5082        #[inline(always)]
5083        fn inline_align(_context: fidl::encoding::Context) -> usize {
5084            8
5085        }
5086
5087        #[inline(always)]
5088        fn inline_size(_context: fidl::encoding::Context) -> usize {
5089            16
5090        }
5091    }
5092
5093    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<BorderRouterConfig, D>
5094        for &BorderRouterConfig
5095    {
5096        unsafe fn encode(
5097            self,
5098            encoder: &mut fidl::encoding::Encoder<'_, D>,
5099            offset: usize,
5100            mut depth: fidl::encoding::Depth,
5101        ) -> fidl::Result<()> {
5102            encoder.debug_check_bounds::<BorderRouterConfig>(offset);
5103            // Vector header
5104            let max_ordinal: u64 = self.max_ordinal_present();
5105            encoder.write_num(max_ordinal, offset);
5106            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
5107            // Calling encoder.out_of_line_offset(0) is not allowed.
5108            if max_ordinal == 0 {
5109                return Ok(());
5110            }
5111            depth.increment()?;
5112            let envelope_size = 8;
5113            let bytes_len = max_ordinal as usize * envelope_size;
5114            #[allow(unused_variables)]
5115            let offset = encoder.out_of_line_offset(bytes_len);
5116            let mut _prev_end_offset: usize = 0;
5117            if 1 > 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 = (1 - 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::<fidl::encoding::BoundedString<64>, D>(
5133                self.prefix.as_ref().map(
5134                    <fidl::encoding::BoundedString<64> as fidl::encoding::ValueTypeMarker>::borrow,
5135                ),
5136                encoder,
5137                offset + cur_offset,
5138                depth,
5139            )?;
5140
5141            _prev_end_offset = cur_offset + envelope_size;
5142            if 2 > max_ordinal {
5143                return Ok(());
5144            }
5145
5146            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5147            // are envelope_size bytes.
5148            let cur_offset: usize = (2 - 1) * envelope_size;
5149
5150            // Zero reserved fields.
5151            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5152
5153            // Safety:
5154            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5155            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5156            //   envelope_size bytes, there is always sufficient room.
5157            fidl::encoding::encode_in_envelope_optional::<i8, D>(
5158                self.preference.as_ref().map(<i8 as fidl::encoding::ValueTypeMarker>::borrow),
5159                encoder,
5160                offset + cur_offset,
5161                depth,
5162            )?;
5163
5164            _prev_end_offset = cur_offset + envelope_size;
5165            if 3 > max_ordinal {
5166                return Ok(());
5167            }
5168
5169            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5170            // are envelope_size bytes.
5171            let cur_offset: usize = (3 - 1) * envelope_size;
5172
5173            // Zero reserved fields.
5174            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5175
5176            // Safety:
5177            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5178            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5179            //   envelope_size bytes, there is always sufficient room.
5180            fidl::encoding::encode_in_envelope_optional::<bool, D>(
5181                self.preferred.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
5182                encoder,
5183                offset + cur_offset,
5184                depth,
5185            )?;
5186
5187            _prev_end_offset = cur_offset + envelope_size;
5188            if 4 > max_ordinal {
5189                return Ok(());
5190            }
5191
5192            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5193            // are envelope_size bytes.
5194            let cur_offset: usize = (4 - 1) * envelope_size;
5195
5196            // Zero reserved fields.
5197            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5198
5199            // Safety:
5200            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5201            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5202            //   envelope_size bytes, there is always sufficient room.
5203            fidl::encoding::encode_in_envelope_optional::<bool, D>(
5204                self.slaac.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
5205                encoder,
5206                offset + cur_offset,
5207                depth,
5208            )?;
5209
5210            _prev_end_offset = cur_offset + envelope_size;
5211            if 5 > max_ordinal {
5212                return Ok(());
5213            }
5214
5215            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5216            // are envelope_size bytes.
5217            let cur_offset: usize = (5 - 1) * envelope_size;
5218
5219            // Zero reserved fields.
5220            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5221
5222            // Safety:
5223            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5224            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5225            //   envelope_size bytes, there is always sufficient room.
5226            fidl::encoding::encode_in_envelope_optional::<bool, D>(
5227                self.dhcp.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
5228                encoder,
5229                offset + cur_offset,
5230                depth,
5231            )?;
5232
5233            _prev_end_offset = cur_offset + envelope_size;
5234            if 6 > max_ordinal {
5235                return Ok(());
5236            }
5237
5238            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5239            // are envelope_size bytes.
5240            let cur_offset: usize = (6 - 1) * envelope_size;
5241
5242            // Zero reserved fields.
5243            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5244
5245            // Safety:
5246            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5247            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5248            //   envelope_size bytes, there is always sufficient room.
5249            fidl::encoding::encode_in_envelope_optional::<bool, D>(
5250                self.configure.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
5251                encoder,
5252                offset + cur_offset,
5253                depth,
5254            )?;
5255
5256            _prev_end_offset = cur_offset + envelope_size;
5257            if 7 > max_ordinal {
5258                return Ok(());
5259            }
5260
5261            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5262            // are envelope_size bytes.
5263            let cur_offset: usize = (7 - 1) * envelope_size;
5264
5265            // Zero reserved fields.
5266            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5267
5268            // Safety:
5269            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5270            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5271            //   envelope_size bytes, there is always sufficient room.
5272            fidl::encoding::encode_in_envelope_optional::<bool, D>(
5273                self.default_route.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
5274                encoder,
5275                offset + cur_offset,
5276                depth,
5277            )?;
5278
5279            _prev_end_offset = cur_offset + envelope_size;
5280            if 8 > max_ordinal {
5281                return Ok(());
5282            }
5283
5284            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5285            // are envelope_size bytes.
5286            let cur_offset: usize = (8 - 1) * envelope_size;
5287
5288            // Zero reserved fields.
5289            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5290
5291            // Safety:
5292            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5293            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5294            //   envelope_size bytes, there is always sufficient room.
5295            fidl::encoding::encode_in_envelope_optional::<bool, D>(
5296                self.on_mesh.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
5297                encoder,
5298                offset + cur_offset,
5299                depth,
5300            )?;
5301
5302            _prev_end_offset = cur_offset + envelope_size;
5303            if 9 > max_ordinal {
5304                return Ok(());
5305            }
5306
5307            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5308            // are envelope_size bytes.
5309            let cur_offset: usize = (9 - 1) * envelope_size;
5310
5311            // Zero reserved fields.
5312            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5313
5314            // Safety:
5315            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5316            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5317            //   envelope_size bytes, there is always sufficient room.
5318            fidl::encoding::encode_in_envelope_optional::<bool, D>(
5319                self.stable.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
5320                encoder,
5321                offset + cur_offset,
5322                depth,
5323            )?;
5324
5325            _prev_end_offset = cur_offset + envelope_size;
5326            if 10 > max_ordinal {
5327                return Ok(());
5328            }
5329
5330            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5331            // are envelope_size bytes.
5332            let cur_offset: usize = (10 - 1) * envelope_size;
5333
5334            // Zero reserved fields.
5335            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5336
5337            // Safety:
5338            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5339            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5340            //   envelope_size bytes, there is always sufficient room.
5341            fidl::encoding::encode_in_envelope_optional::<bool, D>(
5342                self.nd_dns.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
5343                encoder,
5344                offset + cur_offset,
5345                depth,
5346            )?;
5347
5348            _prev_end_offset = cur_offset + envelope_size;
5349            if 11 > max_ordinal {
5350                return Ok(());
5351            }
5352
5353            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5354            // are envelope_size bytes.
5355            let cur_offset: usize = (11 - 1) * envelope_size;
5356
5357            // Zero reserved fields.
5358            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5359
5360            // Safety:
5361            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5362            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5363            //   envelope_size bytes, there is always sufficient room.
5364            fidl::encoding::encode_in_envelope_optional::<bool, D>(
5365                self.dp.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
5366                encoder,
5367                offset + cur_offset,
5368                depth,
5369            )?;
5370
5371            _prev_end_offset = cur_offset + envelope_size;
5372            if 12 > max_ordinal {
5373                return Ok(());
5374            }
5375
5376            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5377            // are envelope_size bytes.
5378            let cur_offset: usize = (12 - 1) * envelope_size;
5379
5380            // Zero reserved fields.
5381            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5382
5383            // Safety:
5384            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5385            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5386            //   envelope_size bytes, there is always sufficient room.
5387            fidl::encoding::encode_in_envelope_optional::<u16, D>(
5388                self.rloc16.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
5389                encoder,
5390                offset + cur_offset,
5391                depth,
5392            )?;
5393
5394            _prev_end_offset = cur_offset + envelope_size;
5395
5396            Ok(())
5397        }
5398    }
5399
5400    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for BorderRouterConfig {
5401        #[inline(always)]
5402        fn new_empty() -> Self {
5403            Self::default()
5404        }
5405
5406        unsafe fn decode(
5407            &mut self,
5408            decoder: &mut fidl::encoding::Decoder<'_, D>,
5409            offset: usize,
5410            mut depth: fidl::encoding::Depth,
5411        ) -> fidl::Result<()> {
5412            decoder.debug_check_bounds::<Self>(offset);
5413            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
5414                None => return Err(fidl::Error::NotNullable),
5415                Some(len) => len,
5416            };
5417            // Calling decoder.out_of_line_offset(0) is not allowed.
5418            if len == 0 {
5419                return Ok(());
5420            };
5421            depth.increment()?;
5422            let envelope_size = 8;
5423            let bytes_len = len * envelope_size;
5424            let offset = decoder.out_of_line_offset(bytes_len)?;
5425            // Decode the envelope for each type.
5426            let mut _next_ordinal_to_read = 0;
5427            let mut next_offset = offset;
5428            let end_offset = offset + bytes_len;
5429            _next_ordinal_to_read += 1;
5430            if next_offset >= end_offset {
5431                return Ok(());
5432            }
5433
5434            // Decode unknown envelopes for gaps in ordinals.
5435            while _next_ordinal_to_read < 1 {
5436                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5437                _next_ordinal_to_read += 1;
5438                next_offset += envelope_size;
5439            }
5440
5441            let next_out_of_line = decoder.next_out_of_line();
5442            let handles_before = decoder.remaining_handles();
5443            if let Some((inlined, num_bytes, num_handles)) =
5444                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5445            {
5446                let member_inline_size =
5447                    <fidl::encoding::BoundedString<64> as fidl::encoding::TypeMarker>::inline_size(
5448                        decoder.context,
5449                    );
5450                if inlined != (member_inline_size <= 4) {
5451                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5452                }
5453                let inner_offset;
5454                let mut inner_depth = depth.clone();
5455                if inlined {
5456                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5457                    inner_offset = next_offset;
5458                } else {
5459                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5460                    inner_depth.increment()?;
5461                }
5462                let val_ref = self
5463                    .prefix
5464                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<64>, D));
5465                fidl::decode!(
5466                    fidl::encoding::BoundedString<64>,
5467                    D,
5468                    val_ref,
5469                    decoder,
5470                    inner_offset,
5471                    inner_depth
5472                )?;
5473                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5474                {
5475                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5476                }
5477                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5478                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5479                }
5480            }
5481
5482            next_offset += envelope_size;
5483            _next_ordinal_to_read += 1;
5484            if next_offset >= end_offset {
5485                return Ok(());
5486            }
5487
5488            // Decode unknown envelopes for gaps in ordinals.
5489            while _next_ordinal_to_read < 2 {
5490                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5491                _next_ordinal_to_read += 1;
5492                next_offset += envelope_size;
5493            }
5494
5495            let next_out_of_line = decoder.next_out_of_line();
5496            let handles_before = decoder.remaining_handles();
5497            if let Some((inlined, num_bytes, num_handles)) =
5498                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5499            {
5500                let member_inline_size =
5501                    <i8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5502                if inlined != (member_inline_size <= 4) {
5503                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5504                }
5505                let inner_offset;
5506                let mut inner_depth = depth.clone();
5507                if inlined {
5508                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5509                    inner_offset = next_offset;
5510                } else {
5511                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5512                    inner_depth.increment()?;
5513                }
5514                let val_ref = self.preference.get_or_insert_with(|| fidl::new_empty!(i8, D));
5515                fidl::decode!(i8, D, val_ref, decoder, inner_offset, inner_depth)?;
5516                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5517                {
5518                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5519                }
5520                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5521                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5522                }
5523            }
5524
5525            next_offset += envelope_size;
5526            _next_ordinal_to_read += 1;
5527            if next_offset >= end_offset {
5528                return Ok(());
5529            }
5530
5531            // Decode unknown envelopes for gaps in ordinals.
5532            while _next_ordinal_to_read < 3 {
5533                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5534                _next_ordinal_to_read += 1;
5535                next_offset += envelope_size;
5536            }
5537
5538            let next_out_of_line = decoder.next_out_of_line();
5539            let handles_before = decoder.remaining_handles();
5540            if let Some((inlined, num_bytes, num_handles)) =
5541                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5542            {
5543                let member_inline_size =
5544                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5545                if inlined != (member_inline_size <= 4) {
5546                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5547                }
5548                let inner_offset;
5549                let mut inner_depth = depth.clone();
5550                if inlined {
5551                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5552                    inner_offset = next_offset;
5553                } else {
5554                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5555                    inner_depth.increment()?;
5556                }
5557                let val_ref = self.preferred.get_or_insert_with(|| fidl::new_empty!(bool, D));
5558                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
5559                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5560                {
5561                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5562                }
5563                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5564                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5565                }
5566            }
5567
5568            next_offset += envelope_size;
5569            _next_ordinal_to_read += 1;
5570            if next_offset >= end_offset {
5571                return Ok(());
5572            }
5573
5574            // Decode unknown envelopes for gaps in ordinals.
5575            while _next_ordinal_to_read < 4 {
5576                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5577                _next_ordinal_to_read += 1;
5578                next_offset += envelope_size;
5579            }
5580
5581            let next_out_of_line = decoder.next_out_of_line();
5582            let handles_before = decoder.remaining_handles();
5583            if let Some((inlined, num_bytes, num_handles)) =
5584                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5585            {
5586                let member_inline_size =
5587                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5588                if inlined != (member_inline_size <= 4) {
5589                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5590                }
5591                let inner_offset;
5592                let mut inner_depth = depth.clone();
5593                if inlined {
5594                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5595                    inner_offset = next_offset;
5596                } else {
5597                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5598                    inner_depth.increment()?;
5599                }
5600                let val_ref = self.slaac.get_or_insert_with(|| fidl::new_empty!(bool, D));
5601                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
5602                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5603                {
5604                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5605                }
5606                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5607                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5608                }
5609            }
5610
5611            next_offset += envelope_size;
5612            _next_ordinal_to_read += 1;
5613            if next_offset >= end_offset {
5614                return Ok(());
5615            }
5616
5617            // Decode unknown envelopes for gaps in ordinals.
5618            while _next_ordinal_to_read < 5 {
5619                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5620                _next_ordinal_to_read += 1;
5621                next_offset += envelope_size;
5622            }
5623
5624            let next_out_of_line = decoder.next_out_of_line();
5625            let handles_before = decoder.remaining_handles();
5626            if let Some((inlined, num_bytes, num_handles)) =
5627                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5628            {
5629                let member_inline_size =
5630                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5631                if inlined != (member_inline_size <= 4) {
5632                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5633                }
5634                let inner_offset;
5635                let mut inner_depth = depth.clone();
5636                if inlined {
5637                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5638                    inner_offset = next_offset;
5639                } else {
5640                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5641                    inner_depth.increment()?;
5642                }
5643                let val_ref = self.dhcp.get_or_insert_with(|| fidl::new_empty!(bool, D));
5644                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
5645                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5646                {
5647                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5648                }
5649                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5650                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5651                }
5652            }
5653
5654            next_offset += envelope_size;
5655            _next_ordinal_to_read += 1;
5656            if next_offset >= end_offset {
5657                return Ok(());
5658            }
5659
5660            // Decode unknown envelopes for gaps in ordinals.
5661            while _next_ordinal_to_read < 6 {
5662                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5663                _next_ordinal_to_read += 1;
5664                next_offset += envelope_size;
5665            }
5666
5667            let next_out_of_line = decoder.next_out_of_line();
5668            let handles_before = decoder.remaining_handles();
5669            if let Some((inlined, num_bytes, num_handles)) =
5670                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5671            {
5672                let member_inline_size =
5673                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5674                if inlined != (member_inline_size <= 4) {
5675                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5676                }
5677                let inner_offset;
5678                let mut inner_depth = depth.clone();
5679                if inlined {
5680                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5681                    inner_offset = next_offset;
5682                } else {
5683                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5684                    inner_depth.increment()?;
5685                }
5686                let val_ref = self.configure.get_or_insert_with(|| fidl::new_empty!(bool, D));
5687                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
5688                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5689                {
5690                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5691                }
5692                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5693                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5694                }
5695            }
5696
5697            next_offset += envelope_size;
5698            _next_ordinal_to_read += 1;
5699            if next_offset >= end_offset {
5700                return Ok(());
5701            }
5702
5703            // Decode unknown envelopes for gaps in ordinals.
5704            while _next_ordinal_to_read < 7 {
5705                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5706                _next_ordinal_to_read += 1;
5707                next_offset += envelope_size;
5708            }
5709
5710            let next_out_of_line = decoder.next_out_of_line();
5711            let handles_before = decoder.remaining_handles();
5712            if let Some((inlined, num_bytes, num_handles)) =
5713                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5714            {
5715                let member_inline_size =
5716                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5717                if inlined != (member_inline_size <= 4) {
5718                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5719                }
5720                let inner_offset;
5721                let mut inner_depth = depth.clone();
5722                if inlined {
5723                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5724                    inner_offset = next_offset;
5725                } else {
5726                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5727                    inner_depth.increment()?;
5728                }
5729                let val_ref = self.default_route.get_or_insert_with(|| fidl::new_empty!(bool, D));
5730                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
5731                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5732                {
5733                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5734                }
5735                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5736                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5737                }
5738            }
5739
5740            next_offset += envelope_size;
5741            _next_ordinal_to_read += 1;
5742            if next_offset >= end_offset {
5743                return Ok(());
5744            }
5745
5746            // Decode unknown envelopes for gaps in ordinals.
5747            while _next_ordinal_to_read < 8 {
5748                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5749                _next_ordinal_to_read += 1;
5750                next_offset += envelope_size;
5751            }
5752
5753            let next_out_of_line = decoder.next_out_of_line();
5754            let handles_before = decoder.remaining_handles();
5755            if let Some((inlined, num_bytes, num_handles)) =
5756                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5757            {
5758                let member_inline_size =
5759                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5760                if inlined != (member_inline_size <= 4) {
5761                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5762                }
5763                let inner_offset;
5764                let mut inner_depth = depth.clone();
5765                if inlined {
5766                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5767                    inner_offset = next_offset;
5768                } else {
5769                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5770                    inner_depth.increment()?;
5771                }
5772                let val_ref = self.on_mesh.get_or_insert_with(|| fidl::new_empty!(bool, D));
5773                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
5774                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5775                {
5776                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5777                }
5778                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5779                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5780                }
5781            }
5782
5783            next_offset += envelope_size;
5784            _next_ordinal_to_read += 1;
5785            if next_offset >= end_offset {
5786                return Ok(());
5787            }
5788
5789            // Decode unknown envelopes for gaps in ordinals.
5790            while _next_ordinal_to_read < 9 {
5791                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5792                _next_ordinal_to_read += 1;
5793                next_offset += envelope_size;
5794            }
5795
5796            let next_out_of_line = decoder.next_out_of_line();
5797            let handles_before = decoder.remaining_handles();
5798            if let Some((inlined, num_bytes, num_handles)) =
5799                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5800            {
5801                let member_inline_size =
5802                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5803                if inlined != (member_inline_size <= 4) {
5804                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5805                }
5806                let inner_offset;
5807                let mut inner_depth = depth.clone();
5808                if inlined {
5809                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5810                    inner_offset = next_offset;
5811                } else {
5812                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5813                    inner_depth.increment()?;
5814                }
5815                let val_ref = self.stable.get_or_insert_with(|| fidl::new_empty!(bool, D));
5816                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
5817                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5818                {
5819                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5820                }
5821                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5822                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5823                }
5824            }
5825
5826            next_offset += envelope_size;
5827            _next_ordinal_to_read += 1;
5828            if next_offset >= end_offset {
5829                return Ok(());
5830            }
5831
5832            // Decode unknown envelopes for gaps in ordinals.
5833            while _next_ordinal_to_read < 10 {
5834                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5835                _next_ordinal_to_read += 1;
5836                next_offset += envelope_size;
5837            }
5838
5839            let next_out_of_line = decoder.next_out_of_line();
5840            let handles_before = decoder.remaining_handles();
5841            if let Some((inlined, num_bytes, num_handles)) =
5842                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5843            {
5844                let member_inline_size =
5845                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5846                if inlined != (member_inline_size <= 4) {
5847                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5848                }
5849                let inner_offset;
5850                let mut inner_depth = depth.clone();
5851                if inlined {
5852                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5853                    inner_offset = next_offset;
5854                } else {
5855                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5856                    inner_depth.increment()?;
5857                }
5858                let val_ref = self.nd_dns.get_or_insert_with(|| fidl::new_empty!(bool, D));
5859                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
5860                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5861                {
5862                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5863                }
5864                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5865                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5866                }
5867            }
5868
5869            next_offset += envelope_size;
5870            _next_ordinal_to_read += 1;
5871            if next_offset >= end_offset {
5872                return Ok(());
5873            }
5874
5875            // Decode unknown envelopes for gaps in ordinals.
5876            while _next_ordinal_to_read < 11 {
5877                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5878                _next_ordinal_to_read += 1;
5879                next_offset += envelope_size;
5880            }
5881
5882            let next_out_of_line = decoder.next_out_of_line();
5883            let handles_before = decoder.remaining_handles();
5884            if let Some((inlined, num_bytes, num_handles)) =
5885                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5886            {
5887                let member_inline_size =
5888                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5889                if inlined != (member_inline_size <= 4) {
5890                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5891                }
5892                let inner_offset;
5893                let mut inner_depth = depth.clone();
5894                if inlined {
5895                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5896                    inner_offset = next_offset;
5897                } else {
5898                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5899                    inner_depth.increment()?;
5900                }
5901                let val_ref = self.dp.get_or_insert_with(|| fidl::new_empty!(bool, D));
5902                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
5903                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5904                {
5905                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5906                }
5907                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5908                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5909                }
5910            }
5911
5912            next_offset += envelope_size;
5913            _next_ordinal_to_read += 1;
5914            if next_offset >= end_offset {
5915                return Ok(());
5916            }
5917
5918            // Decode unknown envelopes for gaps in ordinals.
5919            while _next_ordinal_to_read < 12 {
5920                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5921                _next_ordinal_to_read += 1;
5922                next_offset += envelope_size;
5923            }
5924
5925            let next_out_of_line = decoder.next_out_of_line();
5926            let handles_before = decoder.remaining_handles();
5927            if let Some((inlined, num_bytes, num_handles)) =
5928                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5929            {
5930                let member_inline_size =
5931                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5932                if inlined != (member_inline_size <= 4) {
5933                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5934                }
5935                let inner_offset;
5936                let mut inner_depth = depth.clone();
5937                if inlined {
5938                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5939                    inner_offset = next_offset;
5940                } else {
5941                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5942                    inner_depth.increment()?;
5943                }
5944                let val_ref = self.rloc16.get_or_insert_with(|| fidl::new_empty!(u16, D));
5945                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
5946                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5947                {
5948                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5949                }
5950                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5951                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5952                }
5953            }
5954
5955            next_offset += envelope_size;
5956
5957            // Decode the remaining unknown envelopes.
5958            while next_offset < end_offset {
5959                _next_ordinal_to_read += 1;
5960                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5961                next_offset += envelope_size;
5962            }
5963
5964            Ok(())
5965        }
5966    }
5967
5968    impl BorderRoutingCounters {
5969        #[inline(always)]
5970        fn max_ordinal_present(&self) -> u64 {
5971            if let Some(_) = self.outbound_internet_bytes {
5972                return 18;
5973            }
5974            if let Some(_) = self.outbound_internet_packets {
5975                return 17;
5976            }
5977            if let Some(_) = self.inbound_internet_bytes {
5978                return 16;
5979            }
5980            if let Some(_) = self.inbound_internet_packets {
5981                return 15;
5982            }
5983            if let Some(_) = self.rs_tx_failure {
5984                return 14;
5985            }
5986            if let Some(_) = self.rs_tx_success {
5987                return 13;
5988            }
5989            if let Some(_) = self.rs_rx {
5990                return 12;
5991            }
5992            if let Some(_) = self.ra_tx_failure {
5993                return 11;
5994            }
5995            if let Some(_) = self.ra_tx_success {
5996                return 10;
5997            }
5998            if let Some(_) = self.ra_rx {
5999                return 9;
6000            }
6001            if let Some(_) = self.outbound_multicast_bytes {
6002                return 8;
6003            }
6004            if let Some(_) = self.outbound_multicast_packets {
6005                return 7;
6006            }
6007            if let Some(_) = self.outbound_unicast_bytes {
6008                return 6;
6009            }
6010            if let Some(_) = self.outbound_unicast_packets {
6011                return 5;
6012            }
6013            if let Some(_) = self.inbound_multicast_bytes {
6014                return 4;
6015            }
6016            if let Some(_) = self.inbound_multicast_packets {
6017                return 3;
6018            }
6019            if let Some(_) = self.inbound_unicast_bytes {
6020                return 2;
6021            }
6022            if let Some(_) = self.inbound_unicast_packets {
6023                return 1;
6024            }
6025            0
6026        }
6027    }
6028
6029    impl fidl::encoding::ValueTypeMarker for BorderRoutingCounters {
6030        type Borrowed<'a> = &'a Self;
6031        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
6032            value
6033        }
6034    }
6035
6036    unsafe impl fidl::encoding::TypeMarker for BorderRoutingCounters {
6037        type Owned = Self;
6038
6039        #[inline(always)]
6040        fn inline_align(_context: fidl::encoding::Context) -> usize {
6041            8
6042        }
6043
6044        #[inline(always)]
6045        fn inline_size(_context: fidl::encoding::Context) -> usize {
6046            16
6047        }
6048    }
6049
6050    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<BorderRoutingCounters, D>
6051        for &BorderRoutingCounters
6052    {
6053        unsafe fn encode(
6054            self,
6055            encoder: &mut fidl::encoding::Encoder<'_, D>,
6056            offset: usize,
6057            mut depth: fidl::encoding::Depth,
6058        ) -> fidl::Result<()> {
6059            encoder.debug_check_bounds::<BorderRoutingCounters>(offset);
6060            // Vector header
6061            let max_ordinal: u64 = self.max_ordinal_present();
6062            encoder.write_num(max_ordinal, offset);
6063            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
6064            // Calling encoder.out_of_line_offset(0) is not allowed.
6065            if max_ordinal == 0 {
6066                return Ok(());
6067            }
6068            depth.increment()?;
6069            let envelope_size = 8;
6070            let bytes_len = max_ordinal as usize * envelope_size;
6071            #[allow(unused_variables)]
6072            let offset = encoder.out_of_line_offset(bytes_len);
6073            let mut _prev_end_offset: usize = 0;
6074            if 1 > max_ordinal {
6075                return Ok(());
6076            }
6077
6078            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6079            // are envelope_size bytes.
6080            let cur_offset: usize = (1 - 1) * envelope_size;
6081
6082            // Zero reserved fields.
6083            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6084
6085            // Safety:
6086            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6087            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6088            //   envelope_size bytes, there is always sufficient room.
6089            fidl::encoding::encode_in_envelope_optional::<u64, D>(
6090                self.inbound_unicast_packets
6091                    .as_ref()
6092                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
6093                encoder,
6094                offset + cur_offset,
6095                depth,
6096            )?;
6097
6098            _prev_end_offset = cur_offset + envelope_size;
6099            if 2 > max_ordinal {
6100                return Ok(());
6101            }
6102
6103            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6104            // are envelope_size bytes.
6105            let cur_offset: usize = (2 - 1) * envelope_size;
6106
6107            // Zero reserved fields.
6108            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6109
6110            // Safety:
6111            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6112            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6113            //   envelope_size bytes, there is always sufficient room.
6114            fidl::encoding::encode_in_envelope_optional::<u64, D>(
6115                self.inbound_unicast_bytes
6116                    .as_ref()
6117                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
6118                encoder,
6119                offset + cur_offset,
6120                depth,
6121            )?;
6122
6123            _prev_end_offset = cur_offset + envelope_size;
6124            if 3 > max_ordinal {
6125                return Ok(());
6126            }
6127
6128            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6129            // are envelope_size bytes.
6130            let cur_offset: usize = (3 - 1) * envelope_size;
6131
6132            // Zero reserved fields.
6133            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6134
6135            // Safety:
6136            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6137            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6138            //   envelope_size bytes, there is always sufficient room.
6139            fidl::encoding::encode_in_envelope_optional::<u64, D>(
6140                self.inbound_multicast_packets
6141                    .as_ref()
6142                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
6143                encoder,
6144                offset + cur_offset,
6145                depth,
6146            )?;
6147
6148            _prev_end_offset = cur_offset + envelope_size;
6149            if 4 > max_ordinal {
6150                return Ok(());
6151            }
6152
6153            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6154            // are envelope_size bytes.
6155            let cur_offset: usize = (4 - 1) * envelope_size;
6156
6157            // Zero reserved fields.
6158            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6159
6160            // Safety:
6161            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6162            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6163            //   envelope_size bytes, there is always sufficient room.
6164            fidl::encoding::encode_in_envelope_optional::<u64, D>(
6165                self.inbound_multicast_bytes
6166                    .as_ref()
6167                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
6168                encoder,
6169                offset + cur_offset,
6170                depth,
6171            )?;
6172
6173            _prev_end_offset = cur_offset + envelope_size;
6174            if 5 > max_ordinal {
6175                return Ok(());
6176            }
6177
6178            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6179            // are envelope_size bytes.
6180            let cur_offset: usize = (5 - 1) * envelope_size;
6181
6182            // Zero reserved fields.
6183            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6184
6185            // Safety:
6186            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6187            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6188            //   envelope_size bytes, there is always sufficient room.
6189            fidl::encoding::encode_in_envelope_optional::<u64, D>(
6190                self.outbound_unicast_packets
6191                    .as_ref()
6192                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
6193                encoder,
6194                offset + cur_offset,
6195                depth,
6196            )?;
6197
6198            _prev_end_offset = cur_offset + envelope_size;
6199            if 6 > max_ordinal {
6200                return Ok(());
6201            }
6202
6203            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6204            // are envelope_size bytes.
6205            let cur_offset: usize = (6 - 1) * envelope_size;
6206
6207            // Zero reserved fields.
6208            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6209
6210            // Safety:
6211            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6212            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6213            //   envelope_size bytes, there is always sufficient room.
6214            fidl::encoding::encode_in_envelope_optional::<u64, D>(
6215                self.outbound_unicast_bytes
6216                    .as_ref()
6217                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
6218                encoder,
6219                offset + cur_offset,
6220                depth,
6221            )?;
6222
6223            _prev_end_offset = cur_offset + envelope_size;
6224            if 7 > max_ordinal {
6225                return Ok(());
6226            }
6227
6228            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6229            // are envelope_size bytes.
6230            let cur_offset: usize = (7 - 1) * envelope_size;
6231
6232            // Zero reserved fields.
6233            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6234
6235            // Safety:
6236            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6237            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6238            //   envelope_size bytes, there is always sufficient room.
6239            fidl::encoding::encode_in_envelope_optional::<u64, D>(
6240                self.outbound_multicast_packets
6241                    .as_ref()
6242                    .map(<u64 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 8 > 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 = (8 - 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::<u64, D>(
6265                self.outbound_multicast_bytes
6266                    .as_ref()
6267                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
6268                encoder,
6269                offset + cur_offset,
6270                depth,
6271            )?;
6272
6273            _prev_end_offset = cur_offset + envelope_size;
6274            if 9 > max_ordinal {
6275                return Ok(());
6276            }
6277
6278            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6279            // are envelope_size bytes.
6280            let cur_offset: usize = (9 - 1) * envelope_size;
6281
6282            // Zero reserved fields.
6283            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6284
6285            // Safety:
6286            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6287            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6288            //   envelope_size bytes, there is always sufficient room.
6289            fidl::encoding::encode_in_envelope_optional::<u32, D>(
6290                self.ra_rx.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
6291                encoder,
6292                offset + cur_offset,
6293                depth,
6294            )?;
6295
6296            _prev_end_offset = cur_offset + envelope_size;
6297            if 10 > max_ordinal {
6298                return Ok(());
6299            }
6300
6301            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6302            // are envelope_size bytes.
6303            let cur_offset: usize = (10 - 1) * envelope_size;
6304
6305            // Zero reserved fields.
6306            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6307
6308            // Safety:
6309            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6310            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6311            //   envelope_size bytes, there is always sufficient room.
6312            fidl::encoding::encode_in_envelope_optional::<u32, D>(
6313                self.ra_tx_success.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
6314                encoder,
6315                offset + cur_offset,
6316                depth,
6317            )?;
6318
6319            _prev_end_offset = cur_offset + envelope_size;
6320            if 11 > max_ordinal {
6321                return Ok(());
6322            }
6323
6324            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6325            // are envelope_size bytes.
6326            let cur_offset: usize = (11 - 1) * envelope_size;
6327
6328            // Zero reserved fields.
6329            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6330
6331            // Safety:
6332            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6333            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6334            //   envelope_size bytes, there is always sufficient room.
6335            fidl::encoding::encode_in_envelope_optional::<u32, D>(
6336                self.ra_tx_failure.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
6337                encoder,
6338                offset + cur_offset,
6339                depth,
6340            )?;
6341
6342            _prev_end_offset = cur_offset + envelope_size;
6343            if 12 > max_ordinal {
6344                return Ok(());
6345            }
6346
6347            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6348            // are envelope_size bytes.
6349            let cur_offset: usize = (12 - 1) * envelope_size;
6350
6351            // Zero reserved fields.
6352            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6353
6354            // Safety:
6355            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6356            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6357            //   envelope_size bytes, there is always sufficient room.
6358            fidl::encoding::encode_in_envelope_optional::<u32, D>(
6359                self.rs_rx.as_ref().map(<u32 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 13 > 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 = (13 - 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::<u32, D>(
6382                self.rs_tx_success.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
6383                encoder,
6384                offset + cur_offset,
6385                depth,
6386            )?;
6387
6388            _prev_end_offset = cur_offset + envelope_size;
6389            if 14 > max_ordinal {
6390                return Ok(());
6391            }
6392
6393            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6394            // are envelope_size bytes.
6395            let cur_offset: usize = (14 - 1) * envelope_size;
6396
6397            // Zero reserved fields.
6398            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6399
6400            // Safety:
6401            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6402            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6403            //   envelope_size bytes, there is always sufficient room.
6404            fidl::encoding::encode_in_envelope_optional::<u32, D>(
6405                self.rs_tx_failure.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
6406                encoder,
6407                offset + cur_offset,
6408                depth,
6409            )?;
6410
6411            _prev_end_offset = cur_offset + envelope_size;
6412            if 15 > max_ordinal {
6413                return Ok(());
6414            }
6415
6416            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6417            // are envelope_size bytes.
6418            let cur_offset: usize = (15 - 1) * envelope_size;
6419
6420            // Zero reserved fields.
6421            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6422
6423            // Safety:
6424            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6425            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6426            //   envelope_size bytes, there is always sufficient room.
6427            fidl::encoding::encode_in_envelope_optional::<u64, D>(
6428                self.inbound_internet_packets
6429                    .as_ref()
6430                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
6431                encoder,
6432                offset + cur_offset,
6433                depth,
6434            )?;
6435
6436            _prev_end_offset = cur_offset + envelope_size;
6437            if 16 > max_ordinal {
6438                return Ok(());
6439            }
6440
6441            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6442            // are envelope_size bytes.
6443            let cur_offset: usize = (16 - 1) * envelope_size;
6444
6445            // Zero reserved fields.
6446            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6447
6448            // Safety:
6449            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6450            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6451            //   envelope_size bytes, there is always sufficient room.
6452            fidl::encoding::encode_in_envelope_optional::<u64, D>(
6453                self.inbound_internet_bytes
6454                    .as_ref()
6455                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
6456                encoder,
6457                offset + cur_offset,
6458                depth,
6459            )?;
6460
6461            _prev_end_offset = cur_offset + envelope_size;
6462            if 17 > max_ordinal {
6463                return Ok(());
6464            }
6465
6466            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6467            // are envelope_size bytes.
6468            let cur_offset: usize = (17 - 1) * envelope_size;
6469
6470            // Zero reserved fields.
6471            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6472
6473            // Safety:
6474            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6475            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6476            //   envelope_size bytes, there is always sufficient room.
6477            fidl::encoding::encode_in_envelope_optional::<u64, D>(
6478                self.outbound_internet_packets
6479                    .as_ref()
6480                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
6481                encoder,
6482                offset + cur_offset,
6483                depth,
6484            )?;
6485
6486            _prev_end_offset = cur_offset + envelope_size;
6487            if 18 > max_ordinal {
6488                return Ok(());
6489            }
6490
6491            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6492            // are envelope_size bytes.
6493            let cur_offset: usize = (18 - 1) * envelope_size;
6494
6495            // Zero reserved fields.
6496            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6497
6498            // Safety:
6499            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6500            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6501            //   envelope_size bytes, there is always sufficient room.
6502            fidl::encoding::encode_in_envelope_optional::<u64, D>(
6503                self.outbound_internet_bytes
6504                    .as_ref()
6505                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
6506                encoder,
6507                offset + cur_offset,
6508                depth,
6509            )?;
6510
6511            _prev_end_offset = cur_offset + envelope_size;
6512
6513            Ok(())
6514        }
6515    }
6516
6517    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for BorderRoutingCounters {
6518        #[inline(always)]
6519        fn new_empty() -> Self {
6520            Self::default()
6521        }
6522
6523        unsafe fn decode(
6524            &mut self,
6525            decoder: &mut fidl::encoding::Decoder<'_, D>,
6526            offset: usize,
6527            mut depth: fidl::encoding::Depth,
6528        ) -> fidl::Result<()> {
6529            decoder.debug_check_bounds::<Self>(offset);
6530            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
6531                None => return Err(fidl::Error::NotNullable),
6532                Some(len) => len,
6533            };
6534            // Calling decoder.out_of_line_offset(0) is not allowed.
6535            if len == 0 {
6536                return Ok(());
6537            };
6538            depth.increment()?;
6539            let envelope_size = 8;
6540            let bytes_len = len * envelope_size;
6541            let offset = decoder.out_of_line_offset(bytes_len)?;
6542            // Decode the envelope for each type.
6543            let mut _next_ordinal_to_read = 0;
6544            let mut next_offset = offset;
6545            let end_offset = offset + bytes_len;
6546            _next_ordinal_to_read += 1;
6547            if next_offset >= end_offset {
6548                return Ok(());
6549            }
6550
6551            // Decode unknown envelopes for gaps in ordinals.
6552            while _next_ordinal_to_read < 1 {
6553                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6554                _next_ordinal_to_read += 1;
6555                next_offset += envelope_size;
6556            }
6557
6558            let next_out_of_line = decoder.next_out_of_line();
6559            let handles_before = decoder.remaining_handles();
6560            if let Some((inlined, num_bytes, num_handles)) =
6561                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6562            {
6563                let member_inline_size =
6564                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6565                if inlined != (member_inline_size <= 4) {
6566                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6567                }
6568                let inner_offset;
6569                let mut inner_depth = depth.clone();
6570                if inlined {
6571                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6572                    inner_offset = next_offset;
6573                } else {
6574                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6575                    inner_depth.increment()?;
6576                }
6577                let val_ref =
6578                    self.inbound_unicast_packets.get_or_insert_with(|| fidl::new_empty!(u64, D));
6579                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
6580                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6581                {
6582                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6583                }
6584                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6585                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6586                }
6587            }
6588
6589            next_offset += envelope_size;
6590            _next_ordinal_to_read += 1;
6591            if next_offset >= end_offset {
6592                return Ok(());
6593            }
6594
6595            // Decode unknown envelopes for gaps in ordinals.
6596            while _next_ordinal_to_read < 2 {
6597                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6598                _next_ordinal_to_read += 1;
6599                next_offset += envelope_size;
6600            }
6601
6602            let next_out_of_line = decoder.next_out_of_line();
6603            let handles_before = decoder.remaining_handles();
6604            if let Some((inlined, num_bytes, num_handles)) =
6605                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6606            {
6607                let member_inline_size =
6608                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6609                if inlined != (member_inline_size <= 4) {
6610                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6611                }
6612                let inner_offset;
6613                let mut inner_depth = depth.clone();
6614                if inlined {
6615                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6616                    inner_offset = next_offset;
6617                } else {
6618                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6619                    inner_depth.increment()?;
6620                }
6621                let val_ref =
6622                    self.inbound_unicast_bytes.get_or_insert_with(|| fidl::new_empty!(u64, D));
6623                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
6624                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6625                {
6626                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6627                }
6628                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6629                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6630                }
6631            }
6632
6633            next_offset += envelope_size;
6634            _next_ordinal_to_read += 1;
6635            if next_offset >= end_offset {
6636                return Ok(());
6637            }
6638
6639            // Decode unknown envelopes for gaps in ordinals.
6640            while _next_ordinal_to_read < 3 {
6641                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6642                _next_ordinal_to_read += 1;
6643                next_offset += envelope_size;
6644            }
6645
6646            let next_out_of_line = decoder.next_out_of_line();
6647            let handles_before = decoder.remaining_handles();
6648            if let Some((inlined, num_bytes, num_handles)) =
6649                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6650            {
6651                let member_inline_size =
6652                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6653                if inlined != (member_inline_size <= 4) {
6654                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6655                }
6656                let inner_offset;
6657                let mut inner_depth = depth.clone();
6658                if inlined {
6659                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6660                    inner_offset = next_offset;
6661                } else {
6662                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6663                    inner_depth.increment()?;
6664                }
6665                let val_ref =
6666                    self.inbound_multicast_packets.get_or_insert_with(|| fidl::new_empty!(u64, D));
6667                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
6668                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6669                {
6670                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6671                }
6672                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6673                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6674                }
6675            }
6676
6677            next_offset += envelope_size;
6678            _next_ordinal_to_read += 1;
6679            if next_offset >= end_offset {
6680                return Ok(());
6681            }
6682
6683            // Decode unknown envelopes for gaps in ordinals.
6684            while _next_ordinal_to_read < 4 {
6685                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6686                _next_ordinal_to_read += 1;
6687                next_offset += envelope_size;
6688            }
6689
6690            let next_out_of_line = decoder.next_out_of_line();
6691            let handles_before = decoder.remaining_handles();
6692            if let Some((inlined, num_bytes, num_handles)) =
6693                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6694            {
6695                let member_inline_size =
6696                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6697                if inlined != (member_inline_size <= 4) {
6698                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6699                }
6700                let inner_offset;
6701                let mut inner_depth = depth.clone();
6702                if inlined {
6703                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6704                    inner_offset = next_offset;
6705                } else {
6706                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6707                    inner_depth.increment()?;
6708                }
6709                let val_ref =
6710                    self.inbound_multicast_bytes.get_or_insert_with(|| fidl::new_empty!(u64, D));
6711                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
6712                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6713                {
6714                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6715                }
6716                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6717                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6718                }
6719            }
6720
6721            next_offset += envelope_size;
6722            _next_ordinal_to_read += 1;
6723            if next_offset >= end_offset {
6724                return Ok(());
6725            }
6726
6727            // Decode unknown envelopes for gaps in ordinals.
6728            while _next_ordinal_to_read < 5 {
6729                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6730                _next_ordinal_to_read += 1;
6731                next_offset += envelope_size;
6732            }
6733
6734            let next_out_of_line = decoder.next_out_of_line();
6735            let handles_before = decoder.remaining_handles();
6736            if let Some((inlined, num_bytes, num_handles)) =
6737                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6738            {
6739                let member_inline_size =
6740                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6741                if inlined != (member_inline_size <= 4) {
6742                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6743                }
6744                let inner_offset;
6745                let mut inner_depth = depth.clone();
6746                if inlined {
6747                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6748                    inner_offset = next_offset;
6749                } else {
6750                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6751                    inner_depth.increment()?;
6752                }
6753                let val_ref =
6754                    self.outbound_unicast_packets.get_or_insert_with(|| fidl::new_empty!(u64, D));
6755                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
6756                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6757                {
6758                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6759                }
6760                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6761                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6762                }
6763            }
6764
6765            next_offset += envelope_size;
6766            _next_ordinal_to_read += 1;
6767            if next_offset >= end_offset {
6768                return Ok(());
6769            }
6770
6771            // Decode unknown envelopes for gaps in ordinals.
6772            while _next_ordinal_to_read < 6 {
6773                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6774                _next_ordinal_to_read += 1;
6775                next_offset += envelope_size;
6776            }
6777
6778            let next_out_of_line = decoder.next_out_of_line();
6779            let handles_before = decoder.remaining_handles();
6780            if let Some((inlined, num_bytes, num_handles)) =
6781                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6782            {
6783                let member_inline_size =
6784                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6785                if inlined != (member_inline_size <= 4) {
6786                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6787                }
6788                let inner_offset;
6789                let mut inner_depth = depth.clone();
6790                if inlined {
6791                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6792                    inner_offset = next_offset;
6793                } else {
6794                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6795                    inner_depth.increment()?;
6796                }
6797                let val_ref =
6798                    self.outbound_unicast_bytes.get_or_insert_with(|| fidl::new_empty!(u64, D));
6799                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
6800                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6801                {
6802                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6803                }
6804                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6805                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6806                }
6807            }
6808
6809            next_offset += envelope_size;
6810            _next_ordinal_to_read += 1;
6811            if next_offset >= end_offset {
6812                return Ok(());
6813            }
6814
6815            // Decode unknown envelopes for gaps in ordinals.
6816            while _next_ordinal_to_read < 7 {
6817                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6818                _next_ordinal_to_read += 1;
6819                next_offset += envelope_size;
6820            }
6821
6822            let next_out_of_line = decoder.next_out_of_line();
6823            let handles_before = decoder.remaining_handles();
6824            if let Some((inlined, num_bytes, num_handles)) =
6825                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6826            {
6827                let member_inline_size =
6828                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6829                if inlined != (member_inline_size <= 4) {
6830                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6831                }
6832                let inner_offset;
6833                let mut inner_depth = depth.clone();
6834                if inlined {
6835                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6836                    inner_offset = next_offset;
6837                } else {
6838                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6839                    inner_depth.increment()?;
6840                }
6841                let val_ref =
6842                    self.outbound_multicast_packets.get_or_insert_with(|| fidl::new_empty!(u64, D));
6843                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
6844                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6845                {
6846                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6847                }
6848                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6849                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6850                }
6851            }
6852
6853            next_offset += envelope_size;
6854            _next_ordinal_to_read += 1;
6855            if next_offset >= end_offset {
6856                return Ok(());
6857            }
6858
6859            // Decode unknown envelopes for gaps in ordinals.
6860            while _next_ordinal_to_read < 8 {
6861                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6862                _next_ordinal_to_read += 1;
6863                next_offset += envelope_size;
6864            }
6865
6866            let next_out_of_line = decoder.next_out_of_line();
6867            let handles_before = decoder.remaining_handles();
6868            if let Some((inlined, num_bytes, num_handles)) =
6869                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6870            {
6871                let member_inline_size =
6872                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6873                if inlined != (member_inline_size <= 4) {
6874                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6875                }
6876                let inner_offset;
6877                let mut inner_depth = depth.clone();
6878                if inlined {
6879                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6880                    inner_offset = next_offset;
6881                } else {
6882                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6883                    inner_depth.increment()?;
6884                }
6885                let val_ref =
6886                    self.outbound_multicast_bytes.get_or_insert_with(|| fidl::new_empty!(u64, D));
6887                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
6888                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6889                {
6890                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6891                }
6892                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6893                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6894                }
6895            }
6896
6897            next_offset += envelope_size;
6898            _next_ordinal_to_read += 1;
6899            if next_offset >= end_offset {
6900                return Ok(());
6901            }
6902
6903            // Decode unknown envelopes for gaps in ordinals.
6904            while _next_ordinal_to_read < 9 {
6905                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6906                _next_ordinal_to_read += 1;
6907                next_offset += envelope_size;
6908            }
6909
6910            let next_out_of_line = decoder.next_out_of_line();
6911            let handles_before = decoder.remaining_handles();
6912            if let Some((inlined, num_bytes, num_handles)) =
6913                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6914            {
6915                let member_inline_size =
6916                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6917                if inlined != (member_inline_size <= 4) {
6918                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6919                }
6920                let inner_offset;
6921                let mut inner_depth = depth.clone();
6922                if inlined {
6923                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6924                    inner_offset = next_offset;
6925                } else {
6926                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6927                    inner_depth.increment()?;
6928                }
6929                let val_ref = self.ra_rx.get_or_insert_with(|| fidl::new_empty!(u32, D));
6930                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
6931                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6932                {
6933                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6934                }
6935                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6936                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6937                }
6938            }
6939
6940            next_offset += envelope_size;
6941            _next_ordinal_to_read += 1;
6942            if next_offset >= end_offset {
6943                return Ok(());
6944            }
6945
6946            // Decode unknown envelopes for gaps in ordinals.
6947            while _next_ordinal_to_read < 10 {
6948                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6949                _next_ordinal_to_read += 1;
6950                next_offset += envelope_size;
6951            }
6952
6953            let next_out_of_line = decoder.next_out_of_line();
6954            let handles_before = decoder.remaining_handles();
6955            if let Some((inlined, num_bytes, num_handles)) =
6956                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6957            {
6958                let member_inline_size =
6959                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6960                if inlined != (member_inline_size <= 4) {
6961                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6962                }
6963                let inner_offset;
6964                let mut inner_depth = depth.clone();
6965                if inlined {
6966                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6967                    inner_offset = next_offset;
6968                } else {
6969                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6970                    inner_depth.increment()?;
6971                }
6972                let val_ref = self.ra_tx_success.get_or_insert_with(|| fidl::new_empty!(u32, D));
6973                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
6974                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6975                {
6976                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6977                }
6978                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6979                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6980                }
6981            }
6982
6983            next_offset += envelope_size;
6984            _next_ordinal_to_read += 1;
6985            if next_offset >= end_offset {
6986                return Ok(());
6987            }
6988
6989            // Decode unknown envelopes for gaps in ordinals.
6990            while _next_ordinal_to_read < 11 {
6991                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6992                _next_ordinal_to_read += 1;
6993                next_offset += envelope_size;
6994            }
6995
6996            let next_out_of_line = decoder.next_out_of_line();
6997            let handles_before = decoder.remaining_handles();
6998            if let Some((inlined, num_bytes, num_handles)) =
6999                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7000            {
7001                let member_inline_size =
7002                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7003                if inlined != (member_inline_size <= 4) {
7004                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7005                }
7006                let inner_offset;
7007                let mut inner_depth = depth.clone();
7008                if inlined {
7009                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7010                    inner_offset = next_offset;
7011                } else {
7012                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7013                    inner_depth.increment()?;
7014                }
7015                let val_ref = self.ra_tx_failure.get_or_insert_with(|| fidl::new_empty!(u32, D));
7016                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
7017                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7018                {
7019                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7020                }
7021                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7022                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7023                }
7024            }
7025
7026            next_offset += envelope_size;
7027            _next_ordinal_to_read += 1;
7028            if next_offset >= end_offset {
7029                return Ok(());
7030            }
7031
7032            // Decode unknown envelopes for gaps in ordinals.
7033            while _next_ordinal_to_read < 12 {
7034                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7035                _next_ordinal_to_read += 1;
7036                next_offset += envelope_size;
7037            }
7038
7039            let next_out_of_line = decoder.next_out_of_line();
7040            let handles_before = decoder.remaining_handles();
7041            if let Some((inlined, num_bytes, num_handles)) =
7042                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7043            {
7044                let member_inline_size =
7045                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7046                if inlined != (member_inline_size <= 4) {
7047                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7048                }
7049                let inner_offset;
7050                let mut inner_depth = depth.clone();
7051                if inlined {
7052                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7053                    inner_offset = next_offset;
7054                } else {
7055                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7056                    inner_depth.increment()?;
7057                }
7058                let val_ref = self.rs_rx.get_or_insert_with(|| fidl::new_empty!(u32, D));
7059                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
7060                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7061                {
7062                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7063                }
7064                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7065                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7066                }
7067            }
7068
7069            next_offset += envelope_size;
7070            _next_ordinal_to_read += 1;
7071            if next_offset >= end_offset {
7072                return Ok(());
7073            }
7074
7075            // Decode unknown envelopes for gaps in ordinals.
7076            while _next_ordinal_to_read < 13 {
7077                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7078                _next_ordinal_to_read += 1;
7079                next_offset += envelope_size;
7080            }
7081
7082            let next_out_of_line = decoder.next_out_of_line();
7083            let handles_before = decoder.remaining_handles();
7084            if let Some((inlined, num_bytes, num_handles)) =
7085                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7086            {
7087                let member_inline_size =
7088                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7089                if inlined != (member_inline_size <= 4) {
7090                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7091                }
7092                let inner_offset;
7093                let mut inner_depth = depth.clone();
7094                if inlined {
7095                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7096                    inner_offset = next_offset;
7097                } else {
7098                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7099                    inner_depth.increment()?;
7100                }
7101                let val_ref = self.rs_tx_success.get_or_insert_with(|| fidl::new_empty!(u32, D));
7102                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
7103                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7104                {
7105                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7106                }
7107                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7108                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7109                }
7110            }
7111
7112            next_offset += envelope_size;
7113            _next_ordinal_to_read += 1;
7114            if next_offset >= end_offset {
7115                return Ok(());
7116            }
7117
7118            // Decode unknown envelopes for gaps in ordinals.
7119            while _next_ordinal_to_read < 14 {
7120                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7121                _next_ordinal_to_read += 1;
7122                next_offset += envelope_size;
7123            }
7124
7125            let next_out_of_line = decoder.next_out_of_line();
7126            let handles_before = decoder.remaining_handles();
7127            if let Some((inlined, num_bytes, num_handles)) =
7128                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7129            {
7130                let member_inline_size =
7131                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7132                if inlined != (member_inline_size <= 4) {
7133                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7134                }
7135                let inner_offset;
7136                let mut inner_depth = depth.clone();
7137                if inlined {
7138                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7139                    inner_offset = next_offset;
7140                } else {
7141                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7142                    inner_depth.increment()?;
7143                }
7144                let val_ref = self.rs_tx_failure.get_or_insert_with(|| fidl::new_empty!(u32, D));
7145                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
7146                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7147                {
7148                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7149                }
7150                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7151                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7152                }
7153            }
7154
7155            next_offset += envelope_size;
7156            _next_ordinal_to_read += 1;
7157            if next_offset >= end_offset {
7158                return Ok(());
7159            }
7160
7161            // Decode unknown envelopes for gaps in ordinals.
7162            while _next_ordinal_to_read < 15 {
7163                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7164                _next_ordinal_to_read += 1;
7165                next_offset += envelope_size;
7166            }
7167
7168            let next_out_of_line = decoder.next_out_of_line();
7169            let handles_before = decoder.remaining_handles();
7170            if let Some((inlined, num_bytes, num_handles)) =
7171                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7172            {
7173                let member_inline_size =
7174                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7175                if inlined != (member_inline_size <= 4) {
7176                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7177                }
7178                let inner_offset;
7179                let mut inner_depth = depth.clone();
7180                if inlined {
7181                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7182                    inner_offset = next_offset;
7183                } else {
7184                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7185                    inner_depth.increment()?;
7186                }
7187                let val_ref =
7188                    self.inbound_internet_packets.get_or_insert_with(|| fidl::new_empty!(u64, D));
7189                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
7190                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7191                {
7192                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7193                }
7194                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7195                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7196                }
7197            }
7198
7199            next_offset += envelope_size;
7200            _next_ordinal_to_read += 1;
7201            if next_offset >= end_offset {
7202                return Ok(());
7203            }
7204
7205            // Decode unknown envelopes for gaps in ordinals.
7206            while _next_ordinal_to_read < 16 {
7207                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7208                _next_ordinal_to_read += 1;
7209                next_offset += envelope_size;
7210            }
7211
7212            let next_out_of_line = decoder.next_out_of_line();
7213            let handles_before = decoder.remaining_handles();
7214            if let Some((inlined, num_bytes, num_handles)) =
7215                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7216            {
7217                let member_inline_size =
7218                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7219                if inlined != (member_inline_size <= 4) {
7220                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7221                }
7222                let inner_offset;
7223                let mut inner_depth = depth.clone();
7224                if inlined {
7225                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7226                    inner_offset = next_offset;
7227                } else {
7228                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7229                    inner_depth.increment()?;
7230                }
7231                let val_ref =
7232                    self.inbound_internet_bytes.get_or_insert_with(|| fidl::new_empty!(u64, D));
7233                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
7234                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7235                {
7236                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7237                }
7238                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7239                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7240                }
7241            }
7242
7243            next_offset += envelope_size;
7244            _next_ordinal_to_read += 1;
7245            if next_offset >= end_offset {
7246                return Ok(());
7247            }
7248
7249            // Decode unknown envelopes for gaps in ordinals.
7250            while _next_ordinal_to_read < 17 {
7251                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7252                _next_ordinal_to_read += 1;
7253                next_offset += envelope_size;
7254            }
7255
7256            let next_out_of_line = decoder.next_out_of_line();
7257            let handles_before = decoder.remaining_handles();
7258            if let Some((inlined, num_bytes, num_handles)) =
7259                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7260            {
7261                let member_inline_size =
7262                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7263                if inlined != (member_inline_size <= 4) {
7264                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7265                }
7266                let inner_offset;
7267                let mut inner_depth = depth.clone();
7268                if inlined {
7269                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7270                    inner_offset = next_offset;
7271                } else {
7272                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7273                    inner_depth.increment()?;
7274                }
7275                let val_ref =
7276                    self.outbound_internet_packets.get_or_insert_with(|| fidl::new_empty!(u64, D));
7277                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
7278                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7279                {
7280                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7281                }
7282                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7283                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7284                }
7285            }
7286
7287            next_offset += envelope_size;
7288            _next_ordinal_to_read += 1;
7289            if next_offset >= end_offset {
7290                return Ok(());
7291            }
7292
7293            // Decode unknown envelopes for gaps in ordinals.
7294            while _next_ordinal_to_read < 18 {
7295                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7296                _next_ordinal_to_read += 1;
7297                next_offset += envelope_size;
7298            }
7299
7300            let next_out_of_line = decoder.next_out_of_line();
7301            let handles_before = decoder.remaining_handles();
7302            if let Some((inlined, num_bytes, num_handles)) =
7303                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7304            {
7305                let member_inline_size =
7306                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7307                if inlined != (member_inline_size <= 4) {
7308                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7309                }
7310                let inner_offset;
7311                let mut inner_depth = depth.clone();
7312                if inlined {
7313                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7314                    inner_offset = next_offset;
7315                } else {
7316                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7317                    inner_depth.increment()?;
7318                }
7319                let val_ref =
7320                    self.outbound_internet_bytes.get_or_insert_with(|| fidl::new_empty!(u64, D));
7321                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
7322                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7323                {
7324                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7325                }
7326                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7327                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7328                }
7329            }
7330
7331            next_offset += envelope_size;
7332
7333            // Decode the remaining unknown envelopes.
7334            while next_offset < end_offset {
7335                _next_ordinal_to_read += 1;
7336                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7337                next_offset += envelope_size;
7338            }
7339
7340            Ok(())
7341        }
7342    }
7343
7344    impl BorderRoutingNat64State {
7345        #[inline(always)]
7346        fn max_ordinal_present(&self) -> u64 {
7347            if let Some(_) = self.translator_state {
7348                return 2;
7349            }
7350            if let Some(_) = self.prefix_manager_state {
7351                return 1;
7352            }
7353            0
7354        }
7355    }
7356
7357    impl fidl::encoding::ValueTypeMarker for BorderRoutingNat64State {
7358        type Borrowed<'a> = &'a Self;
7359        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
7360            value
7361        }
7362    }
7363
7364    unsafe impl fidl::encoding::TypeMarker for BorderRoutingNat64State {
7365        type Owned = Self;
7366
7367        #[inline(always)]
7368        fn inline_align(_context: fidl::encoding::Context) -> usize {
7369            8
7370        }
7371
7372        #[inline(always)]
7373        fn inline_size(_context: fidl::encoding::Context) -> usize {
7374            16
7375        }
7376    }
7377
7378    unsafe impl<D: fidl::encoding::ResourceDialect>
7379        fidl::encoding::Encode<BorderRoutingNat64State, D> for &BorderRoutingNat64State
7380    {
7381        unsafe fn encode(
7382            self,
7383            encoder: &mut fidl::encoding::Encoder<'_, D>,
7384            offset: usize,
7385            mut depth: fidl::encoding::Depth,
7386        ) -> fidl::Result<()> {
7387            encoder.debug_check_bounds::<BorderRoutingNat64State>(offset);
7388            // Vector header
7389            let max_ordinal: u64 = self.max_ordinal_present();
7390            encoder.write_num(max_ordinal, offset);
7391            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
7392            // Calling encoder.out_of_line_offset(0) is not allowed.
7393            if max_ordinal == 0 {
7394                return Ok(());
7395            }
7396            depth.increment()?;
7397            let envelope_size = 8;
7398            let bytes_len = max_ordinal as usize * envelope_size;
7399            #[allow(unused_variables)]
7400            let offset = encoder.out_of_line_offset(bytes_len);
7401            let mut _prev_end_offset: usize = 0;
7402            if 1 > max_ordinal {
7403                return Ok(());
7404            }
7405
7406            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7407            // are envelope_size bytes.
7408            let cur_offset: usize = (1 - 1) * envelope_size;
7409
7410            // Zero reserved fields.
7411            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7412
7413            // Safety:
7414            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7415            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7416            //   envelope_size bytes, there is always sufficient room.
7417            fidl::encoding::encode_in_envelope_optional::<Nat64State, D>(
7418                self.prefix_manager_state
7419                    .as_ref()
7420                    .map(<Nat64State as fidl::encoding::ValueTypeMarker>::borrow),
7421                encoder,
7422                offset + cur_offset,
7423                depth,
7424            )?;
7425
7426            _prev_end_offset = cur_offset + envelope_size;
7427            if 2 > max_ordinal {
7428                return Ok(());
7429            }
7430
7431            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7432            // are envelope_size bytes.
7433            let cur_offset: usize = (2 - 1) * envelope_size;
7434
7435            // Zero reserved fields.
7436            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7437
7438            // Safety:
7439            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7440            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7441            //   envelope_size bytes, there is always sufficient room.
7442            fidl::encoding::encode_in_envelope_optional::<Nat64State, D>(
7443                self.translator_state
7444                    .as_ref()
7445                    .map(<Nat64State as fidl::encoding::ValueTypeMarker>::borrow),
7446                encoder,
7447                offset + cur_offset,
7448                depth,
7449            )?;
7450
7451            _prev_end_offset = cur_offset + envelope_size;
7452
7453            Ok(())
7454        }
7455    }
7456
7457    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
7458        for BorderRoutingNat64State
7459    {
7460        #[inline(always)]
7461        fn new_empty() -> Self {
7462            Self::default()
7463        }
7464
7465        unsafe fn decode(
7466            &mut self,
7467            decoder: &mut fidl::encoding::Decoder<'_, D>,
7468            offset: usize,
7469            mut depth: fidl::encoding::Depth,
7470        ) -> fidl::Result<()> {
7471            decoder.debug_check_bounds::<Self>(offset);
7472            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
7473                None => return Err(fidl::Error::NotNullable),
7474                Some(len) => len,
7475            };
7476            // Calling decoder.out_of_line_offset(0) is not allowed.
7477            if len == 0 {
7478                return Ok(());
7479            };
7480            depth.increment()?;
7481            let envelope_size = 8;
7482            let bytes_len = len * envelope_size;
7483            let offset = decoder.out_of_line_offset(bytes_len)?;
7484            // Decode the envelope for each type.
7485            let mut _next_ordinal_to_read = 0;
7486            let mut next_offset = offset;
7487            let end_offset = offset + bytes_len;
7488            _next_ordinal_to_read += 1;
7489            if next_offset >= end_offset {
7490                return Ok(());
7491            }
7492
7493            // Decode unknown envelopes for gaps in ordinals.
7494            while _next_ordinal_to_read < 1 {
7495                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7496                _next_ordinal_to_read += 1;
7497                next_offset += envelope_size;
7498            }
7499
7500            let next_out_of_line = decoder.next_out_of_line();
7501            let handles_before = decoder.remaining_handles();
7502            if let Some((inlined, num_bytes, num_handles)) =
7503                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7504            {
7505                let member_inline_size =
7506                    <Nat64State as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7507                if inlined != (member_inline_size <= 4) {
7508                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7509                }
7510                let inner_offset;
7511                let mut inner_depth = depth.clone();
7512                if inlined {
7513                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7514                    inner_offset = next_offset;
7515                } else {
7516                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7517                    inner_depth.increment()?;
7518                }
7519                let val_ref = self
7520                    .prefix_manager_state
7521                    .get_or_insert_with(|| fidl::new_empty!(Nat64State, D));
7522                fidl::decode!(Nat64State, D, val_ref, decoder, inner_offset, inner_depth)?;
7523                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7524                {
7525                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7526                }
7527                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7528                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7529                }
7530            }
7531
7532            next_offset += envelope_size;
7533            _next_ordinal_to_read += 1;
7534            if next_offset >= end_offset {
7535                return Ok(());
7536            }
7537
7538            // Decode unknown envelopes for gaps in ordinals.
7539            while _next_ordinal_to_read < 2 {
7540                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7541                _next_ordinal_to_read += 1;
7542                next_offset += envelope_size;
7543            }
7544
7545            let next_out_of_line = decoder.next_out_of_line();
7546            let handles_before = decoder.remaining_handles();
7547            if let Some((inlined, num_bytes, num_handles)) =
7548                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7549            {
7550                let member_inline_size =
7551                    <Nat64State as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7552                if inlined != (member_inline_size <= 4) {
7553                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7554                }
7555                let inner_offset;
7556                let mut inner_depth = depth.clone();
7557                if inlined {
7558                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7559                    inner_offset = next_offset;
7560                } else {
7561                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7562                    inner_depth.increment()?;
7563                }
7564                let val_ref =
7565                    self.translator_state.get_or_insert_with(|| fidl::new_empty!(Nat64State, D));
7566                fidl::decode!(Nat64State, D, val_ref, decoder, inner_offset, inner_depth)?;
7567                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7568                {
7569                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7570                }
7571                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7572                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7573                }
7574            }
7575
7576            next_offset += envelope_size;
7577
7578            // Decode the remaining unknown envelopes.
7579            while next_offset < end_offset {
7580                _next_ordinal_to_read += 1;
7581                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7582                next_offset += envelope_size;
7583            }
7584
7585            Ok(())
7586        }
7587    }
7588
7589    impl BorderRoutingPeer {
7590        #[inline(always)]
7591        fn max_ordinal_present(&self) -> u64 {
7592            if let Some(_) = self.age {
7593                return 2;
7594            }
7595            if let Some(_) = self.thread_rloc {
7596                return 1;
7597            }
7598            0
7599        }
7600    }
7601
7602    impl fidl::encoding::ValueTypeMarker for BorderRoutingPeer {
7603        type Borrowed<'a> = &'a Self;
7604        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
7605            value
7606        }
7607    }
7608
7609    unsafe impl fidl::encoding::TypeMarker for BorderRoutingPeer {
7610        type Owned = Self;
7611
7612        #[inline(always)]
7613        fn inline_align(_context: fidl::encoding::Context) -> usize {
7614            8
7615        }
7616
7617        #[inline(always)]
7618        fn inline_size(_context: fidl::encoding::Context) -> usize {
7619            16
7620        }
7621    }
7622
7623    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<BorderRoutingPeer, D>
7624        for &BorderRoutingPeer
7625    {
7626        unsafe fn encode(
7627            self,
7628            encoder: &mut fidl::encoding::Encoder<'_, D>,
7629            offset: usize,
7630            mut depth: fidl::encoding::Depth,
7631        ) -> fidl::Result<()> {
7632            encoder.debug_check_bounds::<BorderRoutingPeer>(offset);
7633            // Vector header
7634            let max_ordinal: u64 = self.max_ordinal_present();
7635            encoder.write_num(max_ordinal, offset);
7636            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
7637            // Calling encoder.out_of_line_offset(0) is not allowed.
7638            if max_ordinal == 0 {
7639                return Ok(());
7640            }
7641            depth.increment()?;
7642            let envelope_size = 8;
7643            let bytes_len = max_ordinal as usize * envelope_size;
7644            #[allow(unused_variables)]
7645            let offset = encoder.out_of_line_offset(bytes_len);
7646            let mut _prev_end_offset: usize = 0;
7647            if 1 > max_ordinal {
7648                return Ok(());
7649            }
7650
7651            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7652            // are envelope_size bytes.
7653            let cur_offset: usize = (1 - 1) * envelope_size;
7654
7655            // Zero reserved fields.
7656            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7657
7658            // Safety:
7659            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7660            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7661            //   envelope_size bytes, there is always sufficient room.
7662            fidl::encoding::encode_in_envelope_optional::<u16, D>(
7663                self.thread_rloc.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
7664                encoder,
7665                offset + cur_offset,
7666                depth,
7667            )?;
7668
7669            _prev_end_offset = cur_offset + envelope_size;
7670            if 2 > max_ordinal {
7671                return Ok(());
7672            }
7673
7674            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7675            // are envelope_size bytes.
7676            let cur_offset: usize = (2 - 1) * envelope_size;
7677
7678            // Zero reserved fields.
7679            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7680
7681            // Safety:
7682            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7683            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7684            //   envelope_size bytes, there is always sufficient room.
7685            fidl::encoding::encode_in_envelope_optional::<i64, D>(
7686                self.age.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
7687                encoder,
7688                offset + cur_offset,
7689                depth,
7690            )?;
7691
7692            _prev_end_offset = cur_offset + envelope_size;
7693
7694            Ok(())
7695        }
7696    }
7697
7698    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for BorderRoutingPeer {
7699        #[inline(always)]
7700        fn new_empty() -> Self {
7701            Self::default()
7702        }
7703
7704        unsafe fn decode(
7705            &mut self,
7706            decoder: &mut fidl::encoding::Decoder<'_, D>,
7707            offset: usize,
7708            mut depth: fidl::encoding::Depth,
7709        ) -> fidl::Result<()> {
7710            decoder.debug_check_bounds::<Self>(offset);
7711            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
7712                None => return Err(fidl::Error::NotNullable),
7713                Some(len) => len,
7714            };
7715            // Calling decoder.out_of_line_offset(0) is not allowed.
7716            if len == 0 {
7717                return Ok(());
7718            };
7719            depth.increment()?;
7720            let envelope_size = 8;
7721            let bytes_len = len * envelope_size;
7722            let offset = decoder.out_of_line_offset(bytes_len)?;
7723            // Decode the envelope for each type.
7724            let mut _next_ordinal_to_read = 0;
7725            let mut next_offset = offset;
7726            let end_offset = offset + bytes_len;
7727            _next_ordinal_to_read += 1;
7728            if next_offset >= end_offset {
7729                return Ok(());
7730            }
7731
7732            // Decode unknown envelopes for gaps in ordinals.
7733            while _next_ordinal_to_read < 1 {
7734                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7735                _next_ordinal_to_read += 1;
7736                next_offset += envelope_size;
7737            }
7738
7739            let next_out_of_line = decoder.next_out_of_line();
7740            let handles_before = decoder.remaining_handles();
7741            if let Some((inlined, num_bytes, num_handles)) =
7742                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7743            {
7744                let member_inline_size =
7745                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7746                if inlined != (member_inline_size <= 4) {
7747                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7748                }
7749                let inner_offset;
7750                let mut inner_depth = depth.clone();
7751                if inlined {
7752                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7753                    inner_offset = next_offset;
7754                } else {
7755                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7756                    inner_depth.increment()?;
7757                }
7758                let val_ref = self.thread_rloc.get_or_insert_with(|| fidl::new_empty!(u16, D));
7759                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
7760                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7761                {
7762                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7763                }
7764                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7765                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7766                }
7767            }
7768
7769            next_offset += envelope_size;
7770            _next_ordinal_to_read += 1;
7771            if next_offset >= end_offset {
7772                return Ok(());
7773            }
7774
7775            // Decode unknown envelopes for gaps in ordinals.
7776            while _next_ordinal_to_read < 2 {
7777                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7778                _next_ordinal_to_read += 1;
7779                next_offset += envelope_size;
7780            }
7781
7782            let next_out_of_line = decoder.next_out_of_line();
7783            let handles_before = decoder.remaining_handles();
7784            if let Some((inlined, num_bytes, num_handles)) =
7785                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7786            {
7787                let member_inline_size =
7788                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7789                if inlined != (member_inline_size <= 4) {
7790                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7791                }
7792                let inner_offset;
7793                let mut inner_depth = depth.clone();
7794                if inlined {
7795                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7796                    inner_offset = next_offset;
7797                } else {
7798                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7799                    inner_depth.increment()?;
7800                }
7801                let val_ref = self.age.get_or_insert_with(|| fidl::new_empty!(i64, D));
7802                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
7803                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7804                {
7805                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7806                }
7807                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7808                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7809                }
7810            }
7811
7812            next_offset += envelope_size;
7813
7814            // Decode the remaining unknown envelopes.
7815            while next_offset < end_offset {
7816                _next_ordinal_to_read += 1;
7817                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7818                next_offset += envelope_size;
7819            }
7820
7821            Ok(())
7822        }
7823    }
7824
7825    impl BorderRoutingPrefixTable {
7826        #[inline(always)]
7827        fn max_ordinal_present(&self) -> u64 {
7828            if let Some(_) = self.preferred_lifetime {
7829                return 7;
7830            }
7831            if let Some(_) = self.preference {
7832                return 6;
7833            }
7834            if let Some(_) = self.valid_lifetime {
7835                return 5;
7836            }
7837            if let Some(_) = self.duration_since_last_update {
7838                return 4;
7839            }
7840            if let Some(_) = self.is_on_link {
7841                return 3;
7842            }
7843            if let Some(_) = self.prefix {
7844                return 2;
7845            }
7846            if let Some(_) = self.router {
7847                return 1;
7848            }
7849            0
7850        }
7851    }
7852
7853    impl fidl::encoding::ValueTypeMarker for BorderRoutingPrefixTable {
7854        type Borrowed<'a> = &'a Self;
7855        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
7856            value
7857        }
7858    }
7859
7860    unsafe impl fidl::encoding::TypeMarker for BorderRoutingPrefixTable {
7861        type Owned = Self;
7862
7863        #[inline(always)]
7864        fn inline_align(_context: fidl::encoding::Context) -> usize {
7865            8
7866        }
7867
7868        #[inline(always)]
7869        fn inline_size(_context: fidl::encoding::Context) -> usize {
7870            16
7871        }
7872    }
7873
7874    unsafe impl<D: fidl::encoding::ResourceDialect>
7875        fidl::encoding::Encode<BorderRoutingPrefixTable, D> for &BorderRoutingPrefixTable
7876    {
7877        unsafe fn encode(
7878            self,
7879            encoder: &mut fidl::encoding::Encoder<'_, D>,
7880            offset: usize,
7881            mut depth: fidl::encoding::Depth,
7882        ) -> fidl::Result<()> {
7883            encoder.debug_check_bounds::<BorderRoutingPrefixTable>(offset);
7884            // Vector header
7885            let max_ordinal: u64 = self.max_ordinal_present();
7886            encoder.write_num(max_ordinal, offset);
7887            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
7888            // Calling encoder.out_of_line_offset(0) is not allowed.
7889            if max_ordinal == 0 {
7890                return Ok(());
7891            }
7892            depth.increment()?;
7893            let envelope_size = 8;
7894            let bytes_len = max_ordinal as usize * envelope_size;
7895            #[allow(unused_variables)]
7896            let offset = encoder.out_of_line_offset(bytes_len);
7897            let mut _prev_end_offset: usize = 0;
7898            if 1 > max_ordinal {
7899                return Ok(());
7900            }
7901
7902            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7903            // are envelope_size bytes.
7904            let cur_offset: usize = (1 - 1) * envelope_size;
7905
7906            // Zero reserved fields.
7907            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7908
7909            // Safety:
7910            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7911            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7912            //   envelope_size bytes, there is always sufficient room.
7913            fidl::encoding::encode_in_envelope_optional::<BorderRoutingRouter, D>(
7914                self.router
7915                    .as_ref()
7916                    .map(<BorderRoutingRouter as fidl::encoding::ValueTypeMarker>::borrow),
7917                encoder,
7918                offset + cur_offset,
7919                depth,
7920            )?;
7921
7922            _prev_end_offset = cur_offset + envelope_size;
7923            if 2 > max_ordinal {
7924                return Ok(());
7925            }
7926
7927            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7928            // are envelope_size bytes.
7929            let cur_offset: usize = (2 - 1) * envelope_size;
7930
7931            // Zero reserved fields.
7932            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7933
7934            // Safety:
7935            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7936            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7937            //   envelope_size bytes, there is always sufficient room.
7938            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<64>, D>(
7939                self.prefix.as_ref().map(
7940                    <fidl::encoding::BoundedString<64> as fidl::encoding::ValueTypeMarker>::borrow,
7941                ),
7942                encoder,
7943                offset + cur_offset,
7944                depth,
7945            )?;
7946
7947            _prev_end_offset = cur_offset + envelope_size;
7948            if 3 > 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 = (3 - 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::<bool, D>(
7964                self.is_on_link.as_ref().map(<bool 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 4 > 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 = (4 - 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::<i64, D>(
7987                self.duration_since_last_update
7988                    .as_ref()
7989                    .map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
7990                encoder,
7991                offset + cur_offset,
7992                depth,
7993            )?;
7994
7995            _prev_end_offset = cur_offset + envelope_size;
7996            if 5 > max_ordinal {
7997                return Ok(());
7998            }
7999
8000            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8001            // are envelope_size bytes.
8002            let cur_offset: usize = (5 - 1) * envelope_size;
8003
8004            // Zero reserved fields.
8005            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8006
8007            // Safety:
8008            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8009            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8010            //   envelope_size bytes, there is always sufficient room.
8011            fidl::encoding::encode_in_envelope_optional::<u32, D>(
8012                self.valid_lifetime.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
8013                encoder,
8014                offset + cur_offset,
8015                depth,
8016            )?;
8017
8018            _prev_end_offset = cur_offset + envelope_size;
8019            if 6 > max_ordinal {
8020                return Ok(());
8021            }
8022
8023            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8024            // are envelope_size bytes.
8025            let cur_offset: usize = (6 - 1) * envelope_size;
8026
8027            // Zero reserved fields.
8028            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8029
8030            // Safety:
8031            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8032            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8033            //   envelope_size bytes, there is always sufficient room.
8034            fidl::encoding::encode_in_envelope_optional::<i8, D>(
8035                self.preference.as_ref().map(<i8 as fidl::encoding::ValueTypeMarker>::borrow),
8036                encoder,
8037                offset + cur_offset,
8038                depth,
8039            )?;
8040
8041            _prev_end_offset = cur_offset + envelope_size;
8042            if 7 > max_ordinal {
8043                return Ok(());
8044            }
8045
8046            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8047            // are envelope_size bytes.
8048            let cur_offset: usize = (7 - 1) * envelope_size;
8049
8050            // Zero reserved fields.
8051            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8052
8053            // Safety:
8054            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8055            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8056            //   envelope_size bytes, there is always sufficient room.
8057            fidl::encoding::encode_in_envelope_optional::<u32, D>(
8058                self.preferred_lifetime
8059                    .as_ref()
8060                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
8061                encoder,
8062                offset + cur_offset,
8063                depth,
8064            )?;
8065
8066            _prev_end_offset = cur_offset + envelope_size;
8067
8068            Ok(())
8069        }
8070    }
8071
8072    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
8073        for BorderRoutingPrefixTable
8074    {
8075        #[inline(always)]
8076        fn new_empty() -> Self {
8077            Self::default()
8078        }
8079
8080        unsafe fn decode(
8081            &mut self,
8082            decoder: &mut fidl::encoding::Decoder<'_, D>,
8083            offset: usize,
8084            mut depth: fidl::encoding::Depth,
8085        ) -> fidl::Result<()> {
8086            decoder.debug_check_bounds::<Self>(offset);
8087            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
8088                None => return Err(fidl::Error::NotNullable),
8089                Some(len) => len,
8090            };
8091            // Calling decoder.out_of_line_offset(0) is not allowed.
8092            if len == 0 {
8093                return Ok(());
8094            };
8095            depth.increment()?;
8096            let envelope_size = 8;
8097            let bytes_len = len * envelope_size;
8098            let offset = decoder.out_of_line_offset(bytes_len)?;
8099            // Decode the envelope for each type.
8100            let mut _next_ordinal_to_read = 0;
8101            let mut next_offset = offset;
8102            let end_offset = offset + bytes_len;
8103            _next_ordinal_to_read += 1;
8104            if next_offset >= end_offset {
8105                return Ok(());
8106            }
8107
8108            // Decode unknown envelopes for gaps in ordinals.
8109            while _next_ordinal_to_read < 1 {
8110                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8111                _next_ordinal_to_read += 1;
8112                next_offset += envelope_size;
8113            }
8114
8115            let next_out_of_line = decoder.next_out_of_line();
8116            let handles_before = decoder.remaining_handles();
8117            if let Some((inlined, num_bytes, num_handles)) =
8118                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8119            {
8120                let member_inline_size =
8121                    <BorderRoutingRouter as fidl::encoding::TypeMarker>::inline_size(
8122                        decoder.context,
8123                    );
8124                if inlined != (member_inline_size <= 4) {
8125                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8126                }
8127                let inner_offset;
8128                let mut inner_depth = depth.clone();
8129                if inlined {
8130                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8131                    inner_offset = next_offset;
8132                } else {
8133                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8134                    inner_depth.increment()?;
8135                }
8136                let val_ref =
8137                    self.router.get_or_insert_with(|| fidl::new_empty!(BorderRoutingRouter, D));
8138                fidl::decode!(BorderRoutingRouter, D, val_ref, decoder, inner_offset, inner_depth)?;
8139                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8140                {
8141                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8142                }
8143                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8144                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8145                }
8146            }
8147
8148            next_offset += envelope_size;
8149            _next_ordinal_to_read += 1;
8150            if next_offset >= end_offset {
8151                return Ok(());
8152            }
8153
8154            // Decode unknown envelopes for gaps in ordinals.
8155            while _next_ordinal_to_read < 2 {
8156                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8157                _next_ordinal_to_read += 1;
8158                next_offset += envelope_size;
8159            }
8160
8161            let next_out_of_line = decoder.next_out_of_line();
8162            let handles_before = decoder.remaining_handles();
8163            if let Some((inlined, num_bytes, num_handles)) =
8164                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8165            {
8166                let member_inline_size =
8167                    <fidl::encoding::BoundedString<64> as fidl::encoding::TypeMarker>::inline_size(
8168                        decoder.context,
8169                    );
8170                if inlined != (member_inline_size <= 4) {
8171                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8172                }
8173                let inner_offset;
8174                let mut inner_depth = depth.clone();
8175                if inlined {
8176                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8177                    inner_offset = next_offset;
8178                } else {
8179                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8180                    inner_depth.increment()?;
8181                }
8182                let val_ref = self
8183                    .prefix
8184                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<64>, D));
8185                fidl::decode!(
8186                    fidl::encoding::BoundedString<64>,
8187                    D,
8188                    val_ref,
8189                    decoder,
8190                    inner_offset,
8191                    inner_depth
8192                )?;
8193                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8194                {
8195                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8196                }
8197                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8198                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8199                }
8200            }
8201
8202            next_offset += envelope_size;
8203            _next_ordinal_to_read += 1;
8204            if next_offset >= end_offset {
8205                return Ok(());
8206            }
8207
8208            // Decode unknown envelopes for gaps in ordinals.
8209            while _next_ordinal_to_read < 3 {
8210                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8211                _next_ordinal_to_read += 1;
8212                next_offset += envelope_size;
8213            }
8214
8215            let next_out_of_line = decoder.next_out_of_line();
8216            let handles_before = decoder.remaining_handles();
8217            if let Some((inlined, num_bytes, num_handles)) =
8218                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8219            {
8220                let member_inline_size =
8221                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
8222                if inlined != (member_inline_size <= 4) {
8223                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8224                }
8225                let inner_offset;
8226                let mut inner_depth = depth.clone();
8227                if inlined {
8228                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8229                    inner_offset = next_offset;
8230                } else {
8231                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8232                    inner_depth.increment()?;
8233                }
8234                let val_ref = self.is_on_link.get_or_insert_with(|| fidl::new_empty!(bool, D));
8235                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
8236                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8237                {
8238                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8239                }
8240                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8241                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8242                }
8243            }
8244
8245            next_offset += envelope_size;
8246            _next_ordinal_to_read += 1;
8247            if next_offset >= end_offset {
8248                return Ok(());
8249            }
8250
8251            // Decode unknown envelopes for gaps in ordinals.
8252            while _next_ordinal_to_read < 4 {
8253                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8254                _next_ordinal_to_read += 1;
8255                next_offset += envelope_size;
8256            }
8257
8258            let next_out_of_line = decoder.next_out_of_line();
8259            let handles_before = decoder.remaining_handles();
8260            if let Some((inlined, num_bytes, num_handles)) =
8261                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8262            {
8263                let member_inline_size =
8264                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
8265                if inlined != (member_inline_size <= 4) {
8266                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8267                }
8268                let inner_offset;
8269                let mut inner_depth = depth.clone();
8270                if inlined {
8271                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8272                    inner_offset = next_offset;
8273                } else {
8274                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8275                    inner_depth.increment()?;
8276                }
8277                let val_ref =
8278                    self.duration_since_last_update.get_or_insert_with(|| fidl::new_empty!(i64, D));
8279                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
8280                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8281                {
8282                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8283                }
8284                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8285                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8286                }
8287            }
8288
8289            next_offset += envelope_size;
8290            _next_ordinal_to_read += 1;
8291            if next_offset >= end_offset {
8292                return Ok(());
8293            }
8294
8295            // Decode unknown envelopes for gaps in ordinals.
8296            while _next_ordinal_to_read < 5 {
8297                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8298                _next_ordinal_to_read += 1;
8299                next_offset += envelope_size;
8300            }
8301
8302            let next_out_of_line = decoder.next_out_of_line();
8303            let handles_before = decoder.remaining_handles();
8304            if let Some((inlined, num_bytes, num_handles)) =
8305                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8306            {
8307                let member_inline_size =
8308                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
8309                if inlined != (member_inline_size <= 4) {
8310                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8311                }
8312                let inner_offset;
8313                let mut inner_depth = depth.clone();
8314                if inlined {
8315                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8316                    inner_offset = next_offset;
8317                } else {
8318                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8319                    inner_depth.increment()?;
8320                }
8321                let val_ref = self.valid_lifetime.get_or_insert_with(|| fidl::new_empty!(u32, D));
8322                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
8323                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8324                {
8325                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8326                }
8327                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8328                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8329                }
8330            }
8331
8332            next_offset += envelope_size;
8333            _next_ordinal_to_read += 1;
8334            if next_offset >= end_offset {
8335                return Ok(());
8336            }
8337
8338            // Decode unknown envelopes for gaps in ordinals.
8339            while _next_ordinal_to_read < 6 {
8340                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8341                _next_ordinal_to_read += 1;
8342                next_offset += envelope_size;
8343            }
8344
8345            let next_out_of_line = decoder.next_out_of_line();
8346            let handles_before = decoder.remaining_handles();
8347            if let Some((inlined, num_bytes, num_handles)) =
8348                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8349            {
8350                let member_inline_size =
8351                    <i8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
8352                if inlined != (member_inline_size <= 4) {
8353                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8354                }
8355                let inner_offset;
8356                let mut inner_depth = depth.clone();
8357                if inlined {
8358                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8359                    inner_offset = next_offset;
8360                } else {
8361                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8362                    inner_depth.increment()?;
8363                }
8364                let val_ref = self.preference.get_or_insert_with(|| fidl::new_empty!(i8, D));
8365                fidl::decode!(i8, D, val_ref, decoder, inner_offset, inner_depth)?;
8366                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8367                {
8368                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8369                }
8370                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8371                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8372                }
8373            }
8374
8375            next_offset += envelope_size;
8376            _next_ordinal_to_read += 1;
8377            if next_offset >= end_offset {
8378                return Ok(());
8379            }
8380
8381            // Decode unknown envelopes for gaps in ordinals.
8382            while _next_ordinal_to_read < 7 {
8383                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8384                _next_ordinal_to_read += 1;
8385                next_offset += envelope_size;
8386            }
8387
8388            let next_out_of_line = decoder.next_out_of_line();
8389            let handles_before = decoder.remaining_handles();
8390            if let Some((inlined, num_bytes, num_handles)) =
8391                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8392            {
8393                let member_inline_size =
8394                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
8395                if inlined != (member_inline_size <= 4) {
8396                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8397                }
8398                let inner_offset;
8399                let mut inner_depth = depth.clone();
8400                if inlined {
8401                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8402                    inner_offset = next_offset;
8403                } else {
8404                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8405                    inner_depth.increment()?;
8406                }
8407                let val_ref =
8408                    self.preferred_lifetime.get_or_insert_with(|| fidl::new_empty!(u32, D));
8409                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
8410                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8411                {
8412                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8413                }
8414                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8415                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8416                }
8417            }
8418
8419            next_offset += envelope_size;
8420
8421            // Decode the remaining unknown envelopes.
8422            while next_offset < end_offset {
8423                _next_ordinal_to_read += 1;
8424                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8425                next_offset += envelope_size;
8426            }
8427
8428            Ok(())
8429        }
8430    }
8431
8432    impl BorderRoutingRdnss {
8433        #[inline(always)]
8434        fn max_ordinal_present(&self) -> u64 {
8435            if let Some(_) = self.lifetime {
8436                return 4;
8437            }
8438            if let Some(_) = self.duration_since_last_update {
8439                return 3;
8440            }
8441            if let Some(_) = self.address {
8442                return 2;
8443            }
8444            if let Some(_) = self.router {
8445                return 1;
8446            }
8447            0
8448        }
8449    }
8450
8451    impl fidl::encoding::ValueTypeMarker for BorderRoutingRdnss {
8452        type Borrowed<'a> = &'a Self;
8453        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
8454            value
8455        }
8456    }
8457
8458    unsafe impl fidl::encoding::TypeMarker for BorderRoutingRdnss {
8459        type Owned = Self;
8460
8461        #[inline(always)]
8462        fn inline_align(_context: fidl::encoding::Context) -> usize {
8463            8
8464        }
8465
8466        #[inline(always)]
8467        fn inline_size(_context: fidl::encoding::Context) -> usize {
8468            16
8469        }
8470    }
8471
8472    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<BorderRoutingRdnss, D>
8473        for &BorderRoutingRdnss
8474    {
8475        unsafe fn encode(
8476            self,
8477            encoder: &mut fidl::encoding::Encoder<'_, D>,
8478            offset: usize,
8479            mut depth: fidl::encoding::Depth,
8480        ) -> fidl::Result<()> {
8481            encoder.debug_check_bounds::<BorderRoutingRdnss>(offset);
8482            // Vector header
8483            let max_ordinal: u64 = self.max_ordinal_present();
8484            encoder.write_num(max_ordinal, offset);
8485            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
8486            // Calling encoder.out_of_line_offset(0) is not allowed.
8487            if max_ordinal == 0 {
8488                return Ok(());
8489            }
8490            depth.increment()?;
8491            let envelope_size = 8;
8492            let bytes_len = max_ordinal as usize * envelope_size;
8493            #[allow(unused_variables)]
8494            let offset = encoder.out_of_line_offset(bytes_len);
8495            let mut _prev_end_offset: usize = 0;
8496            if 1 > 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 = (1 - 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::<BorderRoutingRouter, D>(
8512                self.router
8513                    .as_ref()
8514                    .map(<BorderRoutingRouter as fidl::encoding::ValueTypeMarker>::borrow),
8515                encoder,
8516                offset + cur_offset,
8517                depth,
8518            )?;
8519
8520            _prev_end_offset = cur_offset + envelope_size;
8521            if 2 > max_ordinal {
8522                return Ok(());
8523            }
8524
8525            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8526            // are envelope_size bytes.
8527            let cur_offset: usize = (2 - 1) * envelope_size;
8528
8529            // Zero reserved fields.
8530            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8531
8532            // Safety:
8533            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8534            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8535            //   envelope_size bytes, there is always sufficient room.
8536            fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_net_common::Ipv6Address, D>(
8537            self.address.as_ref().map(<fidl_fuchsia_net_common::Ipv6Address as fidl::encoding::ValueTypeMarker>::borrow),
8538            encoder, offset + cur_offset, depth
8539        )?;
8540
8541            _prev_end_offset = cur_offset + envelope_size;
8542            if 3 > max_ordinal {
8543                return Ok(());
8544            }
8545
8546            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8547            // are envelope_size bytes.
8548            let cur_offset: usize = (3 - 1) * envelope_size;
8549
8550            // Zero reserved fields.
8551            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8552
8553            // Safety:
8554            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8555            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8556            //   envelope_size bytes, there is always sufficient room.
8557            fidl::encoding::encode_in_envelope_optional::<i64, D>(
8558                self.duration_since_last_update
8559                    .as_ref()
8560                    .map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
8561                encoder,
8562                offset + cur_offset,
8563                depth,
8564            )?;
8565
8566            _prev_end_offset = cur_offset + envelope_size;
8567            if 4 > max_ordinal {
8568                return Ok(());
8569            }
8570
8571            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8572            // are envelope_size bytes.
8573            let cur_offset: usize = (4 - 1) * envelope_size;
8574
8575            // Zero reserved fields.
8576            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8577
8578            // Safety:
8579            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8580            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8581            //   envelope_size bytes, there is always sufficient room.
8582            fidl::encoding::encode_in_envelope_optional::<u32, D>(
8583                self.lifetime.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
8584                encoder,
8585                offset + cur_offset,
8586                depth,
8587            )?;
8588
8589            _prev_end_offset = cur_offset + envelope_size;
8590
8591            Ok(())
8592        }
8593    }
8594
8595    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for BorderRoutingRdnss {
8596        #[inline(always)]
8597        fn new_empty() -> Self {
8598            Self::default()
8599        }
8600
8601        unsafe fn decode(
8602            &mut self,
8603            decoder: &mut fidl::encoding::Decoder<'_, D>,
8604            offset: usize,
8605            mut depth: fidl::encoding::Depth,
8606        ) -> fidl::Result<()> {
8607            decoder.debug_check_bounds::<Self>(offset);
8608            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
8609                None => return Err(fidl::Error::NotNullable),
8610                Some(len) => len,
8611            };
8612            // Calling decoder.out_of_line_offset(0) is not allowed.
8613            if len == 0 {
8614                return Ok(());
8615            };
8616            depth.increment()?;
8617            let envelope_size = 8;
8618            let bytes_len = len * envelope_size;
8619            let offset = decoder.out_of_line_offset(bytes_len)?;
8620            // Decode the envelope for each type.
8621            let mut _next_ordinal_to_read = 0;
8622            let mut next_offset = offset;
8623            let end_offset = offset + bytes_len;
8624            _next_ordinal_to_read += 1;
8625            if next_offset >= end_offset {
8626                return Ok(());
8627            }
8628
8629            // Decode unknown envelopes for gaps in ordinals.
8630            while _next_ordinal_to_read < 1 {
8631                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8632                _next_ordinal_to_read += 1;
8633                next_offset += envelope_size;
8634            }
8635
8636            let next_out_of_line = decoder.next_out_of_line();
8637            let handles_before = decoder.remaining_handles();
8638            if let Some((inlined, num_bytes, num_handles)) =
8639                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8640            {
8641                let member_inline_size =
8642                    <BorderRoutingRouter as fidl::encoding::TypeMarker>::inline_size(
8643                        decoder.context,
8644                    );
8645                if inlined != (member_inline_size <= 4) {
8646                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8647                }
8648                let inner_offset;
8649                let mut inner_depth = depth.clone();
8650                if inlined {
8651                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8652                    inner_offset = next_offset;
8653                } else {
8654                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8655                    inner_depth.increment()?;
8656                }
8657                let val_ref =
8658                    self.router.get_or_insert_with(|| fidl::new_empty!(BorderRoutingRouter, D));
8659                fidl::decode!(BorderRoutingRouter, D, val_ref, decoder, inner_offset, inner_depth)?;
8660                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8661                {
8662                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8663                }
8664                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8665                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8666                }
8667            }
8668
8669            next_offset += envelope_size;
8670            _next_ordinal_to_read += 1;
8671            if next_offset >= end_offset {
8672                return Ok(());
8673            }
8674
8675            // Decode unknown envelopes for gaps in ordinals.
8676            while _next_ordinal_to_read < 2 {
8677                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8678                _next_ordinal_to_read += 1;
8679                next_offset += envelope_size;
8680            }
8681
8682            let next_out_of_line = decoder.next_out_of_line();
8683            let handles_before = decoder.remaining_handles();
8684            if let Some((inlined, num_bytes, num_handles)) =
8685                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8686            {
8687                let member_inline_size = <fidl_fuchsia_net_common::Ipv6Address as fidl::encoding::TypeMarker>::inline_size(decoder.context);
8688                if inlined != (member_inline_size <= 4) {
8689                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8690                }
8691                let inner_offset;
8692                let mut inner_depth = depth.clone();
8693                if inlined {
8694                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8695                    inner_offset = next_offset;
8696                } else {
8697                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8698                    inner_depth.increment()?;
8699                }
8700                let val_ref = self.address.get_or_insert_with(|| {
8701                    fidl::new_empty!(fidl_fuchsia_net_common::Ipv6Address, D)
8702                });
8703                fidl::decode!(
8704                    fidl_fuchsia_net_common::Ipv6Address,
8705                    D,
8706                    val_ref,
8707                    decoder,
8708                    inner_offset,
8709                    inner_depth
8710                )?;
8711                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8712                {
8713                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8714                }
8715                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8716                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8717                }
8718            }
8719
8720            next_offset += envelope_size;
8721            _next_ordinal_to_read += 1;
8722            if next_offset >= end_offset {
8723                return Ok(());
8724            }
8725
8726            // Decode unknown envelopes for gaps in ordinals.
8727            while _next_ordinal_to_read < 3 {
8728                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8729                _next_ordinal_to_read += 1;
8730                next_offset += envelope_size;
8731            }
8732
8733            let next_out_of_line = decoder.next_out_of_line();
8734            let handles_before = decoder.remaining_handles();
8735            if let Some((inlined, num_bytes, num_handles)) =
8736                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8737            {
8738                let member_inline_size =
8739                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
8740                if inlined != (member_inline_size <= 4) {
8741                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8742                }
8743                let inner_offset;
8744                let mut inner_depth = depth.clone();
8745                if inlined {
8746                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8747                    inner_offset = next_offset;
8748                } else {
8749                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8750                    inner_depth.increment()?;
8751                }
8752                let val_ref =
8753                    self.duration_since_last_update.get_or_insert_with(|| fidl::new_empty!(i64, D));
8754                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
8755                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8756                {
8757                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8758                }
8759                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8760                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8761                }
8762            }
8763
8764            next_offset += envelope_size;
8765            _next_ordinal_to_read += 1;
8766            if next_offset >= end_offset {
8767                return Ok(());
8768            }
8769
8770            // Decode unknown envelopes for gaps in ordinals.
8771            while _next_ordinal_to_read < 4 {
8772                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8773                _next_ordinal_to_read += 1;
8774                next_offset += envelope_size;
8775            }
8776
8777            let next_out_of_line = decoder.next_out_of_line();
8778            let handles_before = decoder.remaining_handles();
8779            if let Some((inlined, num_bytes, num_handles)) =
8780                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8781            {
8782                let member_inline_size =
8783                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
8784                if inlined != (member_inline_size <= 4) {
8785                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8786                }
8787                let inner_offset;
8788                let mut inner_depth = depth.clone();
8789                if inlined {
8790                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8791                    inner_offset = next_offset;
8792                } else {
8793                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8794                    inner_depth.increment()?;
8795                }
8796                let val_ref = self.lifetime.get_or_insert_with(|| fidl::new_empty!(u32, D));
8797                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
8798                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8799                {
8800                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8801                }
8802                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8803                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8804                }
8805            }
8806
8807            next_offset += envelope_size;
8808
8809            // Decode the remaining unknown envelopes.
8810            while next_offset < end_offset {
8811                _next_ordinal_to_read += 1;
8812                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8813                next_offset += envelope_size;
8814            }
8815
8816            Ok(())
8817        }
8818    }
8819
8820    impl BorderRoutingRouter {
8821        #[inline(always)]
8822        fn max_ordinal_present(&self) -> u64 {
8823            if let Some(_) = self.is_peer_br {
8824                return 9;
8825            }
8826            if let Some(_) = self.is_reachable {
8827                return 8;
8828            }
8829            if let Some(_) = self.is_local_device {
8830                return 7;
8831            }
8832            if let Some(_) = self.snac_router_flag {
8833                return 6;
8834            }
8835            if let Some(_) = self.other_config_flag {
8836                return 5;
8837            }
8838            if let Some(_) = self.managed_address_config_flag {
8839                return 4;
8840            }
8841            if let Some(_) = self.age {
8842                return 3;
8843            }
8844            if let Some(_) = self.duration_since_last_update {
8845                return 2;
8846            }
8847            if let Some(_) = self.address {
8848                return 1;
8849            }
8850            0
8851        }
8852    }
8853
8854    impl fidl::encoding::ValueTypeMarker for BorderRoutingRouter {
8855        type Borrowed<'a> = &'a Self;
8856        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
8857            value
8858        }
8859    }
8860
8861    unsafe impl fidl::encoding::TypeMarker for BorderRoutingRouter {
8862        type Owned = Self;
8863
8864        #[inline(always)]
8865        fn inline_align(_context: fidl::encoding::Context) -> usize {
8866            8
8867        }
8868
8869        #[inline(always)]
8870        fn inline_size(_context: fidl::encoding::Context) -> usize {
8871            16
8872        }
8873    }
8874
8875    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<BorderRoutingRouter, D>
8876        for &BorderRoutingRouter
8877    {
8878        unsafe fn encode(
8879            self,
8880            encoder: &mut fidl::encoding::Encoder<'_, D>,
8881            offset: usize,
8882            mut depth: fidl::encoding::Depth,
8883        ) -> fidl::Result<()> {
8884            encoder.debug_check_bounds::<BorderRoutingRouter>(offset);
8885            // Vector header
8886            let max_ordinal: u64 = self.max_ordinal_present();
8887            encoder.write_num(max_ordinal, offset);
8888            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
8889            // Calling encoder.out_of_line_offset(0) is not allowed.
8890            if max_ordinal == 0 {
8891                return Ok(());
8892            }
8893            depth.increment()?;
8894            let envelope_size = 8;
8895            let bytes_len = max_ordinal as usize * envelope_size;
8896            #[allow(unused_variables)]
8897            let offset = encoder.out_of_line_offset(bytes_len);
8898            let mut _prev_end_offset: usize = 0;
8899            if 1 > max_ordinal {
8900                return Ok(());
8901            }
8902
8903            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8904            // are envelope_size bytes.
8905            let cur_offset: usize = (1 - 1) * envelope_size;
8906
8907            // Zero reserved fields.
8908            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8909
8910            // Safety:
8911            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8912            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8913            //   envelope_size bytes, there is always sufficient room.
8914            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<64>, D>(
8915                self.address.as_ref().map(
8916                    <fidl::encoding::BoundedString<64> as fidl::encoding::ValueTypeMarker>::borrow,
8917                ),
8918                encoder,
8919                offset + cur_offset,
8920                depth,
8921            )?;
8922
8923            _prev_end_offset = cur_offset + envelope_size;
8924            if 2 > max_ordinal {
8925                return Ok(());
8926            }
8927
8928            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8929            // are envelope_size bytes.
8930            let cur_offset: usize = (2 - 1) * envelope_size;
8931
8932            // Zero reserved fields.
8933            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8934
8935            // Safety:
8936            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8937            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8938            //   envelope_size bytes, there is always sufficient room.
8939            fidl::encoding::encode_in_envelope_optional::<i64, D>(
8940                self.duration_since_last_update
8941                    .as_ref()
8942                    .map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
8943                encoder,
8944                offset + cur_offset,
8945                depth,
8946            )?;
8947
8948            _prev_end_offset = cur_offset + envelope_size;
8949            if 3 > max_ordinal {
8950                return Ok(());
8951            }
8952
8953            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8954            // are envelope_size bytes.
8955            let cur_offset: usize = (3 - 1) * envelope_size;
8956
8957            // Zero reserved fields.
8958            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8959
8960            // Safety:
8961            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8962            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8963            //   envelope_size bytes, there is always sufficient room.
8964            fidl::encoding::encode_in_envelope_optional::<i64, D>(
8965                self.age.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
8966                encoder,
8967                offset + cur_offset,
8968                depth,
8969            )?;
8970
8971            _prev_end_offset = cur_offset + envelope_size;
8972            if 4 > max_ordinal {
8973                return Ok(());
8974            }
8975
8976            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8977            // are envelope_size bytes.
8978            let cur_offset: usize = (4 - 1) * envelope_size;
8979
8980            // Zero reserved fields.
8981            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8982
8983            // Safety:
8984            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8985            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8986            //   envelope_size bytes, there is always sufficient room.
8987            fidl::encoding::encode_in_envelope_optional::<bool, D>(
8988                self.managed_address_config_flag
8989                    .as_ref()
8990                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
8991                encoder,
8992                offset + cur_offset,
8993                depth,
8994            )?;
8995
8996            _prev_end_offset = cur_offset + envelope_size;
8997            if 5 > max_ordinal {
8998                return Ok(());
8999            }
9000
9001            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9002            // are envelope_size bytes.
9003            let cur_offset: usize = (5 - 1) * envelope_size;
9004
9005            // Zero reserved fields.
9006            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9007
9008            // Safety:
9009            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9010            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9011            //   envelope_size bytes, there is always sufficient room.
9012            fidl::encoding::encode_in_envelope_optional::<bool, D>(
9013                self.other_config_flag
9014                    .as_ref()
9015                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
9016                encoder,
9017                offset + cur_offset,
9018                depth,
9019            )?;
9020
9021            _prev_end_offset = cur_offset + envelope_size;
9022            if 6 > max_ordinal {
9023                return Ok(());
9024            }
9025
9026            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9027            // are envelope_size bytes.
9028            let cur_offset: usize = (6 - 1) * envelope_size;
9029
9030            // Zero reserved fields.
9031            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9032
9033            // Safety:
9034            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9035            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9036            //   envelope_size bytes, there is always sufficient room.
9037            fidl::encoding::encode_in_envelope_optional::<bool, D>(
9038                self.snac_router_flag
9039                    .as_ref()
9040                    .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            if 7 > max_ordinal {
9048                return Ok(());
9049            }
9050
9051            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9052            // are envelope_size bytes.
9053            let cur_offset: usize = (7 - 1) * envelope_size;
9054
9055            // Zero reserved fields.
9056            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9057
9058            // Safety:
9059            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9060            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9061            //   envelope_size bytes, there is always sufficient room.
9062            fidl::encoding::encode_in_envelope_optional::<bool, D>(
9063                self.is_local_device
9064                    .as_ref()
9065                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
9066                encoder,
9067                offset + cur_offset,
9068                depth,
9069            )?;
9070
9071            _prev_end_offset = cur_offset + envelope_size;
9072            if 8 > max_ordinal {
9073                return Ok(());
9074            }
9075
9076            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9077            // are envelope_size bytes.
9078            let cur_offset: usize = (8 - 1) * envelope_size;
9079
9080            // Zero reserved fields.
9081            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9082
9083            // Safety:
9084            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9085            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9086            //   envelope_size bytes, there is always sufficient room.
9087            fidl::encoding::encode_in_envelope_optional::<bool, D>(
9088                self.is_reachable.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
9089                encoder,
9090                offset + cur_offset,
9091                depth,
9092            )?;
9093
9094            _prev_end_offset = cur_offset + envelope_size;
9095            if 9 > max_ordinal {
9096                return Ok(());
9097            }
9098
9099            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9100            // are envelope_size bytes.
9101            let cur_offset: usize = (9 - 1) * envelope_size;
9102
9103            // Zero reserved fields.
9104            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9105
9106            // Safety:
9107            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9108            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9109            //   envelope_size bytes, there is always sufficient room.
9110            fidl::encoding::encode_in_envelope_optional::<bool, D>(
9111                self.is_peer_br.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
9112                encoder,
9113                offset + cur_offset,
9114                depth,
9115            )?;
9116
9117            _prev_end_offset = cur_offset + envelope_size;
9118
9119            Ok(())
9120        }
9121    }
9122
9123    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for BorderRoutingRouter {
9124        #[inline(always)]
9125        fn new_empty() -> Self {
9126            Self::default()
9127        }
9128
9129        unsafe fn decode(
9130            &mut self,
9131            decoder: &mut fidl::encoding::Decoder<'_, D>,
9132            offset: usize,
9133            mut depth: fidl::encoding::Depth,
9134        ) -> fidl::Result<()> {
9135            decoder.debug_check_bounds::<Self>(offset);
9136            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
9137                None => return Err(fidl::Error::NotNullable),
9138                Some(len) => len,
9139            };
9140            // Calling decoder.out_of_line_offset(0) is not allowed.
9141            if len == 0 {
9142                return Ok(());
9143            };
9144            depth.increment()?;
9145            let envelope_size = 8;
9146            let bytes_len = len * envelope_size;
9147            let offset = decoder.out_of_line_offset(bytes_len)?;
9148            // Decode the envelope for each type.
9149            let mut _next_ordinal_to_read = 0;
9150            let mut next_offset = offset;
9151            let end_offset = offset + bytes_len;
9152            _next_ordinal_to_read += 1;
9153            if next_offset >= end_offset {
9154                return Ok(());
9155            }
9156
9157            // Decode unknown envelopes for gaps in ordinals.
9158            while _next_ordinal_to_read < 1 {
9159                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9160                _next_ordinal_to_read += 1;
9161                next_offset += envelope_size;
9162            }
9163
9164            let next_out_of_line = decoder.next_out_of_line();
9165            let handles_before = decoder.remaining_handles();
9166            if let Some((inlined, num_bytes, num_handles)) =
9167                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9168            {
9169                let member_inline_size =
9170                    <fidl::encoding::BoundedString<64> as fidl::encoding::TypeMarker>::inline_size(
9171                        decoder.context,
9172                    );
9173                if inlined != (member_inline_size <= 4) {
9174                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9175                }
9176                let inner_offset;
9177                let mut inner_depth = depth.clone();
9178                if inlined {
9179                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9180                    inner_offset = next_offset;
9181                } else {
9182                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9183                    inner_depth.increment()?;
9184                }
9185                let val_ref = self
9186                    .address
9187                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<64>, D));
9188                fidl::decode!(
9189                    fidl::encoding::BoundedString<64>,
9190                    D,
9191                    val_ref,
9192                    decoder,
9193                    inner_offset,
9194                    inner_depth
9195                )?;
9196                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9197                {
9198                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9199                }
9200                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9201                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9202                }
9203            }
9204
9205            next_offset += envelope_size;
9206            _next_ordinal_to_read += 1;
9207            if next_offset >= end_offset {
9208                return Ok(());
9209            }
9210
9211            // Decode unknown envelopes for gaps in ordinals.
9212            while _next_ordinal_to_read < 2 {
9213                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9214                _next_ordinal_to_read += 1;
9215                next_offset += envelope_size;
9216            }
9217
9218            let next_out_of_line = decoder.next_out_of_line();
9219            let handles_before = decoder.remaining_handles();
9220            if let Some((inlined, num_bytes, num_handles)) =
9221                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9222            {
9223                let member_inline_size =
9224                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
9225                if inlined != (member_inline_size <= 4) {
9226                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9227                }
9228                let inner_offset;
9229                let mut inner_depth = depth.clone();
9230                if inlined {
9231                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9232                    inner_offset = next_offset;
9233                } else {
9234                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9235                    inner_depth.increment()?;
9236                }
9237                let val_ref =
9238                    self.duration_since_last_update.get_or_insert_with(|| fidl::new_empty!(i64, D));
9239                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
9240                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9241                {
9242                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9243                }
9244                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9245                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9246                }
9247            }
9248
9249            next_offset += envelope_size;
9250            _next_ordinal_to_read += 1;
9251            if next_offset >= end_offset {
9252                return Ok(());
9253            }
9254
9255            // Decode unknown envelopes for gaps in ordinals.
9256            while _next_ordinal_to_read < 3 {
9257                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9258                _next_ordinal_to_read += 1;
9259                next_offset += envelope_size;
9260            }
9261
9262            let next_out_of_line = decoder.next_out_of_line();
9263            let handles_before = decoder.remaining_handles();
9264            if let Some((inlined, num_bytes, num_handles)) =
9265                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9266            {
9267                let member_inline_size =
9268                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
9269                if inlined != (member_inline_size <= 4) {
9270                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9271                }
9272                let inner_offset;
9273                let mut inner_depth = depth.clone();
9274                if inlined {
9275                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9276                    inner_offset = next_offset;
9277                } else {
9278                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9279                    inner_depth.increment()?;
9280                }
9281                let val_ref = self.age.get_or_insert_with(|| fidl::new_empty!(i64, D));
9282                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
9283                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9284                {
9285                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9286                }
9287                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9288                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9289                }
9290            }
9291
9292            next_offset += envelope_size;
9293            _next_ordinal_to_read += 1;
9294            if next_offset >= end_offset {
9295                return Ok(());
9296            }
9297
9298            // Decode unknown envelopes for gaps in ordinals.
9299            while _next_ordinal_to_read < 4 {
9300                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9301                _next_ordinal_to_read += 1;
9302                next_offset += envelope_size;
9303            }
9304
9305            let next_out_of_line = decoder.next_out_of_line();
9306            let handles_before = decoder.remaining_handles();
9307            if let Some((inlined, num_bytes, num_handles)) =
9308                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9309            {
9310                let member_inline_size =
9311                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
9312                if inlined != (member_inline_size <= 4) {
9313                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9314                }
9315                let inner_offset;
9316                let mut inner_depth = depth.clone();
9317                if inlined {
9318                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9319                    inner_offset = next_offset;
9320                } else {
9321                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9322                    inner_depth.increment()?;
9323                }
9324                let val_ref = self
9325                    .managed_address_config_flag
9326                    .get_or_insert_with(|| fidl::new_empty!(bool, D));
9327                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
9328                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9329                {
9330                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9331                }
9332                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9333                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9334                }
9335            }
9336
9337            next_offset += envelope_size;
9338            _next_ordinal_to_read += 1;
9339            if next_offset >= end_offset {
9340                return Ok(());
9341            }
9342
9343            // Decode unknown envelopes for gaps in ordinals.
9344            while _next_ordinal_to_read < 5 {
9345                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9346                _next_ordinal_to_read += 1;
9347                next_offset += envelope_size;
9348            }
9349
9350            let next_out_of_line = decoder.next_out_of_line();
9351            let handles_before = decoder.remaining_handles();
9352            if let Some((inlined, num_bytes, num_handles)) =
9353                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9354            {
9355                let member_inline_size =
9356                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
9357                if inlined != (member_inline_size <= 4) {
9358                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9359                }
9360                let inner_offset;
9361                let mut inner_depth = depth.clone();
9362                if inlined {
9363                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9364                    inner_offset = next_offset;
9365                } else {
9366                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9367                    inner_depth.increment()?;
9368                }
9369                let val_ref =
9370                    self.other_config_flag.get_or_insert_with(|| fidl::new_empty!(bool, D));
9371                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
9372                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9373                {
9374                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9375                }
9376                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9377                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9378                }
9379            }
9380
9381            next_offset += envelope_size;
9382            _next_ordinal_to_read += 1;
9383            if next_offset >= end_offset {
9384                return Ok(());
9385            }
9386
9387            // Decode unknown envelopes for gaps in ordinals.
9388            while _next_ordinal_to_read < 6 {
9389                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9390                _next_ordinal_to_read += 1;
9391                next_offset += envelope_size;
9392            }
9393
9394            let next_out_of_line = decoder.next_out_of_line();
9395            let handles_before = decoder.remaining_handles();
9396            if let Some((inlined, num_bytes, num_handles)) =
9397                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9398            {
9399                let member_inline_size =
9400                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
9401                if inlined != (member_inline_size <= 4) {
9402                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9403                }
9404                let inner_offset;
9405                let mut inner_depth = depth.clone();
9406                if inlined {
9407                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9408                    inner_offset = next_offset;
9409                } else {
9410                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9411                    inner_depth.increment()?;
9412                }
9413                let val_ref =
9414                    self.snac_router_flag.get_or_insert_with(|| fidl::new_empty!(bool, D));
9415                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
9416                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9417                {
9418                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9419                }
9420                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9421                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9422                }
9423            }
9424
9425            next_offset += envelope_size;
9426            _next_ordinal_to_read += 1;
9427            if next_offset >= end_offset {
9428                return Ok(());
9429            }
9430
9431            // Decode unknown envelopes for gaps in ordinals.
9432            while _next_ordinal_to_read < 7 {
9433                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9434                _next_ordinal_to_read += 1;
9435                next_offset += envelope_size;
9436            }
9437
9438            let next_out_of_line = decoder.next_out_of_line();
9439            let handles_before = decoder.remaining_handles();
9440            if let Some((inlined, num_bytes, num_handles)) =
9441                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9442            {
9443                let member_inline_size =
9444                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
9445                if inlined != (member_inline_size <= 4) {
9446                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9447                }
9448                let inner_offset;
9449                let mut inner_depth = depth.clone();
9450                if inlined {
9451                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9452                    inner_offset = next_offset;
9453                } else {
9454                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9455                    inner_depth.increment()?;
9456                }
9457                let val_ref = self.is_local_device.get_or_insert_with(|| fidl::new_empty!(bool, D));
9458                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
9459                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9460                {
9461                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9462                }
9463                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9464                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9465                }
9466            }
9467
9468            next_offset += envelope_size;
9469            _next_ordinal_to_read += 1;
9470            if next_offset >= end_offset {
9471                return Ok(());
9472            }
9473
9474            // Decode unknown envelopes for gaps in ordinals.
9475            while _next_ordinal_to_read < 8 {
9476                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9477                _next_ordinal_to_read += 1;
9478                next_offset += envelope_size;
9479            }
9480
9481            let next_out_of_line = decoder.next_out_of_line();
9482            let handles_before = decoder.remaining_handles();
9483            if let Some((inlined, num_bytes, num_handles)) =
9484                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9485            {
9486                let member_inline_size =
9487                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
9488                if inlined != (member_inline_size <= 4) {
9489                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9490                }
9491                let inner_offset;
9492                let mut inner_depth = depth.clone();
9493                if inlined {
9494                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9495                    inner_offset = next_offset;
9496                } else {
9497                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9498                    inner_depth.increment()?;
9499                }
9500                let val_ref = self.is_reachable.get_or_insert_with(|| fidl::new_empty!(bool, D));
9501                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
9502                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9503                {
9504                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9505                }
9506                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9507                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9508                }
9509            }
9510
9511            next_offset += envelope_size;
9512            _next_ordinal_to_read += 1;
9513            if next_offset >= end_offset {
9514                return Ok(());
9515            }
9516
9517            // Decode unknown envelopes for gaps in ordinals.
9518            while _next_ordinal_to_read < 9 {
9519                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9520                _next_ordinal_to_read += 1;
9521                next_offset += envelope_size;
9522            }
9523
9524            let next_out_of_line = decoder.next_out_of_line();
9525            let handles_before = decoder.remaining_handles();
9526            if let Some((inlined, num_bytes, num_handles)) =
9527                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9528            {
9529                let member_inline_size =
9530                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
9531                if inlined != (member_inline_size <= 4) {
9532                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9533                }
9534                let inner_offset;
9535                let mut inner_depth = depth.clone();
9536                if inlined {
9537                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9538                    inner_offset = next_offset;
9539                } else {
9540                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9541                    inner_depth.increment()?;
9542                }
9543                let val_ref = self.is_peer_br.get_or_insert_with(|| fidl::new_empty!(bool, D));
9544                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
9545                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9546                {
9547                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9548                }
9549                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9550                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9551                }
9552            }
9553
9554            next_offset += envelope_size;
9555
9556            // Decode the remaining unknown envelopes.
9557            while next_offset < end_offset {
9558                _next_ordinal_to_read += 1;
9559                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9560                next_offset += envelope_size;
9561            }
9562
9563            Ok(())
9564        }
9565    }
9566
9567    impl BufferInfo {
9568        #[inline(always)]
9569        fn max_ordinal_present(&self) -> u64 {
9570            if let Some(_) = self.msg_application_coap_queue {
9571                return 11;
9572            }
9573            if let Some(_) = self.msg_coap_secure_queue {
9574                return 10;
9575            }
9576            if let Some(_) = self.msg_coap_queue {
9577                return 9;
9578            }
9579            if let Some(_) = self.msg_mle_queue {
9580                return 8;
9581            }
9582            if let Some(_) = self.msg_mpl_queue {
9583                return 7;
9584            }
9585            if let Some(_) = self.msg_ip6_queue {
9586                return 6;
9587            }
9588            if let Some(_) = self.msg_6lo_reassembly_queue {
9589                return 5;
9590            }
9591            if let Some(_) = self.msg_6lo_send_queue {
9592                return 4;
9593            }
9594            if let Some(_) = self.msg_max_used_buffers {
9595                return 3;
9596            }
9597            if let Some(_) = self.msg_free_buffers {
9598                return 2;
9599            }
9600            if let Some(_) = self.msg_total_buffers {
9601                return 1;
9602            }
9603            0
9604        }
9605    }
9606
9607    impl fidl::encoding::ValueTypeMarker for BufferInfo {
9608        type Borrowed<'a> = &'a Self;
9609        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
9610            value
9611        }
9612    }
9613
9614    unsafe impl fidl::encoding::TypeMarker for BufferInfo {
9615        type Owned = Self;
9616
9617        #[inline(always)]
9618        fn inline_align(_context: fidl::encoding::Context) -> usize {
9619            8
9620        }
9621
9622        #[inline(always)]
9623        fn inline_size(_context: fidl::encoding::Context) -> usize {
9624            16
9625        }
9626    }
9627
9628    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<BufferInfo, D>
9629        for &BufferInfo
9630    {
9631        unsafe fn encode(
9632            self,
9633            encoder: &mut fidl::encoding::Encoder<'_, D>,
9634            offset: usize,
9635            mut depth: fidl::encoding::Depth,
9636        ) -> fidl::Result<()> {
9637            encoder.debug_check_bounds::<BufferInfo>(offset);
9638            // Vector header
9639            let max_ordinal: u64 = self.max_ordinal_present();
9640            encoder.write_num(max_ordinal, offset);
9641            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
9642            // Calling encoder.out_of_line_offset(0) is not allowed.
9643            if max_ordinal == 0 {
9644                return Ok(());
9645            }
9646            depth.increment()?;
9647            let envelope_size = 8;
9648            let bytes_len = max_ordinal as usize * envelope_size;
9649            #[allow(unused_variables)]
9650            let offset = encoder.out_of_line_offset(bytes_len);
9651            let mut _prev_end_offset: usize = 0;
9652            if 1 > max_ordinal {
9653                return Ok(());
9654            }
9655
9656            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9657            // are envelope_size bytes.
9658            let cur_offset: usize = (1 - 1) * envelope_size;
9659
9660            // Zero reserved fields.
9661            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9662
9663            // Safety:
9664            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9665            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9666            //   envelope_size bytes, there is always sufficient room.
9667            fidl::encoding::encode_in_envelope_optional::<u16, D>(
9668                self.msg_total_buffers
9669                    .as_ref()
9670                    .map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
9671                encoder,
9672                offset + cur_offset,
9673                depth,
9674            )?;
9675
9676            _prev_end_offset = cur_offset + envelope_size;
9677            if 2 > max_ordinal {
9678                return Ok(());
9679            }
9680
9681            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9682            // are envelope_size bytes.
9683            let cur_offset: usize = (2 - 1) * envelope_size;
9684
9685            // Zero reserved fields.
9686            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9687
9688            // Safety:
9689            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9690            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9691            //   envelope_size bytes, there is always sufficient room.
9692            fidl::encoding::encode_in_envelope_optional::<u16, D>(
9693                self.msg_free_buffers
9694                    .as_ref()
9695                    .map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
9696                encoder,
9697                offset + cur_offset,
9698                depth,
9699            )?;
9700
9701            _prev_end_offset = cur_offset + envelope_size;
9702            if 3 > max_ordinal {
9703                return Ok(());
9704            }
9705
9706            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9707            // are envelope_size bytes.
9708            let cur_offset: usize = (3 - 1) * envelope_size;
9709
9710            // Zero reserved fields.
9711            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9712
9713            // Safety:
9714            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9715            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9716            //   envelope_size bytes, there is always sufficient room.
9717            fidl::encoding::encode_in_envelope_optional::<u16, D>(
9718                self.msg_max_used_buffers
9719                    .as_ref()
9720                    .map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
9721                encoder,
9722                offset + cur_offset,
9723                depth,
9724            )?;
9725
9726            _prev_end_offset = cur_offset + envelope_size;
9727            if 4 > max_ordinal {
9728                return Ok(());
9729            }
9730
9731            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9732            // are envelope_size bytes.
9733            let cur_offset: usize = (4 - 1) * envelope_size;
9734
9735            // Zero reserved fields.
9736            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9737
9738            // Safety:
9739            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9740            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9741            //   envelope_size bytes, there is always sufficient room.
9742            fidl::encoding::encode_in_envelope_optional::<MessageQueueInfo, D>(
9743                self.msg_6lo_send_queue
9744                    .as_ref()
9745                    .map(<MessageQueueInfo as fidl::encoding::ValueTypeMarker>::borrow),
9746                encoder,
9747                offset + cur_offset,
9748                depth,
9749            )?;
9750
9751            _prev_end_offset = cur_offset + envelope_size;
9752            if 5 > max_ordinal {
9753                return Ok(());
9754            }
9755
9756            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9757            // are envelope_size bytes.
9758            let cur_offset: usize = (5 - 1) * envelope_size;
9759
9760            // Zero reserved fields.
9761            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9762
9763            // Safety:
9764            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9765            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9766            //   envelope_size bytes, there is always sufficient room.
9767            fidl::encoding::encode_in_envelope_optional::<MessageQueueInfo, D>(
9768                self.msg_6lo_reassembly_queue
9769                    .as_ref()
9770                    .map(<MessageQueueInfo as fidl::encoding::ValueTypeMarker>::borrow),
9771                encoder,
9772                offset + cur_offset,
9773                depth,
9774            )?;
9775
9776            _prev_end_offset = cur_offset + envelope_size;
9777            if 6 > max_ordinal {
9778                return Ok(());
9779            }
9780
9781            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9782            // are envelope_size bytes.
9783            let cur_offset: usize = (6 - 1) * envelope_size;
9784
9785            // Zero reserved fields.
9786            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9787
9788            // Safety:
9789            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9790            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9791            //   envelope_size bytes, there is always sufficient room.
9792            fidl::encoding::encode_in_envelope_optional::<MessageQueueInfo, D>(
9793                self.msg_ip6_queue
9794                    .as_ref()
9795                    .map(<MessageQueueInfo as fidl::encoding::ValueTypeMarker>::borrow),
9796                encoder,
9797                offset + cur_offset,
9798                depth,
9799            )?;
9800
9801            _prev_end_offset = cur_offset + envelope_size;
9802            if 7 > max_ordinal {
9803                return Ok(());
9804            }
9805
9806            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9807            // are envelope_size bytes.
9808            let cur_offset: usize = (7 - 1) * envelope_size;
9809
9810            // Zero reserved fields.
9811            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9812
9813            // Safety:
9814            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9815            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9816            //   envelope_size bytes, there is always sufficient room.
9817            fidl::encoding::encode_in_envelope_optional::<MessageQueueInfo, D>(
9818                self.msg_mpl_queue
9819                    .as_ref()
9820                    .map(<MessageQueueInfo as fidl::encoding::ValueTypeMarker>::borrow),
9821                encoder,
9822                offset + cur_offset,
9823                depth,
9824            )?;
9825
9826            _prev_end_offset = cur_offset + envelope_size;
9827            if 8 > max_ordinal {
9828                return Ok(());
9829            }
9830
9831            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9832            // are envelope_size bytes.
9833            let cur_offset: usize = (8 - 1) * envelope_size;
9834
9835            // Zero reserved fields.
9836            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9837
9838            // Safety:
9839            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9840            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9841            //   envelope_size bytes, there is always sufficient room.
9842            fidl::encoding::encode_in_envelope_optional::<MessageQueueInfo, D>(
9843                self.msg_mle_queue
9844                    .as_ref()
9845                    .map(<MessageQueueInfo as fidl::encoding::ValueTypeMarker>::borrow),
9846                encoder,
9847                offset + cur_offset,
9848                depth,
9849            )?;
9850
9851            _prev_end_offset = cur_offset + envelope_size;
9852            if 9 > max_ordinal {
9853                return Ok(());
9854            }
9855
9856            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9857            // are envelope_size bytes.
9858            let cur_offset: usize = (9 - 1) * envelope_size;
9859
9860            // Zero reserved fields.
9861            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9862
9863            // Safety:
9864            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9865            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9866            //   envelope_size bytes, there is always sufficient room.
9867            fidl::encoding::encode_in_envelope_optional::<MessageQueueInfo, D>(
9868                self.msg_coap_queue
9869                    .as_ref()
9870                    .map(<MessageQueueInfo as fidl::encoding::ValueTypeMarker>::borrow),
9871                encoder,
9872                offset + cur_offset,
9873                depth,
9874            )?;
9875
9876            _prev_end_offset = cur_offset + envelope_size;
9877            if 10 > max_ordinal {
9878                return Ok(());
9879            }
9880
9881            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9882            // are envelope_size bytes.
9883            let cur_offset: usize = (10 - 1) * envelope_size;
9884
9885            // Zero reserved fields.
9886            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9887
9888            // Safety:
9889            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9890            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9891            //   envelope_size bytes, there is always sufficient room.
9892            fidl::encoding::encode_in_envelope_optional::<MessageQueueInfo, D>(
9893                self.msg_coap_secure_queue
9894                    .as_ref()
9895                    .map(<MessageQueueInfo as fidl::encoding::ValueTypeMarker>::borrow),
9896                encoder,
9897                offset + cur_offset,
9898                depth,
9899            )?;
9900
9901            _prev_end_offset = cur_offset + envelope_size;
9902            if 11 > max_ordinal {
9903                return Ok(());
9904            }
9905
9906            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9907            // are envelope_size bytes.
9908            let cur_offset: usize = (11 - 1) * envelope_size;
9909
9910            // Zero reserved fields.
9911            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9912
9913            // Safety:
9914            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9915            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9916            //   envelope_size bytes, there is always sufficient room.
9917            fidl::encoding::encode_in_envelope_optional::<MessageQueueInfo, D>(
9918                self.msg_application_coap_queue
9919                    .as_ref()
9920                    .map(<MessageQueueInfo as fidl::encoding::ValueTypeMarker>::borrow),
9921                encoder,
9922                offset + cur_offset,
9923                depth,
9924            )?;
9925
9926            _prev_end_offset = cur_offset + envelope_size;
9927
9928            Ok(())
9929        }
9930    }
9931
9932    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for BufferInfo {
9933        #[inline(always)]
9934        fn new_empty() -> Self {
9935            Self::default()
9936        }
9937
9938        unsafe fn decode(
9939            &mut self,
9940            decoder: &mut fidl::encoding::Decoder<'_, D>,
9941            offset: usize,
9942            mut depth: fidl::encoding::Depth,
9943        ) -> fidl::Result<()> {
9944            decoder.debug_check_bounds::<Self>(offset);
9945            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
9946                None => return Err(fidl::Error::NotNullable),
9947                Some(len) => len,
9948            };
9949            // Calling decoder.out_of_line_offset(0) is not allowed.
9950            if len == 0 {
9951                return Ok(());
9952            };
9953            depth.increment()?;
9954            let envelope_size = 8;
9955            let bytes_len = len * envelope_size;
9956            let offset = decoder.out_of_line_offset(bytes_len)?;
9957            // Decode the envelope for each type.
9958            let mut _next_ordinal_to_read = 0;
9959            let mut next_offset = offset;
9960            let end_offset = offset + bytes_len;
9961            _next_ordinal_to_read += 1;
9962            if next_offset >= end_offset {
9963                return Ok(());
9964            }
9965
9966            // Decode unknown envelopes for gaps in ordinals.
9967            while _next_ordinal_to_read < 1 {
9968                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9969                _next_ordinal_to_read += 1;
9970                next_offset += envelope_size;
9971            }
9972
9973            let next_out_of_line = decoder.next_out_of_line();
9974            let handles_before = decoder.remaining_handles();
9975            if let Some((inlined, num_bytes, num_handles)) =
9976                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9977            {
9978                let member_inline_size =
9979                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
9980                if inlined != (member_inline_size <= 4) {
9981                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9982                }
9983                let inner_offset;
9984                let mut inner_depth = depth.clone();
9985                if inlined {
9986                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9987                    inner_offset = next_offset;
9988                } else {
9989                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9990                    inner_depth.increment()?;
9991                }
9992                let val_ref =
9993                    self.msg_total_buffers.get_or_insert_with(|| fidl::new_empty!(u16, D));
9994                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
9995                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9996                {
9997                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9998                }
9999                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10000                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10001                }
10002            }
10003
10004            next_offset += envelope_size;
10005            _next_ordinal_to_read += 1;
10006            if next_offset >= end_offset {
10007                return Ok(());
10008            }
10009
10010            // Decode unknown envelopes for gaps in ordinals.
10011            while _next_ordinal_to_read < 2 {
10012                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10013                _next_ordinal_to_read += 1;
10014                next_offset += envelope_size;
10015            }
10016
10017            let next_out_of_line = decoder.next_out_of_line();
10018            let handles_before = decoder.remaining_handles();
10019            if let Some((inlined, num_bytes, num_handles)) =
10020                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10021            {
10022                let member_inline_size =
10023                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
10024                if inlined != (member_inline_size <= 4) {
10025                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10026                }
10027                let inner_offset;
10028                let mut inner_depth = depth.clone();
10029                if inlined {
10030                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10031                    inner_offset = next_offset;
10032                } else {
10033                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10034                    inner_depth.increment()?;
10035                }
10036                let val_ref = self.msg_free_buffers.get_or_insert_with(|| fidl::new_empty!(u16, D));
10037                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
10038                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10039                {
10040                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10041                }
10042                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10043                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10044                }
10045            }
10046
10047            next_offset += envelope_size;
10048            _next_ordinal_to_read += 1;
10049            if next_offset >= end_offset {
10050                return Ok(());
10051            }
10052
10053            // Decode unknown envelopes for gaps in ordinals.
10054            while _next_ordinal_to_read < 3 {
10055                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10056                _next_ordinal_to_read += 1;
10057                next_offset += envelope_size;
10058            }
10059
10060            let next_out_of_line = decoder.next_out_of_line();
10061            let handles_before = decoder.remaining_handles();
10062            if let Some((inlined, num_bytes, num_handles)) =
10063                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10064            {
10065                let member_inline_size =
10066                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
10067                if inlined != (member_inline_size <= 4) {
10068                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10069                }
10070                let inner_offset;
10071                let mut inner_depth = depth.clone();
10072                if inlined {
10073                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10074                    inner_offset = next_offset;
10075                } else {
10076                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10077                    inner_depth.increment()?;
10078                }
10079                let val_ref =
10080                    self.msg_max_used_buffers.get_or_insert_with(|| fidl::new_empty!(u16, D));
10081                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
10082                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10083                {
10084                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10085                }
10086                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10087                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10088                }
10089            }
10090
10091            next_offset += envelope_size;
10092            _next_ordinal_to_read += 1;
10093            if next_offset >= end_offset {
10094                return Ok(());
10095            }
10096
10097            // Decode unknown envelopes for gaps in ordinals.
10098            while _next_ordinal_to_read < 4 {
10099                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10100                _next_ordinal_to_read += 1;
10101                next_offset += envelope_size;
10102            }
10103
10104            let next_out_of_line = decoder.next_out_of_line();
10105            let handles_before = decoder.remaining_handles();
10106            if let Some((inlined, num_bytes, num_handles)) =
10107                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10108            {
10109                let member_inline_size =
10110                    <MessageQueueInfo as fidl::encoding::TypeMarker>::inline_size(decoder.context);
10111                if inlined != (member_inline_size <= 4) {
10112                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10113                }
10114                let inner_offset;
10115                let mut inner_depth = depth.clone();
10116                if inlined {
10117                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10118                    inner_offset = next_offset;
10119                } else {
10120                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10121                    inner_depth.increment()?;
10122                }
10123                let val_ref = self
10124                    .msg_6lo_send_queue
10125                    .get_or_insert_with(|| fidl::new_empty!(MessageQueueInfo, D));
10126                fidl::decode!(MessageQueueInfo, D, val_ref, decoder, inner_offset, inner_depth)?;
10127                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10128                {
10129                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10130                }
10131                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10132                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10133                }
10134            }
10135
10136            next_offset += envelope_size;
10137            _next_ordinal_to_read += 1;
10138            if next_offset >= end_offset {
10139                return Ok(());
10140            }
10141
10142            // Decode unknown envelopes for gaps in ordinals.
10143            while _next_ordinal_to_read < 5 {
10144                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10145                _next_ordinal_to_read += 1;
10146                next_offset += envelope_size;
10147            }
10148
10149            let next_out_of_line = decoder.next_out_of_line();
10150            let handles_before = decoder.remaining_handles();
10151            if let Some((inlined, num_bytes, num_handles)) =
10152                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10153            {
10154                let member_inline_size =
10155                    <MessageQueueInfo as fidl::encoding::TypeMarker>::inline_size(decoder.context);
10156                if inlined != (member_inline_size <= 4) {
10157                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10158                }
10159                let inner_offset;
10160                let mut inner_depth = depth.clone();
10161                if inlined {
10162                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10163                    inner_offset = next_offset;
10164                } else {
10165                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10166                    inner_depth.increment()?;
10167                }
10168                let val_ref = self
10169                    .msg_6lo_reassembly_queue
10170                    .get_or_insert_with(|| fidl::new_empty!(MessageQueueInfo, D));
10171                fidl::decode!(MessageQueueInfo, D, val_ref, decoder, inner_offset, inner_depth)?;
10172                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10173                {
10174                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10175                }
10176                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10177                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10178                }
10179            }
10180
10181            next_offset += envelope_size;
10182            _next_ordinal_to_read += 1;
10183            if next_offset >= end_offset {
10184                return Ok(());
10185            }
10186
10187            // Decode unknown envelopes for gaps in ordinals.
10188            while _next_ordinal_to_read < 6 {
10189                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10190                _next_ordinal_to_read += 1;
10191                next_offset += envelope_size;
10192            }
10193
10194            let next_out_of_line = decoder.next_out_of_line();
10195            let handles_before = decoder.remaining_handles();
10196            if let Some((inlined, num_bytes, num_handles)) =
10197                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10198            {
10199                let member_inline_size =
10200                    <MessageQueueInfo as fidl::encoding::TypeMarker>::inline_size(decoder.context);
10201                if inlined != (member_inline_size <= 4) {
10202                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10203                }
10204                let inner_offset;
10205                let mut inner_depth = depth.clone();
10206                if inlined {
10207                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10208                    inner_offset = next_offset;
10209                } else {
10210                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10211                    inner_depth.increment()?;
10212                }
10213                let val_ref =
10214                    self.msg_ip6_queue.get_or_insert_with(|| fidl::new_empty!(MessageQueueInfo, D));
10215                fidl::decode!(MessageQueueInfo, D, val_ref, decoder, inner_offset, inner_depth)?;
10216                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10217                {
10218                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10219                }
10220                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10221                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10222                }
10223            }
10224
10225            next_offset += envelope_size;
10226            _next_ordinal_to_read += 1;
10227            if next_offset >= end_offset {
10228                return Ok(());
10229            }
10230
10231            // Decode unknown envelopes for gaps in ordinals.
10232            while _next_ordinal_to_read < 7 {
10233                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10234                _next_ordinal_to_read += 1;
10235                next_offset += envelope_size;
10236            }
10237
10238            let next_out_of_line = decoder.next_out_of_line();
10239            let handles_before = decoder.remaining_handles();
10240            if let Some((inlined, num_bytes, num_handles)) =
10241                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10242            {
10243                let member_inline_size =
10244                    <MessageQueueInfo as fidl::encoding::TypeMarker>::inline_size(decoder.context);
10245                if inlined != (member_inline_size <= 4) {
10246                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10247                }
10248                let inner_offset;
10249                let mut inner_depth = depth.clone();
10250                if inlined {
10251                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10252                    inner_offset = next_offset;
10253                } else {
10254                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10255                    inner_depth.increment()?;
10256                }
10257                let val_ref =
10258                    self.msg_mpl_queue.get_or_insert_with(|| fidl::new_empty!(MessageQueueInfo, D));
10259                fidl::decode!(MessageQueueInfo, D, val_ref, decoder, inner_offset, inner_depth)?;
10260                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10261                {
10262                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10263                }
10264                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10265                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10266                }
10267            }
10268
10269            next_offset += envelope_size;
10270            _next_ordinal_to_read += 1;
10271            if next_offset >= end_offset {
10272                return Ok(());
10273            }
10274
10275            // Decode unknown envelopes for gaps in ordinals.
10276            while _next_ordinal_to_read < 8 {
10277                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10278                _next_ordinal_to_read += 1;
10279                next_offset += envelope_size;
10280            }
10281
10282            let next_out_of_line = decoder.next_out_of_line();
10283            let handles_before = decoder.remaining_handles();
10284            if let Some((inlined, num_bytes, num_handles)) =
10285                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10286            {
10287                let member_inline_size =
10288                    <MessageQueueInfo as fidl::encoding::TypeMarker>::inline_size(decoder.context);
10289                if inlined != (member_inline_size <= 4) {
10290                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10291                }
10292                let inner_offset;
10293                let mut inner_depth = depth.clone();
10294                if inlined {
10295                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10296                    inner_offset = next_offset;
10297                } else {
10298                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10299                    inner_depth.increment()?;
10300                }
10301                let val_ref =
10302                    self.msg_mle_queue.get_or_insert_with(|| fidl::new_empty!(MessageQueueInfo, D));
10303                fidl::decode!(MessageQueueInfo, D, val_ref, decoder, inner_offset, inner_depth)?;
10304                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10305                {
10306                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10307                }
10308                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10309                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10310                }
10311            }
10312
10313            next_offset += envelope_size;
10314            _next_ordinal_to_read += 1;
10315            if next_offset >= end_offset {
10316                return Ok(());
10317            }
10318
10319            // Decode unknown envelopes for gaps in ordinals.
10320            while _next_ordinal_to_read < 9 {
10321                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10322                _next_ordinal_to_read += 1;
10323                next_offset += envelope_size;
10324            }
10325
10326            let next_out_of_line = decoder.next_out_of_line();
10327            let handles_before = decoder.remaining_handles();
10328            if let Some((inlined, num_bytes, num_handles)) =
10329                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10330            {
10331                let member_inline_size =
10332                    <MessageQueueInfo as fidl::encoding::TypeMarker>::inline_size(decoder.context);
10333                if inlined != (member_inline_size <= 4) {
10334                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10335                }
10336                let inner_offset;
10337                let mut inner_depth = depth.clone();
10338                if inlined {
10339                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10340                    inner_offset = next_offset;
10341                } else {
10342                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10343                    inner_depth.increment()?;
10344                }
10345                let val_ref = self
10346                    .msg_coap_queue
10347                    .get_or_insert_with(|| fidl::new_empty!(MessageQueueInfo, D));
10348                fidl::decode!(MessageQueueInfo, D, val_ref, decoder, inner_offset, inner_depth)?;
10349                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10350                {
10351                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10352                }
10353                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10354                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10355                }
10356            }
10357
10358            next_offset += envelope_size;
10359            _next_ordinal_to_read += 1;
10360            if next_offset >= end_offset {
10361                return Ok(());
10362            }
10363
10364            // Decode unknown envelopes for gaps in ordinals.
10365            while _next_ordinal_to_read < 10 {
10366                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10367                _next_ordinal_to_read += 1;
10368                next_offset += envelope_size;
10369            }
10370
10371            let next_out_of_line = decoder.next_out_of_line();
10372            let handles_before = decoder.remaining_handles();
10373            if let Some((inlined, num_bytes, num_handles)) =
10374                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10375            {
10376                let member_inline_size =
10377                    <MessageQueueInfo as fidl::encoding::TypeMarker>::inline_size(decoder.context);
10378                if inlined != (member_inline_size <= 4) {
10379                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10380                }
10381                let inner_offset;
10382                let mut inner_depth = depth.clone();
10383                if inlined {
10384                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10385                    inner_offset = next_offset;
10386                } else {
10387                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10388                    inner_depth.increment()?;
10389                }
10390                let val_ref = self
10391                    .msg_coap_secure_queue
10392                    .get_or_insert_with(|| fidl::new_empty!(MessageQueueInfo, D));
10393                fidl::decode!(MessageQueueInfo, D, val_ref, decoder, inner_offset, inner_depth)?;
10394                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10395                {
10396                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10397                }
10398                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10399                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10400                }
10401            }
10402
10403            next_offset += envelope_size;
10404            _next_ordinal_to_read += 1;
10405            if next_offset >= end_offset {
10406                return Ok(());
10407            }
10408
10409            // Decode unknown envelopes for gaps in ordinals.
10410            while _next_ordinal_to_read < 11 {
10411                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10412                _next_ordinal_to_read += 1;
10413                next_offset += envelope_size;
10414            }
10415
10416            let next_out_of_line = decoder.next_out_of_line();
10417            let handles_before = decoder.remaining_handles();
10418            if let Some((inlined, num_bytes, num_handles)) =
10419                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10420            {
10421                let member_inline_size =
10422                    <MessageQueueInfo as fidl::encoding::TypeMarker>::inline_size(decoder.context);
10423                if inlined != (member_inline_size <= 4) {
10424                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10425                }
10426                let inner_offset;
10427                let mut inner_depth = depth.clone();
10428                if inlined {
10429                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10430                    inner_offset = next_offset;
10431                } else {
10432                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10433                    inner_depth.increment()?;
10434                }
10435                let val_ref = self
10436                    .msg_application_coap_queue
10437                    .get_or_insert_with(|| fidl::new_empty!(MessageQueueInfo, D));
10438                fidl::decode!(MessageQueueInfo, 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
10450            // Decode the remaining unknown envelopes.
10451            while next_offset < end_offset {
10452                _next_ordinal_to_read += 1;
10453                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10454                next_offset += envelope_size;
10455            }
10456
10457            Ok(())
10458        }
10459    }
10460
10461    impl ChannelInfo {
10462        #[inline(always)]
10463        fn max_ordinal_present(&self) -> u64 {
10464            if let Some(_) = self.masked_by_regulatory_domain {
10465                return 6;
10466            }
10467            if let Some(_) = self.spectrum_bandwidth_hz {
10468                return 5;
10469            }
10470            if let Some(_) = self.spectrum_center_frequency_hz {
10471                return 4;
10472            }
10473            if let Some(_) = self.max_transmit_power_dbm {
10474                return 3;
10475            }
10476            if let Some(_) = self.id {
10477                return 2;
10478            }
10479            if let Some(_) = self.index {
10480                return 1;
10481            }
10482            0
10483        }
10484    }
10485
10486    impl fidl::encoding::ValueTypeMarker for ChannelInfo {
10487        type Borrowed<'a> = &'a Self;
10488        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
10489            value
10490        }
10491    }
10492
10493    unsafe impl fidl::encoding::TypeMarker for ChannelInfo {
10494        type Owned = Self;
10495
10496        #[inline(always)]
10497        fn inline_align(_context: fidl::encoding::Context) -> usize {
10498            8
10499        }
10500
10501        #[inline(always)]
10502        fn inline_size(_context: fidl::encoding::Context) -> usize {
10503            16
10504        }
10505    }
10506
10507    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<ChannelInfo, D>
10508        for &ChannelInfo
10509    {
10510        unsafe fn encode(
10511            self,
10512            encoder: &mut fidl::encoding::Encoder<'_, D>,
10513            offset: usize,
10514            mut depth: fidl::encoding::Depth,
10515        ) -> fidl::Result<()> {
10516            encoder.debug_check_bounds::<ChannelInfo>(offset);
10517            // Vector header
10518            let max_ordinal: u64 = self.max_ordinal_present();
10519            encoder.write_num(max_ordinal, offset);
10520            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
10521            // Calling encoder.out_of_line_offset(0) is not allowed.
10522            if max_ordinal == 0 {
10523                return Ok(());
10524            }
10525            depth.increment()?;
10526            let envelope_size = 8;
10527            let bytes_len = max_ordinal as usize * envelope_size;
10528            #[allow(unused_variables)]
10529            let offset = encoder.out_of_line_offset(bytes_len);
10530            let mut _prev_end_offset: usize = 0;
10531            if 1 > max_ordinal {
10532                return Ok(());
10533            }
10534
10535            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10536            // are envelope_size bytes.
10537            let cur_offset: usize = (1 - 1) * envelope_size;
10538
10539            // Zero reserved fields.
10540            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10541
10542            // Safety:
10543            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10544            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10545            //   envelope_size bytes, there is always sufficient room.
10546            fidl::encoding::encode_in_envelope_optional::<u16, D>(
10547                self.index.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
10548                encoder,
10549                offset + cur_offset,
10550                depth,
10551            )?;
10552
10553            _prev_end_offset = cur_offset + envelope_size;
10554            if 2 > max_ordinal {
10555                return Ok(());
10556            }
10557
10558            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10559            // are envelope_size bytes.
10560            let cur_offset: usize = (2 - 1) * envelope_size;
10561
10562            // Zero reserved fields.
10563            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10564
10565            // Safety:
10566            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10567            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10568            //   envelope_size bytes, there is always sufficient room.
10569            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<16>, D>(
10570                self.id.as_ref().map(
10571                    <fidl::encoding::BoundedString<16> as fidl::encoding::ValueTypeMarker>::borrow,
10572                ),
10573                encoder,
10574                offset + cur_offset,
10575                depth,
10576            )?;
10577
10578            _prev_end_offset = cur_offset + envelope_size;
10579            if 3 > max_ordinal {
10580                return Ok(());
10581            }
10582
10583            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10584            // are envelope_size bytes.
10585            let cur_offset: usize = (3 - 1) * envelope_size;
10586
10587            // Zero reserved fields.
10588            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10589
10590            // Safety:
10591            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10592            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10593            //   envelope_size bytes, there is always sufficient room.
10594            fidl::encoding::encode_in_envelope_optional::<i8, D>(
10595                self.max_transmit_power_dbm
10596                    .as_ref()
10597                    .map(<i8 as fidl::encoding::ValueTypeMarker>::borrow),
10598                encoder,
10599                offset + cur_offset,
10600                depth,
10601            )?;
10602
10603            _prev_end_offset = cur_offset + envelope_size;
10604            if 4 > max_ordinal {
10605                return Ok(());
10606            }
10607
10608            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10609            // are envelope_size bytes.
10610            let cur_offset: usize = (4 - 1) * envelope_size;
10611
10612            // Zero reserved fields.
10613            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10614
10615            // Safety:
10616            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10617            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10618            //   envelope_size bytes, there is always sufficient room.
10619            fidl::encoding::encode_in_envelope_optional::<u64, D>(
10620                self.spectrum_center_frequency_hz
10621                    .as_ref()
10622                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
10623                encoder,
10624                offset + cur_offset,
10625                depth,
10626            )?;
10627
10628            _prev_end_offset = cur_offset + envelope_size;
10629            if 5 > max_ordinal {
10630                return Ok(());
10631            }
10632
10633            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10634            // are envelope_size bytes.
10635            let cur_offset: usize = (5 - 1) * envelope_size;
10636
10637            // Zero reserved fields.
10638            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10639
10640            // Safety:
10641            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10642            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10643            //   envelope_size bytes, there is always sufficient room.
10644            fidl::encoding::encode_in_envelope_optional::<u64, D>(
10645                self.spectrum_bandwidth_hz
10646                    .as_ref()
10647                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
10648                encoder,
10649                offset + cur_offset,
10650                depth,
10651            )?;
10652
10653            _prev_end_offset = cur_offset + envelope_size;
10654            if 6 > max_ordinal {
10655                return Ok(());
10656            }
10657
10658            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10659            // are envelope_size bytes.
10660            let cur_offset: usize = (6 - 1) * envelope_size;
10661
10662            // Zero reserved fields.
10663            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10664
10665            // Safety:
10666            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10667            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10668            //   envelope_size bytes, there is always sufficient room.
10669            fidl::encoding::encode_in_envelope_optional::<bool, D>(
10670                self.masked_by_regulatory_domain
10671                    .as_ref()
10672                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
10673                encoder,
10674                offset + cur_offset,
10675                depth,
10676            )?;
10677
10678            _prev_end_offset = cur_offset + envelope_size;
10679
10680            Ok(())
10681        }
10682    }
10683
10684    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ChannelInfo {
10685        #[inline(always)]
10686        fn new_empty() -> Self {
10687            Self::default()
10688        }
10689
10690        unsafe fn decode(
10691            &mut self,
10692            decoder: &mut fidl::encoding::Decoder<'_, D>,
10693            offset: usize,
10694            mut depth: fidl::encoding::Depth,
10695        ) -> fidl::Result<()> {
10696            decoder.debug_check_bounds::<Self>(offset);
10697            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
10698                None => return Err(fidl::Error::NotNullable),
10699                Some(len) => len,
10700            };
10701            // Calling decoder.out_of_line_offset(0) is not allowed.
10702            if len == 0 {
10703                return Ok(());
10704            };
10705            depth.increment()?;
10706            let envelope_size = 8;
10707            let bytes_len = len * envelope_size;
10708            let offset = decoder.out_of_line_offset(bytes_len)?;
10709            // Decode the envelope for each type.
10710            let mut _next_ordinal_to_read = 0;
10711            let mut next_offset = offset;
10712            let end_offset = offset + bytes_len;
10713            _next_ordinal_to_read += 1;
10714            if next_offset >= end_offset {
10715                return Ok(());
10716            }
10717
10718            // Decode unknown envelopes for gaps in ordinals.
10719            while _next_ordinal_to_read < 1 {
10720                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10721                _next_ordinal_to_read += 1;
10722                next_offset += envelope_size;
10723            }
10724
10725            let next_out_of_line = decoder.next_out_of_line();
10726            let handles_before = decoder.remaining_handles();
10727            if let Some((inlined, num_bytes, num_handles)) =
10728                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10729            {
10730                let member_inline_size =
10731                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
10732                if inlined != (member_inline_size <= 4) {
10733                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10734                }
10735                let inner_offset;
10736                let mut inner_depth = depth.clone();
10737                if inlined {
10738                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10739                    inner_offset = next_offset;
10740                } else {
10741                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10742                    inner_depth.increment()?;
10743                }
10744                let val_ref = self.index.get_or_insert_with(|| fidl::new_empty!(u16, D));
10745                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
10746                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10747                {
10748                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10749                }
10750                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10751                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10752                }
10753            }
10754
10755            next_offset += envelope_size;
10756            _next_ordinal_to_read += 1;
10757            if next_offset >= end_offset {
10758                return Ok(());
10759            }
10760
10761            // Decode unknown envelopes for gaps in ordinals.
10762            while _next_ordinal_to_read < 2 {
10763                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10764                _next_ordinal_to_read += 1;
10765                next_offset += envelope_size;
10766            }
10767
10768            let next_out_of_line = decoder.next_out_of_line();
10769            let handles_before = decoder.remaining_handles();
10770            if let Some((inlined, num_bytes, num_handles)) =
10771                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10772            {
10773                let member_inline_size =
10774                    <fidl::encoding::BoundedString<16> as fidl::encoding::TypeMarker>::inline_size(
10775                        decoder.context,
10776                    );
10777                if inlined != (member_inline_size <= 4) {
10778                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10779                }
10780                let inner_offset;
10781                let mut inner_depth = depth.clone();
10782                if inlined {
10783                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10784                    inner_offset = next_offset;
10785                } else {
10786                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10787                    inner_depth.increment()?;
10788                }
10789                let val_ref = self
10790                    .id
10791                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<16>, D));
10792                fidl::decode!(
10793                    fidl::encoding::BoundedString<16>,
10794                    D,
10795                    val_ref,
10796                    decoder,
10797                    inner_offset,
10798                    inner_depth
10799                )?;
10800                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10801                {
10802                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10803                }
10804                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10805                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10806                }
10807            }
10808
10809            next_offset += envelope_size;
10810            _next_ordinal_to_read += 1;
10811            if next_offset >= end_offset {
10812                return Ok(());
10813            }
10814
10815            // Decode unknown envelopes for gaps in ordinals.
10816            while _next_ordinal_to_read < 3 {
10817                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10818                _next_ordinal_to_read += 1;
10819                next_offset += envelope_size;
10820            }
10821
10822            let next_out_of_line = decoder.next_out_of_line();
10823            let handles_before = decoder.remaining_handles();
10824            if let Some((inlined, num_bytes, num_handles)) =
10825                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10826            {
10827                let member_inline_size =
10828                    <i8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
10829                if inlined != (member_inline_size <= 4) {
10830                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10831                }
10832                let inner_offset;
10833                let mut inner_depth = depth.clone();
10834                if inlined {
10835                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10836                    inner_offset = next_offset;
10837                } else {
10838                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10839                    inner_depth.increment()?;
10840                }
10841                let val_ref =
10842                    self.max_transmit_power_dbm.get_or_insert_with(|| fidl::new_empty!(i8, D));
10843                fidl::decode!(i8, D, val_ref, decoder, inner_offset, inner_depth)?;
10844                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10845                {
10846                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10847                }
10848                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10849                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10850                }
10851            }
10852
10853            next_offset += envelope_size;
10854            _next_ordinal_to_read += 1;
10855            if next_offset >= end_offset {
10856                return Ok(());
10857            }
10858
10859            // Decode unknown envelopes for gaps in ordinals.
10860            while _next_ordinal_to_read < 4 {
10861                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10862                _next_ordinal_to_read += 1;
10863                next_offset += envelope_size;
10864            }
10865
10866            let next_out_of_line = decoder.next_out_of_line();
10867            let handles_before = decoder.remaining_handles();
10868            if let Some((inlined, num_bytes, num_handles)) =
10869                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10870            {
10871                let member_inline_size =
10872                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
10873                if inlined != (member_inline_size <= 4) {
10874                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10875                }
10876                let inner_offset;
10877                let mut inner_depth = depth.clone();
10878                if inlined {
10879                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10880                    inner_offset = next_offset;
10881                } else {
10882                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10883                    inner_depth.increment()?;
10884                }
10885                let val_ref = self
10886                    .spectrum_center_frequency_hz
10887                    .get_or_insert_with(|| fidl::new_empty!(u64, D));
10888                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
10889                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10890                {
10891                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10892                }
10893                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10894                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10895                }
10896            }
10897
10898            next_offset += envelope_size;
10899            _next_ordinal_to_read += 1;
10900            if next_offset >= end_offset {
10901                return Ok(());
10902            }
10903
10904            // Decode unknown envelopes for gaps in ordinals.
10905            while _next_ordinal_to_read < 5 {
10906                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10907                _next_ordinal_to_read += 1;
10908                next_offset += envelope_size;
10909            }
10910
10911            let next_out_of_line = decoder.next_out_of_line();
10912            let handles_before = decoder.remaining_handles();
10913            if let Some((inlined, num_bytes, num_handles)) =
10914                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10915            {
10916                let member_inline_size =
10917                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
10918                if inlined != (member_inline_size <= 4) {
10919                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10920                }
10921                let inner_offset;
10922                let mut inner_depth = depth.clone();
10923                if inlined {
10924                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10925                    inner_offset = next_offset;
10926                } else {
10927                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10928                    inner_depth.increment()?;
10929                }
10930                let val_ref =
10931                    self.spectrum_bandwidth_hz.get_or_insert_with(|| fidl::new_empty!(u64, D));
10932                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
10933                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10934                {
10935                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10936                }
10937                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10938                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10939                }
10940            }
10941
10942            next_offset += envelope_size;
10943            _next_ordinal_to_read += 1;
10944            if next_offset >= end_offset {
10945                return Ok(());
10946            }
10947
10948            // Decode unknown envelopes for gaps in ordinals.
10949            while _next_ordinal_to_read < 6 {
10950                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10951                _next_ordinal_to_read += 1;
10952                next_offset += envelope_size;
10953            }
10954
10955            let next_out_of_line = decoder.next_out_of_line();
10956            let handles_before = decoder.remaining_handles();
10957            if let Some((inlined, num_bytes, num_handles)) =
10958                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10959            {
10960                let member_inline_size =
10961                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
10962                if inlined != (member_inline_size <= 4) {
10963                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10964                }
10965                let inner_offset;
10966                let mut inner_depth = depth.clone();
10967                if inlined {
10968                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10969                    inner_offset = next_offset;
10970                } else {
10971                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10972                    inner_depth.increment()?;
10973                }
10974                let val_ref = self
10975                    .masked_by_regulatory_domain
10976                    .get_or_insert_with(|| fidl::new_empty!(bool, D));
10977                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
10978                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10979                {
10980                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10981                }
10982                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10983                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10984                }
10985            }
10986
10987            next_offset += envelope_size;
10988
10989            // Decode the remaining unknown envelopes.
10990            while next_offset < end_offset {
10991                _next_ordinal_to_read += 1;
10992                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10993                next_offset += envelope_size;
10994            }
10995
10996            Ok(())
10997        }
10998    }
10999
11000    impl CommissioningDataset {
11001        #[inline(always)]
11002        fn max_ordinal_present(&self) -> u64 {
11003            if let Some(_) = self.has_extra_tlv {
11004                return 9;
11005            }
11006            if let Some(_) = self.is_joiner_udp_port_set {
11007                return 8;
11008            }
11009            if let Some(_) = self.is_steering_data_set {
11010                return 7;
11011            }
11012            if let Some(_) = self.is_session_id_set {
11013                return 6;
11014            }
11015            if let Some(_) = self.is_locator_set {
11016                return 5;
11017            }
11018            if let Some(_) = self.joiner_udp_port {
11019                return 4;
11020            }
11021            if let Some(_) = self.steering_data {
11022                return 3;
11023            }
11024            if let Some(_) = self.session_id {
11025                return 2;
11026            }
11027            if let Some(_) = self.locator {
11028                return 1;
11029            }
11030            0
11031        }
11032    }
11033
11034    impl fidl::encoding::ValueTypeMarker for CommissioningDataset {
11035        type Borrowed<'a> = &'a Self;
11036        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
11037            value
11038        }
11039    }
11040
11041    unsafe impl fidl::encoding::TypeMarker for CommissioningDataset {
11042        type Owned = Self;
11043
11044        #[inline(always)]
11045        fn inline_align(_context: fidl::encoding::Context) -> usize {
11046            8
11047        }
11048
11049        #[inline(always)]
11050        fn inline_size(_context: fidl::encoding::Context) -> usize {
11051            16
11052        }
11053    }
11054
11055    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<CommissioningDataset, D>
11056        for &CommissioningDataset
11057    {
11058        unsafe fn encode(
11059            self,
11060            encoder: &mut fidl::encoding::Encoder<'_, D>,
11061            offset: usize,
11062            mut depth: fidl::encoding::Depth,
11063        ) -> fidl::Result<()> {
11064            encoder.debug_check_bounds::<CommissioningDataset>(offset);
11065            // Vector header
11066            let max_ordinal: u64 = self.max_ordinal_present();
11067            encoder.write_num(max_ordinal, offset);
11068            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
11069            // Calling encoder.out_of_line_offset(0) is not allowed.
11070            if max_ordinal == 0 {
11071                return Ok(());
11072            }
11073            depth.increment()?;
11074            let envelope_size = 8;
11075            let bytes_len = max_ordinal as usize * envelope_size;
11076            #[allow(unused_variables)]
11077            let offset = encoder.out_of_line_offset(bytes_len);
11078            let mut _prev_end_offset: usize = 0;
11079            if 1 > max_ordinal {
11080                return Ok(());
11081            }
11082
11083            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11084            // are envelope_size bytes.
11085            let cur_offset: usize = (1 - 1) * envelope_size;
11086
11087            // Zero reserved fields.
11088            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11089
11090            // Safety:
11091            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11092            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11093            //   envelope_size bytes, there is always sufficient room.
11094            fidl::encoding::encode_in_envelope_optional::<u16, D>(
11095                self.locator.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
11096                encoder,
11097                offset + cur_offset,
11098                depth,
11099            )?;
11100
11101            _prev_end_offset = cur_offset + envelope_size;
11102            if 2 > max_ordinal {
11103                return Ok(());
11104            }
11105
11106            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11107            // are envelope_size bytes.
11108            let cur_offset: usize = (2 - 1) * envelope_size;
11109
11110            // Zero reserved fields.
11111            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11112
11113            // Safety:
11114            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11115            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11116            //   envelope_size bytes, there is always sufficient room.
11117            fidl::encoding::encode_in_envelope_optional::<u16, D>(
11118                self.session_id.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
11119                encoder,
11120                offset + cur_offset,
11121                depth,
11122            )?;
11123
11124            _prev_end_offset = cur_offset + envelope_size;
11125            if 3 > max_ordinal {
11126                return Ok(());
11127            }
11128
11129            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11130            // are envelope_size bytes.
11131            let cur_offset: usize = (3 - 1) * envelope_size;
11132
11133            // Zero reserved fields.
11134            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11135
11136            // Safety:
11137            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11138            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11139            //   envelope_size bytes, there is always sufficient room.
11140            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u8, 16>, D>(
11141                self.steering_data.as_ref().map(
11142                    <fidl::encoding::Vector<u8, 16> as fidl::encoding::ValueTypeMarker>::borrow,
11143                ),
11144                encoder,
11145                offset + cur_offset,
11146                depth,
11147            )?;
11148
11149            _prev_end_offset = cur_offset + envelope_size;
11150            if 4 > max_ordinal {
11151                return Ok(());
11152            }
11153
11154            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11155            // are envelope_size bytes.
11156            let cur_offset: usize = (4 - 1) * envelope_size;
11157
11158            // Zero reserved fields.
11159            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11160
11161            // Safety:
11162            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11163            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11164            //   envelope_size bytes, there is always sufficient room.
11165            fidl::encoding::encode_in_envelope_optional::<u16, D>(
11166                self.joiner_udp_port.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
11167                encoder,
11168                offset + cur_offset,
11169                depth,
11170            )?;
11171
11172            _prev_end_offset = cur_offset + envelope_size;
11173            if 5 > max_ordinal {
11174                return Ok(());
11175            }
11176
11177            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11178            // are envelope_size bytes.
11179            let cur_offset: usize = (5 - 1) * envelope_size;
11180
11181            // Zero reserved fields.
11182            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11183
11184            // Safety:
11185            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11186            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11187            //   envelope_size bytes, there is always sufficient room.
11188            fidl::encoding::encode_in_envelope_optional::<bool, D>(
11189                self.is_locator_set.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
11190                encoder,
11191                offset + cur_offset,
11192                depth,
11193            )?;
11194
11195            _prev_end_offset = cur_offset + envelope_size;
11196            if 6 > max_ordinal {
11197                return Ok(());
11198            }
11199
11200            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11201            // are envelope_size bytes.
11202            let cur_offset: usize = (6 - 1) * envelope_size;
11203
11204            // Zero reserved fields.
11205            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11206
11207            // Safety:
11208            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11209            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11210            //   envelope_size bytes, there is always sufficient room.
11211            fidl::encoding::encode_in_envelope_optional::<bool, D>(
11212                self.is_session_id_set
11213                    .as_ref()
11214                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
11215                encoder,
11216                offset + cur_offset,
11217                depth,
11218            )?;
11219
11220            _prev_end_offset = cur_offset + envelope_size;
11221            if 7 > max_ordinal {
11222                return Ok(());
11223            }
11224
11225            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11226            // are envelope_size bytes.
11227            let cur_offset: usize = (7 - 1) * envelope_size;
11228
11229            // Zero reserved fields.
11230            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11231
11232            // Safety:
11233            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11234            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11235            //   envelope_size bytes, there is always sufficient room.
11236            fidl::encoding::encode_in_envelope_optional::<bool, D>(
11237                self.is_steering_data_set
11238                    .as_ref()
11239                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
11240                encoder,
11241                offset + cur_offset,
11242                depth,
11243            )?;
11244
11245            _prev_end_offset = cur_offset + envelope_size;
11246            if 8 > max_ordinal {
11247                return Ok(());
11248            }
11249
11250            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11251            // are envelope_size bytes.
11252            let cur_offset: usize = (8 - 1) * envelope_size;
11253
11254            // Zero reserved fields.
11255            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11256
11257            // Safety:
11258            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11259            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11260            //   envelope_size bytes, there is always sufficient room.
11261            fidl::encoding::encode_in_envelope_optional::<bool, D>(
11262                self.is_joiner_udp_port_set
11263                    .as_ref()
11264                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
11265                encoder,
11266                offset + cur_offset,
11267                depth,
11268            )?;
11269
11270            _prev_end_offset = cur_offset + envelope_size;
11271            if 9 > max_ordinal {
11272                return Ok(());
11273            }
11274
11275            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11276            // are envelope_size bytes.
11277            let cur_offset: usize = (9 - 1) * envelope_size;
11278
11279            // Zero reserved fields.
11280            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11281
11282            // Safety:
11283            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11284            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11285            //   envelope_size bytes, there is always sufficient room.
11286            fidl::encoding::encode_in_envelope_optional::<bool, D>(
11287                self.has_extra_tlv.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
11288                encoder,
11289                offset + cur_offset,
11290                depth,
11291            )?;
11292
11293            _prev_end_offset = cur_offset + envelope_size;
11294
11295            Ok(())
11296        }
11297    }
11298
11299    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for CommissioningDataset {
11300        #[inline(always)]
11301        fn new_empty() -> Self {
11302            Self::default()
11303        }
11304
11305        unsafe fn decode(
11306            &mut self,
11307            decoder: &mut fidl::encoding::Decoder<'_, D>,
11308            offset: usize,
11309            mut depth: fidl::encoding::Depth,
11310        ) -> fidl::Result<()> {
11311            decoder.debug_check_bounds::<Self>(offset);
11312            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
11313                None => return Err(fidl::Error::NotNullable),
11314                Some(len) => len,
11315            };
11316            // Calling decoder.out_of_line_offset(0) is not allowed.
11317            if len == 0 {
11318                return Ok(());
11319            };
11320            depth.increment()?;
11321            let envelope_size = 8;
11322            let bytes_len = len * envelope_size;
11323            let offset = decoder.out_of_line_offset(bytes_len)?;
11324            // Decode the envelope for each type.
11325            let mut _next_ordinal_to_read = 0;
11326            let mut next_offset = offset;
11327            let end_offset = offset + bytes_len;
11328            _next_ordinal_to_read += 1;
11329            if next_offset >= end_offset {
11330                return Ok(());
11331            }
11332
11333            // Decode unknown envelopes for gaps in ordinals.
11334            while _next_ordinal_to_read < 1 {
11335                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11336                _next_ordinal_to_read += 1;
11337                next_offset += envelope_size;
11338            }
11339
11340            let next_out_of_line = decoder.next_out_of_line();
11341            let handles_before = decoder.remaining_handles();
11342            if let Some((inlined, num_bytes, num_handles)) =
11343                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11344            {
11345                let member_inline_size =
11346                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
11347                if inlined != (member_inline_size <= 4) {
11348                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11349                }
11350                let inner_offset;
11351                let mut inner_depth = depth.clone();
11352                if inlined {
11353                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11354                    inner_offset = next_offset;
11355                } else {
11356                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11357                    inner_depth.increment()?;
11358                }
11359                let val_ref = self.locator.get_or_insert_with(|| fidl::new_empty!(u16, D));
11360                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
11361                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11362                {
11363                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11364                }
11365                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11366                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11367                }
11368            }
11369
11370            next_offset += envelope_size;
11371            _next_ordinal_to_read += 1;
11372            if next_offset >= end_offset {
11373                return Ok(());
11374            }
11375
11376            // Decode unknown envelopes for gaps in ordinals.
11377            while _next_ordinal_to_read < 2 {
11378                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11379                _next_ordinal_to_read += 1;
11380                next_offset += envelope_size;
11381            }
11382
11383            let next_out_of_line = decoder.next_out_of_line();
11384            let handles_before = decoder.remaining_handles();
11385            if let Some((inlined, num_bytes, num_handles)) =
11386                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11387            {
11388                let member_inline_size =
11389                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
11390                if inlined != (member_inline_size <= 4) {
11391                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11392                }
11393                let inner_offset;
11394                let mut inner_depth = depth.clone();
11395                if inlined {
11396                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11397                    inner_offset = next_offset;
11398                } else {
11399                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11400                    inner_depth.increment()?;
11401                }
11402                let val_ref = self.session_id.get_or_insert_with(|| fidl::new_empty!(u16, D));
11403                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
11404                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11405                {
11406                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11407                }
11408                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11409                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11410                }
11411            }
11412
11413            next_offset += envelope_size;
11414            _next_ordinal_to_read += 1;
11415            if next_offset >= end_offset {
11416                return Ok(());
11417            }
11418
11419            // Decode unknown envelopes for gaps in ordinals.
11420            while _next_ordinal_to_read < 3 {
11421                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11422                _next_ordinal_to_read += 1;
11423                next_offset += envelope_size;
11424            }
11425
11426            let next_out_of_line = decoder.next_out_of_line();
11427            let handles_before = decoder.remaining_handles();
11428            if let Some((inlined, num_bytes, num_handles)) =
11429                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11430            {
11431                let member_inline_size =
11432                    <fidl::encoding::Vector<u8, 16> as fidl::encoding::TypeMarker>::inline_size(
11433                        decoder.context,
11434                    );
11435                if inlined != (member_inline_size <= 4) {
11436                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11437                }
11438                let inner_offset;
11439                let mut inner_depth = depth.clone();
11440                if inlined {
11441                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11442                    inner_offset = next_offset;
11443                } else {
11444                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11445                    inner_depth.increment()?;
11446                }
11447                let val_ref = self
11448                    .steering_data
11449                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u8, 16>, D));
11450                fidl::decode!(fidl::encoding::Vector<u8, 16>, D, val_ref, decoder, inner_offset, inner_depth)?;
11451                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11452                {
11453                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11454                }
11455                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11456                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11457                }
11458            }
11459
11460            next_offset += envelope_size;
11461            _next_ordinal_to_read += 1;
11462            if next_offset >= end_offset {
11463                return Ok(());
11464            }
11465
11466            // Decode unknown envelopes for gaps in ordinals.
11467            while _next_ordinal_to_read < 4 {
11468                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11469                _next_ordinal_to_read += 1;
11470                next_offset += envelope_size;
11471            }
11472
11473            let next_out_of_line = decoder.next_out_of_line();
11474            let handles_before = decoder.remaining_handles();
11475            if let Some((inlined, num_bytes, num_handles)) =
11476                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11477            {
11478                let member_inline_size =
11479                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
11480                if inlined != (member_inline_size <= 4) {
11481                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11482                }
11483                let inner_offset;
11484                let mut inner_depth = depth.clone();
11485                if inlined {
11486                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11487                    inner_offset = next_offset;
11488                } else {
11489                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11490                    inner_depth.increment()?;
11491                }
11492                let val_ref = self.joiner_udp_port.get_or_insert_with(|| fidl::new_empty!(u16, D));
11493                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
11494                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11495                {
11496                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11497                }
11498                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11499                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11500                }
11501            }
11502
11503            next_offset += envelope_size;
11504            _next_ordinal_to_read += 1;
11505            if next_offset >= end_offset {
11506                return Ok(());
11507            }
11508
11509            // Decode unknown envelopes for gaps in ordinals.
11510            while _next_ordinal_to_read < 5 {
11511                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11512                _next_ordinal_to_read += 1;
11513                next_offset += envelope_size;
11514            }
11515
11516            let next_out_of_line = decoder.next_out_of_line();
11517            let handles_before = decoder.remaining_handles();
11518            if let Some((inlined, num_bytes, num_handles)) =
11519                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11520            {
11521                let member_inline_size =
11522                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
11523                if inlined != (member_inline_size <= 4) {
11524                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11525                }
11526                let inner_offset;
11527                let mut inner_depth = depth.clone();
11528                if inlined {
11529                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11530                    inner_offset = next_offset;
11531                } else {
11532                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11533                    inner_depth.increment()?;
11534                }
11535                let val_ref = self.is_locator_set.get_or_insert_with(|| fidl::new_empty!(bool, D));
11536                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
11537                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11538                {
11539                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11540                }
11541                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11542                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11543                }
11544            }
11545
11546            next_offset += envelope_size;
11547            _next_ordinal_to_read += 1;
11548            if next_offset >= end_offset {
11549                return Ok(());
11550            }
11551
11552            // Decode unknown envelopes for gaps in ordinals.
11553            while _next_ordinal_to_read < 6 {
11554                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11555                _next_ordinal_to_read += 1;
11556                next_offset += envelope_size;
11557            }
11558
11559            let next_out_of_line = decoder.next_out_of_line();
11560            let handles_before = decoder.remaining_handles();
11561            if let Some((inlined, num_bytes, num_handles)) =
11562                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11563            {
11564                let member_inline_size =
11565                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
11566                if inlined != (member_inline_size <= 4) {
11567                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11568                }
11569                let inner_offset;
11570                let mut inner_depth = depth.clone();
11571                if inlined {
11572                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11573                    inner_offset = next_offset;
11574                } else {
11575                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11576                    inner_depth.increment()?;
11577                }
11578                let val_ref =
11579                    self.is_session_id_set.get_or_insert_with(|| fidl::new_empty!(bool, D));
11580                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
11581                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11582                {
11583                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11584                }
11585                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11586                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11587                }
11588            }
11589
11590            next_offset += envelope_size;
11591            _next_ordinal_to_read += 1;
11592            if next_offset >= end_offset {
11593                return Ok(());
11594            }
11595
11596            // Decode unknown envelopes for gaps in ordinals.
11597            while _next_ordinal_to_read < 7 {
11598                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11599                _next_ordinal_to_read += 1;
11600                next_offset += envelope_size;
11601            }
11602
11603            let next_out_of_line = decoder.next_out_of_line();
11604            let handles_before = decoder.remaining_handles();
11605            if let Some((inlined, num_bytes, num_handles)) =
11606                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11607            {
11608                let member_inline_size =
11609                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
11610                if inlined != (member_inline_size <= 4) {
11611                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11612                }
11613                let inner_offset;
11614                let mut inner_depth = depth.clone();
11615                if inlined {
11616                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11617                    inner_offset = next_offset;
11618                } else {
11619                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11620                    inner_depth.increment()?;
11621                }
11622                let val_ref =
11623                    self.is_steering_data_set.get_or_insert_with(|| fidl::new_empty!(bool, D));
11624                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
11625                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11626                {
11627                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11628                }
11629                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11630                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11631                }
11632            }
11633
11634            next_offset += envelope_size;
11635            _next_ordinal_to_read += 1;
11636            if next_offset >= end_offset {
11637                return Ok(());
11638            }
11639
11640            // Decode unknown envelopes for gaps in ordinals.
11641            while _next_ordinal_to_read < 8 {
11642                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11643                _next_ordinal_to_read += 1;
11644                next_offset += envelope_size;
11645            }
11646
11647            let next_out_of_line = decoder.next_out_of_line();
11648            let handles_before = decoder.remaining_handles();
11649            if let Some((inlined, num_bytes, num_handles)) =
11650                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11651            {
11652                let member_inline_size =
11653                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
11654                if inlined != (member_inline_size <= 4) {
11655                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11656                }
11657                let inner_offset;
11658                let mut inner_depth = depth.clone();
11659                if inlined {
11660                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11661                    inner_offset = next_offset;
11662                } else {
11663                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11664                    inner_depth.increment()?;
11665                }
11666                let val_ref =
11667                    self.is_joiner_udp_port_set.get_or_insert_with(|| fidl::new_empty!(bool, D));
11668                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
11669                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11670                {
11671                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11672                }
11673                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11674                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11675                }
11676            }
11677
11678            next_offset += envelope_size;
11679            _next_ordinal_to_read += 1;
11680            if next_offset >= end_offset {
11681                return Ok(());
11682            }
11683
11684            // Decode unknown envelopes for gaps in ordinals.
11685            while _next_ordinal_to_read < 9 {
11686                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11687                _next_ordinal_to_read += 1;
11688                next_offset += envelope_size;
11689            }
11690
11691            let next_out_of_line = decoder.next_out_of_line();
11692            let handles_before = decoder.remaining_handles();
11693            if let Some((inlined, num_bytes, num_handles)) =
11694                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11695            {
11696                let member_inline_size =
11697                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
11698                if inlined != (member_inline_size <= 4) {
11699                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11700                }
11701                let inner_offset;
11702                let mut inner_depth = depth.clone();
11703                if inlined {
11704                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11705                    inner_offset = next_offset;
11706                } else {
11707                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11708                    inner_depth.increment()?;
11709                }
11710                let val_ref = self.has_extra_tlv.get_or_insert_with(|| fidl::new_empty!(bool, D));
11711                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
11712                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11713                {
11714                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11715                }
11716                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11717                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11718                }
11719            }
11720
11721            next_offset += envelope_size;
11722
11723            // Decode the remaining unknown envelopes.
11724            while next_offset < end_offset {
11725                _next_ordinal_to_read += 1;
11726                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11727                next_offset += envelope_size;
11728            }
11729
11730            Ok(())
11731        }
11732    }
11733
11734    impl CslInfo {
11735        #[inline(always)]
11736        fn max_ordinal_present(&self) -> u64 {
11737            if let Some(_) = self.csl_uncertainty {
11738                return 2;
11739            }
11740            if let Some(_) = self.csl_accuracy {
11741                return 1;
11742            }
11743            0
11744        }
11745    }
11746
11747    impl fidl::encoding::ValueTypeMarker for CslInfo {
11748        type Borrowed<'a> = &'a Self;
11749        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
11750            value
11751        }
11752    }
11753
11754    unsafe impl fidl::encoding::TypeMarker for CslInfo {
11755        type Owned = Self;
11756
11757        #[inline(always)]
11758        fn inline_align(_context: fidl::encoding::Context) -> usize {
11759            8
11760        }
11761
11762        #[inline(always)]
11763        fn inline_size(_context: fidl::encoding::Context) -> usize {
11764            16
11765        }
11766    }
11767
11768    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<CslInfo, D> for &CslInfo {
11769        unsafe fn encode(
11770            self,
11771            encoder: &mut fidl::encoding::Encoder<'_, D>,
11772            offset: usize,
11773            mut depth: fidl::encoding::Depth,
11774        ) -> fidl::Result<()> {
11775            encoder.debug_check_bounds::<CslInfo>(offset);
11776            // Vector header
11777            let max_ordinal: u64 = self.max_ordinal_present();
11778            encoder.write_num(max_ordinal, offset);
11779            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
11780            // Calling encoder.out_of_line_offset(0) is not allowed.
11781            if max_ordinal == 0 {
11782                return Ok(());
11783            }
11784            depth.increment()?;
11785            let envelope_size = 8;
11786            let bytes_len = max_ordinal as usize * envelope_size;
11787            #[allow(unused_variables)]
11788            let offset = encoder.out_of_line_offset(bytes_len);
11789            let mut _prev_end_offset: usize = 0;
11790            if 1 > max_ordinal {
11791                return Ok(());
11792            }
11793
11794            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11795            // are envelope_size bytes.
11796            let cur_offset: usize = (1 - 1) * envelope_size;
11797
11798            // Zero reserved fields.
11799            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11800
11801            // Safety:
11802            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11803            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11804            //   envelope_size bytes, there is always sufficient room.
11805            fidl::encoding::encode_in_envelope_optional::<u8, D>(
11806                self.csl_accuracy.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
11807                encoder,
11808                offset + cur_offset,
11809                depth,
11810            )?;
11811
11812            _prev_end_offset = cur_offset + envelope_size;
11813            if 2 > max_ordinal {
11814                return Ok(());
11815            }
11816
11817            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11818            // are envelope_size bytes.
11819            let cur_offset: usize = (2 - 1) * envelope_size;
11820
11821            // Zero reserved fields.
11822            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11823
11824            // Safety:
11825            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11826            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11827            //   envelope_size bytes, there is always sufficient room.
11828            fidl::encoding::encode_in_envelope_optional::<u8, D>(
11829                self.csl_uncertainty.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
11830                encoder,
11831                offset + cur_offset,
11832                depth,
11833            )?;
11834
11835            _prev_end_offset = cur_offset + envelope_size;
11836
11837            Ok(())
11838        }
11839    }
11840
11841    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for CslInfo {
11842        #[inline(always)]
11843        fn new_empty() -> Self {
11844            Self::default()
11845        }
11846
11847        unsafe fn decode(
11848            &mut self,
11849            decoder: &mut fidl::encoding::Decoder<'_, D>,
11850            offset: usize,
11851            mut depth: fidl::encoding::Depth,
11852        ) -> fidl::Result<()> {
11853            decoder.debug_check_bounds::<Self>(offset);
11854            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
11855                None => return Err(fidl::Error::NotNullable),
11856                Some(len) => len,
11857            };
11858            // Calling decoder.out_of_line_offset(0) is not allowed.
11859            if len == 0 {
11860                return Ok(());
11861            };
11862            depth.increment()?;
11863            let envelope_size = 8;
11864            let bytes_len = len * envelope_size;
11865            let offset = decoder.out_of_line_offset(bytes_len)?;
11866            // Decode the envelope for each type.
11867            let mut _next_ordinal_to_read = 0;
11868            let mut next_offset = offset;
11869            let end_offset = offset + bytes_len;
11870            _next_ordinal_to_read += 1;
11871            if next_offset >= end_offset {
11872                return Ok(());
11873            }
11874
11875            // Decode unknown envelopes for gaps in ordinals.
11876            while _next_ordinal_to_read < 1 {
11877                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11878                _next_ordinal_to_read += 1;
11879                next_offset += envelope_size;
11880            }
11881
11882            let next_out_of_line = decoder.next_out_of_line();
11883            let handles_before = decoder.remaining_handles();
11884            if let Some((inlined, num_bytes, num_handles)) =
11885                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11886            {
11887                let member_inline_size =
11888                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
11889                if inlined != (member_inline_size <= 4) {
11890                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11891                }
11892                let inner_offset;
11893                let mut inner_depth = depth.clone();
11894                if inlined {
11895                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11896                    inner_offset = next_offset;
11897                } else {
11898                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11899                    inner_depth.increment()?;
11900                }
11901                let val_ref = self.csl_accuracy.get_or_insert_with(|| fidl::new_empty!(u8, D));
11902                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
11903                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11904                {
11905                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11906                }
11907                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11908                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11909                }
11910            }
11911
11912            next_offset += envelope_size;
11913            _next_ordinal_to_read += 1;
11914            if next_offset >= end_offset {
11915                return Ok(());
11916            }
11917
11918            // Decode unknown envelopes for gaps in ordinals.
11919            while _next_ordinal_to_read < 2 {
11920                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11921                _next_ordinal_to_read += 1;
11922                next_offset += envelope_size;
11923            }
11924
11925            let next_out_of_line = decoder.next_out_of_line();
11926            let handles_before = decoder.remaining_handles();
11927            if let Some((inlined, num_bytes, num_handles)) =
11928                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11929            {
11930                let member_inline_size =
11931                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
11932                if inlined != (member_inline_size <= 4) {
11933                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11934                }
11935                let inner_offset;
11936                let mut inner_depth = depth.clone();
11937                if inlined {
11938                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11939                    inner_offset = next_offset;
11940                } else {
11941                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11942                    inner_depth.increment()?;
11943                }
11944                let val_ref = self.csl_uncertainty.get_or_insert_with(|| fidl::new_empty!(u8, D));
11945                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
11946                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11947                {
11948                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11949                }
11950                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11951                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11952                }
11953            }
11954
11955            next_offset += envelope_size;
11956
11957            // Decode the remaining unknown envelopes.
11958            while next_offset < end_offset {
11959                _next_ordinal_to_read += 1;
11960                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11961                next_offset += envelope_size;
11962            }
11963
11964            Ok(())
11965        }
11966    }
11967
11968    impl Dhcp6PdInfo {
11969        #[inline(always)]
11970        fn max_ordinal_present(&self) -> u64 {
11971            if let Some(_) = self.hashed_pd_prefix {
11972                return 3;
11973            }
11974            if let Some(_) = self.pd_processed_ra_info {
11975                return 2;
11976            }
11977            if let Some(_) = self.dhcp6pd_state {
11978                return 1;
11979            }
11980            0
11981        }
11982    }
11983
11984    impl fidl::encoding::ValueTypeMarker for Dhcp6PdInfo {
11985        type Borrowed<'a> = &'a Self;
11986        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
11987            value
11988        }
11989    }
11990
11991    unsafe impl fidl::encoding::TypeMarker for Dhcp6PdInfo {
11992        type Owned = Self;
11993
11994        #[inline(always)]
11995        fn inline_align(_context: fidl::encoding::Context) -> usize {
11996            8
11997        }
11998
11999        #[inline(always)]
12000        fn inline_size(_context: fidl::encoding::Context) -> usize {
12001            16
12002        }
12003    }
12004
12005    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Dhcp6PdInfo, D>
12006        for &Dhcp6PdInfo
12007    {
12008        unsafe fn encode(
12009            self,
12010            encoder: &mut fidl::encoding::Encoder<'_, D>,
12011            offset: usize,
12012            mut depth: fidl::encoding::Depth,
12013        ) -> fidl::Result<()> {
12014            encoder.debug_check_bounds::<Dhcp6PdInfo>(offset);
12015            // Vector header
12016            let max_ordinal: u64 = self.max_ordinal_present();
12017            encoder.write_num(max_ordinal, offset);
12018            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
12019            // Calling encoder.out_of_line_offset(0) is not allowed.
12020            if max_ordinal == 0 {
12021                return Ok(());
12022            }
12023            depth.increment()?;
12024            let envelope_size = 8;
12025            let bytes_len = max_ordinal as usize * envelope_size;
12026            #[allow(unused_variables)]
12027            let offset = encoder.out_of_line_offset(bytes_len);
12028            let mut _prev_end_offset: usize = 0;
12029            if 1 > max_ordinal {
12030                return Ok(());
12031            }
12032
12033            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
12034            // are envelope_size bytes.
12035            let cur_offset: usize = (1 - 1) * envelope_size;
12036
12037            // Zero reserved fields.
12038            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
12039
12040            // Safety:
12041            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
12042            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
12043            //   envelope_size bytes, there is always sufficient room.
12044            fidl::encoding::encode_in_envelope_optional::<Dhcp6PdState, D>(
12045                self.dhcp6pd_state
12046                    .as_ref()
12047                    .map(<Dhcp6PdState as fidl::encoding::ValueTypeMarker>::borrow),
12048                encoder,
12049                offset + cur_offset,
12050                depth,
12051            )?;
12052
12053            _prev_end_offset = cur_offset + envelope_size;
12054            if 2 > max_ordinal {
12055                return Ok(());
12056            }
12057
12058            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
12059            // are envelope_size bytes.
12060            let cur_offset: usize = (2 - 1) * envelope_size;
12061
12062            // Zero reserved fields.
12063            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
12064
12065            // Safety:
12066            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
12067            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
12068            //   envelope_size bytes, there is always sufficient room.
12069            fidl::encoding::encode_in_envelope_optional::<PdProcessedRaInfo, D>(
12070                self.pd_processed_ra_info
12071                    .as_ref()
12072                    .map(<PdProcessedRaInfo as fidl::encoding::ValueTypeMarker>::borrow),
12073                encoder,
12074                offset + cur_offset,
12075                depth,
12076            )?;
12077
12078            _prev_end_offset = cur_offset + envelope_size;
12079            if 3 > max_ordinal {
12080                return Ok(());
12081            }
12082
12083            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
12084            // are envelope_size bytes.
12085            let cur_offset: usize = (3 - 1) * envelope_size;
12086
12087            // Zero reserved fields.
12088            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
12089
12090            // Safety:
12091            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
12092            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
12093            //   envelope_size bytes, there is always sufficient room.
12094            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u8, 32>, D>(
12095                self.hashed_pd_prefix.as_ref().map(
12096                    <fidl::encoding::Vector<u8, 32> as fidl::encoding::ValueTypeMarker>::borrow,
12097                ),
12098                encoder,
12099                offset + cur_offset,
12100                depth,
12101            )?;
12102
12103            _prev_end_offset = cur_offset + envelope_size;
12104
12105            Ok(())
12106        }
12107    }
12108
12109    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Dhcp6PdInfo {
12110        #[inline(always)]
12111        fn new_empty() -> Self {
12112            Self::default()
12113        }
12114
12115        unsafe fn decode(
12116            &mut self,
12117            decoder: &mut fidl::encoding::Decoder<'_, D>,
12118            offset: usize,
12119            mut depth: fidl::encoding::Depth,
12120        ) -> fidl::Result<()> {
12121            decoder.debug_check_bounds::<Self>(offset);
12122            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
12123                None => return Err(fidl::Error::NotNullable),
12124                Some(len) => len,
12125            };
12126            // Calling decoder.out_of_line_offset(0) is not allowed.
12127            if len == 0 {
12128                return Ok(());
12129            };
12130            depth.increment()?;
12131            let envelope_size = 8;
12132            let bytes_len = len * envelope_size;
12133            let offset = decoder.out_of_line_offset(bytes_len)?;
12134            // Decode the envelope for each type.
12135            let mut _next_ordinal_to_read = 0;
12136            let mut next_offset = offset;
12137            let end_offset = offset + bytes_len;
12138            _next_ordinal_to_read += 1;
12139            if next_offset >= end_offset {
12140                return Ok(());
12141            }
12142
12143            // Decode unknown envelopes for gaps in ordinals.
12144            while _next_ordinal_to_read < 1 {
12145                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12146                _next_ordinal_to_read += 1;
12147                next_offset += envelope_size;
12148            }
12149
12150            let next_out_of_line = decoder.next_out_of_line();
12151            let handles_before = decoder.remaining_handles();
12152            if let Some((inlined, num_bytes, num_handles)) =
12153                fidl::encoding::decode_envelope_header(decoder, next_offset)?
12154            {
12155                let member_inline_size =
12156                    <Dhcp6PdState as fidl::encoding::TypeMarker>::inline_size(decoder.context);
12157                if inlined != (member_inline_size <= 4) {
12158                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
12159                }
12160                let inner_offset;
12161                let mut inner_depth = depth.clone();
12162                if inlined {
12163                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
12164                    inner_offset = next_offset;
12165                } else {
12166                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
12167                    inner_depth.increment()?;
12168                }
12169                let val_ref =
12170                    self.dhcp6pd_state.get_or_insert_with(|| fidl::new_empty!(Dhcp6PdState, D));
12171                fidl::decode!(Dhcp6PdState, D, val_ref, decoder, inner_offset, inner_depth)?;
12172                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
12173                {
12174                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
12175                }
12176                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
12177                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
12178                }
12179            }
12180
12181            next_offset += envelope_size;
12182            _next_ordinal_to_read += 1;
12183            if next_offset >= end_offset {
12184                return Ok(());
12185            }
12186
12187            // Decode unknown envelopes for gaps in ordinals.
12188            while _next_ordinal_to_read < 2 {
12189                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12190                _next_ordinal_to_read += 1;
12191                next_offset += envelope_size;
12192            }
12193
12194            let next_out_of_line = decoder.next_out_of_line();
12195            let handles_before = decoder.remaining_handles();
12196            if let Some((inlined, num_bytes, num_handles)) =
12197                fidl::encoding::decode_envelope_header(decoder, next_offset)?
12198            {
12199                let member_inline_size =
12200                    <PdProcessedRaInfo as fidl::encoding::TypeMarker>::inline_size(decoder.context);
12201                if inlined != (member_inline_size <= 4) {
12202                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
12203                }
12204                let inner_offset;
12205                let mut inner_depth = depth.clone();
12206                if inlined {
12207                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
12208                    inner_offset = next_offset;
12209                } else {
12210                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
12211                    inner_depth.increment()?;
12212                }
12213                let val_ref = self
12214                    .pd_processed_ra_info
12215                    .get_or_insert_with(|| fidl::new_empty!(PdProcessedRaInfo, D));
12216                fidl::decode!(PdProcessedRaInfo, D, val_ref, decoder, inner_offset, inner_depth)?;
12217                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
12218                {
12219                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
12220                }
12221                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
12222                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
12223                }
12224            }
12225
12226            next_offset += envelope_size;
12227            _next_ordinal_to_read += 1;
12228            if next_offset >= end_offset {
12229                return Ok(());
12230            }
12231
12232            // Decode unknown envelopes for gaps in ordinals.
12233            while _next_ordinal_to_read < 3 {
12234                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12235                _next_ordinal_to_read += 1;
12236                next_offset += envelope_size;
12237            }
12238
12239            let next_out_of_line = decoder.next_out_of_line();
12240            let handles_before = decoder.remaining_handles();
12241            if let Some((inlined, num_bytes, num_handles)) =
12242                fidl::encoding::decode_envelope_header(decoder, next_offset)?
12243            {
12244                let member_inline_size =
12245                    <fidl::encoding::Vector<u8, 32> as fidl::encoding::TypeMarker>::inline_size(
12246                        decoder.context,
12247                    );
12248                if inlined != (member_inline_size <= 4) {
12249                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
12250                }
12251                let inner_offset;
12252                let mut inner_depth = depth.clone();
12253                if inlined {
12254                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
12255                    inner_offset = next_offset;
12256                } else {
12257                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
12258                    inner_depth.increment()?;
12259                }
12260                let val_ref = self
12261                    .hashed_pd_prefix
12262                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u8, 32>, D));
12263                fidl::decode!(fidl::encoding::Vector<u8, 32>, D, val_ref, decoder, inner_offset, inner_depth)?;
12264                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
12265                {
12266                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
12267                }
12268                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
12269                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
12270                }
12271            }
12272
12273            next_offset += envelope_size;
12274
12275            // Decode the remaining unknown envelopes.
12276            while next_offset < end_offset {
12277                _next_ordinal_to_read += 1;
12278                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12279                next_offset += envelope_size;
12280            }
12281
12282            Ok(())
12283        }
12284    }
12285
12286    impl DnsTxtEntry {
12287        #[inline(always)]
12288        fn max_ordinal_present(&self) -> u64 {
12289            if let Some(_) = self.value {
12290                return 2;
12291            }
12292            if let Some(_) = self.key {
12293                return 1;
12294            }
12295            0
12296        }
12297    }
12298
12299    impl fidl::encoding::ValueTypeMarker for DnsTxtEntry {
12300        type Borrowed<'a> = &'a Self;
12301        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
12302            value
12303        }
12304    }
12305
12306    unsafe impl fidl::encoding::TypeMarker for DnsTxtEntry {
12307        type Owned = Self;
12308
12309        #[inline(always)]
12310        fn inline_align(_context: fidl::encoding::Context) -> usize {
12311            8
12312        }
12313
12314        #[inline(always)]
12315        fn inline_size(_context: fidl::encoding::Context) -> usize {
12316            16
12317        }
12318    }
12319
12320    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<DnsTxtEntry, D>
12321        for &DnsTxtEntry
12322    {
12323        unsafe fn encode(
12324            self,
12325            encoder: &mut fidl::encoding::Encoder<'_, D>,
12326            offset: usize,
12327            mut depth: fidl::encoding::Depth,
12328        ) -> fidl::Result<()> {
12329            encoder.debug_check_bounds::<DnsTxtEntry>(offset);
12330            // Vector header
12331            let max_ordinal: u64 = self.max_ordinal_present();
12332            encoder.write_num(max_ordinal, offset);
12333            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
12334            // Calling encoder.out_of_line_offset(0) is not allowed.
12335            if max_ordinal == 0 {
12336                return Ok(());
12337            }
12338            depth.increment()?;
12339            let envelope_size = 8;
12340            let bytes_len = max_ordinal as usize * envelope_size;
12341            #[allow(unused_variables)]
12342            let offset = encoder.out_of_line_offset(bytes_len);
12343            let mut _prev_end_offset: usize = 0;
12344            if 1 > max_ordinal {
12345                return Ok(());
12346            }
12347
12348            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
12349            // are envelope_size bytes.
12350            let cur_offset: usize = (1 - 1) * envelope_size;
12351
12352            // Zero reserved fields.
12353            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
12354
12355            // Safety:
12356            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
12357            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
12358            //   envelope_size bytes, there is always sufficient room.
12359            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<64>, D>(
12360                self.key.as_ref().map(
12361                    <fidl::encoding::BoundedString<64> as fidl::encoding::ValueTypeMarker>::borrow,
12362                ),
12363                encoder,
12364                offset + cur_offset,
12365                depth,
12366            )?;
12367
12368            _prev_end_offset = cur_offset + envelope_size;
12369            if 2 > max_ordinal {
12370                return Ok(());
12371            }
12372
12373            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
12374            // are envelope_size bytes.
12375            let cur_offset: usize = (2 - 1) * envelope_size;
12376
12377            // Zero reserved fields.
12378            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
12379
12380            // Safety:
12381            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
12382            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
12383            //   envelope_size bytes, there is always sufficient room.
12384            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u8, 253>, D>(
12385                self.value.as_ref().map(
12386                    <fidl::encoding::Vector<u8, 253> as fidl::encoding::ValueTypeMarker>::borrow,
12387                ),
12388                encoder,
12389                offset + cur_offset,
12390                depth,
12391            )?;
12392
12393            _prev_end_offset = cur_offset + envelope_size;
12394
12395            Ok(())
12396        }
12397    }
12398
12399    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DnsTxtEntry {
12400        #[inline(always)]
12401        fn new_empty() -> Self {
12402            Self::default()
12403        }
12404
12405        unsafe fn decode(
12406            &mut self,
12407            decoder: &mut fidl::encoding::Decoder<'_, D>,
12408            offset: usize,
12409            mut depth: fidl::encoding::Depth,
12410        ) -> fidl::Result<()> {
12411            decoder.debug_check_bounds::<Self>(offset);
12412            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
12413                None => return Err(fidl::Error::NotNullable),
12414                Some(len) => len,
12415            };
12416            // Calling decoder.out_of_line_offset(0) is not allowed.
12417            if len == 0 {
12418                return Ok(());
12419            };
12420            depth.increment()?;
12421            let envelope_size = 8;
12422            let bytes_len = len * envelope_size;
12423            let offset = decoder.out_of_line_offset(bytes_len)?;
12424            // Decode the envelope for each type.
12425            let mut _next_ordinal_to_read = 0;
12426            let mut next_offset = offset;
12427            let end_offset = offset + bytes_len;
12428            _next_ordinal_to_read += 1;
12429            if next_offset >= end_offset {
12430                return Ok(());
12431            }
12432
12433            // Decode unknown envelopes for gaps in ordinals.
12434            while _next_ordinal_to_read < 1 {
12435                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12436                _next_ordinal_to_read += 1;
12437                next_offset += envelope_size;
12438            }
12439
12440            let next_out_of_line = decoder.next_out_of_line();
12441            let handles_before = decoder.remaining_handles();
12442            if let Some((inlined, num_bytes, num_handles)) =
12443                fidl::encoding::decode_envelope_header(decoder, next_offset)?
12444            {
12445                let member_inline_size =
12446                    <fidl::encoding::BoundedString<64> as fidl::encoding::TypeMarker>::inline_size(
12447                        decoder.context,
12448                    );
12449                if inlined != (member_inline_size <= 4) {
12450                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
12451                }
12452                let inner_offset;
12453                let mut inner_depth = depth.clone();
12454                if inlined {
12455                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
12456                    inner_offset = next_offset;
12457                } else {
12458                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
12459                    inner_depth.increment()?;
12460                }
12461                let val_ref = self
12462                    .key
12463                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<64>, D));
12464                fidl::decode!(
12465                    fidl::encoding::BoundedString<64>,
12466                    D,
12467                    val_ref,
12468                    decoder,
12469                    inner_offset,
12470                    inner_depth
12471                )?;
12472                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
12473                {
12474                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
12475                }
12476                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
12477                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
12478                }
12479            }
12480
12481            next_offset += envelope_size;
12482            _next_ordinal_to_read += 1;
12483            if next_offset >= end_offset {
12484                return Ok(());
12485            }
12486
12487            // Decode unknown envelopes for gaps in ordinals.
12488            while _next_ordinal_to_read < 2 {
12489                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12490                _next_ordinal_to_read += 1;
12491                next_offset += envelope_size;
12492            }
12493
12494            let next_out_of_line = decoder.next_out_of_line();
12495            let handles_before = decoder.remaining_handles();
12496            if let Some((inlined, num_bytes, num_handles)) =
12497                fidl::encoding::decode_envelope_header(decoder, next_offset)?
12498            {
12499                let member_inline_size =
12500                    <fidl::encoding::Vector<u8, 253> as fidl::encoding::TypeMarker>::inline_size(
12501                        decoder.context,
12502                    );
12503                if inlined != (member_inline_size <= 4) {
12504                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
12505                }
12506                let inner_offset;
12507                let mut inner_depth = depth.clone();
12508                if inlined {
12509                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
12510                    inner_offset = next_offset;
12511                } else {
12512                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
12513                    inner_depth.increment()?;
12514                }
12515                let val_ref = self
12516                    .value
12517                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u8, 253>, D));
12518                fidl::decode!(fidl::encoding::Vector<u8, 253>, D, val_ref, decoder, inner_offset, inner_depth)?;
12519                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
12520                {
12521                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
12522                }
12523                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
12524                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
12525                }
12526            }
12527
12528            next_offset += envelope_size;
12529
12530            // Decode the remaining unknown envelopes.
12531            while next_offset < end_offset {
12532                _next_ordinal_to_read += 1;
12533                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12534                next_offset += envelope_size;
12535            }
12536
12537            Ok(())
12538        }
12539    }
12540
12541    impl DnssdCounters {
12542        #[inline(always)]
12543        fn max_ordinal_present(&self) -> u64 {
12544            if let Some(_) = self.upstream_dns_counters {
12545                return 8;
12546            }
12547            if let Some(_) = self.resolved_by_srp {
12548                return 7;
12549            }
12550            if let Some(_) = self.other_response {
12551                return 6;
12552            }
12553            if let Some(_) = self.not_implemented_response {
12554                return 5;
12555            }
12556            if let Some(_) = self.name_error_response {
12557                return 4;
12558            }
12559            if let Some(_) = self.format_error_response {
12560                return 3;
12561            }
12562            if let Some(_) = self.server_failure_response {
12563                return 2;
12564            }
12565            if let Some(_) = self.success_response {
12566                return 1;
12567            }
12568            0
12569        }
12570    }
12571
12572    impl fidl::encoding::ValueTypeMarker for DnssdCounters {
12573        type Borrowed<'a> = &'a Self;
12574        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
12575            value
12576        }
12577    }
12578
12579    unsafe impl fidl::encoding::TypeMarker for DnssdCounters {
12580        type Owned = Self;
12581
12582        #[inline(always)]
12583        fn inline_align(_context: fidl::encoding::Context) -> usize {
12584            8
12585        }
12586
12587        #[inline(always)]
12588        fn inline_size(_context: fidl::encoding::Context) -> usize {
12589            16
12590        }
12591    }
12592
12593    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<DnssdCounters, D>
12594        for &DnssdCounters
12595    {
12596        unsafe fn encode(
12597            self,
12598            encoder: &mut fidl::encoding::Encoder<'_, D>,
12599            offset: usize,
12600            mut depth: fidl::encoding::Depth,
12601        ) -> fidl::Result<()> {
12602            encoder.debug_check_bounds::<DnssdCounters>(offset);
12603            // Vector header
12604            let max_ordinal: u64 = self.max_ordinal_present();
12605            encoder.write_num(max_ordinal, offset);
12606            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
12607            // Calling encoder.out_of_line_offset(0) is not allowed.
12608            if max_ordinal == 0 {
12609                return Ok(());
12610            }
12611            depth.increment()?;
12612            let envelope_size = 8;
12613            let bytes_len = max_ordinal as usize * envelope_size;
12614            #[allow(unused_variables)]
12615            let offset = encoder.out_of_line_offset(bytes_len);
12616            let mut _prev_end_offset: usize = 0;
12617            if 1 > max_ordinal {
12618                return Ok(());
12619            }
12620
12621            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
12622            // are envelope_size bytes.
12623            let cur_offset: usize = (1 - 1) * envelope_size;
12624
12625            // Zero reserved fields.
12626            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
12627
12628            // Safety:
12629            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
12630            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
12631            //   envelope_size bytes, there is always sufficient room.
12632            fidl::encoding::encode_in_envelope_optional::<u32, D>(
12633                self.success_response
12634                    .as_ref()
12635                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
12636                encoder,
12637                offset + cur_offset,
12638                depth,
12639            )?;
12640
12641            _prev_end_offset = cur_offset + envelope_size;
12642            if 2 > max_ordinal {
12643                return Ok(());
12644            }
12645
12646            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
12647            // are envelope_size bytes.
12648            let cur_offset: usize = (2 - 1) * envelope_size;
12649
12650            // Zero reserved fields.
12651            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
12652
12653            // Safety:
12654            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
12655            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
12656            //   envelope_size bytes, there is always sufficient room.
12657            fidl::encoding::encode_in_envelope_optional::<u32, D>(
12658                self.server_failure_response
12659                    .as_ref()
12660                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
12661                encoder,
12662                offset + cur_offset,
12663                depth,
12664            )?;
12665
12666            _prev_end_offset = cur_offset + envelope_size;
12667            if 3 > max_ordinal {
12668                return Ok(());
12669            }
12670
12671            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
12672            // are envelope_size bytes.
12673            let cur_offset: usize = (3 - 1) * envelope_size;
12674
12675            // Zero reserved fields.
12676            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
12677
12678            // Safety:
12679            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
12680            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
12681            //   envelope_size bytes, there is always sufficient room.
12682            fidl::encoding::encode_in_envelope_optional::<u32, D>(
12683                self.format_error_response
12684                    .as_ref()
12685                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
12686                encoder,
12687                offset + cur_offset,
12688                depth,
12689            )?;
12690
12691            _prev_end_offset = cur_offset + envelope_size;
12692            if 4 > max_ordinal {
12693                return Ok(());
12694            }
12695
12696            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
12697            // are envelope_size bytes.
12698            let cur_offset: usize = (4 - 1) * envelope_size;
12699
12700            // Zero reserved fields.
12701            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
12702
12703            // Safety:
12704            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
12705            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
12706            //   envelope_size bytes, there is always sufficient room.
12707            fidl::encoding::encode_in_envelope_optional::<u32, D>(
12708                self.name_error_response
12709                    .as_ref()
12710                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
12711                encoder,
12712                offset + cur_offset,
12713                depth,
12714            )?;
12715
12716            _prev_end_offset = cur_offset + envelope_size;
12717            if 5 > max_ordinal {
12718                return Ok(());
12719            }
12720
12721            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
12722            // are envelope_size bytes.
12723            let cur_offset: usize = (5 - 1) * envelope_size;
12724
12725            // Zero reserved fields.
12726            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
12727
12728            // Safety:
12729            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
12730            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
12731            //   envelope_size bytes, there is always sufficient room.
12732            fidl::encoding::encode_in_envelope_optional::<u32, D>(
12733                self.not_implemented_response
12734                    .as_ref()
12735                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
12736                encoder,
12737                offset + cur_offset,
12738                depth,
12739            )?;
12740
12741            _prev_end_offset = cur_offset + envelope_size;
12742            if 6 > max_ordinal {
12743                return Ok(());
12744            }
12745
12746            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
12747            // are envelope_size bytes.
12748            let cur_offset: usize = (6 - 1) * envelope_size;
12749
12750            // Zero reserved fields.
12751            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
12752
12753            // Safety:
12754            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
12755            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
12756            //   envelope_size bytes, there is always sufficient room.
12757            fidl::encoding::encode_in_envelope_optional::<u32, D>(
12758                self.other_response.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
12759                encoder,
12760                offset + cur_offset,
12761                depth,
12762            )?;
12763
12764            _prev_end_offset = cur_offset + envelope_size;
12765            if 7 > max_ordinal {
12766                return Ok(());
12767            }
12768
12769            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
12770            // are envelope_size bytes.
12771            let cur_offset: usize = (7 - 1) * envelope_size;
12772
12773            // Zero reserved fields.
12774            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
12775
12776            // Safety:
12777            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
12778            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
12779            //   envelope_size bytes, there is always sufficient room.
12780            fidl::encoding::encode_in_envelope_optional::<u32, D>(
12781                self.resolved_by_srp.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
12782                encoder,
12783                offset + cur_offset,
12784                depth,
12785            )?;
12786
12787            _prev_end_offset = cur_offset + envelope_size;
12788            if 8 > max_ordinal {
12789                return Ok(());
12790            }
12791
12792            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
12793            // are envelope_size bytes.
12794            let cur_offset: usize = (8 - 1) * envelope_size;
12795
12796            // Zero reserved fields.
12797            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
12798
12799            // Safety:
12800            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
12801            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
12802            //   envelope_size bytes, there is always sufficient room.
12803            fidl::encoding::encode_in_envelope_optional::<UpstreamDnsCounters, D>(
12804                self.upstream_dns_counters
12805                    .as_ref()
12806                    .map(<UpstreamDnsCounters as fidl::encoding::ValueTypeMarker>::borrow),
12807                encoder,
12808                offset + cur_offset,
12809                depth,
12810            )?;
12811
12812            _prev_end_offset = cur_offset + envelope_size;
12813
12814            Ok(())
12815        }
12816    }
12817
12818    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DnssdCounters {
12819        #[inline(always)]
12820        fn new_empty() -> Self {
12821            Self::default()
12822        }
12823
12824        unsafe fn decode(
12825            &mut self,
12826            decoder: &mut fidl::encoding::Decoder<'_, D>,
12827            offset: usize,
12828            mut depth: fidl::encoding::Depth,
12829        ) -> fidl::Result<()> {
12830            decoder.debug_check_bounds::<Self>(offset);
12831            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
12832                None => return Err(fidl::Error::NotNullable),
12833                Some(len) => len,
12834            };
12835            // Calling decoder.out_of_line_offset(0) is not allowed.
12836            if len == 0 {
12837                return Ok(());
12838            };
12839            depth.increment()?;
12840            let envelope_size = 8;
12841            let bytes_len = len * envelope_size;
12842            let offset = decoder.out_of_line_offset(bytes_len)?;
12843            // Decode the envelope for each type.
12844            let mut _next_ordinal_to_read = 0;
12845            let mut next_offset = offset;
12846            let end_offset = offset + bytes_len;
12847            _next_ordinal_to_read += 1;
12848            if next_offset >= end_offset {
12849                return Ok(());
12850            }
12851
12852            // Decode unknown envelopes for gaps in ordinals.
12853            while _next_ordinal_to_read < 1 {
12854                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12855                _next_ordinal_to_read += 1;
12856                next_offset += envelope_size;
12857            }
12858
12859            let next_out_of_line = decoder.next_out_of_line();
12860            let handles_before = decoder.remaining_handles();
12861            if let Some((inlined, num_bytes, num_handles)) =
12862                fidl::encoding::decode_envelope_header(decoder, next_offset)?
12863            {
12864                let member_inline_size =
12865                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
12866                if inlined != (member_inline_size <= 4) {
12867                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
12868                }
12869                let inner_offset;
12870                let mut inner_depth = depth.clone();
12871                if inlined {
12872                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
12873                    inner_offset = next_offset;
12874                } else {
12875                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
12876                    inner_depth.increment()?;
12877                }
12878                let val_ref = self.success_response.get_or_insert_with(|| fidl::new_empty!(u32, D));
12879                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
12880                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
12881                {
12882                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
12883                }
12884                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
12885                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
12886                }
12887            }
12888
12889            next_offset += envelope_size;
12890            _next_ordinal_to_read += 1;
12891            if next_offset >= end_offset {
12892                return Ok(());
12893            }
12894
12895            // Decode unknown envelopes for gaps in ordinals.
12896            while _next_ordinal_to_read < 2 {
12897                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12898                _next_ordinal_to_read += 1;
12899                next_offset += envelope_size;
12900            }
12901
12902            let next_out_of_line = decoder.next_out_of_line();
12903            let handles_before = decoder.remaining_handles();
12904            if let Some((inlined, num_bytes, num_handles)) =
12905                fidl::encoding::decode_envelope_header(decoder, next_offset)?
12906            {
12907                let member_inline_size =
12908                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
12909                if inlined != (member_inline_size <= 4) {
12910                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
12911                }
12912                let inner_offset;
12913                let mut inner_depth = depth.clone();
12914                if inlined {
12915                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
12916                    inner_offset = next_offset;
12917                } else {
12918                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
12919                    inner_depth.increment()?;
12920                }
12921                let val_ref =
12922                    self.server_failure_response.get_or_insert_with(|| fidl::new_empty!(u32, D));
12923                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
12924                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
12925                {
12926                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
12927                }
12928                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
12929                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
12930                }
12931            }
12932
12933            next_offset += envelope_size;
12934            _next_ordinal_to_read += 1;
12935            if next_offset >= end_offset {
12936                return Ok(());
12937            }
12938
12939            // Decode unknown envelopes for gaps in ordinals.
12940            while _next_ordinal_to_read < 3 {
12941                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12942                _next_ordinal_to_read += 1;
12943                next_offset += envelope_size;
12944            }
12945
12946            let next_out_of_line = decoder.next_out_of_line();
12947            let handles_before = decoder.remaining_handles();
12948            if let Some((inlined, num_bytes, num_handles)) =
12949                fidl::encoding::decode_envelope_header(decoder, next_offset)?
12950            {
12951                let member_inline_size =
12952                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
12953                if inlined != (member_inline_size <= 4) {
12954                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
12955                }
12956                let inner_offset;
12957                let mut inner_depth = depth.clone();
12958                if inlined {
12959                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
12960                    inner_offset = next_offset;
12961                } else {
12962                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
12963                    inner_depth.increment()?;
12964                }
12965                let val_ref =
12966                    self.format_error_response.get_or_insert_with(|| fidl::new_empty!(u32, D));
12967                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
12968                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
12969                {
12970                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
12971                }
12972                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
12973                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
12974                }
12975            }
12976
12977            next_offset += envelope_size;
12978            _next_ordinal_to_read += 1;
12979            if next_offset >= end_offset {
12980                return Ok(());
12981            }
12982
12983            // Decode unknown envelopes for gaps in ordinals.
12984            while _next_ordinal_to_read < 4 {
12985                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12986                _next_ordinal_to_read += 1;
12987                next_offset += envelope_size;
12988            }
12989
12990            let next_out_of_line = decoder.next_out_of_line();
12991            let handles_before = decoder.remaining_handles();
12992            if let Some((inlined, num_bytes, num_handles)) =
12993                fidl::encoding::decode_envelope_header(decoder, next_offset)?
12994            {
12995                let member_inline_size =
12996                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
12997                if inlined != (member_inline_size <= 4) {
12998                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
12999                }
13000                let inner_offset;
13001                let mut inner_depth = depth.clone();
13002                if inlined {
13003                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
13004                    inner_offset = next_offset;
13005                } else {
13006                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
13007                    inner_depth.increment()?;
13008                }
13009                let val_ref =
13010                    self.name_error_response.get_or_insert_with(|| fidl::new_empty!(u32, D));
13011                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
13012                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
13013                {
13014                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
13015                }
13016                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
13017                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
13018                }
13019            }
13020
13021            next_offset += envelope_size;
13022            _next_ordinal_to_read += 1;
13023            if next_offset >= end_offset {
13024                return Ok(());
13025            }
13026
13027            // Decode unknown envelopes for gaps in ordinals.
13028            while _next_ordinal_to_read < 5 {
13029                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
13030                _next_ordinal_to_read += 1;
13031                next_offset += envelope_size;
13032            }
13033
13034            let next_out_of_line = decoder.next_out_of_line();
13035            let handles_before = decoder.remaining_handles();
13036            if let Some((inlined, num_bytes, num_handles)) =
13037                fidl::encoding::decode_envelope_header(decoder, next_offset)?
13038            {
13039                let member_inline_size =
13040                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
13041                if inlined != (member_inline_size <= 4) {
13042                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
13043                }
13044                let inner_offset;
13045                let mut inner_depth = depth.clone();
13046                if inlined {
13047                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
13048                    inner_offset = next_offset;
13049                } else {
13050                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
13051                    inner_depth.increment()?;
13052                }
13053                let val_ref =
13054                    self.not_implemented_response.get_or_insert_with(|| fidl::new_empty!(u32, D));
13055                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
13056                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
13057                {
13058                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
13059                }
13060                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
13061                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
13062                }
13063            }
13064
13065            next_offset += envelope_size;
13066            _next_ordinal_to_read += 1;
13067            if next_offset >= end_offset {
13068                return Ok(());
13069            }
13070
13071            // Decode unknown envelopes for gaps in ordinals.
13072            while _next_ordinal_to_read < 6 {
13073                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
13074                _next_ordinal_to_read += 1;
13075                next_offset += envelope_size;
13076            }
13077
13078            let next_out_of_line = decoder.next_out_of_line();
13079            let handles_before = decoder.remaining_handles();
13080            if let Some((inlined, num_bytes, num_handles)) =
13081                fidl::encoding::decode_envelope_header(decoder, next_offset)?
13082            {
13083                let member_inline_size =
13084                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
13085                if inlined != (member_inline_size <= 4) {
13086                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
13087                }
13088                let inner_offset;
13089                let mut inner_depth = depth.clone();
13090                if inlined {
13091                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
13092                    inner_offset = next_offset;
13093                } else {
13094                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
13095                    inner_depth.increment()?;
13096                }
13097                let val_ref = self.other_response.get_or_insert_with(|| fidl::new_empty!(u32, D));
13098                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
13099                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
13100                {
13101                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
13102                }
13103                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
13104                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
13105                }
13106            }
13107
13108            next_offset += envelope_size;
13109            _next_ordinal_to_read += 1;
13110            if next_offset >= end_offset {
13111                return Ok(());
13112            }
13113
13114            // Decode unknown envelopes for gaps in ordinals.
13115            while _next_ordinal_to_read < 7 {
13116                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
13117                _next_ordinal_to_read += 1;
13118                next_offset += envelope_size;
13119            }
13120
13121            let next_out_of_line = decoder.next_out_of_line();
13122            let handles_before = decoder.remaining_handles();
13123            if let Some((inlined, num_bytes, num_handles)) =
13124                fidl::encoding::decode_envelope_header(decoder, next_offset)?
13125            {
13126                let member_inline_size =
13127                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
13128                if inlined != (member_inline_size <= 4) {
13129                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
13130                }
13131                let inner_offset;
13132                let mut inner_depth = depth.clone();
13133                if inlined {
13134                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
13135                    inner_offset = next_offset;
13136                } else {
13137                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
13138                    inner_depth.increment()?;
13139                }
13140                let val_ref = self.resolved_by_srp.get_or_insert_with(|| fidl::new_empty!(u32, D));
13141                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
13142                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
13143                {
13144                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
13145                }
13146                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
13147                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
13148                }
13149            }
13150
13151            next_offset += envelope_size;
13152            _next_ordinal_to_read += 1;
13153            if next_offset >= end_offset {
13154                return Ok(());
13155            }
13156
13157            // Decode unknown envelopes for gaps in ordinals.
13158            while _next_ordinal_to_read < 8 {
13159                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
13160                _next_ordinal_to_read += 1;
13161                next_offset += envelope_size;
13162            }
13163
13164            let next_out_of_line = decoder.next_out_of_line();
13165            let handles_before = decoder.remaining_handles();
13166            if let Some((inlined, num_bytes, num_handles)) =
13167                fidl::encoding::decode_envelope_header(decoder, next_offset)?
13168            {
13169                let member_inline_size =
13170                    <UpstreamDnsCounters as fidl::encoding::TypeMarker>::inline_size(
13171                        decoder.context,
13172                    );
13173                if inlined != (member_inline_size <= 4) {
13174                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
13175                }
13176                let inner_offset;
13177                let mut inner_depth = depth.clone();
13178                if inlined {
13179                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
13180                    inner_offset = next_offset;
13181                } else {
13182                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
13183                    inner_depth.increment()?;
13184                }
13185                let val_ref = self
13186                    .upstream_dns_counters
13187                    .get_or_insert_with(|| fidl::new_empty!(UpstreamDnsCounters, D));
13188                fidl::decode!(UpstreamDnsCounters, D, val_ref, decoder, inner_offset, inner_depth)?;
13189                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
13190                {
13191                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
13192                }
13193                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
13194                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
13195                }
13196            }
13197
13198            next_offset += envelope_size;
13199
13200            // Decode the remaining unknown envelopes.
13201            while next_offset < end_offset {
13202                _next_ordinal_to_read += 1;
13203                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
13204                next_offset += envelope_size;
13205            }
13206
13207            Ok(())
13208        }
13209    }
13210
13211    impl EidCacheEntry {
13212        #[inline(always)]
13213        fn max_ordinal_present(&self) -> u64 {
13214            if let Some(_) = self.retry_delay {
13215                return 10;
13216            }
13217            if let Some(_) = self.timeout {
13218                return 9;
13219            }
13220            if let Some(_) = self.mesh_local_eid {
13221                return 8;
13222            }
13223            if let Some(_) = self.last_trans_time {
13224                return 7;
13225            }
13226            if let Some(_) = self.valid_last_trans {
13227                return 6;
13228            }
13229            if let Some(_) = self.ramp_down {
13230                return 5;
13231            }
13232            if let Some(_) = self.can_evict {
13233                return 4;
13234            }
13235            if let Some(_) = self.state {
13236                return 3;
13237            }
13238            if let Some(_) = self.rloc16 {
13239                return 2;
13240            }
13241            if let Some(_) = self.target {
13242                return 1;
13243            }
13244            0
13245        }
13246    }
13247
13248    impl fidl::encoding::ValueTypeMarker for EidCacheEntry {
13249        type Borrowed<'a> = &'a Self;
13250        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
13251            value
13252        }
13253    }
13254
13255    unsafe impl fidl::encoding::TypeMarker for EidCacheEntry {
13256        type Owned = Self;
13257
13258        #[inline(always)]
13259        fn inline_align(_context: fidl::encoding::Context) -> usize {
13260            8
13261        }
13262
13263        #[inline(always)]
13264        fn inline_size(_context: fidl::encoding::Context) -> usize {
13265            16
13266        }
13267    }
13268
13269    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<EidCacheEntry, D>
13270        for &EidCacheEntry
13271    {
13272        unsafe fn encode(
13273            self,
13274            encoder: &mut fidl::encoding::Encoder<'_, D>,
13275            offset: usize,
13276            mut depth: fidl::encoding::Depth,
13277        ) -> fidl::Result<()> {
13278            encoder.debug_check_bounds::<EidCacheEntry>(offset);
13279            // Vector header
13280            let max_ordinal: u64 = self.max_ordinal_present();
13281            encoder.write_num(max_ordinal, offset);
13282            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
13283            // Calling encoder.out_of_line_offset(0) is not allowed.
13284            if max_ordinal == 0 {
13285                return Ok(());
13286            }
13287            depth.increment()?;
13288            let envelope_size = 8;
13289            let bytes_len = max_ordinal as usize * envelope_size;
13290            #[allow(unused_variables)]
13291            let offset = encoder.out_of_line_offset(bytes_len);
13292            let mut _prev_end_offset: usize = 0;
13293            if 1 > max_ordinal {
13294                return Ok(());
13295            }
13296
13297            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13298            // are envelope_size bytes.
13299            let cur_offset: usize = (1 - 1) * envelope_size;
13300
13301            // Zero reserved fields.
13302            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13303
13304            // Safety:
13305            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13306            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13307            //   envelope_size bytes, there is always sufficient room.
13308            fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_net_common::Ipv6Address, D>(
13309            self.target.as_ref().map(<fidl_fuchsia_net_common::Ipv6Address as fidl::encoding::ValueTypeMarker>::borrow),
13310            encoder, offset + cur_offset, depth
13311        )?;
13312
13313            _prev_end_offset = cur_offset + envelope_size;
13314            if 2 > max_ordinal {
13315                return Ok(());
13316            }
13317
13318            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13319            // are envelope_size bytes.
13320            let cur_offset: usize = (2 - 1) * envelope_size;
13321
13322            // Zero reserved fields.
13323            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13324
13325            // Safety:
13326            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13327            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13328            //   envelope_size bytes, there is always sufficient room.
13329            fidl::encoding::encode_in_envelope_optional::<u16, D>(
13330                self.rloc16.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
13331                encoder,
13332                offset + cur_offset,
13333                depth,
13334            )?;
13335
13336            _prev_end_offset = cur_offset + envelope_size;
13337            if 3 > max_ordinal {
13338                return Ok(());
13339            }
13340
13341            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13342            // are envelope_size bytes.
13343            let cur_offset: usize = (3 - 1) * envelope_size;
13344
13345            // Zero reserved fields.
13346            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13347
13348            // Safety:
13349            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13350            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13351            //   envelope_size bytes, there is always sufficient room.
13352            fidl::encoding::encode_in_envelope_optional::<CacheEntryState, D>(
13353                self.state
13354                    .as_ref()
13355                    .map(<CacheEntryState as fidl::encoding::ValueTypeMarker>::borrow),
13356                encoder,
13357                offset + cur_offset,
13358                depth,
13359            )?;
13360
13361            _prev_end_offset = cur_offset + envelope_size;
13362            if 4 > max_ordinal {
13363                return Ok(());
13364            }
13365
13366            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13367            // are envelope_size bytes.
13368            let cur_offset: usize = (4 - 1) * envelope_size;
13369
13370            // Zero reserved fields.
13371            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13372
13373            // Safety:
13374            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13375            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13376            //   envelope_size bytes, there is always sufficient room.
13377            fidl::encoding::encode_in_envelope_optional::<bool, D>(
13378                self.can_evict.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
13379                encoder,
13380                offset + cur_offset,
13381                depth,
13382            )?;
13383
13384            _prev_end_offset = cur_offset + envelope_size;
13385            if 5 > max_ordinal {
13386                return Ok(());
13387            }
13388
13389            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13390            // are envelope_size bytes.
13391            let cur_offset: usize = (5 - 1) * envelope_size;
13392
13393            // Zero reserved fields.
13394            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13395
13396            // Safety:
13397            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13398            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13399            //   envelope_size bytes, there is always sufficient room.
13400            fidl::encoding::encode_in_envelope_optional::<bool, D>(
13401                self.ramp_down.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
13402                encoder,
13403                offset + cur_offset,
13404                depth,
13405            )?;
13406
13407            _prev_end_offset = cur_offset + envelope_size;
13408            if 6 > max_ordinal {
13409                return Ok(());
13410            }
13411
13412            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13413            // are envelope_size bytes.
13414            let cur_offset: usize = (6 - 1) * envelope_size;
13415
13416            // Zero reserved fields.
13417            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13418
13419            // Safety:
13420            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13421            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13422            //   envelope_size bytes, there is always sufficient room.
13423            fidl::encoding::encode_in_envelope_optional::<bool, D>(
13424                self.valid_last_trans
13425                    .as_ref()
13426                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
13427                encoder,
13428                offset + cur_offset,
13429                depth,
13430            )?;
13431
13432            _prev_end_offset = cur_offset + envelope_size;
13433            if 7 > max_ordinal {
13434                return Ok(());
13435            }
13436
13437            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13438            // are envelope_size bytes.
13439            let cur_offset: usize = (7 - 1) * envelope_size;
13440
13441            // Zero reserved fields.
13442            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13443
13444            // Safety:
13445            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13446            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13447            //   envelope_size bytes, there is always sufficient room.
13448            fidl::encoding::encode_in_envelope_optional::<i64, D>(
13449                self.last_trans_time.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
13450                encoder,
13451                offset + cur_offset,
13452                depth,
13453            )?;
13454
13455            _prev_end_offset = cur_offset + envelope_size;
13456            if 8 > max_ordinal {
13457                return Ok(());
13458            }
13459
13460            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13461            // are envelope_size bytes.
13462            let cur_offset: usize = (8 - 1) * envelope_size;
13463
13464            // Zero reserved fields.
13465            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13466
13467            // Safety:
13468            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13469            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13470            //   envelope_size bytes, there is always sufficient room.
13471            fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_net_common::Ipv6Address, D>(
13472            self.mesh_local_eid.as_ref().map(<fidl_fuchsia_net_common::Ipv6Address as fidl::encoding::ValueTypeMarker>::borrow),
13473            encoder, offset + cur_offset, depth
13474        )?;
13475
13476            _prev_end_offset = cur_offset + envelope_size;
13477            if 9 > max_ordinal {
13478                return Ok(());
13479            }
13480
13481            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13482            // are envelope_size bytes.
13483            let cur_offset: usize = (9 - 1) * envelope_size;
13484
13485            // Zero reserved fields.
13486            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13487
13488            // Safety:
13489            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13490            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13491            //   envelope_size bytes, there is always sufficient room.
13492            fidl::encoding::encode_in_envelope_optional::<i64, D>(
13493                self.timeout.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
13494                encoder,
13495                offset + cur_offset,
13496                depth,
13497            )?;
13498
13499            _prev_end_offset = cur_offset + envelope_size;
13500            if 10 > max_ordinal {
13501                return Ok(());
13502            }
13503
13504            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13505            // are envelope_size bytes.
13506            let cur_offset: usize = (10 - 1) * envelope_size;
13507
13508            // Zero reserved fields.
13509            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13510
13511            // Safety:
13512            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13513            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13514            //   envelope_size bytes, there is always sufficient room.
13515            fidl::encoding::encode_in_envelope_optional::<i64, D>(
13516                self.retry_delay.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
13517                encoder,
13518                offset + cur_offset,
13519                depth,
13520            )?;
13521
13522            _prev_end_offset = cur_offset + envelope_size;
13523
13524            Ok(())
13525        }
13526    }
13527
13528    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for EidCacheEntry {
13529        #[inline(always)]
13530        fn new_empty() -> Self {
13531            Self::default()
13532        }
13533
13534        unsafe fn decode(
13535            &mut self,
13536            decoder: &mut fidl::encoding::Decoder<'_, D>,
13537            offset: usize,
13538            mut depth: fidl::encoding::Depth,
13539        ) -> fidl::Result<()> {
13540            decoder.debug_check_bounds::<Self>(offset);
13541            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
13542                None => return Err(fidl::Error::NotNullable),
13543                Some(len) => len,
13544            };
13545            // Calling decoder.out_of_line_offset(0) is not allowed.
13546            if len == 0 {
13547                return Ok(());
13548            };
13549            depth.increment()?;
13550            let envelope_size = 8;
13551            let bytes_len = len * envelope_size;
13552            let offset = decoder.out_of_line_offset(bytes_len)?;
13553            // Decode the envelope for each type.
13554            let mut _next_ordinal_to_read = 0;
13555            let mut next_offset = offset;
13556            let end_offset = offset + bytes_len;
13557            _next_ordinal_to_read += 1;
13558            if next_offset >= end_offset {
13559                return Ok(());
13560            }
13561
13562            // Decode unknown envelopes for gaps in ordinals.
13563            while _next_ordinal_to_read < 1 {
13564                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
13565                _next_ordinal_to_read += 1;
13566                next_offset += envelope_size;
13567            }
13568
13569            let next_out_of_line = decoder.next_out_of_line();
13570            let handles_before = decoder.remaining_handles();
13571            if let Some((inlined, num_bytes, num_handles)) =
13572                fidl::encoding::decode_envelope_header(decoder, next_offset)?
13573            {
13574                let member_inline_size = <fidl_fuchsia_net_common::Ipv6Address as fidl::encoding::TypeMarker>::inline_size(decoder.context);
13575                if inlined != (member_inline_size <= 4) {
13576                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
13577                }
13578                let inner_offset;
13579                let mut inner_depth = depth.clone();
13580                if inlined {
13581                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
13582                    inner_offset = next_offset;
13583                } else {
13584                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
13585                    inner_depth.increment()?;
13586                }
13587                let val_ref = self.target.get_or_insert_with(|| {
13588                    fidl::new_empty!(fidl_fuchsia_net_common::Ipv6Address, D)
13589                });
13590                fidl::decode!(
13591                    fidl_fuchsia_net_common::Ipv6Address,
13592                    D,
13593                    val_ref,
13594                    decoder,
13595                    inner_offset,
13596                    inner_depth
13597                )?;
13598                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
13599                {
13600                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
13601                }
13602                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
13603                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
13604                }
13605            }
13606
13607            next_offset += envelope_size;
13608            _next_ordinal_to_read += 1;
13609            if next_offset >= end_offset {
13610                return Ok(());
13611            }
13612
13613            // Decode unknown envelopes for gaps in ordinals.
13614            while _next_ordinal_to_read < 2 {
13615                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
13616                _next_ordinal_to_read += 1;
13617                next_offset += envelope_size;
13618            }
13619
13620            let next_out_of_line = decoder.next_out_of_line();
13621            let handles_before = decoder.remaining_handles();
13622            if let Some((inlined, num_bytes, num_handles)) =
13623                fidl::encoding::decode_envelope_header(decoder, next_offset)?
13624            {
13625                let member_inline_size =
13626                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
13627                if inlined != (member_inline_size <= 4) {
13628                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
13629                }
13630                let inner_offset;
13631                let mut inner_depth = depth.clone();
13632                if inlined {
13633                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
13634                    inner_offset = next_offset;
13635                } else {
13636                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
13637                    inner_depth.increment()?;
13638                }
13639                let val_ref = self.rloc16.get_or_insert_with(|| fidl::new_empty!(u16, D));
13640                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
13641                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
13642                {
13643                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
13644                }
13645                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
13646                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
13647                }
13648            }
13649
13650            next_offset += envelope_size;
13651            _next_ordinal_to_read += 1;
13652            if next_offset >= end_offset {
13653                return Ok(());
13654            }
13655
13656            // Decode unknown envelopes for gaps in ordinals.
13657            while _next_ordinal_to_read < 3 {
13658                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
13659                _next_ordinal_to_read += 1;
13660                next_offset += envelope_size;
13661            }
13662
13663            let next_out_of_line = decoder.next_out_of_line();
13664            let handles_before = decoder.remaining_handles();
13665            if let Some((inlined, num_bytes, num_handles)) =
13666                fidl::encoding::decode_envelope_header(decoder, next_offset)?
13667            {
13668                let member_inline_size =
13669                    <CacheEntryState as fidl::encoding::TypeMarker>::inline_size(decoder.context);
13670                if inlined != (member_inline_size <= 4) {
13671                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
13672                }
13673                let inner_offset;
13674                let mut inner_depth = depth.clone();
13675                if inlined {
13676                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
13677                    inner_offset = next_offset;
13678                } else {
13679                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
13680                    inner_depth.increment()?;
13681                }
13682                let val_ref =
13683                    self.state.get_or_insert_with(|| fidl::new_empty!(CacheEntryState, D));
13684                fidl::decode!(CacheEntryState, D, val_ref, decoder, inner_offset, inner_depth)?;
13685                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
13686                {
13687                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
13688                }
13689                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
13690                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
13691                }
13692            }
13693
13694            next_offset += envelope_size;
13695            _next_ordinal_to_read += 1;
13696            if next_offset >= end_offset {
13697                return Ok(());
13698            }
13699
13700            // Decode unknown envelopes for gaps in ordinals.
13701            while _next_ordinal_to_read < 4 {
13702                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
13703                _next_ordinal_to_read += 1;
13704                next_offset += envelope_size;
13705            }
13706
13707            let next_out_of_line = decoder.next_out_of_line();
13708            let handles_before = decoder.remaining_handles();
13709            if let Some((inlined, num_bytes, num_handles)) =
13710                fidl::encoding::decode_envelope_header(decoder, next_offset)?
13711            {
13712                let member_inline_size =
13713                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
13714                if inlined != (member_inline_size <= 4) {
13715                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
13716                }
13717                let inner_offset;
13718                let mut inner_depth = depth.clone();
13719                if inlined {
13720                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
13721                    inner_offset = next_offset;
13722                } else {
13723                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
13724                    inner_depth.increment()?;
13725                }
13726                let val_ref = self.can_evict.get_or_insert_with(|| fidl::new_empty!(bool, D));
13727                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
13728                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
13729                {
13730                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
13731                }
13732                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
13733                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
13734                }
13735            }
13736
13737            next_offset += envelope_size;
13738            _next_ordinal_to_read += 1;
13739            if next_offset >= end_offset {
13740                return Ok(());
13741            }
13742
13743            // Decode unknown envelopes for gaps in ordinals.
13744            while _next_ordinal_to_read < 5 {
13745                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
13746                _next_ordinal_to_read += 1;
13747                next_offset += envelope_size;
13748            }
13749
13750            let next_out_of_line = decoder.next_out_of_line();
13751            let handles_before = decoder.remaining_handles();
13752            if let Some((inlined, num_bytes, num_handles)) =
13753                fidl::encoding::decode_envelope_header(decoder, next_offset)?
13754            {
13755                let member_inline_size =
13756                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
13757                if inlined != (member_inline_size <= 4) {
13758                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
13759                }
13760                let inner_offset;
13761                let mut inner_depth = depth.clone();
13762                if inlined {
13763                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
13764                    inner_offset = next_offset;
13765                } else {
13766                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
13767                    inner_depth.increment()?;
13768                }
13769                let val_ref = self.ramp_down.get_or_insert_with(|| fidl::new_empty!(bool, D));
13770                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
13771                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
13772                {
13773                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
13774                }
13775                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
13776                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
13777                }
13778            }
13779
13780            next_offset += envelope_size;
13781            _next_ordinal_to_read += 1;
13782            if next_offset >= end_offset {
13783                return Ok(());
13784            }
13785
13786            // Decode unknown envelopes for gaps in ordinals.
13787            while _next_ordinal_to_read < 6 {
13788                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
13789                _next_ordinal_to_read += 1;
13790                next_offset += envelope_size;
13791            }
13792
13793            let next_out_of_line = decoder.next_out_of_line();
13794            let handles_before = decoder.remaining_handles();
13795            if let Some((inlined, num_bytes, num_handles)) =
13796                fidl::encoding::decode_envelope_header(decoder, next_offset)?
13797            {
13798                let member_inline_size =
13799                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
13800                if inlined != (member_inline_size <= 4) {
13801                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
13802                }
13803                let inner_offset;
13804                let mut inner_depth = depth.clone();
13805                if inlined {
13806                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
13807                    inner_offset = next_offset;
13808                } else {
13809                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
13810                    inner_depth.increment()?;
13811                }
13812                let val_ref =
13813                    self.valid_last_trans.get_or_insert_with(|| fidl::new_empty!(bool, D));
13814                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
13815                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
13816                {
13817                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
13818                }
13819                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
13820                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
13821                }
13822            }
13823
13824            next_offset += envelope_size;
13825            _next_ordinal_to_read += 1;
13826            if next_offset >= end_offset {
13827                return Ok(());
13828            }
13829
13830            // Decode unknown envelopes for gaps in ordinals.
13831            while _next_ordinal_to_read < 7 {
13832                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
13833                _next_ordinal_to_read += 1;
13834                next_offset += envelope_size;
13835            }
13836
13837            let next_out_of_line = decoder.next_out_of_line();
13838            let handles_before = decoder.remaining_handles();
13839            if let Some((inlined, num_bytes, num_handles)) =
13840                fidl::encoding::decode_envelope_header(decoder, next_offset)?
13841            {
13842                let member_inline_size =
13843                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
13844                if inlined != (member_inline_size <= 4) {
13845                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
13846                }
13847                let inner_offset;
13848                let mut inner_depth = depth.clone();
13849                if inlined {
13850                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
13851                    inner_offset = next_offset;
13852                } else {
13853                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
13854                    inner_depth.increment()?;
13855                }
13856                let val_ref = self.last_trans_time.get_or_insert_with(|| fidl::new_empty!(i64, D));
13857                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
13858                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
13859                {
13860                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
13861                }
13862                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
13863                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
13864                }
13865            }
13866
13867            next_offset += envelope_size;
13868            _next_ordinal_to_read += 1;
13869            if next_offset >= end_offset {
13870                return Ok(());
13871            }
13872
13873            // Decode unknown envelopes for gaps in ordinals.
13874            while _next_ordinal_to_read < 8 {
13875                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
13876                _next_ordinal_to_read += 1;
13877                next_offset += envelope_size;
13878            }
13879
13880            let next_out_of_line = decoder.next_out_of_line();
13881            let handles_before = decoder.remaining_handles();
13882            if let Some((inlined, num_bytes, num_handles)) =
13883                fidl::encoding::decode_envelope_header(decoder, next_offset)?
13884            {
13885                let member_inline_size = <fidl_fuchsia_net_common::Ipv6Address as fidl::encoding::TypeMarker>::inline_size(decoder.context);
13886                if inlined != (member_inline_size <= 4) {
13887                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
13888                }
13889                let inner_offset;
13890                let mut inner_depth = depth.clone();
13891                if inlined {
13892                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
13893                    inner_offset = next_offset;
13894                } else {
13895                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
13896                    inner_depth.increment()?;
13897                }
13898                let val_ref = self.mesh_local_eid.get_or_insert_with(|| {
13899                    fidl::new_empty!(fidl_fuchsia_net_common::Ipv6Address, D)
13900                });
13901                fidl::decode!(
13902                    fidl_fuchsia_net_common::Ipv6Address,
13903                    D,
13904                    val_ref,
13905                    decoder,
13906                    inner_offset,
13907                    inner_depth
13908                )?;
13909                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
13910                {
13911                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
13912                }
13913                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
13914                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
13915                }
13916            }
13917
13918            next_offset += envelope_size;
13919            _next_ordinal_to_read += 1;
13920            if next_offset >= end_offset {
13921                return Ok(());
13922            }
13923
13924            // Decode unknown envelopes for gaps in ordinals.
13925            while _next_ordinal_to_read < 9 {
13926                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
13927                _next_ordinal_to_read += 1;
13928                next_offset += envelope_size;
13929            }
13930
13931            let next_out_of_line = decoder.next_out_of_line();
13932            let handles_before = decoder.remaining_handles();
13933            if let Some((inlined, num_bytes, num_handles)) =
13934                fidl::encoding::decode_envelope_header(decoder, next_offset)?
13935            {
13936                let member_inline_size =
13937                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
13938                if inlined != (member_inline_size <= 4) {
13939                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
13940                }
13941                let inner_offset;
13942                let mut inner_depth = depth.clone();
13943                if inlined {
13944                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
13945                    inner_offset = next_offset;
13946                } else {
13947                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
13948                    inner_depth.increment()?;
13949                }
13950                let val_ref = self.timeout.get_or_insert_with(|| fidl::new_empty!(i64, D));
13951                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
13952                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
13953                {
13954                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
13955                }
13956                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
13957                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
13958                }
13959            }
13960
13961            next_offset += envelope_size;
13962            _next_ordinal_to_read += 1;
13963            if next_offset >= end_offset {
13964                return Ok(());
13965            }
13966
13967            // Decode unknown envelopes for gaps in ordinals.
13968            while _next_ordinal_to_read < 10 {
13969                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
13970                _next_ordinal_to_read += 1;
13971                next_offset += envelope_size;
13972            }
13973
13974            let next_out_of_line = decoder.next_out_of_line();
13975            let handles_before = decoder.remaining_handles();
13976            if let Some((inlined, num_bytes, num_handles)) =
13977                fidl::encoding::decode_envelope_header(decoder, next_offset)?
13978            {
13979                let member_inline_size =
13980                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
13981                if inlined != (member_inline_size <= 4) {
13982                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
13983                }
13984                let inner_offset;
13985                let mut inner_depth = depth.clone();
13986                if inlined {
13987                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
13988                    inner_offset = next_offset;
13989                } else {
13990                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
13991                    inner_depth.increment()?;
13992                }
13993                let val_ref = self.retry_delay.get_or_insert_with(|| fidl::new_empty!(i64, D));
13994                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
13995                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
13996                {
13997                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
13998                }
13999                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14000                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14001                }
14002            }
14003
14004            next_offset += envelope_size;
14005
14006            // Decode the remaining unknown envelopes.
14007            while next_offset < end_offset {
14008                _next_ordinal_to_read += 1;
14009                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14010                next_offset += envelope_size;
14011            }
14012
14013            Ok(())
14014        }
14015    }
14016
14017    impl ExternalRoute {
14018        #[inline(always)]
14019        fn max_ordinal_present(&self) -> u64 {
14020            if let Some(_) = self.stable {
14021                return 3;
14022            }
14023            if let Some(_) = self.route_preference {
14024                return 2;
14025            }
14026            if let Some(_) = self.subnet {
14027                return 1;
14028            }
14029            0
14030        }
14031    }
14032
14033    impl fidl::encoding::ValueTypeMarker for ExternalRoute {
14034        type Borrowed<'a> = &'a Self;
14035        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
14036            value
14037        }
14038    }
14039
14040    unsafe impl fidl::encoding::TypeMarker for ExternalRoute {
14041        type Owned = Self;
14042
14043        #[inline(always)]
14044        fn inline_align(_context: fidl::encoding::Context) -> usize {
14045            8
14046        }
14047
14048        #[inline(always)]
14049        fn inline_size(_context: fidl::encoding::Context) -> usize {
14050            16
14051        }
14052    }
14053
14054    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<ExternalRoute, D>
14055        for &ExternalRoute
14056    {
14057        unsafe fn encode(
14058            self,
14059            encoder: &mut fidl::encoding::Encoder<'_, D>,
14060            offset: usize,
14061            mut depth: fidl::encoding::Depth,
14062        ) -> fidl::Result<()> {
14063            encoder.debug_check_bounds::<ExternalRoute>(offset);
14064            // Vector header
14065            let max_ordinal: u64 = self.max_ordinal_present();
14066            encoder.write_num(max_ordinal, offset);
14067            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
14068            // Calling encoder.out_of_line_offset(0) is not allowed.
14069            if max_ordinal == 0 {
14070                return Ok(());
14071            }
14072            depth.increment()?;
14073            let envelope_size = 8;
14074            let bytes_len = max_ordinal as usize * envelope_size;
14075            #[allow(unused_variables)]
14076            let offset = encoder.out_of_line_offset(bytes_len);
14077            let mut _prev_end_offset: usize = 0;
14078            if 1 > max_ordinal {
14079                return Ok(());
14080            }
14081
14082            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
14083            // are envelope_size bytes.
14084            let cur_offset: usize = (1 - 1) * envelope_size;
14085
14086            // Zero reserved fields.
14087            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
14088
14089            // Safety:
14090            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
14091            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
14092            //   envelope_size bytes, there is always sufficient room.
14093            fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_net_common::Ipv6AddressWithPrefix, D>(
14094            self.subnet.as_ref().map(<fidl_fuchsia_net_common::Ipv6AddressWithPrefix as fidl::encoding::ValueTypeMarker>::borrow),
14095            encoder, offset + cur_offset, depth
14096        )?;
14097
14098            _prev_end_offset = cur_offset + envelope_size;
14099            if 2 > max_ordinal {
14100                return Ok(());
14101            }
14102
14103            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
14104            // are envelope_size bytes.
14105            let cur_offset: usize = (2 - 1) * envelope_size;
14106
14107            // Zero reserved fields.
14108            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
14109
14110            // Safety:
14111            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
14112            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
14113            //   envelope_size bytes, there is always sufficient room.
14114            fidl::encoding::encode_in_envelope_optional::<RoutePreference, D>(
14115                self.route_preference
14116                    .as_ref()
14117                    .map(<RoutePreference as fidl::encoding::ValueTypeMarker>::borrow),
14118                encoder,
14119                offset + cur_offset,
14120                depth,
14121            )?;
14122
14123            _prev_end_offset = cur_offset + envelope_size;
14124            if 3 > max_ordinal {
14125                return Ok(());
14126            }
14127
14128            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
14129            // are envelope_size bytes.
14130            let cur_offset: usize = (3 - 1) * envelope_size;
14131
14132            // Zero reserved fields.
14133            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
14134
14135            // Safety:
14136            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
14137            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
14138            //   envelope_size bytes, there is always sufficient room.
14139            fidl::encoding::encode_in_envelope_optional::<bool, D>(
14140                self.stable.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
14141                encoder,
14142                offset + cur_offset,
14143                depth,
14144            )?;
14145
14146            _prev_end_offset = cur_offset + envelope_size;
14147
14148            Ok(())
14149        }
14150    }
14151
14152    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ExternalRoute {
14153        #[inline(always)]
14154        fn new_empty() -> Self {
14155            Self::default()
14156        }
14157
14158        unsafe fn decode(
14159            &mut self,
14160            decoder: &mut fidl::encoding::Decoder<'_, D>,
14161            offset: usize,
14162            mut depth: fidl::encoding::Depth,
14163        ) -> fidl::Result<()> {
14164            decoder.debug_check_bounds::<Self>(offset);
14165            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
14166                None => return Err(fidl::Error::NotNullable),
14167                Some(len) => len,
14168            };
14169            // Calling decoder.out_of_line_offset(0) is not allowed.
14170            if len == 0 {
14171                return Ok(());
14172            };
14173            depth.increment()?;
14174            let envelope_size = 8;
14175            let bytes_len = len * envelope_size;
14176            let offset = decoder.out_of_line_offset(bytes_len)?;
14177            // Decode the envelope for each type.
14178            let mut _next_ordinal_to_read = 0;
14179            let mut next_offset = offset;
14180            let end_offset = offset + bytes_len;
14181            _next_ordinal_to_read += 1;
14182            if next_offset >= end_offset {
14183                return Ok(());
14184            }
14185
14186            // Decode unknown envelopes for gaps in ordinals.
14187            while _next_ordinal_to_read < 1 {
14188                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14189                _next_ordinal_to_read += 1;
14190                next_offset += envelope_size;
14191            }
14192
14193            let next_out_of_line = decoder.next_out_of_line();
14194            let handles_before = decoder.remaining_handles();
14195            if let Some((inlined, num_bytes, num_handles)) =
14196                fidl::encoding::decode_envelope_header(decoder, next_offset)?
14197            {
14198                let member_inline_size = <fidl_fuchsia_net_common::Ipv6AddressWithPrefix as fidl::encoding::TypeMarker>::inline_size(decoder.context);
14199                if inlined != (member_inline_size <= 4) {
14200                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
14201                }
14202                let inner_offset;
14203                let mut inner_depth = depth.clone();
14204                if inlined {
14205                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
14206                    inner_offset = next_offset;
14207                } else {
14208                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
14209                    inner_depth.increment()?;
14210                }
14211                let val_ref = self.subnet.get_or_insert_with(|| {
14212                    fidl::new_empty!(fidl_fuchsia_net_common::Ipv6AddressWithPrefix, D)
14213                });
14214                fidl::decode!(
14215                    fidl_fuchsia_net_common::Ipv6AddressWithPrefix,
14216                    D,
14217                    val_ref,
14218                    decoder,
14219                    inner_offset,
14220                    inner_depth
14221                )?;
14222                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14223                {
14224                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
14225                }
14226                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14227                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14228                }
14229            }
14230
14231            next_offset += envelope_size;
14232            _next_ordinal_to_read += 1;
14233            if next_offset >= end_offset {
14234                return Ok(());
14235            }
14236
14237            // Decode unknown envelopes for gaps in ordinals.
14238            while _next_ordinal_to_read < 2 {
14239                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14240                _next_ordinal_to_read += 1;
14241                next_offset += envelope_size;
14242            }
14243
14244            let next_out_of_line = decoder.next_out_of_line();
14245            let handles_before = decoder.remaining_handles();
14246            if let Some((inlined, num_bytes, num_handles)) =
14247                fidl::encoding::decode_envelope_header(decoder, next_offset)?
14248            {
14249                let member_inline_size =
14250                    <RoutePreference as fidl::encoding::TypeMarker>::inline_size(decoder.context);
14251                if inlined != (member_inline_size <= 4) {
14252                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
14253                }
14254                let inner_offset;
14255                let mut inner_depth = depth.clone();
14256                if inlined {
14257                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
14258                    inner_offset = next_offset;
14259                } else {
14260                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
14261                    inner_depth.increment()?;
14262                }
14263                let val_ref = self
14264                    .route_preference
14265                    .get_or_insert_with(|| fidl::new_empty!(RoutePreference, D));
14266                fidl::decode!(RoutePreference, D, val_ref, decoder, inner_offset, inner_depth)?;
14267                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14268                {
14269                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
14270                }
14271                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14272                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14273                }
14274            }
14275
14276            next_offset += envelope_size;
14277            _next_ordinal_to_read += 1;
14278            if next_offset >= end_offset {
14279                return Ok(());
14280            }
14281
14282            // Decode unknown envelopes for gaps in ordinals.
14283            while _next_ordinal_to_read < 3 {
14284                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14285                _next_ordinal_to_read += 1;
14286                next_offset += envelope_size;
14287            }
14288
14289            let next_out_of_line = decoder.next_out_of_line();
14290            let handles_before = decoder.remaining_handles();
14291            if let Some((inlined, num_bytes, num_handles)) =
14292                fidl::encoding::decode_envelope_header(decoder, next_offset)?
14293            {
14294                let member_inline_size =
14295                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
14296                if inlined != (member_inline_size <= 4) {
14297                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
14298                }
14299                let inner_offset;
14300                let mut inner_depth = depth.clone();
14301                if inlined {
14302                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
14303                    inner_offset = next_offset;
14304                } else {
14305                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
14306                    inner_depth.increment()?;
14307                }
14308                let val_ref = self.stable.get_or_insert_with(|| fidl::new_empty!(bool, D));
14309                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
14310                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14311                {
14312                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
14313                }
14314                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14315                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14316                }
14317            }
14318
14319            next_offset += envelope_size;
14320
14321            // Decode the remaining unknown envelopes.
14322            while next_offset < end_offset {
14323                _next_ordinal_to_read += 1;
14324                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14325                next_offset += envelope_size;
14326            }
14327
14328            Ok(())
14329        }
14330    }
14331
14332    impl ExternalRouteConfig {
14333        #[inline(always)]
14334        fn max_ordinal_present(&self) -> u64 {
14335            if let Some(_) = self.adv_pio {
14336                return 7;
14337            }
14338            if let Some(_) = self.next_hop_is_this_device {
14339                return 6;
14340            }
14341            if let Some(_) = self.stable {
14342                return 5;
14343            }
14344            if let Some(_) = self.nat64 {
14345                return 4;
14346            }
14347            if let Some(_) = self.preference {
14348                return 3;
14349            }
14350            if let Some(_) = self.rloc16 {
14351                return 2;
14352            }
14353            if let Some(_) = self.prefix {
14354                return 1;
14355            }
14356            0
14357        }
14358    }
14359
14360    impl fidl::encoding::ValueTypeMarker for ExternalRouteConfig {
14361        type Borrowed<'a> = &'a Self;
14362        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
14363            value
14364        }
14365    }
14366
14367    unsafe impl fidl::encoding::TypeMarker for ExternalRouteConfig {
14368        type Owned = Self;
14369
14370        #[inline(always)]
14371        fn inline_align(_context: fidl::encoding::Context) -> usize {
14372            8
14373        }
14374
14375        #[inline(always)]
14376        fn inline_size(_context: fidl::encoding::Context) -> usize {
14377            16
14378        }
14379    }
14380
14381    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<ExternalRouteConfig, D>
14382        for &ExternalRouteConfig
14383    {
14384        unsafe fn encode(
14385            self,
14386            encoder: &mut fidl::encoding::Encoder<'_, D>,
14387            offset: usize,
14388            mut depth: fidl::encoding::Depth,
14389        ) -> fidl::Result<()> {
14390            encoder.debug_check_bounds::<ExternalRouteConfig>(offset);
14391            // Vector header
14392            let max_ordinal: u64 = self.max_ordinal_present();
14393            encoder.write_num(max_ordinal, offset);
14394            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
14395            // Calling encoder.out_of_line_offset(0) is not allowed.
14396            if max_ordinal == 0 {
14397                return Ok(());
14398            }
14399            depth.increment()?;
14400            let envelope_size = 8;
14401            let bytes_len = max_ordinal as usize * envelope_size;
14402            #[allow(unused_variables)]
14403            let offset = encoder.out_of_line_offset(bytes_len);
14404            let mut _prev_end_offset: usize = 0;
14405            if 1 > max_ordinal {
14406                return Ok(());
14407            }
14408
14409            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
14410            // are envelope_size bytes.
14411            let cur_offset: usize = (1 - 1) * envelope_size;
14412
14413            // Zero reserved fields.
14414            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
14415
14416            // Safety:
14417            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
14418            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
14419            //   envelope_size bytes, there is always sufficient room.
14420            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<64>, D>(
14421                self.prefix.as_ref().map(
14422                    <fidl::encoding::BoundedString<64> as fidl::encoding::ValueTypeMarker>::borrow,
14423                ),
14424                encoder,
14425                offset + cur_offset,
14426                depth,
14427            )?;
14428
14429            _prev_end_offset = cur_offset + envelope_size;
14430            if 2 > max_ordinal {
14431                return Ok(());
14432            }
14433
14434            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
14435            // are envelope_size bytes.
14436            let cur_offset: usize = (2 - 1) * envelope_size;
14437
14438            // Zero reserved fields.
14439            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
14440
14441            // Safety:
14442            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
14443            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
14444            //   envelope_size bytes, there is always sufficient room.
14445            fidl::encoding::encode_in_envelope_optional::<u16, D>(
14446                self.rloc16.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
14447                encoder,
14448                offset + cur_offset,
14449                depth,
14450            )?;
14451
14452            _prev_end_offset = cur_offset + envelope_size;
14453            if 3 > max_ordinal {
14454                return Ok(());
14455            }
14456
14457            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
14458            // are envelope_size bytes.
14459            let cur_offset: usize = (3 - 1) * envelope_size;
14460
14461            // Zero reserved fields.
14462            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
14463
14464            // Safety:
14465            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
14466            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
14467            //   envelope_size bytes, there is always sufficient room.
14468            fidl::encoding::encode_in_envelope_optional::<i8, D>(
14469                self.preference.as_ref().map(<i8 as fidl::encoding::ValueTypeMarker>::borrow),
14470                encoder,
14471                offset + cur_offset,
14472                depth,
14473            )?;
14474
14475            _prev_end_offset = cur_offset + envelope_size;
14476            if 4 > max_ordinal {
14477                return Ok(());
14478            }
14479
14480            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
14481            // are envelope_size bytes.
14482            let cur_offset: usize = (4 - 1) * envelope_size;
14483
14484            // Zero reserved fields.
14485            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
14486
14487            // Safety:
14488            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
14489            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
14490            //   envelope_size bytes, there is always sufficient room.
14491            fidl::encoding::encode_in_envelope_optional::<bool, D>(
14492                self.nat64.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
14493                encoder,
14494                offset + cur_offset,
14495                depth,
14496            )?;
14497
14498            _prev_end_offset = cur_offset + envelope_size;
14499            if 5 > max_ordinal {
14500                return Ok(());
14501            }
14502
14503            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
14504            // are envelope_size bytes.
14505            let cur_offset: usize = (5 - 1) * envelope_size;
14506
14507            // Zero reserved fields.
14508            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
14509
14510            // Safety:
14511            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
14512            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
14513            //   envelope_size bytes, there is always sufficient room.
14514            fidl::encoding::encode_in_envelope_optional::<bool, D>(
14515                self.stable.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
14516                encoder,
14517                offset + cur_offset,
14518                depth,
14519            )?;
14520
14521            _prev_end_offset = cur_offset + envelope_size;
14522            if 6 > max_ordinal {
14523                return Ok(());
14524            }
14525
14526            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
14527            // are envelope_size bytes.
14528            let cur_offset: usize = (6 - 1) * envelope_size;
14529
14530            // Zero reserved fields.
14531            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
14532
14533            // Safety:
14534            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
14535            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
14536            //   envelope_size bytes, there is always sufficient room.
14537            fidl::encoding::encode_in_envelope_optional::<bool, D>(
14538                self.next_hop_is_this_device
14539                    .as_ref()
14540                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
14541                encoder,
14542                offset + cur_offset,
14543                depth,
14544            )?;
14545
14546            _prev_end_offset = cur_offset + envelope_size;
14547            if 7 > max_ordinal {
14548                return Ok(());
14549            }
14550
14551            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
14552            // are envelope_size bytes.
14553            let cur_offset: usize = (7 - 1) * envelope_size;
14554
14555            // Zero reserved fields.
14556            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
14557
14558            // Safety:
14559            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
14560            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
14561            //   envelope_size bytes, there is always sufficient room.
14562            fidl::encoding::encode_in_envelope_optional::<bool, D>(
14563                self.adv_pio.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
14564                encoder,
14565                offset + cur_offset,
14566                depth,
14567            )?;
14568
14569            _prev_end_offset = cur_offset + envelope_size;
14570
14571            Ok(())
14572        }
14573    }
14574
14575    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ExternalRouteConfig {
14576        #[inline(always)]
14577        fn new_empty() -> Self {
14578            Self::default()
14579        }
14580
14581        unsafe fn decode(
14582            &mut self,
14583            decoder: &mut fidl::encoding::Decoder<'_, D>,
14584            offset: usize,
14585            mut depth: fidl::encoding::Depth,
14586        ) -> fidl::Result<()> {
14587            decoder.debug_check_bounds::<Self>(offset);
14588            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
14589                None => return Err(fidl::Error::NotNullable),
14590                Some(len) => len,
14591            };
14592            // Calling decoder.out_of_line_offset(0) is not allowed.
14593            if len == 0 {
14594                return Ok(());
14595            };
14596            depth.increment()?;
14597            let envelope_size = 8;
14598            let bytes_len = len * envelope_size;
14599            let offset = decoder.out_of_line_offset(bytes_len)?;
14600            // Decode the envelope for each type.
14601            let mut _next_ordinal_to_read = 0;
14602            let mut next_offset = offset;
14603            let end_offset = offset + bytes_len;
14604            _next_ordinal_to_read += 1;
14605            if next_offset >= end_offset {
14606                return Ok(());
14607            }
14608
14609            // Decode unknown envelopes for gaps in ordinals.
14610            while _next_ordinal_to_read < 1 {
14611                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14612                _next_ordinal_to_read += 1;
14613                next_offset += envelope_size;
14614            }
14615
14616            let next_out_of_line = decoder.next_out_of_line();
14617            let handles_before = decoder.remaining_handles();
14618            if let Some((inlined, num_bytes, num_handles)) =
14619                fidl::encoding::decode_envelope_header(decoder, next_offset)?
14620            {
14621                let member_inline_size =
14622                    <fidl::encoding::BoundedString<64> as fidl::encoding::TypeMarker>::inline_size(
14623                        decoder.context,
14624                    );
14625                if inlined != (member_inline_size <= 4) {
14626                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
14627                }
14628                let inner_offset;
14629                let mut inner_depth = depth.clone();
14630                if inlined {
14631                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
14632                    inner_offset = next_offset;
14633                } else {
14634                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
14635                    inner_depth.increment()?;
14636                }
14637                let val_ref = self
14638                    .prefix
14639                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<64>, D));
14640                fidl::decode!(
14641                    fidl::encoding::BoundedString<64>,
14642                    D,
14643                    val_ref,
14644                    decoder,
14645                    inner_offset,
14646                    inner_depth
14647                )?;
14648                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14649                {
14650                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
14651                }
14652                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14653                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14654                }
14655            }
14656
14657            next_offset += envelope_size;
14658            _next_ordinal_to_read += 1;
14659            if next_offset >= end_offset {
14660                return Ok(());
14661            }
14662
14663            // Decode unknown envelopes for gaps in ordinals.
14664            while _next_ordinal_to_read < 2 {
14665                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14666                _next_ordinal_to_read += 1;
14667                next_offset += envelope_size;
14668            }
14669
14670            let next_out_of_line = decoder.next_out_of_line();
14671            let handles_before = decoder.remaining_handles();
14672            if let Some((inlined, num_bytes, num_handles)) =
14673                fidl::encoding::decode_envelope_header(decoder, next_offset)?
14674            {
14675                let member_inline_size =
14676                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
14677                if inlined != (member_inline_size <= 4) {
14678                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
14679                }
14680                let inner_offset;
14681                let mut inner_depth = depth.clone();
14682                if inlined {
14683                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
14684                    inner_offset = next_offset;
14685                } else {
14686                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
14687                    inner_depth.increment()?;
14688                }
14689                let val_ref = self.rloc16.get_or_insert_with(|| fidl::new_empty!(u16, D));
14690                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
14691                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14692                {
14693                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
14694                }
14695                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14696                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14697                }
14698            }
14699
14700            next_offset += envelope_size;
14701            _next_ordinal_to_read += 1;
14702            if next_offset >= end_offset {
14703                return Ok(());
14704            }
14705
14706            // Decode unknown envelopes for gaps in ordinals.
14707            while _next_ordinal_to_read < 3 {
14708                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14709                _next_ordinal_to_read += 1;
14710                next_offset += envelope_size;
14711            }
14712
14713            let next_out_of_line = decoder.next_out_of_line();
14714            let handles_before = decoder.remaining_handles();
14715            if let Some((inlined, num_bytes, num_handles)) =
14716                fidl::encoding::decode_envelope_header(decoder, next_offset)?
14717            {
14718                let member_inline_size =
14719                    <i8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
14720                if inlined != (member_inline_size <= 4) {
14721                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
14722                }
14723                let inner_offset;
14724                let mut inner_depth = depth.clone();
14725                if inlined {
14726                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
14727                    inner_offset = next_offset;
14728                } else {
14729                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
14730                    inner_depth.increment()?;
14731                }
14732                let val_ref = self.preference.get_or_insert_with(|| fidl::new_empty!(i8, D));
14733                fidl::decode!(i8, D, val_ref, decoder, inner_offset, inner_depth)?;
14734                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14735                {
14736                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
14737                }
14738                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14739                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14740                }
14741            }
14742
14743            next_offset += envelope_size;
14744            _next_ordinal_to_read += 1;
14745            if next_offset >= end_offset {
14746                return Ok(());
14747            }
14748
14749            // Decode unknown envelopes for gaps in ordinals.
14750            while _next_ordinal_to_read < 4 {
14751                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14752                _next_ordinal_to_read += 1;
14753                next_offset += envelope_size;
14754            }
14755
14756            let next_out_of_line = decoder.next_out_of_line();
14757            let handles_before = decoder.remaining_handles();
14758            if let Some((inlined, num_bytes, num_handles)) =
14759                fidl::encoding::decode_envelope_header(decoder, next_offset)?
14760            {
14761                let member_inline_size =
14762                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
14763                if inlined != (member_inline_size <= 4) {
14764                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
14765                }
14766                let inner_offset;
14767                let mut inner_depth = depth.clone();
14768                if inlined {
14769                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
14770                    inner_offset = next_offset;
14771                } else {
14772                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
14773                    inner_depth.increment()?;
14774                }
14775                let val_ref = self.nat64.get_or_insert_with(|| fidl::new_empty!(bool, D));
14776                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
14777                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14778                {
14779                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
14780                }
14781                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14782                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14783                }
14784            }
14785
14786            next_offset += envelope_size;
14787            _next_ordinal_to_read += 1;
14788            if next_offset >= end_offset {
14789                return Ok(());
14790            }
14791
14792            // Decode unknown envelopes for gaps in ordinals.
14793            while _next_ordinal_to_read < 5 {
14794                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14795                _next_ordinal_to_read += 1;
14796                next_offset += envelope_size;
14797            }
14798
14799            let next_out_of_line = decoder.next_out_of_line();
14800            let handles_before = decoder.remaining_handles();
14801            if let Some((inlined, num_bytes, num_handles)) =
14802                fidl::encoding::decode_envelope_header(decoder, next_offset)?
14803            {
14804                let member_inline_size =
14805                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
14806                if inlined != (member_inline_size <= 4) {
14807                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
14808                }
14809                let inner_offset;
14810                let mut inner_depth = depth.clone();
14811                if inlined {
14812                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
14813                    inner_offset = next_offset;
14814                } else {
14815                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
14816                    inner_depth.increment()?;
14817                }
14818                let val_ref = self.stable.get_or_insert_with(|| fidl::new_empty!(bool, D));
14819                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
14820                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14821                {
14822                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
14823                }
14824                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14825                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14826                }
14827            }
14828
14829            next_offset += envelope_size;
14830            _next_ordinal_to_read += 1;
14831            if next_offset >= end_offset {
14832                return Ok(());
14833            }
14834
14835            // Decode unknown envelopes for gaps in ordinals.
14836            while _next_ordinal_to_read < 6 {
14837                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14838                _next_ordinal_to_read += 1;
14839                next_offset += envelope_size;
14840            }
14841
14842            let next_out_of_line = decoder.next_out_of_line();
14843            let handles_before = decoder.remaining_handles();
14844            if let Some((inlined, num_bytes, num_handles)) =
14845                fidl::encoding::decode_envelope_header(decoder, next_offset)?
14846            {
14847                let member_inline_size =
14848                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
14849                if inlined != (member_inline_size <= 4) {
14850                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
14851                }
14852                let inner_offset;
14853                let mut inner_depth = depth.clone();
14854                if inlined {
14855                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
14856                    inner_offset = next_offset;
14857                } else {
14858                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
14859                    inner_depth.increment()?;
14860                }
14861                let val_ref =
14862                    self.next_hop_is_this_device.get_or_insert_with(|| fidl::new_empty!(bool, D));
14863                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
14864                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14865                {
14866                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
14867                }
14868                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14869                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14870                }
14871            }
14872
14873            next_offset += envelope_size;
14874            _next_ordinal_to_read += 1;
14875            if next_offset >= end_offset {
14876                return Ok(());
14877            }
14878
14879            // Decode unknown envelopes for gaps in ordinals.
14880            while _next_ordinal_to_read < 7 {
14881                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14882                _next_ordinal_to_read += 1;
14883                next_offset += envelope_size;
14884            }
14885
14886            let next_out_of_line = decoder.next_out_of_line();
14887            let handles_before = decoder.remaining_handles();
14888            if let Some((inlined, num_bytes, num_handles)) =
14889                fidl::encoding::decode_envelope_header(decoder, next_offset)?
14890            {
14891                let member_inline_size =
14892                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
14893                if inlined != (member_inline_size <= 4) {
14894                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
14895                }
14896                let inner_offset;
14897                let mut inner_depth = depth.clone();
14898                if inlined {
14899                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
14900                    inner_offset = next_offset;
14901                } else {
14902                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
14903                    inner_depth.increment()?;
14904                }
14905                let val_ref = self.adv_pio.get_or_insert_with(|| fidl::new_empty!(bool, D));
14906                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
14907                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14908                {
14909                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
14910                }
14911                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14912                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14913                }
14914            }
14915
14916            next_offset += envelope_size;
14917
14918            // Decode the remaining unknown envelopes.
14919            while next_offset < end_offset {
14920                _next_ordinal_to_read += 1;
14921                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14922                next_offset += envelope_size;
14923            }
14924
14925            Ok(())
14926        }
14927    }
14928
14929    impl JoinerCommissioningParams {
14930        #[inline(always)]
14931        fn max_ordinal_present(&self) -> u64 {
14932            if let Some(_) = self.vendor_data_string {
14933                return 6;
14934            }
14935            if let Some(_) = self.vendor_sw_version {
14936                return 5;
14937            }
14938            if let Some(_) = self.vendor_model {
14939                return 4;
14940            }
14941            if let Some(_) = self.vendor_name {
14942                return 3;
14943            }
14944            if let Some(_) = self.provisioning_url {
14945                return 2;
14946            }
14947            if let Some(_) = self.pskd {
14948                return 1;
14949            }
14950            0
14951        }
14952    }
14953
14954    impl fidl::encoding::ValueTypeMarker for JoinerCommissioningParams {
14955        type Borrowed<'a> = &'a Self;
14956        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
14957            value
14958        }
14959    }
14960
14961    unsafe impl fidl::encoding::TypeMarker for JoinerCommissioningParams {
14962        type Owned = Self;
14963
14964        #[inline(always)]
14965        fn inline_align(_context: fidl::encoding::Context) -> usize {
14966            8
14967        }
14968
14969        #[inline(always)]
14970        fn inline_size(_context: fidl::encoding::Context) -> usize {
14971            16
14972        }
14973    }
14974
14975    unsafe impl<D: fidl::encoding::ResourceDialect>
14976        fidl::encoding::Encode<JoinerCommissioningParams, D> for &JoinerCommissioningParams
14977    {
14978        unsafe fn encode(
14979            self,
14980            encoder: &mut fidl::encoding::Encoder<'_, D>,
14981            offset: usize,
14982            mut depth: fidl::encoding::Depth,
14983        ) -> fidl::Result<()> {
14984            encoder.debug_check_bounds::<JoinerCommissioningParams>(offset);
14985            // Vector header
14986            let max_ordinal: u64 = self.max_ordinal_present();
14987            encoder.write_num(max_ordinal, offset);
14988            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
14989            // Calling encoder.out_of_line_offset(0) is not allowed.
14990            if max_ordinal == 0 {
14991                return Ok(());
14992            }
14993            depth.increment()?;
14994            let envelope_size = 8;
14995            let bytes_len = max_ordinal as usize * envelope_size;
14996            #[allow(unused_variables)]
14997            let offset = encoder.out_of_line_offset(bytes_len);
14998            let mut _prev_end_offset: usize = 0;
14999            if 1 > max_ordinal {
15000                return Ok(());
15001            }
15002
15003            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
15004            // are envelope_size bytes.
15005            let cur_offset: usize = (1 - 1) * envelope_size;
15006
15007            // Zero reserved fields.
15008            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
15009
15010            // Safety:
15011            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
15012            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
15013            //   envelope_size bytes, there is always sufficient room.
15014            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<32>, D>(
15015                self.pskd.as_ref().map(
15016                    <fidl::encoding::BoundedString<32> as fidl::encoding::ValueTypeMarker>::borrow,
15017                ),
15018                encoder,
15019                offset + cur_offset,
15020                depth,
15021            )?;
15022
15023            _prev_end_offset = cur_offset + envelope_size;
15024            if 2 > max_ordinal {
15025                return Ok(());
15026            }
15027
15028            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
15029            // are envelope_size bytes.
15030            let cur_offset: usize = (2 - 1) * envelope_size;
15031
15032            // Zero reserved fields.
15033            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
15034
15035            // Safety:
15036            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
15037            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
15038            //   envelope_size bytes, there is always sufficient room.
15039            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<64>, D>(
15040                self.provisioning_url.as_ref().map(
15041                    <fidl::encoding::BoundedString<64> as fidl::encoding::ValueTypeMarker>::borrow,
15042                ),
15043                encoder,
15044                offset + cur_offset,
15045                depth,
15046            )?;
15047
15048            _prev_end_offset = cur_offset + envelope_size;
15049            if 3 > max_ordinal {
15050                return Ok(());
15051            }
15052
15053            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
15054            // are envelope_size bytes.
15055            let cur_offset: usize = (3 - 1) * envelope_size;
15056
15057            // Zero reserved fields.
15058            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
15059
15060            // Safety:
15061            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
15062            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
15063            //   envelope_size bytes, there is always sufficient room.
15064            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<32>, D>(
15065                self.vendor_name.as_ref().map(
15066                    <fidl::encoding::BoundedString<32> as fidl::encoding::ValueTypeMarker>::borrow,
15067                ),
15068                encoder,
15069                offset + cur_offset,
15070                depth,
15071            )?;
15072
15073            _prev_end_offset = cur_offset + envelope_size;
15074            if 4 > max_ordinal {
15075                return Ok(());
15076            }
15077
15078            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
15079            // are envelope_size bytes.
15080            let cur_offset: usize = (4 - 1) * envelope_size;
15081
15082            // Zero reserved fields.
15083            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
15084
15085            // Safety:
15086            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
15087            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
15088            //   envelope_size bytes, there is always sufficient room.
15089            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<32>, D>(
15090                self.vendor_model.as_ref().map(
15091                    <fidl::encoding::BoundedString<32> as fidl::encoding::ValueTypeMarker>::borrow,
15092                ),
15093                encoder,
15094                offset + cur_offset,
15095                depth,
15096            )?;
15097
15098            _prev_end_offset = cur_offset + envelope_size;
15099            if 5 > max_ordinal {
15100                return Ok(());
15101            }
15102
15103            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
15104            // are envelope_size bytes.
15105            let cur_offset: usize = (5 - 1) * envelope_size;
15106
15107            // Zero reserved fields.
15108            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
15109
15110            // Safety:
15111            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
15112            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
15113            //   envelope_size bytes, there is always sufficient room.
15114            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<16>, D>(
15115                self.vendor_sw_version.as_ref().map(
15116                    <fidl::encoding::BoundedString<16> as fidl::encoding::ValueTypeMarker>::borrow,
15117                ),
15118                encoder,
15119                offset + cur_offset,
15120                depth,
15121            )?;
15122
15123            _prev_end_offset = cur_offset + envelope_size;
15124            if 6 > max_ordinal {
15125                return Ok(());
15126            }
15127
15128            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
15129            // are envelope_size bytes.
15130            let cur_offset: usize = (6 - 1) * envelope_size;
15131
15132            // Zero reserved fields.
15133            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
15134
15135            // Safety:
15136            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
15137            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
15138            //   envelope_size bytes, there is always sufficient room.
15139            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<64>, D>(
15140                self.vendor_data_string.as_ref().map(
15141                    <fidl::encoding::BoundedString<64> as fidl::encoding::ValueTypeMarker>::borrow,
15142                ),
15143                encoder,
15144                offset + cur_offset,
15145                depth,
15146            )?;
15147
15148            _prev_end_offset = cur_offset + envelope_size;
15149
15150            Ok(())
15151        }
15152    }
15153
15154    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
15155        for JoinerCommissioningParams
15156    {
15157        #[inline(always)]
15158        fn new_empty() -> Self {
15159            Self::default()
15160        }
15161
15162        unsafe fn decode(
15163            &mut self,
15164            decoder: &mut fidl::encoding::Decoder<'_, D>,
15165            offset: usize,
15166            mut depth: fidl::encoding::Depth,
15167        ) -> fidl::Result<()> {
15168            decoder.debug_check_bounds::<Self>(offset);
15169            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
15170                None => return Err(fidl::Error::NotNullable),
15171                Some(len) => len,
15172            };
15173            // Calling decoder.out_of_line_offset(0) is not allowed.
15174            if len == 0 {
15175                return Ok(());
15176            };
15177            depth.increment()?;
15178            let envelope_size = 8;
15179            let bytes_len = len * envelope_size;
15180            let offset = decoder.out_of_line_offset(bytes_len)?;
15181            // Decode the envelope for each type.
15182            let mut _next_ordinal_to_read = 0;
15183            let mut next_offset = offset;
15184            let end_offset = offset + bytes_len;
15185            _next_ordinal_to_read += 1;
15186            if next_offset >= end_offset {
15187                return Ok(());
15188            }
15189
15190            // Decode unknown envelopes for gaps in ordinals.
15191            while _next_ordinal_to_read < 1 {
15192                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15193                _next_ordinal_to_read += 1;
15194                next_offset += envelope_size;
15195            }
15196
15197            let next_out_of_line = decoder.next_out_of_line();
15198            let handles_before = decoder.remaining_handles();
15199            if let Some((inlined, num_bytes, num_handles)) =
15200                fidl::encoding::decode_envelope_header(decoder, next_offset)?
15201            {
15202                let member_inline_size =
15203                    <fidl::encoding::BoundedString<32> as fidl::encoding::TypeMarker>::inline_size(
15204                        decoder.context,
15205                    );
15206                if inlined != (member_inline_size <= 4) {
15207                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
15208                }
15209                let inner_offset;
15210                let mut inner_depth = depth.clone();
15211                if inlined {
15212                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
15213                    inner_offset = next_offset;
15214                } else {
15215                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
15216                    inner_depth.increment()?;
15217                }
15218                let val_ref = self
15219                    .pskd
15220                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<32>, D));
15221                fidl::decode!(
15222                    fidl::encoding::BoundedString<32>,
15223                    D,
15224                    val_ref,
15225                    decoder,
15226                    inner_offset,
15227                    inner_depth
15228                )?;
15229                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
15230                {
15231                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
15232                }
15233                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
15234                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
15235                }
15236            }
15237
15238            next_offset += envelope_size;
15239            _next_ordinal_to_read += 1;
15240            if next_offset >= end_offset {
15241                return Ok(());
15242            }
15243
15244            // Decode unknown envelopes for gaps in ordinals.
15245            while _next_ordinal_to_read < 2 {
15246                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15247                _next_ordinal_to_read += 1;
15248                next_offset += envelope_size;
15249            }
15250
15251            let next_out_of_line = decoder.next_out_of_line();
15252            let handles_before = decoder.remaining_handles();
15253            if let Some((inlined, num_bytes, num_handles)) =
15254                fidl::encoding::decode_envelope_header(decoder, next_offset)?
15255            {
15256                let member_inline_size =
15257                    <fidl::encoding::BoundedString<64> as fidl::encoding::TypeMarker>::inline_size(
15258                        decoder.context,
15259                    );
15260                if inlined != (member_inline_size <= 4) {
15261                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
15262                }
15263                let inner_offset;
15264                let mut inner_depth = depth.clone();
15265                if inlined {
15266                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
15267                    inner_offset = next_offset;
15268                } else {
15269                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
15270                    inner_depth.increment()?;
15271                }
15272                let val_ref = self
15273                    .provisioning_url
15274                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<64>, D));
15275                fidl::decode!(
15276                    fidl::encoding::BoundedString<64>,
15277                    D,
15278                    val_ref,
15279                    decoder,
15280                    inner_offset,
15281                    inner_depth
15282                )?;
15283                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
15284                {
15285                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
15286                }
15287                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
15288                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
15289                }
15290            }
15291
15292            next_offset += envelope_size;
15293            _next_ordinal_to_read += 1;
15294            if next_offset >= end_offset {
15295                return Ok(());
15296            }
15297
15298            // Decode unknown envelopes for gaps in ordinals.
15299            while _next_ordinal_to_read < 3 {
15300                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15301                _next_ordinal_to_read += 1;
15302                next_offset += envelope_size;
15303            }
15304
15305            let next_out_of_line = decoder.next_out_of_line();
15306            let handles_before = decoder.remaining_handles();
15307            if let Some((inlined, num_bytes, num_handles)) =
15308                fidl::encoding::decode_envelope_header(decoder, next_offset)?
15309            {
15310                let member_inline_size =
15311                    <fidl::encoding::BoundedString<32> as fidl::encoding::TypeMarker>::inline_size(
15312                        decoder.context,
15313                    );
15314                if inlined != (member_inline_size <= 4) {
15315                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
15316                }
15317                let inner_offset;
15318                let mut inner_depth = depth.clone();
15319                if inlined {
15320                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
15321                    inner_offset = next_offset;
15322                } else {
15323                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
15324                    inner_depth.increment()?;
15325                }
15326                let val_ref = self
15327                    .vendor_name
15328                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<32>, D));
15329                fidl::decode!(
15330                    fidl::encoding::BoundedString<32>,
15331                    D,
15332                    val_ref,
15333                    decoder,
15334                    inner_offset,
15335                    inner_depth
15336                )?;
15337                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
15338                {
15339                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
15340                }
15341                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
15342                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
15343                }
15344            }
15345
15346            next_offset += envelope_size;
15347            _next_ordinal_to_read += 1;
15348            if next_offset >= end_offset {
15349                return Ok(());
15350            }
15351
15352            // Decode unknown envelopes for gaps in ordinals.
15353            while _next_ordinal_to_read < 4 {
15354                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15355                _next_ordinal_to_read += 1;
15356                next_offset += envelope_size;
15357            }
15358
15359            let next_out_of_line = decoder.next_out_of_line();
15360            let handles_before = decoder.remaining_handles();
15361            if let Some((inlined, num_bytes, num_handles)) =
15362                fidl::encoding::decode_envelope_header(decoder, next_offset)?
15363            {
15364                let member_inline_size =
15365                    <fidl::encoding::BoundedString<32> as fidl::encoding::TypeMarker>::inline_size(
15366                        decoder.context,
15367                    );
15368                if inlined != (member_inline_size <= 4) {
15369                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
15370                }
15371                let inner_offset;
15372                let mut inner_depth = depth.clone();
15373                if inlined {
15374                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
15375                    inner_offset = next_offset;
15376                } else {
15377                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
15378                    inner_depth.increment()?;
15379                }
15380                let val_ref = self
15381                    .vendor_model
15382                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<32>, D));
15383                fidl::decode!(
15384                    fidl::encoding::BoundedString<32>,
15385                    D,
15386                    val_ref,
15387                    decoder,
15388                    inner_offset,
15389                    inner_depth
15390                )?;
15391                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
15392                {
15393                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
15394                }
15395                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
15396                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
15397                }
15398            }
15399
15400            next_offset += envelope_size;
15401            _next_ordinal_to_read += 1;
15402            if next_offset >= end_offset {
15403                return Ok(());
15404            }
15405
15406            // Decode unknown envelopes for gaps in ordinals.
15407            while _next_ordinal_to_read < 5 {
15408                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15409                _next_ordinal_to_read += 1;
15410                next_offset += envelope_size;
15411            }
15412
15413            let next_out_of_line = decoder.next_out_of_line();
15414            let handles_before = decoder.remaining_handles();
15415            if let Some((inlined, num_bytes, num_handles)) =
15416                fidl::encoding::decode_envelope_header(decoder, next_offset)?
15417            {
15418                let member_inline_size =
15419                    <fidl::encoding::BoundedString<16> as fidl::encoding::TypeMarker>::inline_size(
15420                        decoder.context,
15421                    );
15422                if inlined != (member_inline_size <= 4) {
15423                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
15424                }
15425                let inner_offset;
15426                let mut inner_depth = depth.clone();
15427                if inlined {
15428                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
15429                    inner_offset = next_offset;
15430                } else {
15431                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
15432                    inner_depth.increment()?;
15433                }
15434                let val_ref = self
15435                    .vendor_sw_version
15436                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<16>, D));
15437                fidl::decode!(
15438                    fidl::encoding::BoundedString<16>,
15439                    D,
15440                    val_ref,
15441                    decoder,
15442                    inner_offset,
15443                    inner_depth
15444                )?;
15445                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
15446                {
15447                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
15448                }
15449                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
15450                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
15451                }
15452            }
15453
15454            next_offset += envelope_size;
15455            _next_ordinal_to_read += 1;
15456            if next_offset >= end_offset {
15457                return Ok(());
15458            }
15459
15460            // Decode unknown envelopes for gaps in ordinals.
15461            while _next_ordinal_to_read < 6 {
15462                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15463                _next_ordinal_to_read += 1;
15464                next_offset += envelope_size;
15465            }
15466
15467            let next_out_of_line = decoder.next_out_of_line();
15468            let handles_before = decoder.remaining_handles();
15469            if let Some((inlined, num_bytes, num_handles)) =
15470                fidl::encoding::decode_envelope_header(decoder, next_offset)?
15471            {
15472                let member_inline_size =
15473                    <fidl::encoding::BoundedString<64> as fidl::encoding::TypeMarker>::inline_size(
15474                        decoder.context,
15475                    );
15476                if inlined != (member_inline_size <= 4) {
15477                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
15478                }
15479                let inner_offset;
15480                let mut inner_depth = depth.clone();
15481                if inlined {
15482                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
15483                    inner_offset = next_offset;
15484                } else {
15485                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
15486                    inner_depth.increment()?;
15487                }
15488                let val_ref = self
15489                    .vendor_data_string
15490                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<64>, D));
15491                fidl::decode!(
15492                    fidl::encoding::BoundedString<64>,
15493                    D,
15494                    val_ref,
15495                    decoder,
15496                    inner_offset,
15497                    inner_depth
15498                )?;
15499                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
15500                {
15501                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
15502                }
15503                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
15504                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
15505                }
15506            }
15507
15508            next_offset += envelope_size;
15509
15510            // Decode the remaining unknown envelopes.
15511            while next_offset < end_offset {
15512                _next_ordinal_to_read += 1;
15513                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15514                next_offset += envelope_size;
15515            }
15516
15517            Ok(())
15518        }
15519    }
15520
15521    impl LeaderData {
15522        #[inline(always)]
15523        fn max_ordinal_present(&self) -> u64 {
15524            if let Some(_) = self.router_id {
15525                return 5;
15526            }
15527            if let Some(_) = self.stable_network_data_version {
15528                return 4;
15529            }
15530            if let Some(_) = self.network_data_version {
15531                return 3;
15532            }
15533            if let Some(_) = self.weight {
15534                return 2;
15535            }
15536            if let Some(_) = self.partition_id {
15537                return 1;
15538            }
15539            0
15540        }
15541    }
15542
15543    impl fidl::encoding::ValueTypeMarker for LeaderData {
15544        type Borrowed<'a> = &'a Self;
15545        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
15546            value
15547        }
15548    }
15549
15550    unsafe impl fidl::encoding::TypeMarker for LeaderData {
15551        type Owned = Self;
15552
15553        #[inline(always)]
15554        fn inline_align(_context: fidl::encoding::Context) -> usize {
15555            8
15556        }
15557
15558        #[inline(always)]
15559        fn inline_size(_context: fidl::encoding::Context) -> usize {
15560            16
15561        }
15562    }
15563
15564    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<LeaderData, D>
15565        for &LeaderData
15566    {
15567        unsafe fn encode(
15568            self,
15569            encoder: &mut fidl::encoding::Encoder<'_, D>,
15570            offset: usize,
15571            mut depth: fidl::encoding::Depth,
15572        ) -> fidl::Result<()> {
15573            encoder.debug_check_bounds::<LeaderData>(offset);
15574            // Vector header
15575            let max_ordinal: u64 = self.max_ordinal_present();
15576            encoder.write_num(max_ordinal, offset);
15577            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
15578            // Calling encoder.out_of_line_offset(0) is not allowed.
15579            if max_ordinal == 0 {
15580                return Ok(());
15581            }
15582            depth.increment()?;
15583            let envelope_size = 8;
15584            let bytes_len = max_ordinal as usize * envelope_size;
15585            #[allow(unused_variables)]
15586            let offset = encoder.out_of_line_offset(bytes_len);
15587            let mut _prev_end_offset: usize = 0;
15588            if 1 > max_ordinal {
15589                return Ok(());
15590            }
15591
15592            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
15593            // are envelope_size bytes.
15594            let cur_offset: usize = (1 - 1) * envelope_size;
15595
15596            // Zero reserved fields.
15597            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
15598
15599            // Safety:
15600            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
15601            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
15602            //   envelope_size bytes, there is always sufficient room.
15603            fidl::encoding::encode_in_envelope_optional::<u32, D>(
15604                self.partition_id.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
15605                encoder,
15606                offset + cur_offset,
15607                depth,
15608            )?;
15609
15610            _prev_end_offset = cur_offset + envelope_size;
15611            if 2 > max_ordinal {
15612                return Ok(());
15613            }
15614
15615            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
15616            // are envelope_size bytes.
15617            let cur_offset: usize = (2 - 1) * envelope_size;
15618
15619            // Zero reserved fields.
15620            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
15621
15622            // Safety:
15623            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
15624            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
15625            //   envelope_size bytes, there is always sufficient room.
15626            fidl::encoding::encode_in_envelope_optional::<u8, D>(
15627                self.weight.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
15628                encoder,
15629                offset + cur_offset,
15630                depth,
15631            )?;
15632
15633            _prev_end_offset = cur_offset + envelope_size;
15634            if 3 > max_ordinal {
15635                return Ok(());
15636            }
15637
15638            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
15639            // are envelope_size bytes.
15640            let cur_offset: usize = (3 - 1) * envelope_size;
15641
15642            // Zero reserved fields.
15643            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
15644
15645            // Safety:
15646            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
15647            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
15648            //   envelope_size bytes, there is always sufficient room.
15649            fidl::encoding::encode_in_envelope_optional::<u8, D>(
15650                self.network_data_version
15651                    .as_ref()
15652                    .map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
15653                encoder,
15654                offset + cur_offset,
15655                depth,
15656            )?;
15657
15658            _prev_end_offset = cur_offset + envelope_size;
15659            if 4 > max_ordinal {
15660                return Ok(());
15661            }
15662
15663            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
15664            // are envelope_size bytes.
15665            let cur_offset: usize = (4 - 1) * envelope_size;
15666
15667            // Zero reserved fields.
15668            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
15669
15670            // Safety:
15671            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
15672            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
15673            //   envelope_size bytes, there is always sufficient room.
15674            fidl::encoding::encode_in_envelope_optional::<u8, D>(
15675                self.stable_network_data_version
15676                    .as_ref()
15677                    .map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
15678                encoder,
15679                offset + cur_offset,
15680                depth,
15681            )?;
15682
15683            _prev_end_offset = cur_offset + envelope_size;
15684            if 5 > max_ordinal {
15685                return Ok(());
15686            }
15687
15688            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
15689            // are envelope_size bytes.
15690            let cur_offset: usize = (5 - 1) * envelope_size;
15691
15692            // Zero reserved fields.
15693            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
15694
15695            // Safety:
15696            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
15697            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
15698            //   envelope_size bytes, there is always sufficient room.
15699            fidl::encoding::encode_in_envelope_optional::<u8, D>(
15700                self.router_id.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
15701                encoder,
15702                offset + cur_offset,
15703                depth,
15704            )?;
15705
15706            _prev_end_offset = cur_offset + envelope_size;
15707
15708            Ok(())
15709        }
15710    }
15711
15712    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for LeaderData {
15713        #[inline(always)]
15714        fn new_empty() -> Self {
15715            Self::default()
15716        }
15717
15718        unsafe fn decode(
15719            &mut self,
15720            decoder: &mut fidl::encoding::Decoder<'_, D>,
15721            offset: usize,
15722            mut depth: fidl::encoding::Depth,
15723        ) -> fidl::Result<()> {
15724            decoder.debug_check_bounds::<Self>(offset);
15725            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
15726                None => return Err(fidl::Error::NotNullable),
15727                Some(len) => len,
15728            };
15729            // Calling decoder.out_of_line_offset(0) is not allowed.
15730            if len == 0 {
15731                return Ok(());
15732            };
15733            depth.increment()?;
15734            let envelope_size = 8;
15735            let bytes_len = len * envelope_size;
15736            let offset = decoder.out_of_line_offset(bytes_len)?;
15737            // Decode the envelope for each type.
15738            let mut _next_ordinal_to_read = 0;
15739            let mut next_offset = offset;
15740            let end_offset = offset + bytes_len;
15741            _next_ordinal_to_read += 1;
15742            if next_offset >= end_offset {
15743                return Ok(());
15744            }
15745
15746            // Decode unknown envelopes for gaps in ordinals.
15747            while _next_ordinal_to_read < 1 {
15748                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15749                _next_ordinal_to_read += 1;
15750                next_offset += envelope_size;
15751            }
15752
15753            let next_out_of_line = decoder.next_out_of_line();
15754            let handles_before = decoder.remaining_handles();
15755            if let Some((inlined, num_bytes, num_handles)) =
15756                fidl::encoding::decode_envelope_header(decoder, next_offset)?
15757            {
15758                let member_inline_size =
15759                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
15760                if inlined != (member_inline_size <= 4) {
15761                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
15762                }
15763                let inner_offset;
15764                let mut inner_depth = depth.clone();
15765                if inlined {
15766                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
15767                    inner_offset = next_offset;
15768                } else {
15769                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
15770                    inner_depth.increment()?;
15771                }
15772                let val_ref = self.partition_id.get_or_insert_with(|| fidl::new_empty!(u32, D));
15773                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
15774                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
15775                {
15776                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
15777                }
15778                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
15779                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
15780                }
15781            }
15782
15783            next_offset += envelope_size;
15784            _next_ordinal_to_read += 1;
15785            if next_offset >= end_offset {
15786                return Ok(());
15787            }
15788
15789            // Decode unknown envelopes for gaps in ordinals.
15790            while _next_ordinal_to_read < 2 {
15791                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15792                _next_ordinal_to_read += 1;
15793                next_offset += envelope_size;
15794            }
15795
15796            let next_out_of_line = decoder.next_out_of_line();
15797            let handles_before = decoder.remaining_handles();
15798            if let Some((inlined, num_bytes, num_handles)) =
15799                fidl::encoding::decode_envelope_header(decoder, next_offset)?
15800            {
15801                let member_inline_size =
15802                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
15803                if inlined != (member_inline_size <= 4) {
15804                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
15805                }
15806                let inner_offset;
15807                let mut inner_depth = depth.clone();
15808                if inlined {
15809                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
15810                    inner_offset = next_offset;
15811                } else {
15812                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
15813                    inner_depth.increment()?;
15814                }
15815                let val_ref = self.weight.get_or_insert_with(|| fidl::new_empty!(u8, D));
15816                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
15817                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
15818                {
15819                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
15820                }
15821                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
15822                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
15823                }
15824            }
15825
15826            next_offset += envelope_size;
15827            _next_ordinal_to_read += 1;
15828            if next_offset >= end_offset {
15829                return Ok(());
15830            }
15831
15832            // Decode unknown envelopes for gaps in ordinals.
15833            while _next_ordinal_to_read < 3 {
15834                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15835                _next_ordinal_to_read += 1;
15836                next_offset += envelope_size;
15837            }
15838
15839            let next_out_of_line = decoder.next_out_of_line();
15840            let handles_before = decoder.remaining_handles();
15841            if let Some((inlined, num_bytes, num_handles)) =
15842                fidl::encoding::decode_envelope_header(decoder, next_offset)?
15843            {
15844                let member_inline_size =
15845                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
15846                if inlined != (member_inline_size <= 4) {
15847                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
15848                }
15849                let inner_offset;
15850                let mut inner_depth = depth.clone();
15851                if inlined {
15852                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
15853                    inner_offset = next_offset;
15854                } else {
15855                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
15856                    inner_depth.increment()?;
15857                }
15858                let val_ref =
15859                    self.network_data_version.get_or_insert_with(|| fidl::new_empty!(u8, D));
15860                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
15861                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
15862                {
15863                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
15864                }
15865                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
15866                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
15867                }
15868            }
15869
15870            next_offset += envelope_size;
15871            _next_ordinal_to_read += 1;
15872            if next_offset >= end_offset {
15873                return Ok(());
15874            }
15875
15876            // Decode unknown envelopes for gaps in ordinals.
15877            while _next_ordinal_to_read < 4 {
15878                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15879                _next_ordinal_to_read += 1;
15880                next_offset += envelope_size;
15881            }
15882
15883            let next_out_of_line = decoder.next_out_of_line();
15884            let handles_before = decoder.remaining_handles();
15885            if let Some((inlined, num_bytes, num_handles)) =
15886                fidl::encoding::decode_envelope_header(decoder, next_offset)?
15887            {
15888                let member_inline_size =
15889                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
15890                if inlined != (member_inline_size <= 4) {
15891                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
15892                }
15893                let inner_offset;
15894                let mut inner_depth = depth.clone();
15895                if inlined {
15896                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
15897                    inner_offset = next_offset;
15898                } else {
15899                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
15900                    inner_depth.increment()?;
15901                }
15902                let val_ref =
15903                    self.stable_network_data_version.get_or_insert_with(|| fidl::new_empty!(u8, D));
15904                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
15905                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
15906                {
15907                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
15908                }
15909                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
15910                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
15911                }
15912            }
15913
15914            next_offset += envelope_size;
15915            _next_ordinal_to_read += 1;
15916            if next_offset >= end_offset {
15917                return Ok(());
15918            }
15919
15920            // Decode unknown envelopes for gaps in ordinals.
15921            while _next_ordinal_to_read < 5 {
15922                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15923                _next_ordinal_to_read += 1;
15924                next_offset += envelope_size;
15925            }
15926
15927            let next_out_of_line = decoder.next_out_of_line();
15928            let handles_before = decoder.remaining_handles();
15929            if let Some((inlined, num_bytes, num_handles)) =
15930                fidl::encoding::decode_envelope_header(decoder, next_offset)?
15931            {
15932                let member_inline_size =
15933                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
15934                if inlined != (member_inline_size <= 4) {
15935                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
15936                }
15937                let inner_offset;
15938                let mut inner_depth = depth.clone();
15939                if inlined {
15940                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
15941                    inner_offset = next_offset;
15942                } else {
15943                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
15944                    inner_depth.increment()?;
15945                }
15946                let val_ref = self.router_id.get_or_insert_with(|| fidl::new_empty!(u8, D));
15947                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
15948                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
15949                {
15950                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
15951                }
15952                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
15953                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
15954                }
15955            }
15956
15957            next_offset += envelope_size;
15958
15959            // Decode the remaining unknown envelopes.
15960            while next_offset < end_offset {
15961                _next_ordinal_to_read += 1;
15962                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15963                next_offset += envelope_size;
15964            }
15965
15966            Ok(())
15967        }
15968    }
15969
15970    impl LinkMetricsEntry {
15971        #[inline(always)]
15972        fn max_ordinal_present(&self) -> u64 {
15973            if let Some(_) = self.extended_address {
15974                return 3;
15975            }
15976            if let Some(_) = self.rssi {
15977                return 2;
15978            }
15979            if let Some(_) = self.link_margin {
15980                return 1;
15981            }
15982            0
15983        }
15984    }
15985
15986    impl fidl::encoding::ValueTypeMarker for LinkMetricsEntry {
15987        type Borrowed<'a> = &'a Self;
15988        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
15989            value
15990        }
15991    }
15992
15993    unsafe impl fidl::encoding::TypeMarker for LinkMetricsEntry {
15994        type Owned = Self;
15995
15996        #[inline(always)]
15997        fn inline_align(_context: fidl::encoding::Context) -> usize {
15998            8
15999        }
16000
16001        #[inline(always)]
16002        fn inline_size(_context: fidl::encoding::Context) -> usize {
16003            16
16004        }
16005    }
16006
16007    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<LinkMetricsEntry, D>
16008        for &LinkMetricsEntry
16009    {
16010        unsafe fn encode(
16011            self,
16012            encoder: &mut fidl::encoding::Encoder<'_, D>,
16013            offset: usize,
16014            mut depth: fidl::encoding::Depth,
16015        ) -> fidl::Result<()> {
16016            encoder.debug_check_bounds::<LinkMetricsEntry>(offset);
16017            // Vector header
16018            let max_ordinal: u64 = self.max_ordinal_present();
16019            encoder.write_num(max_ordinal, offset);
16020            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
16021            // Calling encoder.out_of_line_offset(0) is not allowed.
16022            if max_ordinal == 0 {
16023                return Ok(());
16024            }
16025            depth.increment()?;
16026            let envelope_size = 8;
16027            let bytes_len = max_ordinal as usize * envelope_size;
16028            #[allow(unused_variables)]
16029            let offset = encoder.out_of_line_offset(bytes_len);
16030            let mut _prev_end_offset: usize = 0;
16031            if 1 > max_ordinal {
16032                return Ok(());
16033            }
16034
16035            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
16036            // are envelope_size bytes.
16037            let cur_offset: usize = (1 - 1) * envelope_size;
16038
16039            // Zero reserved fields.
16040            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
16041
16042            // Safety:
16043            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
16044            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
16045            //   envelope_size bytes, there is always sufficient room.
16046            fidl::encoding::encode_in_envelope_optional::<u8, D>(
16047                self.link_margin.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
16048                encoder,
16049                offset + cur_offset,
16050                depth,
16051            )?;
16052
16053            _prev_end_offset = cur_offset + envelope_size;
16054            if 2 > max_ordinal {
16055                return Ok(());
16056            }
16057
16058            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
16059            // are envelope_size bytes.
16060            let cur_offset: usize = (2 - 1) * envelope_size;
16061
16062            // Zero reserved fields.
16063            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
16064
16065            // Safety:
16066            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
16067            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
16068            //   envelope_size bytes, there is always sufficient room.
16069            fidl::encoding::encode_in_envelope_optional::<i8, D>(
16070                self.rssi.as_ref().map(<i8 as fidl::encoding::ValueTypeMarker>::borrow),
16071                encoder,
16072                offset + cur_offset,
16073                depth,
16074            )?;
16075
16076            _prev_end_offset = cur_offset + envelope_size;
16077            if 3 > max_ordinal {
16078                return Ok(());
16079            }
16080
16081            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
16082            // are envelope_size bytes.
16083            let cur_offset: usize = (3 - 1) * envelope_size;
16084
16085            // Zero reserved fields.
16086            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
16087
16088            // Safety:
16089            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
16090            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
16091            //   envelope_size bytes, there is always sufficient room.
16092            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u8, 8>, D>(
16093                self.extended_address.as_ref().map(
16094                    <fidl::encoding::Vector<u8, 8> as fidl::encoding::ValueTypeMarker>::borrow,
16095                ),
16096                encoder,
16097                offset + cur_offset,
16098                depth,
16099            )?;
16100
16101            _prev_end_offset = cur_offset + envelope_size;
16102
16103            Ok(())
16104        }
16105    }
16106
16107    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for LinkMetricsEntry {
16108        #[inline(always)]
16109        fn new_empty() -> Self {
16110            Self::default()
16111        }
16112
16113        unsafe fn decode(
16114            &mut self,
16115            decoder: &mut fidl::encoding::Decoder<'_, D>,
16116            offset: usize,
16117            mut depth: fidl::encoding::Depth,
16118        ) -> fidl::Result<()> {
16119            decoder.debug_check_bounds::<Self>(offset);
16120            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
16121                None => return Err(fidl::Error::NotNullable),
16122                Some(len) => len,
16123            };
16124            // Calling decoder.out_of_line_offset(0) is not allowed.
16125            if len == 0 {
16126                return Ok(());
16127            };
16128            depth.increment()?;
16129            let envelope_size = 8;
16130            let bytes_len = len * envelope_size;
16131            let offset = decoder.out_of_line_offset(bytes_len)?;
16132            // Decode the envelope for each type.
16133            let mut _next_ordinal_to_read = 0;
16134            let mut next_offset = offset;
16135            let end_offset = offset + bytes_len;
16136            _next_ordinal_to_read += 1;
16137            if next_offset >= end_offset {
16138                return Ok(());
16139            }
16140
16141            // Decode unknown envelopes for gaps in ordinals.
16142            while _next_ordinal_to_read < 1 {
16143                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
16144                _next_ordinal_to_read += 1;
16145                next_offset += envelope_size;
16146            }
16147
16148            let next_out_of_line = decoder.next_out_of_line();
16149            let handles_before = decoder.remaining_handles();
16150            if let Some((inlined, num_bytes, num_handles)) =
16151                fidl::encoding::decode_envelope_header(decoder, next_offset)?
16152            {
16153                let member_inline_size =
16154                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
16155                if inlined != (member_inline_size <= 4) {
16156                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
16157                }
16158                let inner_offset;
16159                let mut inner_depth = depth.clone();
16160                if inlined {
16161                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
16162                    inner_offset = next_offset;
16163                } else {
16164                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
16165                    inner_depth.increment()?;
16166                }
16167                let val_ref = self.link_margin.get_or_insert_with(|| fidl::new_empty!(u8, D));
16168                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
16169                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
16170                {
16171                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
16172                }
16173                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
16174                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
16175                }
16176            }
16177
16178            next_offset += envelope_size;
16179            _next_ordinal_to_read += 1;
16180            if next_offset >= end_offset {
16181                return Ok(());
16182            }
16183
16184            // Decode unknown envelopes for gaps in ordinals.
16185            while _next_ordinal_to_read < 2 {
16186                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
16187                _next_ordinal_to_read += 1;
16188                next_offset += envelope_size;
16189            }
16190
16191            let next_out_of_line = decoder.next_out_of_line();
16192            let handles_before = decoder.remaining_handles();
16193            if let Some((inlined, num_bytes, num_handles)) =
16194                fidl::encoding::decode_envelope_header(decoder, next_offset)?
16195            {
16196                let member_inline_size =
16197                    <i8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
16198                if inlined != (member_inline_size <= 4) {
16199                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
16200                }
16201                let inner_offset;
16202                let mut inner_depth = depth.clone();
16203                if inlined {
16204                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
16205                    inner_offset = next_offset;
16206                } else {
16207                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
16208                    inner_depth.increment()?;
16209                }
16210                let val_ref = self.rssi.get_or_insert_with(|| fidl::new_empty!(i8, D));
16211                fidl::decode!(i8, D, val_ref, decoder, inner_offset, inner_depth)?;
16212                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
16213                {
16214                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
16215                }
16216                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
16217                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
16218                }
16219            }
16220
16221            next_offset += envelope_size;
16222            _next_ordinal_to_read += 1;
16223            if next_offset >= end_offset {
16224                return Ok(());
16225            }
16226
16227            // Decode unknown envelopes for gaps in ordinals.
16228            while _next_ordinal_to_read < 3 {
16229                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
16230                _next_ordinal_to_read += 1;
16231                next_offset += envelope_size;
16232            }
16233
16234            let next_out_of_line = decoder.next_out_of_line();
16235            let handles_before = decoder.remaining_handles();
16236            if let Some((inlined, num_bytes, num_handles)) =
16237                fidl::encoding::decode_envelope_header(decoder, next_offset)?
16238            {
16239                let member_inline_size =
16240                    <fidl::encoding::Vector<u8, 8> as fidl::encoding::TypeMarker>::inline_size(
16241                        decoder.context,
16242                    );
16243                if inlined != (member_inline_size <= 4) {
16244                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
16245                }
16246                let inner_offset;
16247                let mut inner_depth = depth.clone();
16248                if inlined {
16249                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
16250                    inner_offset = next_offset;
16251                } else {
16252                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
16253                    inner_depth.increment()?;
16254                }
16255                let val_ref = self
16256                    .extended_address
16257                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u8, 8>, D));
16258                fidl::decode!(fidl::encoding::Vector<u8, 8>, D, val_ref, decoder, inner_offset, inner_depth)?;
16259                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
16260                {
16261                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
16262                }
16263                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
16264                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
16265                }
16266            }
16267
16268            next_offset += envelope_size;
16269
16270            // Decode the remaining unknown envelopes.
16271            while next_offset < end_offset {
16272                _next_ordinal_to_read += 1;
16273                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
16274                next_offset += envelope_size;
16275            }
16276
16277            Ok(())
16278        }
16279    }
16280
16281    impl LowpanContextInfo {
16282        #[inline(always)]
16283        fn max_ordinal_present(&self) -> u64 {
16284            if let Some(_) = self.prefix {
16285                return 4;
16286            }
16287            if let Some(_) = self.stable {
16288                return 3;
16289            }
16290            if let Some(_) = self.compress_flag {
16291                return 2;
16292            }
16293            if let Some(_) = self.context_id {
16294                return 1;
16295            }
16296            0
16297        }
16298    }
16299
16300    impl fidl::encoding::ValueTypeMarker for LowpanContextInfo {
16301        type Borrowed<'a> = &'a Self;
16302        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
16303            value
16304        }
16305    }
16306
16307    unsafe impl fidl::encoding::TypeMarker for LowpanContextInfo {
16308        type Owned = Self;
16309
16310        #[inline(always)]
16311        fn inline_align(_context: fidl::encoding::Context) -> usize {
16312            8
16313        }
16314
16315        #[inline(always)]
16316        fn inline_size(_context: fidl::encoding::Context) -> usize {
16317            16
16318        }
16319    }
16320
16321    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<LowpanContextInfo, D>
16322        for &LowpanContextInfo
16323    {
16324        unsafe fn encode(
16325            self,
16326            encoder: &mut fidl::encoding::Encoder<'_, D>,
16327            offset: usize,
16328            mut depth: fidl::encoding::Depth,
16329        ) -> fidl::Result<()> {
16330            encoder.debug_check_bounds::<LowpanContextInfo>(offset);
16331            // Vector header
16332            let max_ordinal: u64 = self.max_ordinal_present();
16333            encoder.write_num(max_ordinal, offset);
16334            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
16335            // Calling encoder.out_of_line_offset(0) is not allowed.
16336            if max_ordinal == 0 {
16337                return Ok(());
16338            }
16339            depth.increment()?;
16340            let envelope_size = 8;
16341            let bytes_len = max_ordinal as usize * envelope_size;
16342            #[allow(unused_variables)]
16343            let offset = encoder.out_of_line_offset(bytes_len);
16344            let mut _prev_end_offset: usize = 0;
16345            if 1 > max_ordinal {
16346                return Ok(());
16347            }
16348
16349            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
16350            // are envelope_size bytes.
16351            let cur_offset: usize = (1 - 1) * envelope_size;
16352
16353            // Zero reserved fields.
16354            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
16355
16356            // Safety:
16357            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
16358            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
16359            //   envelope_size bytes, there is always sufficient room.
16360            fidl::encoding::encode_in_envelope_optional::<u8, D>(
16361                self.context_id.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
16362                encoder,
16363                offset + cur_offset,
16364                depth,
16365            )?;
16366
16367            _prev_end_offset = cur_offset + envelope_size;
16368            if 2 > max_ordinal {
16369                return Ok(());
16370            }
16371
16372            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
16373            // are envelope_size bytes.
16374            let cur_offset: usize = (2 - 1) * envelope_size;
16375
16376            // Zero reserved fields.
16377            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
16378
16379            // Safety:
16380            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
16381            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
16382            //   envelope_size bytes, there is always sufficient room.
16383            fidl::encoding::encode_in_envelope_optional::<bool, D>(
16384                self.compress_flag.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
16385                encoder,
16386                offset + cur_offset,
16387                depth,
16388            )?;
16389
16390            _prev_end_offset = cur_offset + envelope_size;
16391            if 3 > max_ordinal {
16392                return Ok(());
16393            }
16394
16395            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
16396            // are envelope_size bytes.
16397            let cur_offset: usize = (3 - 1) * envelope_size;
16398
16399            // Zero reserved fields.
16400            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
16401
16402            // Safety:
16403            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
16404            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
16405            //   envelope_size bytes, there is always sufficient room.
16406            fidl::encoding::encode_in_envelope_optional::<bool, D>(
16407                self.stable.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
16408                encoder,
16409                offset + cur_offset,
16410                depth,
16411            )?;
16412
16413            _prev_end_offset = cur_offset + envelope_size;
16414            if 4 > max_ordinal {
16415                return Ok(());
16416            }
16417
16418            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
16419            // are envelope_size bytes.
16420            let cur_offset: usize = (4 - 1) * envelope_size;
16421
16422            // Zero reserved fields.
16423            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
16424
16425            // Safety:
16426            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
16427            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
16428            //   envelope_size bytes, there is always sufficient room.
16429            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<64>, D>(
16430                self.prefix.as_ref().map(
16431                    <fidl::encoding::BoundedString<64> as fidl::encoding::ValueTypeMarker>::borrow,
16432                ),
16433                encoder,
16434                offset + cur_offset,
16435                depth,
16436            )?;
16437
16438            _prev_end_offset = cur_offset + envelope_size;
16439
16440            Ok(())
16441        }
16442    }
16443
16444    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for LowpanContextInfo {
16445        #[inline(always)]
16446        fn new_empty() -> Self {
16447            Self::default()
16448        }
16449
16450        unsafe fn decode(
16451            &mut self,
16452            decoder: &mut fidl::encoding::Decoder<'_, D>,
16453            offset: usize,
16454            mut depth: fidl::encoding::Depth,
16455        ) -> fidl::Result<()> {
16456            decoder.debug_check_bounds::<Self>(offset);
16457            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
16458                None => return Err(fidl::Error::NotNullable),
16459                Some(len) => len,
16460            };
16461            // Calling decoder.out_of_line_offset(0) is not allowed.
16462            if len == 0 {
16463                return Ok(());
16464            };
16465            depth.increment()?;
16466            let envelope_size = 8;
16467            let bytes_len = len * envelope_size;
16468            let offset = decoder.out_of_line_offset(bytes_len)?;
16469            // Decode the envelope for each type.
16470            let mut _next_ordinal_to_read = 0;
16471            let mut next_offset = offset;
16472            let end_offset = offset + bytes_len;
16473            _next_ordinal_to_read += 1;
16474            if next_offset >= end_offset {
16475                return Ok(());
16476            }
16477
16478            // Decode unknown envelopes for gaps in ordinals.
16479            while _next_ordinal_to_read < 1 {
16480                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
16481                _next_ordinal_to_read += 1;
16482                next_offset += envelope_size;
16483            }
16484
16485            let next_out_of_line = decoder.next_out_of_line();
16486            let handles_before = decoder.remaining_handles();
16487            if let Some((inlined, num_bytes, num_handles)) =
16488                fidl::encoding::decode_envelope_header(decoder, next_offset)?
16489            {
16490                let member_inline_size =
16491                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
16492                if inlined != (member_inline_size <= 4) {
16493                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
16494                }
16495                let inner_offset;
16496                let mut inner_depth = depth.clone();
16497                if inlined {
16498                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
16499                    inner_offset = next_offset;
16500                } else {
16501                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
16502                    inner_depth.increment()?;
16503                }
16504                let val_ref = self.context_id.get_or_insert_with(|| fidl::new_empty!(u8, D));
16505                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
16506                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
16507                {
16508                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
16509                }
16510                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
16511                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
16512                }
16513            }
16514
16515            next_offset += envelope_size;
16516            _next_ordinal_to_read += 1;
16517            if next_offset >= end_offset {
16518                return Ok(());
16519            }
16520
16521            // Decode unknown envelopes for gaps in ordinals.
16522            while _next_ordinal_to_read < 2 {
16523                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
16524                _next_ordinal_to_read += 1;
16525                next_offset += envelope_size;
16526            }
16527
16528            let next_out_of_line = decoder.next_out_of_line();
16529            let handles_before = decoder.remaining_handles();
16530            if let Some((inlined, num_bytes, num_handles)) =
16531                fidl::encoding::decode_envelope_header(decoder, next_offset)?
16532            {
16533                let member_inline_size =
16534                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
16535                if inlined != (member_inline_size <= 4) {
16536                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
16537                }
16538                let inner_offset;
16539                let mut inner_depth = depth.clone();
16540                if inlined {
16541                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
16542                    inner_offset = next_offset;
16543                } else {
16544                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
16545                    inner_depth.increment()?;
16546                }
16547                let val_ref = self.compress_flag.get_or_insert_with(|| fidl::new_empty!(bool, D));
16548                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
16549                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
16550                {
16551                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
16552                }
16553                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
16554                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
16555                }
16556            }
16557
16558            next_offset += envelope_size;
16559            _next_ordinal_to_read += 1;
16560            if next_offset >= end_offset {
16561                return Ok(());
16562            }
16563
16564            // Decode unknown envelopes for gaps in ordinals.
16565            while _next_ordinal_to_read < 3 {
16566                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
16567                _next_ordinal_to_read += 1;
16568                next_offset += envelope_size;
16569            }
16570
16571            let next_out_of_line = decoder.next_out_of_line();
16572            let handles_before = decoder.remaining_handles();
16573            if let Some((inlined, num_bytes, num_handles)) =
16574                fidl::encoding::decode_envelope_header(decoder, next_offset)?
16575            {
16576                let member_inline_size =
16577                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
16578                if inlined != (member_inline_size <= 4) {
16579                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
16580                }
16581                let inner_offset;
16582                let mut inner_depth = depth.clone();
16583                if inlined {
16584                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
16585                    inner_offset = next_offset;
16586                } else {
16587                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
16588                    inner_depth.increment()?;
16589                }
16590                let val_ref = self.stable.get_or_insert_with(|| fidl::new_empty!(bool, D));
16591                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
16592                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
16593                {
16594                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
16595                }
16596                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
16597                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
16598                }
16599            }
16600
16601            next_offset += envelope_size;
16602            _next_ordinal_to_read += 1;
16603            if next_offset >= end_offset {
16604                return Ok(());
16605            }
16606
16607            // Decode unknown envelopes for gaps in ordinals.
16608            while _next_ordinal_to_read < 4 {
16609                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
16610                _next_ordinal_to_read += 1;
16611                next_offset += envelope_size;
16612            }
16613
16614            let next_out_of_line = decoder.next_out_of_line();
16615            let handles_before = decoder.remaining_handles();
16616            if let Some((inlined, num_bytes, num_handles)) =
16617                fidl::encoding::decode_envelope_header(decoder, next_offset)?
16618            {
16619                let member_inline_size =
16620                    <fidl::encoding::BoundedString<64> as fidl::encoding::TypeMarker>::inline_size(
16621                        decoder.context,
16622                    );
16623                if inlined != (member_inline_size <= 4) {
16624                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
16625                }
16626                let inner_offset;
16627                let mut inner_depth = depth.clone();
16628                if inlined {
16629                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
16630                    inner_offset = next_offset;
16631                } else {
16632                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
16633                    inner_depth.increment()?;
16634                }
16635                let val_ref = self
16636                    .prefix
16637                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<64>, D));
16638                fidl::decode!(
16639                    fidl::encoding::BoundedString<64>,
16640                    D,
16641                    val_ref,
16642                    decoder,
16643                    inner_offset,
16644                    inner_depth
16645                )?;
16646                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
16647                {
16648                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
16649                }
16650                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
16651                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
16652                }
16653            }
16654
16655            next_offset += envelope_size;
16656
16657            // Decode the remaining unknown envelopes.
16658            while next_offset < end_offset {
16659                _next_ordinal_to_read += 1;
16660                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
16661                next_offset += envelope_size;
16662            }
16663
16664            Ok(())
16665        }
16666    }
16667
16668    impl MessageQueueInfo {
16669        #[inline(always)]
16670        fn max_ordinal_present(&self) -> u64 {
16671            if let Some(_) = self.total_bytes {
16672                return 3;
16673            }
16674            if let Some(_) = self.num_buffers {
16675                return 2;
16676            }
16677            if let Some(_) = self.num_messages {
16678                return 1;
16679            }
16680            0
16681        }
16682    }
16683
16684    impl fidl::encoding::ValueTypeMarker for MessageQueueInfo {
16685        type Borrowed<'a> = &'a Self;
16686        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
16687            value
16688        }
16689    }
16690
16691    unsafe impl fidl::encoding::TypeMarker for MessageQueueInfo {
16692        type Owned = Self;
16693
16694        #[inline(always)]
16695        fn inline_align(_context: fidl::encoding::Context) -> usize {
16696            8
16697        }
16698
16699        #[inline(always)]
16700        fn inline_size(_context: fidl::encoding::Context) -> usize {
16701            16
16702        }
16703    }
16704
16705    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<MessageQueueInfo, D>
16706        for &MessageQueueInfo
16707    {
16708        unsafe fn encode(
16709            self,
16710            encoder: &mut fidl::encoding::Encoder<'_, D>,
16711            offset: usize,
16712            mut depth: fidl::encoding::Depth,
16713        ) -> fidl::Result<()> {
16714            encoder.debug_check_bounds::<MessageQueueInfo>(offset);
16715            // Vector header
16716            let max_ordinal: u64 = self.max_ordinal_present();
16717            encoder.write_num(max_ordinal, offset);
16718            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
16719            // Calling encoder.out_of_line_offset(0) is not allowed.
16720            if max_ordinal == 0 {
16721                return Ok(());
16722            }
16723            depth.increment()?;
16724            let envelope_size = 8;
16725            let bytes_len = max_ordinal as usize * envelope_size;
16726            #[allow(unused_variables)]
16727            let offset = encoder.out_of_line_offset(bytes_len);
16728            let mut _prev_end_offset: usize = 0;
16729            if 1 > max_ordinal {
16730                return Ok(());
16731            }
16732
16733            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
16734            // are envelope_size bytes.
16735            let cur_offset: usize = (1 - 1) * envelope_size;
16736
16737            // Zero reserved fields.
16738            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
16739
16740            // Safety:
16741            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
16742            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
16743            //   envelope_size bytes, there is always sufficient room.
16744            fidl::encoding::encode_in_envelope_optional::<u16, D>(
16745                self.num_messages.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
16746                encoder,
16747                offset + cur_offset,
16748                depth,
16749            )?;
16750
16751            _prev_end_offset = cur_offset + envelope_size;
16752            if 2 > max_ordinal {
16753                return Ok(());
16754            }
16755
16756            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
16757            // are envelope_size bytes.
16758            let cur_offset: usize = (2 - 1) * envelope_size;
16759
16760            // Zero reserved fields.
16761            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
16762
16763            // Safety:
16764            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
16765            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
16766            //   envelope_size bytes, there is always sufficient room.
16767            fidl::encoding::encode_in_envelope_optional::<u16, D>(
16768                self.num_buffers.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
16769                encoder,
16770                offset + cur_offset,
16771                depth,
16772            )?;
16773
16774            _prev_end_offset = cur_offset + envelope_size;
16775            if 3 > max_ordinal {
16776                return Ok(());
16777            }
16778
16779            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
16780            // are envelope_size bytes.
16781            let cur_offset: usize = (3 - 1) * envelope_size;
16782
16783            // Zero reserved fields.
16784            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
16785
16786            // Safety:
16787            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
16788            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
16789            //   envelope_size bytes, there is always sufficient room.
16790            fidl::encoding::encode_in_envelope_optional::<u32, D>(
16791                self.total_bytes.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
16792                encoder,
16793                offset + cur_offset,
16794                depth,
16795            )?;
16796
16797            _prev_end_offset = cur_offset + envelope_size;
16798
16799            Ok(())
16800        }
16801    }
16802
16803    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for MessageQueueInfo {
16804        #[inline(always)]
16805        fn new_empty() -> Self {
16806            Self::default()
16807        }
16808
16809        unsafe fn decode(
16810            &mut self,
16811            decoder: &mut fidl::encoding::Decoder<'_, D>,
16812            offset: usize,
16813            mut depth: fidl::encoding::Depth,
16814        ) -> fidl::Result<()> {
16815            decoder.debug_check_bounds::<Self>(offset);
16816            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
16817                None => return Err(fidl::Error::NotNullable),
16818                Some(len) => len,
16819            };
16820            // Calling decoder.out_of_line_offset(0) is not allowed.
16821            if len == 0 {
16822                return Ok(());
16823            };
16824            depth.increment()?;
16825            let envelope_size = 8;
16826            let bytes_len = len * envelope_size;
16827            let offset = decoder.out_of_line_offset(bytes_len)?;
16828            // Decode the envelope for each type.
16829            let mut _next_ordinal_to_read = 0;
16830            let mut next_offset = offset;
16831            let end_offset = offset + bytes_len;
16832            _next_ordinal_to_read += 1;
16833            if next_offset >= end_offset {
16834                return Ok(());
16835            }
16836
16837            // Decode unknown envelopes for gaps in ordinals.
16838            while _next_ordinal_to_read < 1 {
16839                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
16840                _next_ordinal_to_read += 1;
16841                next_offset += envelope_size;
16842            }
16843
16844            let next_out_of_line = decoder.next_out_of_line();
16845            let handles_before = decoder.remaining_handles();
16846            if let Some((inlined, num_bytes, num_handles)) =
16847                fidl::encoding::decode_envelope_header(decoder, next_offset)?
16848            {
16849                let member_inline_size =
16850                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
16851                if inlined != (member_inline_size <= 4) {
16852                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
16853                }
16854                let inner_offset;
16855                let mut inner_depth = depth.clone();
16856                if inlined {
16857                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
16858                    inner_offset = next_offset;
16859                } else {
16860                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
16861                    inner_depth.increment()?;
16862                }
16863                let val_ref = self.num_messages.get_or_insert_with(|| fidl::new_empty!(u16, D));
16864                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
16865                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
16866                {
16867                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
16868                }
16869                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
16870                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
16871                }
16872            }
16873
16874            next_offset += envelope_size;
16875            _next_ordinal_to_read += 1;
16876            if next_offset >= end_offset {
16877                return Ok(());
16878            }
16879
16880            // Decode unknown envelopes for gaps in ordinals.
16881            while _next_ordinal_to_read < 2 {
16882                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
16883                _next_ordinal_to_read += 1;
16884                next_offset += envelope_size;
16885            }
16886
16887            let next_out_of_line = decoder.next_out_of_line();
16888            let handles_before = decoder.remaining_handles();
16889            if let Some((inlined, num_bytes, num_handles)) =
16890                fidl::encoding::decode_envelope_header(decoder, next_offset)?
16891            {
16892                let member_inline_size =
16893                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
16894                if inlined != (member_inline_size <= 4) {
16895                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
16896                }
16897                let inner_offset;
16898                let mut inner_depth = depth.clone();
16899                if inlined {
16900                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
16901                    inner_offset = next_offset;
16902                } else {
16903                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
16904                    inner_depth.increment()?;
16905                }
16906                let val_ref = self.num_buffers.get_or_insert_with(|| fidl::new_empty!(u16, D));
16907                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
16908                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
16909                {
16910                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
16911                }
16912                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
16913                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
16914                }
16915            }
16916
16917            next_offset += envelope_size;
16918            _next_ordinal_to_read += 1;
16919            if next_offset >= end_offset {
16920                return Ok(());
16921            }
16922
16923            // Decode unknown envelopes for gaps in ordinals.
16924            while _next_ordinal_to_read < 3 {
16925                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
16926                _next_ordinal_to_read += 1;
16927                next_offset += envelope_size;
16928            }
16929
16930            let next_out_of_line = decoder.next_out_of_line();
16931            let handles_before = decoder.remaining_handles();
16932            if let Some((inlined, num_bytes, num_handles)) =
16933                fidl::encoding::decode_envelope_header(decoder, next_offset)?
16934            {
16935                let member_inline_size =
16936                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
16937                if inlined != (member_inline_size <= 4) {
16938                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
16939                }
16940                let inner_offset;
16941                let mut inner_depth = depth.clone();
16942                if inlined {
16943                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
16944                    inner_offset = next_offset;
16945                } else {
16946                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
16947                    inner_depth.increment()?;
16948                }
16949                let val_ref = self.total_bytes.get_or_insert_with(|| fidl::new_empty!(u32, D));
16950                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
16951                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
16952                {
16953                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
16954                }
16955                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
16956                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
16957                }
16958            }
16959
16960            next_offset += envelope_size;
16961
16962            // Decode the remaining unknown envelopes.
16963            while next_offset < end_offset {
16964                _next_ordinal_to_read += 1;
16965                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
16966                next_offset += envelope_size;
16967            }
16968
16969            Ok(())
16970        }
16971    }
16972
16973    impl MultiRadioNeighborInfo {
16974        #[inline(always)]
16975        fn max_ordinal_present(&self) -> u64 {
16976            if let Some(_) = self.radio_link_info {
16977                return 3;
16978            }
16979            if let Some(_) = self.thread_rloc {
16980                return 2;
16981            }
16982            if let Some(_) = self.extended_address {
16983                return 1;
16984            }
16985            0
16986        }
16987    }
16988
16989    impl fidl::encoding::ValueTypeMarker for MultiRadioNeighborInfo {
16990        type Borrowed<'a> = &'a Self;
16991        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
16992            value
16993        }
16994    }
16995
16996    unsafe impl fidl::encoding::TypeMarker for MultiRadioNeighborInfo {
16997        type Owned = Self;
16998
16999        #[inline(always)]
17000        fn inline_align(_context: fidl::encoding::Context) -> usize {
17001            8
17002        }
17003
17004        #[inline(always)]
17005        fn inline_size(_context: fidl::encoding::Context) -> usize {
17006            16
17007        }
17008    }
17009
17010    unsafe impl<D: fidl::encoding::ResourceDialect>
17011        fidl::encoding::Encode<MultiRadioNeighborInfo, D> for &MultiRadioNeighborInfo
17012    {
17013        unsafe fn encode(
17014            self,
17015            encoder: &mut fidl::encoding::Encoder<'_, D>,
17016            offset: usize,
17017            mut depth: fidl::encoding::Depth,
17018        ) -> fidl::Result<()> {
17019            encoder.debug_check_bounds::<MultiRadioNeighborInfo>(offset);
17020            // Vector header
17021            let max_ordinal: u64 = self.max_ordinal_present();
17022            encoder.write_num(max_ordinal, offset);
17023            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
17024            // Calling encoder.out_of_line_offset(0) is not allowed.
17025            if max_ordinal == 0 {
17026                return Ok(());
17027            }
17028            depth.increment()?;
17029            let envelope_size = 8;
17030            let bytes_len = max_ordinal as usize * envelope_size;
17031            #[allow(unused_variables)]
17032            let offset = encoder.out_of_line_offset(bytes_len);
17033            let mut _prev_end_offset: usize = 0;
17034            if 1 > max_ordinal {
17035                return Ok(());
17036            }
17037
17038            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
17039            // are envelope_size bytes.
17040            let cur_offset: usize = (1 - 1) * envelope_size;
17041
17042            // Zero reserved fields.
17043            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
17044
17045            // Safety:
17046            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
17047            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
17048            //   envelope_size bytes, there is always sufficient room.
17049            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u8, 8>, D>(
17050                self.extended_address.as_ref().map(
17051                    <fidl::encoding::Vector<u8, 8> as fidl::encoding::ValueTypeMarker>::borrow,
17052                ),
17053                encoder,
17054                offset + cur_offset,
17055                depth,
17056            )?;
17057
17058            _prev_end_offset = cur_offset + envelope_size;
17059            if 2 > max_ordinal {
17060                return Ok(());
17061            }
17062
17063            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
17064            // are envelope_size bytes.
17065            let cur_offset: usize = (2 - 1) * envelope_size;
17066
17067            // Zero reserved fields.
17068            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
17069
17070            // Safety:
17071            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
17072            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
17073            //   envelope_size bytes, there is always sufficient room.
17074            fidl::encoding::encode_in_envelope_optional::<u16, D>(
17075                self.thread_rloc.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
17076                encoder,
17077                offset + cur_offset,
17078                depth,
17079            )?;
17080
17081            _prev_end_offset = cur_offset + envelope_size;
17082            if 3 > max_ordinal {
17083                return Ok(());
17084            }
17085
17086            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
17087            // are envelope_size bytes.
17088            let cur_offset: usize = (3 - 1) * envelope_size;
17089
17090            // Zero reserved fields.
17091            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
17092
17093            // Safety:
17094            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
17095            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
17096            //   envelope_size bytes, there is always sufficient room.
17097            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<RadioLinkInfo, 5>, D>(
17098            self.radio_link_info.as_ref().map(<fidl::encoding::Vector<RadioLinkInfo, 5> as fidl::encoding::ValueTypeMarker>::borrow),
17099            encoder, offset + cur_offset, depth
17100        )?;
17101
17102            _prev_end_offset = cur_offset + envelope_size;
17103
17104            Ok(())
17105        }
17106    }
17107
17108    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
17109        for MultiRadioNeighborInfo
17110    {
17111        #[inline(always)]
17112        fn new_empty() -> Self {
17113            Self::default()
17114        }
17115
17116        unsafe fn decode(
17117            &mut self,
17118            decoder: &mut fidl::encoding::Decoder<'_, D>,
17119            offset: usize,
17120            mut depth: fidl::encoding::Depth,
17121        ) -> fidl::Result<()> {
17122            decoder.debug_check_bounds::<Self>(offset);
17123            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
17124                None => return Err(fidl::Error::NotNullable),
17125                Some(len) => len,
17126            };
17127            // Calling decoder.out_of_line_offset(0) is not allowed.
17128            if len == 0 {
17129                return Ok(());
17130            };
17131            depth.increment()?;
17132            let envelope_size = 8;
17133            let bytes_len = len * envelope_size;
17134            let offset = decoder.out_of_line_offset(bytes_len)?;
17135            // Decode the envelope for each type.
17136            let mut _next_ordinal_to_read = 0;
17137            let mut next_offset = offset;
17138            let end_offset = offset + bytes_len;
17139            _next_ordinal_to_read += 1;
17140            if next_offset >= end_offset {
17141                return Ok(());
17142            }
17143
17144            // Decode unknown envelopes for gaps in ordinals.
17145            while _next_ordinal_to_read < 1 {
17146                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
17147                _next_ordinal_to_read += 1;
17148                next_offset += envelope_size;
17149            }
17150
17151            let next_out_of_line = decoder.next_out_of_line();
17152            let handles_before = decoder.remaining_handles();
17153            if let Some((inlined, num_bytes, num_handles)) =
17154                fidl::encoding::decode_envelope_header(decoder, next_offset)?
17155            {
17156                let member_inline_size =
17157                    <fidl::encoding::Vector<u8, 8> as fidl::encoding::TypeMarker>::inline_size(
17158                        decoder.context,
17159                    );
17160                if inlined != (member_inline_size <= 4) {
17161                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
17162                }
17163                let inner_offset;
17164                let mut inner_depth = depth.clone();
17165                if inlined {
17166                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
17167                    inner_offset = next_offset;
17168                } else {
17169                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
17170                    inner_depth.increment()?;
17171                }
17172                let val_ref = self
17173                    .extended_address
17174                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u8, 8>, D));
17175                fidl::decode!(fidl::encoding::Vector<u8, 8>, D, val_ref, decoder, inner_offset, inner_depth)?;
17176                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
17177                {
17178                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
17179                }
17180                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
17181                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
17182                }
17183            }
17184
17185            next_offset += envelope_size;
17186            _next_ordinal_to_read += 1;
17187            if next_offset >= end_offset {
17188                return Ok(());
17189            }
17190
17191            // Decode unknown envelopes for gaps in ordinals.
17192            while _next_ordinal_to_read < 2 {
17193                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
17194                _next_ordinal_to_read += 1;
17195                next_offset += envelope_size;
17196            }
17197
17198            let next_out_of_line = decoder.next_out_of_line();
17199            let handles_before = decoder.remaining_handles();
17200            if let Some((inlined, num_bytes, num_handles)) =
17201                fidl::encoding::decode_envelope_header(decoder, next_offset)?
17202            {
17203                let member_inline_size =
17204                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
17205                if inlined != (member_inline_size <= 4) {
17206                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
17207                }
17208                let inner_offset;
17209                let mut inner_depth = depth.clone();
17210                if inlined {
17211                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
17212                    inner_offset = next_offset;
17213                } else {
17214                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
17215                    inner_depth.increment()?;
17216                }
17217                let val_ref = self.thread_rloc.get_or_insert_with(|| fidl::new_empty!(u16, D));
17218                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
17219                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
17220                {
17221                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
17222                }
17223                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
17224                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
17225                }
17226            }
17227
17228            next_offset += envelope_size;
17229            _next_ordinal_to_read += 1;
17230            if next_offset >= end_offset {
17231                return Ok(());
17232            }
17233
17234            // Decode unknown envelopes for gaps in ordinals.
17235            while _next_ordinal_to_read < 3 {
17236                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
17237                _next_ordinal_to_read += 1;
17238                next_offset += envelope_size;
17239            }
17240
17241            let next_out_of_line = decoder.next_out_of_line();
17242            let handles_before = decoder.remaining_handles();
17243            if let Some((inlined, num_bytes, num_handles)) =
17244                fidl::encoding::decode_envelope_header(decoder, next_offset)?
17245            {
17246                let member_inline_size = <fidl::encoding::Vector<RadioLinkInfo, 5> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
17247                if inlined != (member_inline_size <= 4) {
17248                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
17249                }
17250                let inner_offset;
17251                let mut inner_depth = depth.clone();
17252                if inlined {
17253                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
17254                    inner_offset = next_offset;
17255                } else {
17256                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
17257                    inner_depth.increment()?;
17258                }
17259                let val_ref = self.radio_link_info.get_or_insert_with(
17260                    || fidl::new_empty!(fidl::encoding::Vector<RadioLinkInfo, 5>, D),
17261                );
17262                fidl::decode!(fidl::encoding::Vector<RadioLinkInfo, 5>, D, val_ref, decoder, inner_offset, inner_depth)?;
17263                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
17264                {
17265                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
17266                }
17267                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
17268                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
17269                }
17270            }
17271
17272            next_offset += envelope_size;
17273
17274            // Decode the remaining unknown envelopes.
17275            while next_offset < end_offset {
17276                _next_ordinal_to_read += 1;
17277                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
17278                next_offset += envelope_size;
17279            }
17280
17281            Ok(())
17282        }
17283    }
17284
17285    impl Nat64ErrorCounters {
17286        #[inline(always)]
17287        fn max_ordinal_present(&self) -> u64 {
17288            if let Some(_) = self.no_mapping {
17289                return 4;
17290            }
17291            if let Some(_) = self.unsupported_protocol {
17292                return 3;
17293            }
17294            if let Some(_) = self.illegal_packet {
17295                return 2;
17296            }
17297            if let Some(_) = self.unknown {
17298                return 1;
17299            }
17300            0
17301        }
17302    }
17303
17304    impl fidl::encoding::ValueTypeMarker for Nat64ErrorCounters {
17305        type Borrowed<'a> = &'a Self;
17306        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
17307            value
17308        }
17309    }
17310
17311    unsafe impl fidl::encoding::TypeMarker for Nat64ErrorCounters {
17312        type Owned = Self;
17313
17314        #[inline(always)]
17315        fn inline_align(_context: fidl::encoding::Context) -> usize {
17316            8
17317        }
17318
17319        #[inline(always)]
17320        fn inline_size(_context: fidl::encoding::Context) -> usize {
17321            16
17322        }
17323    }
17324
17325    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Nat64ErrorCounters, D>
17326        for &Nat64ErrorCounters
17327    {
17328        unsafe fn encode(
17329            self,
17330            encoder: &mut fidl::encoding::Encoder<'_, D>,
17331            offset: usize,
17332            mut depth: fidl::encoding::Depth,
17333        ) -> fidl::Result<()> {
17334            encoder.debug_check_bounds::<Nat64ErrorCounters>(offset);
17335            // Vector header
17336            let max_ordinal: u64 = self.max_ordinal_present();
17337            encoder.write_num(max_ordinal, offset);
17338            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
17339            // Calling encoder.out_of_line_offset(0) is not allowed.
17340            if max_ordinal == 0 {
17341                return Ok(());
17342            }
17343            depth.increment()?;
17344            let envelope_size = 8;
17345            let bytes_len = max_ordinal as usize * envelope_size;
17346            #[allow(unused_variables)]
17347            let offset = encoder.out_of_line_offset(bytes_len);
17348            let mut _prev_end_offset: usize = 0;
17349            if 1 > max_ordinal {
17350                return Ok(());
17351            }
17352
17353            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
17354            // are envelope_size bytes.
17355            let cur_offset: usize = (1 - 1) * envelope_size;
17356
17357            // Zero reserved fields.
17358            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
17359
17360            // Safety:
17361            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
17362            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
17363            //   envelope_size bytes, there is always sufficient room.
17364            fidl::encoding::encode_in_envelope_optional::<Nat64PacketCounters, D>(
17365                self.unknown
17366                    .as_ref()
17367                    .map(<Nat64PacketCounters as fidl::encoding::ValueTypeMarker>::borrow),
17368                encoder,
17369                offset + cur_offset,
17370                depth,
17371            )?;
17372
17373            _prev_end_offset = cur_offset + envelope_size;
17374            if 2 > max_ordinal {
17375                return Ok(());
17376            }
17377
17378            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
17379            // are envelope_size bytes.
17380            let cur_offset: usize = (2 - 1) * envelope_size;
17381
17382            // Zero reserved fields.
17383            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
17384
17385            // Safety:
17386            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
17387            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
17388            //   envelope_size bytes, there is always sufficient room.
17389            fidl::encoding::encode_in_envelope_optional::<Nat64PacketCounters, D>(
17390                self.illegal_packet
17391                    .as_ref()
17392                    .map(<Nat64PacketCounters as fidl::encoding::ValueTypeMarker>::borrow),
17393                encoder,
17394                offset + cur_offset,
17395                depth,
17396            )?;
17397
17398            _prev_end_offset = cur_offset + envelope_size;
17399            if 3 > max_ordinal {
17400                return Ok(());
17401            }
17402
17403            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
17404            // are envelope_size bytes.
17405            let cur_offset: usize = (3 - 1) * envelope_size;
17406
17407            // Zero reserved fields.
17408            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
17409
17410            // Safety:
17411            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
17412            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
17413            //   envelope_size bytes, there is always sufficient room.
17414            fidl::encoding::encode_in_envelope_optional::<Nat64PacketCounters, D>(
17415                self.unsupported_protocol
17416                    .as_ref()
17417                    .map(<Nat64PacketCounters as fidl::encoding::ValueTypeMarker>::borrow),
17418                encoder,
17419                offset + cur_offset,
17420                depth,
17421            )?;
17422
17423            _prev_end_offset = cur_offset + envelope_size;
17424            if 4 > max_ordinal {
17425                return Ok(());
17426            }
17427
17428            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
17429            // are envelope_size bytes.
17430            let cur_offset: usize = (4 - 1) * envelope_size;
17431
17432            // Zero reserved fields.
17433            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
17434
17435            // Safety:
17436            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
17437            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
17438            //   envelope_size bytes, there is always sufficient room.
17439            fidl::encoding::encode_in_envelope_optional::<Nat64PacketCounters, D>(
17440                self.no_mapping
17441                    .as_ref()
17442                    .map(<Nat64PacketCounters as fidl::encoding::ValueTypeMarker>::borrow),
17443                encoder,
17444                offset + cur_offset,
17445                depth,
17446            )?;
17447
17448            _prev_end_offset = cur_offset + envelope_size;
17449
17450            Ok(())
17451        }
17452    }
17453
17454    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Nat64ErrorCounters {
17455        #[inline(always)]
17456        fn new_empty() -> Self {
17457            Self::default()
17458        }
17459
17460        unsafe fn decode(
17461            &mut self,
17462            decoder: &mut fidl::encoding::Decoder<'_, D>,
17463            offset: usize,
17464            mut depth: fidl::encoding::Depth,
17465        ) -> fidl::Result<()> {
17466            decoder.debug_check_bounds::<Self>(offset);
17467            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
17468                None => return Err(fidl::Error::NotNullable),
17469                Some(len) => len,
17470            };
17471            // Calling decoder.out_of_line_offset(0) is not allowed.
17472            if len == 0 {
17473                return Ok(());
17474            };
17475            depth.increment()?;
17476            let envelope_size = 8;
17477            let bytes_len = len * envelope_size;
17478            let offset = decoder.out_of_line_offset(bytes_len)?;
17479            // Decode the envelope for each type.
17480            let mut _next_ordinal_to_read = 0;
17481            let mut next_offset = offset;
17482            let end_offset = offset + bytes_len;
17483            _next_ordinal_to_read += 1;
17484            if next_offset >= end_offset {
17485                return Ok(());
17486            }
17487
17488            // Decode unknown envelopes for gaps in ordinals.
17489            while _next_ordinal_to_read < 1 {
17490                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
17491                _next_ordinal_to_read += 1;
17492                next_offset += envelope_size;
17493            }
17494
17495            let next_out_of_line = decoder.next_out_of_line();
17496            let handles_before = decoder.remaining_handles();
17497            if let Some((inlined, num_bytes, num_handles)) =
17498                fidl::encoding::decode_envelope_header(decoder, next_offset)?
17499            {
17500                let member_inline_size =
17501                    <Nat64PacketCounters as fidl::encoding::TypeMarker>::inline_size(
17502                        decoder.context,
17503                    );
17504                if inlined != (member_inline_size <= 4) {
17505                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
17506                }
17507                let inner_offset;
17508                let mut inner_depth = depth.clone();
17509                if inlined {
17510                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
17511                    inner_offset = next_offset;
17512                } else {
17513                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
17514                    inner_depth.increment()?;
17515                }
17516                let val_ref =
17517                    self.unknown.get_or_insert_with(|| fidl::new_empty!(Nat64PacketCounters, D));
17518                fidl::decode!(Nat64PacketCounters, D, val_ref, decoder, inner_offset, inner_depth)?;
17519                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
17520                {
17521                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
17522                }
17523                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
17524                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
17525                }
17526            }
17527
17528            next_offset += envelope_size;
17529            _next_ordinal_to_read += 1;
17530            if next_offset >= end_offset {
17531                return Ok(());
17532            }
17533
17534            // Decode unknown envelopes for gaps in ordinals.
17535            while _next_ordinal_to_read < 2 {
17536                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
17537                _next_ordinal_to_read += 1;
17538                next_offset += envelope_size;
17539            }
17540
17541            let next_out_of_line = decoder.next_out_of_line();
17542            let handles_before = decoder.remaining_handles();
17543            if let Some((inlined, num_bytes, num_handles)) =
17544                fidl::encoding::decode_envelope_header(decoder, next_offset)?
17545            {
17546                let member_inline_size =
17547                    <Nat64PacketCounters as fidl::encoding::TypeMarker>::inline_size(
17548                        decoder.context,
17549                    );
17550                if inlined != (member_inline_size <= 4) {
17551                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
17552                }
17553                let inner_offset;
17554                let mut inner_depth = depth.clone();
17555                if inlined {
17556                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
17557                    inner_offset = next_offset;
17558                } else {
17559                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
17560                    inner_depth.increment()?;
17561                }
17562                let val_ref = self
17563                    .illegal_packet
17564                    .get_or_insert_with(|| fidl::new_empty!(Nat64PacketCounters, D));
17565                fidl::decode!(Nat64PacketCounters, D, val_ref, decoder, inner_offset, inner_depth)?;
17566                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
17567                {
17568                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
17569                }
17570                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
17571                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
17572                }
17573            }
17574
17575            next_offset += envelope_size;
17576            _next_ordinal_to_read += 1;
17577            if next_offset >= end_offset {
17578                return Ok(());
17579            }
17580
17581            // Decode unknown envelopes for gaps in ordinals.
17582            while _next_ordinal_to_read < 3 {
17583                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
17584                _next_ordinal_to_read += 1;
17585                next_offset += envelope_size;
17586            }
17587
17588            let next_out_of_line = decoder.next_out_of_line();
17589            let handles_before = decoder.remaining_handles();
17590            if let Some((inlined, num_bytes, num_handles)) =
17591                fidl::encoding::decode_envelope_header(decoder, next_offset)?
17592            {
17593                let member_inline_size =
17594                    <Nat64PacketCounters as fidl::encoding::TypeMarker>::inline_size(
17595                        decoder.context,
17596                    );
17597                if inlined != (member_inline_size <= 4) {
17598                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
17599                }
17600                let inner_offset;
17601                let mut inner_depth = depth.clone();
17602                if inlined {
17603                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
17604                    inner_offset = next_offset;
17605                } else {
17606                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
17607                    inner_depth.increment()?;
17608                }
17609                let val_ref = self
17610                    .unsupported_protocol
17611                    .get_or_insert_with(|| fidl::new_empty!(Nat64PacketCounters, D));
17612                fidl::decode!(Nat64PacketCounters, D, val_ref, decoder, inner_offset, inner_depth)?;
17613                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
17614                {
17615                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
17616                }
17617                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
17618                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
17619                }
17620            }
17621
17622            next_offset += envelope_size;
17623            _next_ordinal_to_read += 1;
17624            if next_offset >= end_offset {
17625                return Ok(());
17626            }
17627
17628            // Decode unknown envelopes for gaps in ordinals.
17629            while _next_ordinal_to_read < 4 {
17630                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
17631                _next_ordinal_to_read += 1;
17632                next_offset += envelope_size;
17633            }
17634
17635            let next_out_of_line = decoder.next_out_of_line();
17636            let handles_before = decoder.remaining_handles();
17637            if let Some((inlined, num_bytes, num_handles)) =
17638                fidl::encoding::decode_envelope_header(decoder, next_offset)?
17639            {
17640                let member_inline_size =
17641                    <Nat64PacketCounters as fidl::encoding::TypeMarker>::inline_size(
17642                        decoder.context,
17643                    );
17644                if inlined != (member_inline_size <= 4) {
17645                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
17646                }
17647                let inner_offset;
17648                let mut inner_depth = depth.clone();
17649                if inlined {
17650                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
17651                    inner_offset = next_offset;
17652                } else {
17653                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
17654                    inner_depth.increment()?;
17655                }
17656                let val_ref =
17657                    self.no_mapping.get_or_insert_with(|| fidl::new_empty!(Nat64PacketCounters, D));
17658                fidl::decode!(Nat64PacketCounters, D, val_ref, decoder, inner_offset, inner_depth)?;
17659                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
17660                {
17661                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
17662                }
17663                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
17664                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
17665                }
17666            }
17667
17668            next_offset += envelope_size;
17669
17670            // Decode the remaining unknown envelopes.
17671            while next_offset < end_offset {
17672                _next_ordinal_to_read += 1;
17673                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
17674                next_offset += envelope_size;
17675            }
17676
17677            Ok(())
17678        }
17679    }
17680
17681    impl Nat64Info {
17682        #[inline(always)]
17683        fn max_ordinal_present(&self) -> u64 {
17684            if let Some(_) = self.nat64_protocol_counters {
17685                return 4;
17686            }
17687            if let Some(_) = self.nat64_error_counters {
17688                return 3;
17689            }
17690            if let Some(_) = self.nat64_mappings {
17691                return 2;
17692            }
17693            if let Some(_) = self.nat64_state {
17694                return 1;
17695            }
17696            0
17697        }
17698    }
17699
17700    impl fidl::encoding::ValueTypeMarker for Nat64Info {
17701        type Borrowed<'a> = &'a Self;
17702        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
17703            value
17704        }
17705    }
17706
17707    unsafe impl fidl::encoding::TypeMarker for Nat64Info {
17708        type Owned = Self;
17709
17710        #[inline(always)]
17711        fn inline_align(_context: fidl::encoding::Context) -> usize {
17712            8
17713        }
17714
17715        #[inline(always)]
17716        fn inline_size(_context: fidl::encoding::Context) -> usize {
17717            16
17718        }
17719    }
17720
17721    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Nat64Info, D>
17722        for &Nat64Info
17723    {
17724        unsafe fn encode(
17725            self,
17726            encoder: &mut fidl::encoding::Encoder<'_, D>,
17727            offset: usize,
17728            mut depth: fidl::encoding::Depth,
17729        ) -> fidl::Result<()> {
17730            encoder.debug_check_bounds::<Nat64Info>(offset);
17731            // Vector header
17732            let max_ordinal: u64 = self.max_ordinal_present();
17733            encoder.write_num(max_ordinal, offset);
17734            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
17735            // Calling encoder.out_of_line_offset(0) is not allowed.
17736            if max_ordinal == 0 {
17737                return Ok(());
17738            }
17739            depth.increment()?;
17740            let envelope_size = 8;
17741            let bytes_len = max_ordinal as usize * envelope_size;
17742            #[allow(unused_variables)]
17743            let offset = encoder.out_of_line_offset(bytes_len);
17744            let mut _prev_end_offset: usize = 0;
17745            if 1 > max_ordinal {
17746                return Ok(());
17747            }
17748
17749            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
17750            // are envelope_size bytes.
17751            let cur_offset: usize = (1 - 1) * envelope_size;
17752
17753            // Zero reserved fields.
17754            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
17755
17756            // Safety:
17757            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
17758            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
17759            //   envelope_size bytes, there is always sufficient room.
17760            fidl::encoding::encode_in_envelope_optional::<BorderRoutingNat64State, D>(
17761                self.nat64_state
17762                    .as_ref()
17763                    .map(<BorderRoutingNat64State as fidl::encoding::ValueTypeMarker>::borrow),
17764                encoder,
17765                offset + cur_offset,
17766                depth,
17767            )?;
17768
17769            _prev_end_offset = cur_offset + envelope_size;
17770            if 2 > max_ordinal {
17771                return Ok(());
17772            }
17773
17774            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
17775            // are envelope_size bytes.
17776            let cur_offset: usize = (2 - 1) * envelope_size;
17777
17778            // Zero reserved fields.
17779            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
17780
17781            // Safety:
17782            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
17783            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
17784            //   envelope_size bytes, there is always sufficient room.
17785            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<Nat64Mapping>, D>(
17786            self.nat64_mappings.as_ref().map(<fidl::encoding::UnboundedVector<Nat64Mapping> as fidl::encoding::ValueTypeMarker>::borrow),
17787            encoder, offset + cur_offset, depth
17788        )?;
17789
17790            _prev_end_offset = cur_offset + envelope_size;
17791            if 3 > max_ordinal {
17792                return Ok(());
17793            }
17794
17795            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
17796            // are envelope_size bytes.
17797            let cur_offset: usize = (3 - 1) * envelope_size;
17798
17799            // Zero reserved fields.
17800            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
17801
17802            // Safety:
17803            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
17804            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
17805            //   envelope_size bytes, there is always sufficient room.
17806            fidl::encoding::encode_in_envelope_optional::<Nat64ErrorCounters, D>(
17807                self.nat64_error_counters
17808                    .as_ref()
17809                    .map(<Nat64ErrorCounters as fidl::encoding::ValueTypeMarker>::borrow),
17810                encoder,
17811                offset + cur_offset,
17812                depth,
17813            )?;
17814
17815            _prev_end_offset = cur_offset + envelope_size;
17816            if 4 > max_ordinal {
17817                return Ok(());
17818            }
17819
17820            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
17821            // are envelope_size bytes.
17822            let cur_offset: usize = (4 - 1) * envelope_size;
17823
17824            // Zero reserved fields.
17825            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
17826
17827            // Safety:
17828            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
17829            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
17830            //   envelope_size bytes, there is always sufficient room.
17831            fidl::encoding::encode_in_envelope_optional::<Nat64ProtocolCounters, D>(
17832                self.nat64_protocol_counters
17833                    .as_ref()
17834                    .map(<Nat64ProtocolCounters as fidl::encoding::ValueTypeMarker>::borrow),
17835                encoder,
17836                offset + cur_offset,
17837                depth,
17838            )?;
17839
17840            _prev_end_offset = cur_offset + envelope_size;
17841
17842            Ok(())
17843        }
17844    }
17845
17846    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Nat64Info {
17847        #[inline(always)]
17848        fn new_empty() -> Self {
17849            Self::default()
17850        }
17851
17852        unsafe fn decode(
17853            &mut self,
17854            decoder: &mut fidl::encoding::Decoder<'_, D>,
17855            offset: usize,
17856            mut depth: fidl::encoding::Depth,
17857        ) -> fidl::Result<()> {
17858            decoder.debug_check_bounds::<Self>(offset);
17859            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
17860                None => return Err(fidl::Error::NotNullable),
17861                Some(len) => len,
17862            };
17863            // Calling decoder.out_of_line_offset(0) is not allowed.
17864            if len == 0 {
17865                return Ok(());
17866            };
17867            depth.increment()?;
17868            let envelope_size = 8;
17869            let bytes_len = len * envelope_size;
17870            let offset = decoder.out_of_line_offset(bytes_len)?;
17871            // Decode the envelope for each type.
17872            let mut _next_ordinal_to_read = 0;
17873            let mut next_offset = offset;
17874            let end_offset = offset + bytes_len;
17875            _next_ordinal_to_read += 1;
17876            if next_offset >= end_offset {
17877                return Ok(());
17878            }
17879
17880            // Decode unknown envelopes for gaps in ordinals.
17881            while _next_ordinal_to_read < 1 {
17882                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
17883                _next_ordinal_to_read += 1;
17884                next_offset += envelope_size;
17885            }
17886
17887            let next_out_of_line = decoder.next_out_of_line();
17888            let handles_before = decoder.remaining_handles();
17889            if let Some((inlined, num_bytes, num_handles)) =
17890                fidl::encoding::decode_envelope_header(decoder, next_offset)?
17891            {
17892                let member_inline_size =
17893                    <BorderRoutingNat64State as fidl::encoding::TypeMarker>::inline_size(
17894                        decoder.context,
17895                    );
17896                if inlined != (member_inline_size <= 4) {
17897                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
17898                }
17899                let inner_offset;
17900                let mut inner_depth = depth.clone();
17901                if inlined {
17902                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
17903                    inner_offset = next_offset;
17904                } else {
17905                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
17906                    inner_depth.increment()?;
17907                }
17908                let val_ref = self
17909                    .nat64_state
17910                    .get_or_insert_with(|| fidl::new_empty!(BorderRoutingNat64State, D));
17911                fidl::decode!(
17912                    BorderRoutingNat64State,
17913                    D,
17914                    val_ref,
17915                    decoder,
17916                    inner_offset,
17917                    inner_depth
17918                )?;
17919                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
17920                {
17921                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
17922                }
17923                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
17924                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
17925                }
17926            }
17927
17928            next_offset += envelope_size;
17929            _next_ordinal_to_read += 1;
17930            if next_offset >= end_offset {
17931                return Ok(());
17932            }
17933
17934            // Decode unknown envelopes for gaps in ordinals.
17935            while _next_ordinal_to_read < 2 {
17936                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
17937                _next_ordinal_to_read += 1;
17938                next_offset += envelope_size;
17939            }
17940
17941            let next_out_of_line = decoder.next_out_of_line();
17942            let handles_before = decoder.remaining_handles();
17943            if let Some((inlined, num_bytes, num_handles)) =
17944                fidl::encoding::decode_envelope_header(decoder, next_offset)?
17945            {
17946                let member_inline_size = <fidl::encoding::UnboundedVector<Nat64Mapping> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
17947                if inlined != (member_inline_size <= 4) {
17948                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
17949                }
17950                let inner_offset;
17951                let mut inner_depth = depth.clone();
17952                if inlined {
17953                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
17954                    inner_offset = next_offset;
17955                } else {
17956                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
17957                    inner_depth.increment()?;
17958                }
17959                let val_ref = self.nat64_mappings.get_or_insert_with(|| {
17960                    fidl::new_empty!(fidl::encoding::UnboundedVector<Nat64Mapping>, D)
17961                });
17962                fidl::decode!(
17963                    fidl::encoding::UnboundedVector<Nat64Mapping>,
17964                    D,
17965                    val_ref,
17966                    decoder,
17967                    inner_offset,
17968                    inner_depth
17969                )?;
17970                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
17971                {
17972                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
17973                }
17974                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
17975                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
17976                }
17977            }
17978
17979            next_offset += envelope_size;
17980            _next_ordinal_to_read += 1;
17981            if next_offset >= end_offset {
17982                return Ok(());
17983            }
17984
17985            // Decode unknown envelopes for gaps in ordinals.
17986            while _next_ordinal_to_read < 3 {
17987                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
17988                _next_ordinal_to_read += 1;
17989                next_offset += envelope_size;
17990            }
17991
17992            let next_out_of_line = decoder.next_out_of_line();
17993            let handles_before = decoder.remaining_handles();
17994            if let Some((inlined, num_bytes, num_handles)) =
17995                fidl::encoding::decode_envelope_header(decoder, next_offset)?
17996            {
17997                let member_inline_size =
17998                    <Nat64ErrorCounters as fidl::encoding::TypeMarker>::inline_size(
17999                        decoder.context,
18000                    );
18001                if inlined != (member_inline_size <= 4) {
18002                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
18003                }
18004                let inner_offset;
18005                let mut inner_depth = depth.clone();
18006                if inlined {
18007                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
18008                    inner_offset = next_offset;
18009                } else {
18010                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
18011                    inner_depth.increment()?;
18012                }
18013                let val_ref = self
18014                    .nat64_error_counters
18015                    .get_or_insert_with(|| fidl::new_empty!(Nat64ErrorCounters, D));
18016                fidl::decode!(Nat64ErrorCounters, D, val_ref, decoder, inner_offset, inner_depth)?;
18017                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
18018                {
18019                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
18020                }
18021                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
18022                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
18023                }
18024            }
18025
18026            next_offset += envelope_size;
18027            _next_ordinal_to_read += 1;
18028            if next_offset >= end_offset {
18029                return Ok(());
18030            }
18031
18032            // Decode unknown envelopes for gaps in ordinals.
18033            while _next_ordinal_to_read < 4 {
18034                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
18035                _next_ordinal_to_read += 1;
18036                next_offset += envelope_size;
18037            }
18038
18039            let next_out_of_line = decoder.next_out_of_line();
18040            let handles_before = decoder.remaining_handles();
18041            if let Some((inlined, num_bytes, num_handles)) =
18042                fidl::encoding::decode_envelope_header(decoder, next_offset)?
18043            {
18044                let member_inline_size =
18045                    <Nat64ProtocolCounters as fidl::encoding::TypeMarker>::inline_size(
18046                        decoder.context,
18047                    );
18048                if inlined != (member_inline_size <= 4) {
18049                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
18050                }
18051                let inner_offset;
18052                let mut inner_depth = depth.clone();
18053                if inlined {
18054                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
18055                    inner_offset = next_offset;
18056                } else {
18057                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
18058                    inner_depth.increment()?;
18059                }
18060                let val_ref = self
18061                    .nat64_protocol_counters
18062                    .get_or_insert_with(|| fidl::new_empty!(Nat64ProtocolCounters, D));
18063                fidl::decode!(
18064                    Nat64ProtocolCounters,
18065                    D,
18066                    val_ref,
18067                    decoder,
18068                    inner_offset,
18069                    inner_depth
18070                )?;
18071                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
18072                {
18073                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
18074                }
18075                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
18076                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
18077                }
18078            }
18079
18080            next_offset += envelope_size;
18081
18082            // Decode the remaining unknown envelopes.
18083            while next_offset < end_offset {
18084                _next_ordinal_to_read += 1;
18085                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
18086                next_offset += envelope_size;
18087            }
18088
18089            Ok(())
18090        }
18091    }
18092
18093    impl Nat64Mapping {
18094        #[inline(always)]
18095        fn max_ordinal_present(&self) -> u64 {
18096            if let Some(_) = self.counters {
18097                return 5;
18098            }
18099            if let Some(_) = self.remaining_time_ms {
18100                return 4;
18101            }
18102            if let Some(_) = self.ip6_addr {
18103                return 3;
18104            }
18105            if let Some(_) = self.ip4_addr {
18106                return 2;
18107            }
18108            if let Some(_) = self.mapping_id {
18109                return 1;
18110            }
18111            0
18112        }
18113    }
18114
18115    impl fidl::encoding::ValueTypeMarker for Nat64Mapping {
18116        type Borrowed<'a> = &'a Self;
18117        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
18118            value
18119        }
18120    }
18121
18122    unsafe impl fidl::encoding::TypeMarker for Nat64Mapping {
18123        type Owned = Self;
18124
18125        #[inline(always)]
18126        fn inline_align(_context: fidl::encoding::Context) -> usize {
18127            8
18128        }
18129
18130        #[inline(always)]
18131        fn inline_size(_context: fidl::encoding::Context) -> usize {
18132            16
18133        }
18134    }
18135
18136    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Nat64Mapping, D>
18137        for &Nat64Mapping
18138    {
18139        unsafe fn encode(
18140            self,
18141            encoder: &mut fidl::encoding::Encoder<'_, D>,
18142            offset: usize,
18143            mut depth: fidl::encoding::Depth,
18144        ) -> fidl::Result<()> {
18145            encoder.debug_check_bounds::<Nat64Mapping>(offset);
18146            // Vector header
18147            let max_ordinal: u64 = self.max_ordinal_present();
18148            encoder.write_num(max_ordinal, offset);
18149            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
18150            // Calling encoder.out_of_line_offset(0) is not allowed.
18151            if max_ordinal == 0 {
18152                return Ok(());
18153            }
18154            depth.increment()?;
18155            let envelope_size = 8;
18156            let bytes_len = max_ordinal as usize * envelope_size;
18157            #[allow(unused_variables)]
18158            let offset = encoder.out_of_line_offset(bytes_len);
18159            let mut _prev_end_offset: usize = 0;
18160            if 1 > max_ordinal {
18161                return Ok(());
18162            }
18163
18164            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
18165            // are envelope_size bytes.
18166            let cur_offset: usize = (1 - 1) * envelope_size;
18167
18168            // Zero reserved fields.
18169            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
18170
18171            // Safety:
18172            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
18173            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
18174            //   envelope_size bytes, there is always sufficient room.
18175            fidl::encoding::encode_in_envelope_optional::<u64, D>(
18176                self.mapping_id.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
18177                encoder,
18178                offset + cur_offset,
18179                depth,
18180            )?;
18181
18182            _prev_end_offset = cur_offset + envelope_size;
18183            if 2 > max_ordinal {
18184                return Ok(());
18185            }
18186
18187            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
18188            // are envelope_size bytes.
18189            let cur_offset: usize = (2 - 1) * envelope_size;
18190
18191            // Zero reserved fields.
18192            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
18193
18194            // Safety:
18195            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
18196            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
18197            //   envelope_size bytes, there is always sufficient room.
18198            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<u8>, D>(
18199            self.ip4_addr.as_ref().map(<fidl::encoding::UnboundedVector<u8> as fidl::encoding::ValueTypeMarker>::borrow),
18200            encoder, offset + cur_offset, depth
18201        )?;
18202
18203            _prev_end_offset = cur_offset + envelope_size;
18204            if 3 > max_ordinal {
18205                return Ok(());
18206            }
18207
18208            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
18209            // are envelope_size bytes.
18210            let cur_offset: usize = (3 - 1) * envelope_size;
18211
18212            // Zero reserved fields.
18213            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
18214
18215            // Safety:
18216            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
18217            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
18218            //   envelope_size bytes, there is always sufficient room.
18219            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<u8>, D>(
18220            self.ip6_addr.as_ref().map(<fidl::encoding::UnboundedVector<u8> as fidl::encoding::ValueTypeMarker>::borrow),
18221            encoder, offset + cur_offset, depth
18222        )?;
18223
18224            _prev_end_offset = cur_offset + envelope_size;
18225            if 4 > max_ordinal {
18226                return Ok(());
18227            }
18228
18229            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
18230            // are envelope_size bytes.
18231            let cur_offset: usize = (4 - 1) * envelope_size;
18232
18233            // Zero reserved fields.
18234            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
18235
18236            // Safety:
18237            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
18238            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
18239            //   envelope_size bytes, there is always sufficient room.
18240            fidl::encoding::encode_in_envelope_optional::<u32, D>(
18241                self.remaining_time_ms
18242                    .as_ref()
18243                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
18244                encoder,
18245                offset + cur_offset,
18246                depth,
18247            )?;
18248
18249            _prev_end_offset = cur_offset + envelope_size;
18250            if 5 > max_ordinal {
18251                return Ok(());
18252            }
18253
18254            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
18255            // are envelope_size bytes.
18256            let cur_offset: usize = (5 - 1) * envelope_size;
18257
18258            // Zero reserved fields.
18259            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
18260
18261            // Safety:
18262            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
18263            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
18264            //   envelope_size bytes, there is always sufficient room.
18265            fidl::encoding::encode_in_envelope_optional::<Nat64ProtocolCounters, D>(
18266                self.counters
18267                    .as_ref()
18268                    .map(<Nat64ProtocolCounters as fidl::encoding::ValueTypeMarker>::borrow),
18269                encoder,
18270                offset + cur_offset,
18271                depth,
18272            )?;
18273
18274            _prev_end_offset = cur_offset + envelope_size;
18275
18276            Ok(())
18277        }
18278    }
18279
18280    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Nat64Mapping {
18281        #[inline(always)]
18282        fn new_empty() -> Self {
18283            Self::default()
18284        }
18285
18286        unsafe fn decode(
18287            &mut self,
18288            decoder: &mut fidl::encoding::Decoder<'_, D>,
18289            offset: usize,
18290            mut depth: fidl::encoding::Depth,
18291        ) -> fidl::Result<()> {
18292            decoder.debug_check_bounds::<Self>(offset);
18293            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
18294                None => return Err(fidl::Error::NotNullable),
18295                Some(len) => len,
18296            };
18297            // Calling decoder.out_of_line_offset(0) is not allowed.
18298            if len == 0 {
18299                return Ok(());
18300            };
18301            depth.increment()?;
18302            let envelope_size = 8;
18303            let bytes_len = len * envelope_size;
18304            let offset = decoder.out_of_line_offset(bytes_len)?;
18305            // Decode the envelope for each type.
18306            let mut _next_ordinal_to_read = 0;
18307            let mut next_offset = offset;
18308            let end_offset = offset + bytes_len;
18309            _next_ordinal_to_read += 1;
18310            if next_offset >= end_offset {
18311                return Ok(());
18312            }
18313
18314            // Decode unknown envelopes for gaps in ordinals.
18315            while _next_ordinal_to_read < 1 {
18316                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
18317                _next_ordinal_to_read += 1;
18318                next_offset += envelope_size;
18319            }
18320
18321            let next_out_of_line = decoder.next_out_of_line();
18322            let handles_before = decoder.remaining_handles();
18323            if let Some((inlined, num_bytes, num_handles)) =
18324                fidl::encoding::decode_envelope_header(decoder, next_offset)?
18325            {
18326                let member_inline_size =
18327                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
18328                if inlined != (member_inline_size <= 4) {
18329                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
18330                }
18331                let inner_offset;
18332                let mut inner_depth = depth.clone();
18333                if inlined {
18334                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
18335                    inner_offset = next_offset;
18336                } else {
18337                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
18338                    inner_depth.increment()?;
18339                }
18340                let val_ref = self.mapping_id.get_or_insert_with(|| fidl::new_empty!(u64, D));
18341                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
18342                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
18343                {
18344                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
18345                }
18346                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
18347                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
18348                }
18349            }
18350
18351            next_offset += envelope_size;
18352            _next_ordinal_to_read += 1;
18353            if next_offset >= end_offset {
18354                return Ok(());
18355            }
18356
18357            // Decode unknown envelopes for gaps in ordinals.
18358            while _next_ordinal_to_read < 2 {
18359                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
18360                _next_ordinal_to_read += 1;
18361                next_offset += envelope_size;
18362            }
18363
18364            let next_out_of_line = decoder.next_out_of_line();
18365            let handles_before = decoder.remaining_handles();
18366            if let Some((inlined, num_bytes, num_handles)) =
18367                fidl::encoding::decode_envelope_header(decoder, next_offset)?
18368            {
18369                let member_inline_size = <fidl::encoding::UnboundedVector<u8> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
18370                if inlined != (member_inline_size <= 4) {
18371                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
18372                }
18373                let inner_offset;
18374                let mut inner_depth = depth.clone();
18375                if inlined {
18376                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
18377                    inner_offset = next_offset;
18378                } else {
18379                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
18380                    inner_depth.increment()?;
18381                }
18382                let val_ref = self.ip4_addr.get_or_insert_with(|| {
18383                    fidl::new_empty!(fidl::encoding::UnboundedVector<u8>, D)
18384                });
18385                fidl::decode!(
18386                    fidl::encoding::UnboundedVector<u8>,
18387                    D,
18388                    val_ref,
18389                    decoder,
18390                    inner_offset,
18391                    inner_depth
18392                )?;
18393                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
18394                {
18395                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
18396                }
18397                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
18398                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
18399                }
18400            }
18401
18402            next_offset += envelope_size;
18403            _next_ordinal_to_read += 1;
18404            if next_offset >= end_offset {
18405                return Ok(());
18406            }
18407
18408            // Decode unknown envelopes for gaps in ordinals.
18409            while _next_ordinal_to_read < 3 {
18410                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
18411                _next_ordinal_to_read += 1;
18412                next_offset += envelope_size;
18413            }
18414
18415            let next_out_of_line = decoder.next_out_of_line();
18416            let handles_before = decoder.remaining_handles();
18417            if let Some((inlined, num_bytes, num_handles)) =
18418                fidl::encoding::decode_envelope_header(decoder, next_offset)?
18419            {
18420                let member_inline_size = <fidl::encoding::UnboundedVector<u8> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
18421                if inlined != (member_inline_size <= 4) {
18422                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
18423                }
18424                let inner_offset;
18425                let mut inner_depth = depth.clone();
18426                if inlined {
18427                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
18428                    inner_offset = next_offset;
18429                } else {
18430                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
18431                    inner_depth.increment()?;
18432                }
18433                let val_ref = self.ip6_addr.get_or_insert_with(|| {
18434                    fidl::new_empty!(fidl::encoding::UnboundedVector<u8>, D)
18435                });
18436                fidl::decode!(
18437                    fidl::encoding::UnboundedVector<u8>,
18438                    D,
18439                    val_ref,
18440                    decoder,
18441                    inner_offset,
18442                    inner_depth
18443                )?;
18444                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
18445                {
18446                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
18447                }
18448                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
18449                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
18450                }
18451            }
18452
18453            next_offset += envelope_size;
18454            _next_ordinal_to_read += 1;
18455            if next_offset >= end_offset {
18456                return Ok(());
18457            }
18458
18459            // Decode unknown envelopes for gaps in ordinals.
18460            while _next_ordinal_to_read < 4 {
18461                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
18462                _next_ordinal_to_read += 1;
18463                next_offset += envelope_size;
18464            }
18465
18466            let next_out_of_line = decoder.next_out_of_line();
18467            let handles_before = decoder.remaining_handles();
18468            if let Some((inlined, num_bytes, num_handles)) =
18469                fidl::encoding::decode_envelope_header(decoder, next_offset)?
18470            {
18471                let member_inline_size =
18472                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
18473                if inlined != (member_inline_size <= 4) {
18474                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
18475                }
18476                let inner_offset;
18477                let mut inner_depth = depth.clone();
18478                if inlined {
18479                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
18480                    inner_offset = next_offset;
18481                } else {
18482                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
18483                    inner_depth.increment()?;
18484                }
18485                let val_ref =
18486                    self.remaining_time_ms.get_or_insert_with(|| fidl::new_empty!(u32, D));
18487                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
18488                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
18489                {
18490                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
18491                }
18492                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
18493                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
18494                }
18495            }
18496
18497            next_offset += envelope_size;
18498            _next_ordinal_to_read += 1;
18499            if next_offset >= end_offset {
18500                return Ok(());
18501            }
18502
18503            // Decode unknown envelopes for gaps in ordinals.
18504            while _next_ordinal_to_read < 5 {
18505                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
18506                _next_ordinal_to_read += 1;
18507                next_offset += envelope_size;
18508            }
18509
18510            let next_out_of_line = decoder.next_out_of_line();
18511            let handles_before = decoder.remaining_handles();
18512            if let Some((inlined, num_bytes, num_handles)) =
18513                fidl::encoding::decode_envelope_header(decoder, next_offset)?
18514            {
18515                let member_inline_size =
18516                    <Nat64ProtocolCounters as fidl::encoding::TypeMarker>::inline_size(
18517                        decoder.context,
18518                    );
18519                if inlined != (member_inline_size <= 4) {
18520                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
18521                }
18522                let inner_offset;
18523                let mut inner_depth = depth.clone();
18524                if inlined {
18525                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
18526                    inner_offset = next_offset;
18527                } else {
18528                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
18529                    inner_depth.increment()?;
18530                }
18531                let val_ref =
18532                    self.counters.get_or_insert_with(|| fidl::new_empty!(Nat64ProtocolCounters, D));
18533                fidl::decode!(
18534                    Nat64ProtocolCounters,
18535                    D,
18536                    val_ref,
18537                    decoder,
18538                    inner_offset,
18539                    inner_depth
18540                )?;
18541                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
18542                {
18543                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
18544                }
18545                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
18546                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
18547                }
18548            }
18549
18550            next_offset += envelope_size;
18551
18552            // Decode the remaining unknown envelopes.
18553            while next_offset < end_offset {
18554                _next_ordinal_to_read += 1;
18555                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
18556                next_offset += envelope_size;
18557            }
18558
18559            Ok(())
18560        }
18561    }
18562
18563    impl Nat64PacketCounters {
18564        #[inline(always)]
18565        fn max_ordinal_present(&self) -> u64 {
18566            if let Some(_) = self.ipv6_to_ipv4_packets {
18567                return 2;
18568            }
18569            if let Some(_) = self.ipv4_to_ipv6_packets {
18570                return 1;
18571            }
18572            0
18573        }
18574    }
18575
18576    impl fidl::encoding::ValueTypeMarker for Nat64PacketCounters {
18577        type Borrowed<'a> = &'a Self;
18578        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
18579            value
18580        }
18581    }
18582
18583    unsafe impl fidl::encoding::TypeMarker for Nat64PacketCounters {
18584        type Owned = Self;
18585
18586        #[inline(always)]
18587        fn inline_align(_context: fidl::encoding::Context) -> usize {
18588            8
18589        }
18590
18591        #[inline(always)]
18592        fn inline_size(_context: fidl::encoding::Context) -> usize {
18593            16
18594        }
18595    }
18596
18597    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Nat64PacketCounters, D>
18598        for &Nat64PacketCounters
18599    {
18600        unsafe fn encode(
18601            self,
18602            encoder: &mut fidl::encoding::Encoder<'_, D>,
18603            offset: usize,
18604            mut depth: fidl::encoding::Depth,
18605        ) -> fidl::Result<()> {
18606            encoder.debug_check_bounds::<Nat64PacketCounters>(offset);
18607            // Vector header
18608            let max_ordinal: u64 = self.max_ordinal_present();
18609            encoder.write_num(max_ordinal, offset);
18610            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
18611            // Calling encoder.out_of_line_offset(0) is not allowed.
18612            if max_ordinal == 0 {
18613                return Ok(());
18614            }
18615            depth.increment()?;
18616            let envelope_size = 8;
18617            let bytes_len = max_ordinal as usize * envelope_size;
18618            #[allow(unused_variables)]
18619            let offset = encoder.out_of_line_offset(bytes_len);
18620            let mut _prev_end_offset: usize = 0;
18621            if 1 > max_ordinal {
18622                return Ok(());
18623            }
18624
18625            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
18626            // are envelope_size bytes.
18627            let cur_offset: usize = (1 - 1) * envelope_size;
18628
18629            // Zero reserved fields.
18630            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
18631
18632            // Safety:
18633            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
18634            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
18635            //   envelope_size bytes, there is always sufficient room.
18636            fidl::encoding::encode_in_envelope_optional::<u64, D>(
18637                self.ipv4_to_ipv6_packets
18638                    .as_ref()
18639                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
18640                encoder,
18641                offset + cur_offset,
18642                depth,
18643            )?;
18644
18645            _prev_end_offset = cur_offset + envelope_size;
18646            if 2 > max_ordinal {
18647                return Ok(());
18648            }
18649
18650            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
18651            // are envelope_size bytes.
18652            let cur_offset: usize = (2 - 1) * envelope_size;
18653
18654            // Zero reserved fields.
18655            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
18656
18657            // Safety:
18658            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
18659            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
18660            //   envelope_size bytes, there is always sufficient room.
18661            fidl::encoding::encode_in_envelope_optional::<u64, D>(
18662                self.ipv6_to_ipv4_packets
18663                    .as_ref()
18664                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
18665                encoder,
18666                offset + cur_offset,
18667                depth,
18668            )?;
18669
18670            _prev_end_offset = cur_offset + envelope_size;
18671
18672            Ok(())
18673        }
18674    }
18675
18676    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Nat64PacketCounters {
18677        #[inline(always)]
18678        fn new_empty() -> Self {
18679            Self::default()
18680        }
18681
18682        unsafe fn decode(
18683            &mut self,
18684            decoder: &mut fidl::encoding::Decoder<'_, D>,
18685            offset: usize,
18686            mut depth: fidl::encoding::Depth,
18687        ) -> fidl::Result<()> {
18688            decoder.debug_check_bounds::<Self>(offset);
18689            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
18690                None => return Err(fidl::Error::NotNullable),
18691                Some(len) => len,
18692            };
18693            // Calling decoder.out_of_line_offset(0) is not allowed.
18694            if len == 0 {
18695                return Ok(());
18696            };
18697            depth.increment()?;
18698            let envelope_size = 8;
18699            let bytes_len = len * envelope_size;
18700            let offset = decoder.out_of_line_offset(bytes_len)?;
18701            // Decode the envelope for each type.
18702            let mut _next_ordinal_to_read = 0;
18703            let mut next_offset = offset;
18704            let end_offset = offset + bytes_len;
18705            _next_ordinal_to_read += 1;
18706            if next_offset >= end_offset {
18707                return Ok(());
18708            }
18709
18710            // Decode unknown envelopes for gaps in ordinals.
18711            while _next_ordinal_to_read < 1 {
18712                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
18713                _next_ordinal_to_read += 1;
18714                next_offset += envelope_size;
18715            }
18716
18717            let next_out_of_line = decoder.next_out_of_line();
18718            let handles_before = decoder.remaining_handles();
18719            if let Some((inlined, num_bytes, num_handles)) =
18720                fidl::encoding::decode_envelope_header(decoder, next_offset)?
18721            {
18722                let member_inline_size =
18723                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
18724                if inlined != (member_inline_size <= 4) {
18725                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
18726                }
18727                let inner_offset;
18728                let mut inner_depth = depth.clone();
18729                if inlined {
18730                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
18731                    inner_offset = next_offset;
18732                } else {
18733                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
18734                    inner_depth.increment()?;
18735                }
18736                let val_ref =
18737                    self.ipv4_to_ipv6_packets.get_or_insert_with(|| fidl::new_empty!(u64, D));
18738                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
18739                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
18740                {
18741                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
18742                }
18743                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
18744                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
18745                }
18746            }
18747
18748            next_offset += envelope_size;
18749            _next_ordinal_to_read += 1;
18750            if next_offset >= end_offset {
18751                return Ok(());
18752            }
18753
18754            // Decode unknown envelopes for gaps in ordinals.
18755            while _next_ordinal_to_read < 2 {
18756                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
18757                _next_ordinal_to_read += 1;
18758                next_offset += envelope_size;
18759            }
18760
18761            let next_out_of_line = decoder.next_out_of_line();
18762            let handles_before = decoder.remaining_handles();
18763            if let Some((inlined, num_bytes, num_handles)) =
18764                fidl::encoding::decode_envelope_header(decoder, next_offset)?
18765            {
18766                let member_inline_size =
18767                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
18768                if inlined != (member_inline_size <= 4) {
18769                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
18770                }
18771                let inner_offset;
18772                let mut inner_depth = depth.clone();
18773                if inlined {
18774                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
18775                    inner_offset = next_offset;
18776                } else {
18777                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
18778                    inner_depth.increment()?;
18779                }
18780                let val_ref =
18781                    self.ipv6_to_ipv4_packets.get_or_insert_with(|| fidl::new_empty!(u64, D));
18782                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
18783                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
18784                {
18785                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
18786                }
18787                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
18788                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
18789                }
18790            }
18791
18792            next_offset += envelope_size;
18793
18794            // Decode the remaining unknown envelopes.
18795            while next_offset < end_offset {
18796                _next_ordinal_to_read += 1;
18797                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
18798                next_offset += envelope_size;
18799            }
18800
18801            Ok(())
18802        }
18803    }
18804
18805    impl Nat64ProtocolCounters {
18806        #[inline(always)]
18807        fn max_ordinal_present(&self) -> u64 {
18808            if let Some(_) = self.total {
18809                return 4;
18810            }
18811            if let Some(_) = self.icmp {
18812                return 3;
18813            }
18814            if let Some(_) = self.udp {
18815                return 2;
18816            }
18817            if let Some(_) = self.tcp {
18818                return 1;
18819            }
18820            0
18821        }
18822    }
18823
18824    impl fidl::encoding::ValueTypeMarker for Nat64ProtocolCounters {
18825        type Borrowed<'a> = &'a Self;
18826        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
18827            value
18828        }
18829    }
18830
18831    unsafe impl fidl::encoding::TypeMarker for Nat64ProtocolCounters {
18832        type Owned = Self;
18833
18834        #[inline(always)]
18835        fn inline_align(_context: fidl::encoding::Context) -> usize {
18836            8
18837        }
18838
18839        #[inline(always)]
18840        fn inline_size(_context: fidl::encoding::Context) -> usize {
18841            16
18842        }
18843    }
18844
18845    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Nat64ProtocolCounters, D>
18846        for &Nat64ProtocolCounters
18847    {
18848        unsafe fn encode(
18849            self,
18850            encoder: &mut fidl::encoding::Encoder<'_, D>,
18851            offset: usize,
18852            mut depth: fidl::encoding::Depth,
18853        ) -> fidl::Result<()> {
18854            encoder.debug_check_bounds::<Nat64ProtocolCounters>(offset);
18855            // Vector header
18856            let max_ordinal: u64 = self.max_ordinal_present();
18857            encoder.write_num(max_ordinal, offset);
18858            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
18859            // Calling encoder.out_of_line_offset(0) is not allowed.
18860            if max_ordinal == 0 {
18861                return Ok(());
18862            }
18863            depth.increment()?;
18864            let envelope_size = 8;
18865            let bytes_len = max_ordinal as usize * envelope_size;
18866            #[allow(unused_variables)]
18867            let offset = encoder.out_of_line_offset(bytes_len);
18868            let mut _prev_end_offset: usize = 0;
18869            if 1 > max_ordinal {
18870                return Ok(());
18871            }
18872
18873            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
18874            // are envelope_size bytes.
18875            let cur_offset: usize = (1 - 1) * envelope_size;
18876
18877            // Zero reserved fields.
18878            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
18879
18880            // Safety:
18881            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
18882            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
18883            //   envelope_size bytes, there is always sufficient room.
18884            fidl::encoding::encode_in_envelope_optional::<Nat64TrafficCounters, D>(
18885                self.tcp
18886                    .as_ref()
18887                    .map(<Nat64TrafficCounters as fidl::encoding::ValueTypeMarker>::borrow),
18888                encoder,
18889                offset + cur_offset,
18890                depth,
18891            )?;
18892
18893            _prev_end_offset = cur_offset + envelope_size;
18894            if 2 > max_ordinal {
18895                return Ok(());
18896            }
18897
18898            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
18899            // are envelope_size bytes.
18900            let cur_offset: usize = (2 - 1) * envelope_size;
18901
18902            // Zero reserved fields.
18903            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
18904
18905            // Safety:
18906            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
18907            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
18908            //   envelope_size bytes, there is always sufficient room.
18909            fidl::encoding::encode_in_envelope_optional::<Nat64TrafficCounters, D>(
18910                self.udp
18911                    .as_ref()
18912                    .map(<Nat64TrafficCounters as fidl::encoding::ValueTypeMarker>::borrow),
18913                encoder,
18914                offset + cur_offset,
18915                depth,
18916            )?;
18917
18918            _prev_end_offset = cur_offset + envelope_size;
18919            if 3 > max_ordinal {
18920                return Ok(());
18921            }
18922
18923            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
18924            // are envelope_size bytes.
18925            let cur_offset: usize = (3 - 1) * envelope_size;
18926
18927            // Zero reserved fields.
18928            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
18929
18930            // Safety:
18931            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
18932            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
18933            //   envelope_size bytes, there is always sufficient room.
18934            fidl::encoding::encode_in_envelope_optional::<Nat64TrafficCounters, D>(
18935                self.icmp
18936                    .as_ref()
18937                    .map(<Nat64TrafficCounters as fidl::encoding::ValueTypeMarker>::borrow),
18938                encoder,
18939                offset + cur_offset,
18940                depth,
18941            )?;
18942
18943            _prev_end_offset = cur_offset + envelope_size;
18944            if 4 > max_ordinal {
18945                return Ok(());
18946            }
18947
18948            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
18949            // are envelope_size bytes.
18950            let cur_offset: usize = (4 - 1) * envelope_size;
18951
18952            // Zero reserved fields.
18953            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
18954
18955            // Safety:
18956            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
18957            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
18958            //   envelope_size bytes, there is always sufficient room.
18959            fidl::encoding::encode_in_envelope_optional::<Nat64TrafficCounters, D>(
18960                self.total
18961                    .as_ref()
18962                    .map(<Nat64TrafficCounters as fidl::encoding::ValueTypeMarker>::borrow),
18963                encoder,
18964                offset + cur_offset,
18965                depth,
18966            )?;
18967
18968            _prev_end_offset = cur_offset + envelope_size;
18969
18970            Ok(())
18971        }
18972    }
18973
18974    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Nat64ProtocolCounters {
18975        #[inline(always)]
18976        fn new_empty() -> Self {
18977            Self::default()
18978        }
18979
18980        unsafe fn decode(
18981            &mut self,
18982            decoder: &mut fidl::encoding::Decoder<'_, D>,
18983            offset: usize,
18984            mut depth: fidl::encoding::Depth,
18985        ) -> fidl::Result<()> {
18986            decoder.debug_check_bounds::<Self>(offset);
18987            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
18988                None => return Err(fidl::Error::NotNullable),
18989                Some(len) => len,
18990            };
18991            // Calling decoder.out_of_line_offset(0) is not allowed.
18992            if len == 0 {
18993                return Ok(());
18994            };
18995            depth.increment()?;
18996            let envelope_size = 8;
18997            let bytes_len = len * envelope_size;
18998            let offset = decoder.out_of_line_offset(bytes_len)?;
18999            // Decode the envelope for each type.
19000            let mut _next_ordinal_to_read = 0;
19001            let mut next_offset = offset;
19002            let end_offset = offset + bytes_len;
19003            _next_ordinal_to_read += 1;
19004            if next_offset >= end_offset {
19005                return Ok(());
19006            }
19007
19008            // Decode unknown envelopes for gaps in ordinals.
19009            while _next_ordinal_to_read < 1 {
19010                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
19011                _next_ordinal_to_read += 1;
19012                next_offset += envelope_size;
19013            }
19014
19015            let next_out_of_line = decoder.next_out_of_line();
19016            let handles_before = decoder.remaining_handles();
19017            if let Some((inlined, num_bytes, num_handles)) =
19018                fidl::encoding::decode_envelope_header(decoder, next_offset)?
19019            {
19020                let member_inline_size =
19021                    <Nat64TrafficCounters as fidl::encoding::TypeMarker>::inline_size(
19022                        decoder.context,
19023                    );
19024                if inlined != (member_inline_size <= 4) {
19025                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
19026                }
19027                let inner_offset;
19028                let mut inner_depth = depth.clone();
19029                if inlined {
19030                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
19031                    inner_offset = next_offset;
19032                } else {
19033                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
19034                    inner_depth.increment()?;
19035                }
19036                let val_ref =
19037                    self.tcp.get_or_insert_with(|| fidl::new_empty!(Nat64TrafficCounters, D));
19038                fidl::decode!(
19039                    Nat64TrafficCounters,
19040                    D,
19041                    val_ref,
19042                    decoder,
19043                    inner_offset,
19044                    inner_depth
19045                )?;
19046                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
19047                {
19048                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
19049                }
19050                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
19051                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
19052                }
19053            }
19054
19055            next_offset += envelope_size;
19056            _next_ordinal_to_read += 1;
19057            if next_offset >= end_offset {
19058                return Ok(());
19059            }
19060
19061            // Decode unknown envelopes for gaps in ordinals.
19062            while _next_ordinal_to_read < 2 {
19063                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
19064                _next_ordinal_to_read += 1;
19065                next_offset += envelope_size;
19066            }
19067
19068            let next_out_of_line = decoder.next_out_of_line();
19069            let handles_before = decoder.remaining_handles();
19070            if let Some((inlined, num_bytes, num_handles)) =
19071                fidl::encoding::decode_envelope_header(decoder, next_offset)?
19072            {
19073                let member_inline_size =
19074                    <Nat64TrafficCounters as fidl::encoding::TypeMarker>::inline_size(
19075                        decoder.context,
19076                    );
19077                if inlined != (member_inline_size <= 4) {
19078                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
19079                }
19080                let inner_offset;
19081                let mut inner_depth = depth.clone();
19082                if inlined {
19083                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
19084                    inner_offset = next_offset;
19085                } else {
19086                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
19087                    inner_depth.increment()?;
19088                }
19089                let val_ref =
19090                    self.udp.get_or_insert_with(|| fidl::new_empty!(Nat64TrafficCounters, D));
19091                fidl::decode!(
19092                    Nat64TrafficCounters,
19093                    D,
19094                    val_ref,
19095                    decoder,
19096                    inner_offset,
19097                    inner_depth
19098                )?;
19099                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
19100                {
19101                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
19102                }
19103                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
19104                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
19105                }
19106            }
19107
19108            next_offset += envelope_size;
19109            _next_ordinal_to_read += 1;
19110            if next_offset >= end_offset {
19111                return Ok(());
19112            }
19113
19114            // Decode unknown envelopes for gaps in ordinals.
19115            while _next_ordinal_to_read < 3 {
19116                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
19117                _next_ordinal_to_read += 1;
19118                next_offset += envelope_size;
19119            }
19120
19121            let next_out_of_line = decoder.next_out_of_line();
19122            let handles_before = decoder.remaining_handles();
19123            if let Some((inlined, num_bytes, num_handles)) =
19124                fidl::encoding::decode_envelope_header(decoder, next_offset)?
19125            {
19126                let member_inline_size =
19127                    <Nat64TrafficCounters as fidl::encoding::TypeMarker>::inline_size(
19128                        decoder.context,
19129                    );
19130                if inlined != (member_inline_size <= 4) {
19131                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
19132                }
19133                let inner_offset;
19134                let mut inner_depth = depth.clone();
19135                if inlined {
19136                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
19137                    inner_offset = next_offset;
19138                } else {
19139                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
19140                    inner_depth.increment()?;
19141                }
19142                let val_ref =
19143                    self.icmp.get_or_insert_with(|| fidl::new_empty!(Nat64TrafficCounters, D));
19144                fidl::decode!(
19145                    Nat64TrafficCounters,
19146                    D,
19147                    val_ref,
19148                    decoder,
19149                    inner_offset,
19150                    inner_depth
19151                )?;
19152                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
19153                {
19154                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
19155                }
19156                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
19157                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
19158                }
19159            }
19160
19161            next_offset += envelope_size;
19162            _next_ordinal_to_read += 1;
19163            if next_offset >= end_offset {
19164                return Ok(());
19165            }
19166
19167            // Decode unknown envelopes for gaps in ordinals.
19168            while _next_ordinal_to_read < 4 {
19169                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
19170                _next_ordinal_to_read += 1;
19171                next_offset += envelope_size;
19172            }
19173
19174            let next_out_of_line = decoder.next_out_of_line();
19175            let handles_before = decoder.remaining_handles();
19176            if let Some((inlined, num_bytes, num_handles)) =
19177                fidl::encoding::decode_envelope_header(decoder, next_offset)?
19178            {
19179                let member_inline_size =
19180                    <Nat64TrafficCounters as fidl::encoding::TypeMarker>::inline_size(
19181                        decoder.context,
19182                    );
19183                if inlined != (member_inline_size <= 4) {
19184                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
19185                }
19186                let inner_offset;
19187                let mut inner_depth = depth.clone();
19188                if inlined {
19189                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
19190                    inner_offset = next_offset;
19191                } else {
19192                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
19193                    inner_depth.increment()?;
19194                }
19195                let val_ref =
19196                    self.total.get_or_insert_with(|| fidl::new_empty!(Nat64TrafficCounters, D));
19197                fidl::decode!(
19198                    Nat64TrafficCounters,
19199                    D,
19200                    val_ref,
19201                    decoder,
19202                    inner_offset,
19203                    inner_depth
19204                )?;
19205                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
19206                {
19207                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
19208                }
19209                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
19210                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
19211                }
19212            }
19213
19214            next_offset += envelope_size;
19215
19216            // Decode the remaining unknown envelopes.
19217            while next_offset < end_offset {
19218                _next_ordinal_to_read += 1;
19219                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
19220                next_offset += envelope_size;
19221            }
19222
19223            Ok(())
19224        }
19225    }
19226
19227    impl Nat64TrafficCounters {
19228        #[inline(always)]
19229        fn max_ordinal_present(&self) -> u64 {
19230            if let Some(_) = self.ipv6_to_ipv4_bytes {
19231                return 4;
19232            }
19233            if let Some(_) = self.ipv6_to_ipv4_packets {
19234                return 3;
19235            }
19236            if let Some(_) = self.ipv4_to_ipv6_bytes {
19237                return 2;
19238            }
19239            if let Some(_) = self.ipv4_to_ipv6_packets {
19240                return 1;
19241            }
19242            0
19243        }
19244    }
19245
19246    impl fidl::encoding::ValueTypeMarker for Nat64TrafficCounters {
19247        type Borrowed<'a> = &'a Self;
19248        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
19249            value
19250        }
19251    }
19252
19253    unsafe impl fidl::encoding::TypeMarker for Nat64TrafficCounters {
19254        type Owned = Self;
19255
19256        #[inline(always)]
19257        fn inline_align(_context: fidl::encoding::Context) -> usize {
19258            8
19259        }
19260
19261        #[inline(always)]
19262        fn inline_size(_context: fidl::encoding::Context) -> usize {
19263            16
19264        }
19265    }
19266
19267    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Nat64TrafficCounters, D>
19268        for &Nat64TrafficCounters
19269    {
19270        unsafe fn encode(
19271            self,
19272            encoder: &mut fidl::encoding::Encoder<'_, D>,
19273            offset: usize,
19274            mut depth: fidl::encoding::Depth,
19275        ) -> fidl::Result<()> {
19276            encoder.debug_check_bounds::<Nat64TrafficCounters>(offset);
19277            // Vector header
19278            let max_ordinal: u64 = self.max_ordinal_present();
19279            encoder.write_num(max_ordinal, offset);
19280            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
19281            // Calling encoder.out_of_line_offset(0) is not allowed.
19282            if max_ordinal == 0 {
19283                return Ok(());
19284            }
19285            depth.increment()?;
19286            let envelope_size = 8;
19287            let bytes_len = max_ordinal as usize * envelope_size;
19288            #[allow(unused_variables)]
19289            let offset = encoder.out_of_line_offset(bytes_len);
19290            let mut _prev_end_offset: usize = 0;
19291            if 1 > max_ordinal {
19292                return Ok(());
19293            }
19294
19295            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
19296            // are envelope_size bytes.
19297            let cur_offset: usize = (1 - 1) * envelope_size;
19298
19299            // Zero reserved fields.
19300            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
19301
19302            // Safety:
19303            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
19304            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
19305            //   envelope_size bytes, there is always sufficient room.
19306            fidl::encoding::encode_in_envelope_optional::<u64, D>(
19307                self.ipv4_to_ipv6_packets
19308                    .as_ref()
19309                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
19310                encoder,
19311                offset + cur_offset,
19312                depth,
19313            )?;
19314
19315            _prev_end_offset = cur_offset + envelope_size;
19316            if 2 > max_ordinal {
19317                return Ok(());
19318            }
19319
19320            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
19321            // are envelope_size bytes.
19322            let cur_offset: usize = (2 - 1) * envelope_size;
19323
19324            // Zero reserved fields.
19325            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
19326
19327            // Safety:
19328            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
19329            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
19330            //   envelope_size bytes, there is always sufficient room.
19331            fidl::encoding::encode_in_envelope_optional::<u64, D>(
19332                self.ipv4_to_ipv6_bytes
19333                    .as_ref()
19334                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
19335                encoder,
19336                offset + cur_offset,
19337                depth,
19338            )?;
19339
19340            _prev_end_offset = cur_offset + envelope_size;
19341            if 3 > max_ordinal {
19342                return Ok(());
19343            }
19344
19345            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
19346            // are envelope_size bytes.
19347            let cur_offset: usize = (3 - 1) * envelope_size;
19348
19349            // Zero reserved fields.
19350            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
19351
19352            // Safety:
19353            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
19354            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
19355            //   envelope_size bytes, there is always sufficient room.
19356            fidl::encoding::encode_in_envelope_optional::<u64, D>(
19357                self.ipv6_to_ipv4_packets
19358                    .as_ref()
19359                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
19360                encoder,
19361                offset + cur_offset,
19362                depth,
19363            )?;
19364
19365            _prev_end_offset = cur_offset + envelope_size;
19366            if 4 > max_ordinal {
19367                return Ok(());
19368            }
19369
19370            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
19371            // are envelope_size bytes.
19372            let cur_offset: usize = (4 - 1) * envelope_size;
19373
19374            // Zero reserved fields.
19375            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
19376
19377            // Safety:
19378            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
19379            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
19380            //   envelope_size bytes, there is always sufficient room.
19381            fidl::encoding::encode_in_envelope_optional::<u64, D>(
19382                self.ipv6_to_ipv4_bytes
19383                    .as_ref()
19384                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
19385                encoder,
19386                offset + cur_offset,
19387                depth,
19388            )?;
19389
19390            _prev_end_offset = cur_offset + envelope_size;
19391
19392            Ok(())
19393        }
19394    }
19395
19396    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Nat64TrafficCounters {
19397        #[inline(always)]
19398        fn new_empty() -> Self {
19399            Self::default()
19400        }
19401
19402        unsafe fn decode(
19403            &mut self,
19404            decoder: &mut fidl::encoding::Decoder<'_, D>,
19405            offset: usize,
19406            mut depth: fidl::encoding::Depth,
19407        ) -> fidl::Result<()> {
19408            decoder.debug_check_bounds::<Self>(offset);
19409            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
19410                None => return Err(fidl::Error::NotNullable),
19411                Some(len) => len,
19412            };
19413            // Calling decoder.out_of_line_offset(0) is not allowed.
19414            if len == 0 {
19415                return Ok(());
19416            };
19417            depth.increment()?;
19418            let envelope_size = 8;
19419            let bytes_len = len * envelope_size;
19420            let offset = decoder.out_of_line_offset(bytes_len)?;
19421            // Decode the envelope for each type.
19422            let mut _next_ordinal_to_read = 0;
19423            let mut next_offset = offset;
19424            let end_offset = offset + bytes_len;
19425            _next_ordinal_to_read += 1;
19426            if next_offset >= end_offset {
19427                return Ok(());
19428            }
19429
19430            // Decode unknown envelopes for gaps in ordinals.
19431            while _next_ordinal_to_read < 1 {
19432                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
19433                _next_ordinal_to_read += 1;
19434                next_offset += envelope_size;
19435            }
19436
19437            let next_out_of_line = decoder.next_out_of_line();
19438            let handles_before = decoder.remaining_handles();
19439            if let Some((inlined, num_bytes, num_handles)) =
19440                fidl::encoding::decode_envelope_header(decoder, next_offset)?
19441            {
19442                let member_inline_size =
19443                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
19444                if inlined != (member_inline_size <= 4) {
19445                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
19446                }
19447                let inner_offset;
19448                let mut inner_depth = depth.clone();
19449                if inlined {
19450                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
19451                    inner_offset = next_offset;
19452                } else {
19453                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
19454                    inner_depth.increment()?;
19455                }
19456                let val_ref =
19457                    self.ipv4_to_ipv6_packets.get_or_insert_with(|| fidl::new_empty!(u64, D));
19458                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
19459                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
19460                {
19461                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
19462                }
19463                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
19464                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
19465                }
19466            }
19467
19468            next_offset += envelope_size;
19469            _next_ordinal_to_read += 1;
19470            if next_offset >= end_offset {
19471                return Ok(());
19472            }
19473
19474            // Decode unknown envelopes for gaps in ordinals.
19475            while _next_ordinal_to_read < 2 {
19476                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
19477                _next_ordinal_to_read += 1;
19478                next_offset += envelope_size;
19479            }
19480
19481            let next_out_of_line = decoder.next_out_of_line();
19482            let handles_before = decoder.remaining_handles();
19483            if let Some((inlined, num_bytes, num_handles)) =
19484                fidl::encoding::decode_envelope_header(decoder, next_offset)?
19485            {
19486                let member_inline_size =
19487                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
19488                if inlined != (member_inline_size <= 4) {
19489                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
19490                }
19491                let inner_offset;
19492                let mut inner_depth = depth.clone();
19493                if inlined {
19494                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
19495                    inner_offset = next_offset;
19496                } else {
19497                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
19498                    inner_depth.increment()?;
19499                }
19500                let val_ref =
19501                    self.ipv4_to_ipv6_bytes.get_or_insert_with(|| fidl::new_empty!(u64, D));
19502                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
19503                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
19504                {
19505                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
19506                }
19507                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
19508                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
19509                }
19510            }
19511
19512            next_offset += envelope_size;
19513            _next_ordinal_to_read += 1;
19514            if next_offset >= end_offset {
19515                return Ok(());
19516            }
19517
19518            // Decode unknown envelopes for gaps in ordinals.
19519            while _next_ordinal_to_read < 3 {
19520                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
19521                _next_ordinal_to_read += 1;
19522                next_offset += envelope_size;
19523            }
19524
19525            let next_out_of_line = decoder.next_out_of_line();
19526            let handles_before = decoder.remaining_handles();
19527            if let Some((inlined, num_bytes, num_handles)) =
19528                fidl::encoding::decode_envelope_header(decoder, next_offset)?
19529            {
19530                let member_inline_size =
19531                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
19532                if inlined != (member_inline_size <= 4) {
19533                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
19534                }
19535                let inner_offset;
19536                let mut inner_depth = depth.clone();
19537                if inlined {
19538                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
19539                    inner_offset = next_offset;
19540                } else {
19541                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
19542                    inner_depth.increment()?;
19543                }
19544                let val_ref =
19545                    self.ipv6_to_ipv4_packets.get_or_insert_with(|| fidl::new_empty!(u64, D));
19546                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
19547                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
19548                {
19549                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
19550                }
19551                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
19552                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
19553                }
19554            }
19555
19556            next_offset += envelope_size;
19557            _next_ordinal_to_read += 1;
19558            if next_offset >= end_offset {
19559                return Ok(());
19560            }
19561
19562            // Decode unknown envelopes for gaps in ordinals.
19563            while _next_ordinal_to_read < 4 {
19564                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
19565                _next_ordinal_to_read += 1;
19566                next_offset += envelope_size;
19567            }
19568
19569            let next_out_of_line = decoder.next_out_of_line();
19570            let handles_before = decoder.remaining_handles();
19571            if let Some((inlined, num_bytes, num_handles)) =
19572                fidl::encoding::decode_envelope_header(decoder, next_offset)?
19573            {
19574                let member_inline_size =
19575                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
19576                if inlined != (member_inline_size <= 4) {
19577                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
19578                }
19579                let inner_offset;
19580                let mut inner_depth = depth.clone();
19581                if inlined {
19582                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
19583                    inner_offset = next_offset;
19584                } else {
19585                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
19586                    inner_depth.increment()?;
19587                }
19588                let val_ref =
19589                    self.ipv6_to_ipv4_bytes.get_or_insert_with(|| fidl::new_empty!(u64, D));
19590                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
19591                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
19592                {
19593                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
19594                }
19595                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
19596                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
19597                }
19598            }
19599
19600            next_offset += envelope_size;
19601
19602            // Decode the remaining unknown envelopes.
19603            while next_offset < end_offset {
19604                _next_ordinal_to_read += 1;
19605                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
19606                next_offset += envelope_size;
19607            }
19608
19609            Ok(())
19610        }
19611    }
19612
19613    impl NetifAddress {
19614        #[inline(always)]
19615        fn max_ordinal_present(&self) -> u64 {
19616            if let Some(_) = self.valid {
19617                return 5;
19618            }
19619            if let Some(_) = self.preferred {
19620                return 4;
19621            }
19622            if let Some(_) = self.origin {
19623                return 3;
19624            }
19625            if let Some(_) = self.prefix_length {
19626                return 2;
19627            }
19628            if let Some(_) = self.address {
19629                return 1;
19630            }
19631            0
19632        }
19633    }
19634
19635    impl fidl::encoding::ValueTypeMarker for NetifAddress {
19636        type Borrowed<'a> = &'a Self;
19637        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
19638            value
19639        }
19640    }
19641
19642    unsafe impl fidl::encoding::TypeMarker for NetifAddress {
19643        type Owned = Self;
19644
19645        #[inline(always)]
19646        fn inline_align(_context: fidl::encoding::Context) -> usize {
19647            8
19648        }
19649
19650        #[inline(always)]
19651        fn inline_size(_context: fidl::encoding::Context) -> usize {
19652            16
19653        }
19654    }
19655
19656    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<NetifAddress, D>
19657        for &NetifAddress
19658    {
19659        unsafe fn encode(
19660            self,
19661            encoder: &mut fidl::encoding::Encoder<'_, D>,
19662            offset: usize,
19663            mut depth: fidl::encoding::Depth,
19664        ) -> fidl::Result<()> {
19665            encoder.debug_check_bounds::<NetifAddress>(offset);
19666            // Vector header
19667            let max_ordinal: u64 = self.max_ordinal_present();
19668            encoder.write_num(max_ordinal, offset);
19669            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
19670            // Calling encoder.out_of_line_offset(0) is not allowed.
19671            if max_ordinal == 0 {
19672                return Ok(());
19673            }
19674            depth.increment()?;
19675            let envelope_size = 8;
19676            let bytes_len = max_ordinal as usize * envelope_size;
19677            #[allow(unused_variables)]
19678            let offset = encoder.out_of_line_offset(bytes_len);
19679            let mut _prev_end_offset: usize = 0;
19680            if 1 > max_ordinal {
19681                return Ok(());
19682            }
19683
19684            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
19685            // are envelope_size bytes.
19686            let cur_offset: usize = (1 - 1) * envelope_size;
19687
19688            // Zero reserved fields.
19689            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
19690
19691            // Safety:
19692            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
19693            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
19694            //   envelope_size bytes, there is always sufficient room.
19695            fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_net_common::Ipv6Address, D>(
19696            self.address.as_ref().map(<fidl_fuchsia_net_common::Ipv6Address as fidl::encoding::ValueTypeMarker>::borrow),
19697            encoder, offset + cur_offset, depth
19698        )?;
19699
19700            _prev_end_offset = cur_offset + envelope_size;
19701            if 2 > max_ordinal {
19702                return Ok(());
19703            }
19704
19705            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
19706            // are envelope_size bytes.
19707            let cur_offset: usize = (2 - 1) * envelope_size;
19708
19709            // Zero reserved fields.
19710            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
19711
19712            // Safety:
19713            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
19714            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
19715            //   envelope_size bytes, there is always sufficient room.
19716            fidl::encoding::encode_in_envelope_optional::<u8, D>(
19717                self.prefix_length.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
19718                encoder,
19719                offset + cur_offset,
19720                depth,
19721            )?;
19722
19723            _prev_end_offset = cur_offset + envelope_size;
19724            if 3 > max_ordinal {
19725                return Ok(());
19726            }
19727
19728            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
19729            // are envelope_size bytes.
19730            let cur_offset: usize = (3 - 1) * envelope_size;
19731
19732            // Zero reserved fields.
19733            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
19734
19735            // Safety:
19736            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
19737            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
19738            //   envelope_size bytes, there is always sufficient room.
19739            fidl::encoding::encode_in_envelope_optional::<AddressOrigin, D>(
19740                self.origin
19741                    .as_ref()
19742                    .map(<AddressOrigin as fidl::encoding::ValueTypeMarker>::borrow),
19743                encoder,
19744                offset + cur_offset,
19745                depth,
19746            )?;
19747
19748            _prev_end_offset = cur_offset + envelope_size;
19749            if 4 > max_ordinal {
19750                return Ok(());
19751            }
19752
19753            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
19754            // are envelope_size bytes.
19755            let cur_offset: usize = (4 - 1) * envelope_size;
19756
19757            // Zero reserved fields.
19758            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
19759
19760            // Safety:
19761            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
19762            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
19763            //   envelope_size bytes, there is always sufficient room.
19764            fidl::encoding::encode_in_envelope_optional::<bool, D>(
19765                self.preferred.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
19766                encoder,
19767                offset + cur_offset,
19768                depth,
19769            )?;
19770
19771            _prev_end_offset = cur_offset + envelope_size;
19772            if 5 > max_ordinal {
19773                return Ok(());
19774            }
19775
19776            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
19777            // are envelope_size bytes.
19778            let cur_offset: usize = (5 - 1) * envelope_size;
19779
19780            // Zero reserved fields.
19781            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
19782
19783            // Safety:
19784            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
19785            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
19786            //   envelope_size bytes, there is always sufficient room.
19787            fidl::encoding::encode_in_envelope_optional::<bool, D>(
19788                self.valid.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
19789                encoder,
19790                offset + cur_offset,
19791                depth,
19792            )?;
19793
19794            _prev_end_offset = cur_offset + envelope_size;
19795
19796            Ok(())
19797        }
19798    }
19799
19800    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for NetifAddress {
19801        #[inline(always)]
19802        fn new_empty() -> Self {
19803            Self::default()
19804        }
19805
19806        unsafe fn decode(
19807            &mut self,
19808            decoder: &mut fidl::encoding::Decoder<'_, D>,
19809            offset: usize,
19810            mut depth: fidl::encoding::Depth,
19811        ) -> fidl::Result<()> {
19812            decoder.debug_check_bounds::<Self>(offset);
19813            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
19814                None => return Err(fidl::Error::NotNullable),
19815                Some(len) => len,
19816            };
19817            // Calling decoder.out_of_line_offset(0) is not allowed.
19818            if len == 0 {
19819                return Ok(());
19820            };
19821            depth.increment()?;
19822            let envelope_size = 8;
19823            let bytes_len = len * envelope_size;
19824            let offset = decoder.out_of_line_offset(bytes_len)?;
19825            // Decode the envelope for each type.
19826            let mut _next_ordinal_to_read = 0;
19827            let mut next_offset = offset;
19828            let end_offset = offset + bytes_len;
19829            _next_ordinal_to_read += 1;
19830            if next_offset >= end_offset {
19831                return Ok(());
19832            }
19833
19834            // Decode unknown envelopes for gaps in ordinals.
19835            while _next_ordinal_to_read < 1 {
19836                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
19837                _next_ordinal_to_read += 1;
19838                next_offset += envelope_size;
19839            }
19840
19841            let next_out_of_line = decoder.next_out_of_line();
19842            let handles_before = decoder.remaining_handles();
19843            if let Some((inlined, num_bytes, num_handles)) =
19844                fidl::encoding::decode_envelope_header(decoder, next_offset)?
19845            {
19846                let member_inline_size = <fidl_fuchsia_net_common::Ipv6Address as fidl::encoding::TypeMarker>::inline_size(decoder.context);
19847                if inlined != (member_inline_size <= 4) {
19848                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
19849                }
19850                let inner_offset;
19851                let mut inner_depth = depth.clone();
19852                if inlined {
19853                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
19854                    inner_offset = next_offset;
19855                } else {
19856                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
19857                    inner_depth.increment()?;
19858                }
19859                let val_ref = self.address.get_or_insert_with(|| {
19860                    fidl::new_empty!(fidl_fuchsia_net_common::Ipv6Address, D)
19861                });
19862                fidl::decode!(
19863                    fidl_fuchsia_net_common::Ipv6Address,
19864                    D,
19865                    val_ref,
19866                    decoder,
19867                    inner_offset,
19868                    inner_depth
19869                )?;
19870                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
19871                {
19872                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
19873                }
19874                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
19875                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
19876                }
19877            }
19878
19879            next_offset += envelope_size;
19880            _next_ordinal_to_read += 1;
19881            if next_offset >= end_offset {
19882                return Ok(());
19883            }
19884
19885            // Decode unknown envelopes for gaps in ordinals.
19886            while _next_ordinal_to_read < 2 {
19887                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
19888                _next_ordinal_to_read += 1;
19889                next_offset += envelope_size;
19890            }
19891
19892            let next_out_of_line = decoder.next_out_of_line();
19893            let handles_before = decoder.remaining_handles();
19894            if let Some((inlined, num_bytes, num_handles)) =
19895                fidl::encoding::decode_envelope_header(decoder, next_offset)?
19896            {
19897                let member_inline_size =
19898                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
19899                if inlined != (member_inline_size <= 4) {
19900                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
19901                }
19902                let inner_offset;
19903                let mut inner_depth = depth.clone();
19904                if inlined {
19905                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
19906                    inner_offset = next_offset;
19907                } else {
19908                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
19909                    inner_depth.increment()?;
19910                }
19911                let val_ref = self.prefix_length.get_or_insert_with(|| fidl::new_empty!(u8, D));
19912                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
19913                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
19914                {
19915                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
19916                }
19917                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
19918                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
19919                }
19920            }
19921
19922            next_offset += envelope_size;
19923            _next_ordinal_to_read += 1;
19924            if next_offset >= end_offset {
19925                return Ok(());
19926            }
19927
19928            // Decode unknown envelopes for gaps in ordinals.
19929            while _next_ordinal_to_read < 3 {
19930                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
19931                _next_ordinal_to_read += 1;
19932                next_offset += envelope_size;
19933            }
19934
19935            let next_out_of_line = decoder.next_out_of_line();
19936            let handles_before = decoder.remaining_handles();
19937            if let Some((inlined, num_bytes, num_handles)) =
19938                fidl::encoding::decode_envelope_header(decoder, next_offset)?
19939            {
19940                let member_inline_size =
19941                    <AddressOrigin as fidl::encoding::TypeMarker>::inline_size(decoder.context);
19942                if inlined != (member_inline_size <= 4) {
19943                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
19944                }
19945                let inner_offset;
19946                let mut inner_depth = depth.clone();
19947                if inlined {
19948                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
19949                    inner_offset = next_offset;
19950                } else {
19951                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
19952                    inner_depth.increment()?;
19953                }
19954                let val_ref = self.origin.get_or_insert_with(|| fidl::new_empty!(AddressOrigin, D));
19955                fidl::decode!(AddressOrigin, D, val_ref, decoder, inner_offset, inner_depth)?;
19956                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
19957                {
19958                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
19959                }
19960                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
19961                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
19962                }
19963            }
19964
19965            next_offset += envelope_size;
19966            _next_ordinal_to_read += 1;
19967            if next_offset >= end_offset {
19968                return Ok(());
19969            }
19970
19971            // Decode unknown envelopes for gaps in ordinals.
19972            while _next_ordinal_to_read < 4 {
19973                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
19974                _next_ordinal_to_read += 1;
19975                next_offset += envelope_size;
19976            }
19977
19978            let next_out_of_line = decoder.next_out_of_line();
19979            let handles_before = decoder.remaining_handles();
19980            if let Some((inlined, num_bytes, num_handles)) =
19981                fidl::encoding::decode_envelope_header(decoder, next_offset)?
19982            {
19983                let member_inline_size =
19984                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
19985                if inlined != (member_inline_size <= 4) {
19986                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
19987                }
19988                let inner_offset;
19989                let mut inner_depth = depth.clone();
19990                if inlined {
19991                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
19992                    inner_offset = next_offset;
19993                } else {
19994                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
19995                    inner_depth.increment()?;
19996                }
19997                let val_ref = self.preferred.get_or_insert_with(|| fidl::new_empty!(bool, D));
19998                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
19999                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
20000                {
20001                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
20002                }
20003                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
20004                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
20005                }
20006            }
20007
20008            next_offset += envelope_size;
20009            _next_ordinal_to_read += 1;
20010            if next_offset >= end_offset {
20011                return Ok(());
20012            }
20013
20014            // Decode unknown envelopes for gaps in ordinals.
20015            while _next_ordinal_to_read < 5 {
20016                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
20017                _next_ordinal_to_read += 1;
20018                next_offset += envelope_size;
20019            }
20020
20021            let next_out_of_line = decoder.next_out_of_line();
20022            let handles_before = decoder.remaining_handles();
20023            if let Some((inlined, num_bytes, num_handles)) =
20024                fidl::encoding::decode_envelope_header(decoder, next_offset)?
20025            {
20026                let member_inline_size =
20027                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
20028                if inlined != (member_inline_size <= 4) {
20029                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
20030                }
20031                let inner_offset;
20032                let mut inner_depth = depth.clone();
20033                if inlined {
20034                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
20035                    inner_offset = next_offset;
20036                } else {
20037                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
20038                    inner_depth.increment()?;
20039                }
20040                let val_ref = self.valid.get_or_insert_with(|| fidl::new_empty!(bool, D));
20041                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
20042                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
20043                {
20044                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
20045                }
20046                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
20047                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
20048                }
20049            }
20050
20051            next_offset += envelope_size;
20052
20053            // Decode the remaining unknown envelopes.
20054            while next_offset < end_offset {
20055                _next_ordinal_to_read += 1;
20056                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
20057                next_offset += envelope_size;
20058            }
20059
20060            Ok(())
20061        }
20062    }
20063
20064    impl NetworkData {
20065        #[inline(always)]
20066        fn max_ordinal_present(&self) -> u64 {
20067            if let Some(_) = self.commissioning_dataset {
20068                return 5;
20069            }
20070            if let Some(_) = self.contexts {
20071                return 4;
20072            }
20073            if let Some(_) = self.services {
20074                return 3;
20075            }
20076            if let Some(_) = self.external_routes {
20077                return 2;
20078            }
20079            if let Some(_) = self.on_mesh_prefixes {
20080                return 1;
20081            }
20082            0
20083        }
20084    }
20085
20086    impl fidl::encoding::ValueTypeMarker for NetworkData {
20087        type Borrowed<'a> = &'a Self;
20088        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
20089            value
20090        }
20091    }
20092
20093    unsafe impl fidl::encoding::TypeMarker for NetworkData {
20094        type Owned = Self;
20095
20096        #[inline(always)]
20097        fn inline_align(_context: fidl::encoding::Context) -> usize {
20098            8
20099        }
20100
20101        #[inline(always)]
20102        fn inline_size(_context: fidl::encoding::Context) -> usize {
20103            16
20104        }
20105    }
20106
20107    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<NetworkData, D>
20108        for &NetworkData
20109    {
20110        unsafe fn encode(
20111            self,
20112            encoder: &mut fidl::encoding::Encoder<'_, D>,
20113            offset: usize,
20114            mut depth: fidl::encoding::Depth,
20115        ) -> fidl::Result<()> {
20116            encoder.debug_check_bounds::<NetworkData>(offset);
20117            // Vector header
20118            let max_ordinal: u64 = self.max_ordinal_present();
20119            encoder.write_num(max_ordinal, offset);
20120            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
20121            // Calling encoder.out_of_line_offset(0) is not allowed.
20122            if max_ordinal == 0 {
20123                return Ok(());
20124            }
20125            depth.increment()?;
20126            let envelope_size = 8;
20127            let bytes_len = max_ordinal as usize * envelope_size;
20128            #[allow(unused_variables)]
20129            let offset = encoder.out_of_line_offset(bytes_len);
20130            let mut _prev_end_offset: usize = 0;
20131            if 1 > max_ordinal {
20132                return Ok(());
20133            }
20134
20135            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
20136            // are envelope_size bytes.
20137            let cur_offset: usize = (1 - 1) * envelope_size;
20138
20139            // Zero reserved fields.
20140            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
20141
20142            // Safety:
20143            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
20144            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
20145            //   envelope_size bytes, there is always sufficient room.
20146            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<BorderRouterConfig, 32>, D>(
20147            self.on_mesh_prefixes.as_ref().map(<fidl::encoding::Vector<BorderRouterConfig, 32> as fidl::encoding::ValueTypeMarker>::borrow),
20148            encoder, offset + cur_offset, depth
20149        )?;
20150
20151            _prev_end_offset = cur_offset + envelope_size;
20152            if 2 > max_ordinal {
20153                return Ok(());
20154            }
20155
20156            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
20157            // are envelope_size bytes.
20158            let cur_offset: usize = (2 - 1) * envelope_size;
20159
20160            // Zero reserved fields.
20161            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
20162
20163            // Safety:
20164            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
20165            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
20166            //   envelope_size bytes, there is always sufficient room.
20167            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<ExternalRouteConfig, 32>, D>(
20168            self.external_routes.as_ref().map(<fidl::encoding::Vector<ExternalRouteConfig, 32> as fidl::encoding::ValueTypeMarker>::borrow),
20169            encoder, offset + cur_offset, depth
20170        )?;
20171
20172            _prev_end_offset = cur_offset + envelope_size;
20173            if 3 > max_ordinal {
20174                return Ok(());
20175            }
20176
20177            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
20178            // are envelope_size bytes.
20179            let cur_offset: usize = (3 - 1) * envelope_size;
20180
20181            // Zero reserved fields.
20182            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
20183
20184            // Safety:
20185            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
20186            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
20187            //   envelope_size bytes, there is always sufficient room.
20188            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<ServiceConfig, 32>, D>(
20189            self.services.as_ref().map(<fidl::encoding::Vector<ServiceConfig, 32> as fidl::encoding::ValueTypeMarker>::borrow),
20190            encoder, offset + cur_offset, depth
20191        )?;
20192
20193            _prev_end_offset = cur_offset + envelope_size;
20194            if 4 > max_ordinal {
20195                return Ok(());
20196            }
20197
20198            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
20199            // are envelope_size bytes.
20200            let cur_offset: usize = (4 - 1) * envelope_size;
20201
20202            // Zero reserved fields.
20203            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
20204
20205            // Safety:
20206            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
20207            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
20208            //   envelope_size bytes, there is always sufficient room.
20209            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<LowpanContextInfo, 32>, D>(
20210            self.contexts.as_ref().map(<fidl::encoding::Vector<LowpanContextInfo, 32> as fidl::encoding::ValueTypeMarker>::borrow),
20211            encoder, offset + cur_offset, depth
20212        )?;
20213
20214            _prev_end_offset = cur_offset + envelope_size;
20215            if 5 > max_ordinal {
20216                return Ok(());
20217            }
20218
20219            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
20220            // are envelope_size bytes.
20221            let cur_offset: usize = (5 - 1) * envelope_size;
20222
20223            // Zero reserved fields.
20224            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
20225
20226            // Safety:
20227            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
20228            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
20229            //   envelope_size bytes, there is always sufficient room.
20230            fidl::encoding::encode_in_envelope_optional::<CommissioningDataset, D>(
20231                self.commissioning_dataset
20232                    .as_ref()
20233                    .map(<CommissioningDataset as fidl::encoding::ValueTypeMarker>::borrow),
20234                encoder,
20235                offset + cur_offset,
20236                depth,
20237            )?;
20238
20239            _prev_end_offset = cur_offset + envelope_size;
20240
20241            Ok(())
20242        }
20243    }
20244
20245    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for NetworkData {
20246        #[inline(always)]
20247        fn new_empty() -> Self {
20248            Self::default()
20249        }
20250
20251        unsafe fn decode(
20252            &mut self,
20253            decoder: &mut fidl::encoding::Decoder<'_, D>,
20254            offset: usize,
20255            mut depth: fidl::encoding::Depth,
20256        ) -> fidl::Result<()> {
20257            decoder.debug_check_bounds::<Self>(offset);
20258            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
20259                None => return Err(fidl::Error::NotNullable),
20260                Some(len) => len,
20261            };
20262            // Calling decoder.out_of_line_offset(0) is not allowed.
20263            if len == 0 {
20264                return Ok(());
20265            };
20266            depth.increment()?;
20267            let envelope_size = 8;
20268            let bytes_len = len * envelope_size;
20269            let offset = decoder.out_of_line_offset(bytes_len)?;
20270            // Decode the envelope for each type.
20271            let mut _next_ordinal_to_read = 0;
20272            let mut next_offset = offset;
20273            let end_offset = offset + bytes_len;
20274            _next_ordinal_to_read += 1;
20275            if next_offset >= end_offset {
20276                return Ok(());
20277            }
20278
20279            // Decode unknown envelopes for gaps in ordinals.
20280            while _next_ordinal_to_read < 1 {
20281                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
20282                _next_ordinal_to_read += 1;
20283                next_offset += envelope_size;
20284            }
20285
20286            let next_out_of_line = decoder.next_out_of_line();
20287            let handles_before = decoder.remaining_handles();
20288            if let Some((inlined, num_bytes, num_handles)) =
20289                fidl::encoding::decode_envelope_header(decoder, next_offset)?
20290            {
20291                let member_inline_size = <fidl::encoding::Vector<BorderRouterConfig, 32> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
20292                if inlined != (member_inline_size <= 4) {
20293                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
20294                }
20295                let inner_offset;
20296                let mut inner_depth = depth.clone();
20297                if inlined {
20298                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
20299                    inner_offset = next_offset;
20300                } else {
20301                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
20302                    inner_depth.increment()?;
20303                }
20304                let val_ref = self.on_mesh_prefixes.get_or_insert_with(
20305                    || fidl::new_empty!(fidl::encoding::Vector<BorderRouterConfig, 32>, D),
20306                );
20307                fidl::decode!(fidl::encoding::Vector<BorderRouterConfig, 32>, D, val_ref, decoder, inner_offset, inner_depth)?;
20308                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
20309                {
20310                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
20311                }
20312                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
20313                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
20314                }
20315            }
20316
20317            next_offset += envelope_size;
20318            _next_ordinal_to_read += 1;
20319            if next_offset >= end_offset {
20320                return Ok(());
20321            }
20322
20323            // Decode unknown envelopes for gaps in ordinals.
20324            while _next_ordinal_to_read < 2 {
20325                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
20326                _next_ordinal_to_read += 1;
20327                next_offset += envelope_size;
20328            }
20329
20330            let next_out_of_line = decoder.next_out_of_line();
20331            let handles_before = decoder.remaining_handles();
20332            if let Some((inlined, num_bytes, num_handles)) =
20333                fidl::encoding::decode_envelope_header(decoder, next_offset)?
20334            {
20335                let member_inline_size = <fidl::encoding::Vector<ExternalRouteConfig, 32> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
20336                if inlined != (member_inline_size <= 4) {
20337                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
20338                }
20339                let inner_offset;
20340                let mut inner_depth = depth.clone();
20341                if inlined {
20342                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
20343                    inner_offset = next_offset;
20344                } else {
20345                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
20346                    inner_depth.increment()?;
20347                }
20348                let val_ref = self.external_routes.get_or_insert_with(
20349                    || fidl::new_empty!(fidl::encoding::Vector<ExternalRouteConfig, 32>, D),
20350                );
20351                fidl::decode!(fidl::encoding::Vector<ExternalRouteConfig, 32>, D, val_ref, decoder, inner_offset, inner_depth)?;
20352                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
20353                {
20354                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
20355                }
20356                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
20357                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
20358                }
20359            }
20360
20361            next_offset += envelope_size;
20362            _next_ordinal_to_read += 1;
20363            if next_offset >= end_offset {
20364                return Ok(());
20365            }
20366
20367            // Decode unknown envelopes for gaps in ordinals.
20368            while _next_ordinal_to_read < 3 {
20369                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
20370                _next_ordinal_to_read += 1;
20371                next_offset += envelope_size;
20372            }
20373
20374            let next_out_of_line = decoder.next_out_of_line();
20375            let handles_before = decoder.remaining_handles();
20376            if let Some((inlined, num_bytes, num_handles)) =
20377                fidl::encoding::decode_envelope_header(decoder, next_offset)?
20378            {
20379                let member_inline_size = <fidl::encoding::Vector<ServiceConfig, 32> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
20380                if inlined != (member_inline_size <= 4) {
20381                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
20382                }
20383                let inner_offset;
20384                let mut inner_depth = depth.clone();
20385                if inlined {
20386                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
20387                    inner_offset = next_offset;
20388                } else {
20389                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
20390                    inner_depth.increment()?;
20391                }
20392                let val_ref = self.services.get_or_insert_with(
20393                    || fidl::new_empty!(fidl::encoding::Vector<ServiceConfig, 32>, D),
20394                );
20395                fidl::decode!(fidl::encoding::Vector<ServiceConfig, 32>, D, val_ref, decoder, inner_offset, inner_depth)?;
20396                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
20397                {
20398                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
20399                }
20400                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
20401                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
20402                }
20403            }
20404
20405            next_offset += envelope_size;
20406            _next_ordinal_to_read += 1;
20407            if next_offset >= end_offset {
20408                return Ok(());
20409            }
20410
20411            // Decode unknown envelopes for gaps in ordinals.
20412            while _next_ordinal_to_read < 4 {
20413                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
20414                _next_ordinal_to_read += 1;
20415                next_offset += envelope_size;
20416            }
20417
20418            let next_out_of_line = decoder.next_out_of_line();
20419            let handles_before = decoder.remaining_handles();
20420            if let Some((inlined, num_bytes, num_handles)) =
20421                fidl::encoding::decode_envelope_header(decoder, next_offset)?
20422            {
20423                let member_inline_size = <fidl::encoding::Vector<LowpanContextInfo, 32> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
20424                if inlined != (member_inline_size <= 4) {
20425                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
20426                }
20427                let inner_offset;
20428                let mut inner_depth = depth.clone();
20429                if inlined {
20430                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
20431                    inner_offset = next_offset;
20432                } else {
20433                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
20434                    inner_depth.increment()?;
20435                }
20436                let val_ref = self.contexts.get_or_insert_with(
20437                    || fidl::new_empty!(fidl::encoding::Vector<LowpanContextInfo, 32>, D),
20438                );
20439                fidl::decode!(fidl::encoding::Vector<LowpanContextInfo, 32>, D, val_ref, decoder, inner_offset, inner_depth)?;
20440                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
20441                {
20442                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
20443                }
20444                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
20445                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
20446                }
20447            }
20448
20449            next_offset += envelope_size;
20450            _next_ordinal_to_read += 1;
20451            if next_offset >= end_offset {
20452                return Ok(());
20453            }
20454
20455            // Decode unknown envelopes for gaps in ordinals.
20456            while _next_ordinal_to_read < 5 {
20457                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
20458                _next_ordinal_to_read += 1;
20459                next_offset += envelope_size;
20460            }
20461
20462            let next_out_of_line = decoder.next_out_of_line();
20463            let handles_before = decoder.remaining_handles();
20464            if let Some((inlined, num_bytes, num_handles)) =
20465                fidl::encoding::decode_envelope_header(decoder, next_offset)?
20466            {
20467                let member_inline_size =
20468                    <CommissioningDataset as fidl::encoding::TypeMarker>::inline_size(
20469                        decoder.context,
20470                    );
20471                if inlined != (member_inline_size <= 4) {
20472                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
20473                }
20474                let inner_offset;
20475                let mut inner_depth = depth.clone();
20476                if inlined {
20477                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
20478                    inner_offset = next_offset;
20479                } else {
20480                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
20481                    inner_depth.increment()?;
20482                }
20483                let val_ref = self
20484                    .commissioning_dataset
20485                    .get_or_insert_with(|| fidl::new_empty!(CommissioningDataset, D));
20486                fidl::decode!(
20487                    CommissioningDataset,
20488                    D,
20489                    val_ref,
20490                    decoder,
20491                    inner_offset,
20492                    inner_depth
20493                )?;
20494                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
20495                {
20496                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
20497                }
20498                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
20499                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
20500                }
20501            }
20502
20503            next_offset += envelope_size;
20504
20505            // Decode the remaining unknown envelopes.
20506            while next_offset < end_offset {
20507                _next_ordinal_to_read += 1;
20508                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
20509                next_offset += envelope_size;
20510            }
20511
20512            Ok(())
20513        }
20514    }
20515
20516    impl NetworkScanParameters {
20517        #[inline(always)]
20518        fn max_ordinal_present(&self) -> u64 {
20519            if let Some(_) = self.tx_power_dbm {
20520                return 2;
20521            }
20522            if let Some(_) = self.channels {
20523                return 1;
20524            }
20525            0
20526        }
20527    }
20528
20529    impl fidl::encoding::ValueTypeMarker for NetworkScanParameters {
20530        type Borrowed<'a> = &'a Self;
20531        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
20532            value
20533        }
20534    }
20535
20536    unsafe impl fidl::encoding::TypeMarker for NetworkScanParameters {
20537        type Owned = Self;
20538
20539        #[inline(always)]
20540        fn inline_align(_context: fidl::encoding::Context) -> usize {
20541            8
20542        }
20543
20544        #[inline(always)]
20545        fn inline_size(_context: fidl::encoding::Context) -> usize {
20546            16
20547        }
20548    }
20549
20550    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<NetworkScanParameters, D>
20551        for &NetworkScanParameters
20552    {
20553        unsafe fn encode(
20554            self,
20555            encoder: &mut fidl::encoding::Encoder<'_, D>,
20556            offset: usize,
20557            mut depth: fidl::encoding::Depth,
20558        ) -> fidl::Result<()> {
20559            encoder.debug_check_bounds::<NetworkScanParameters>(offset);
20560            // Vector header
20561            let max_ordinal: u64 = self.max_ordinal_present();
20562            encoder.write_num(max_ordinal, offset);
20563            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
20564            // Calling encoder.out_of_line_offset(0) is not allowed.
20565            if max_ordinal == 0 {
20566                return Ok(());
20567            }
20568            depth.increment()?;
20569            let envelope_size = 8;
20570            let bytes_len = max_ordinal as usize * envelope_size;
20571            #[allow(unused_variables)]
20572            let offset = encoder.out_of_line_offset(bytes_len);
20573            let mut _prev_end_offset: usize = 0;
20574            if 1 > max_ordinal {
20575                return Ok(());
20576            }
20577
20578            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
20579            // are envelope_size bytes.
20580            let cur_offset: usize = (1 - 1) * envelope_size;
20581
20582            // Zero reserved fields.
20583            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
20584
20585            // Safety:
20586            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
20587            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
20588            //   envelope_size bytes, there is always sufficient room.
20589            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u16, 200>, D>(
20590                self.channels.as_ref().map(
20591                    <fidl::encoding::Vector<u16, 200> as fidl::encoding::ValueTypeMarker>::borrow,
20592                ),
20593                encoder,
20594                offset + cur_offset,
20595                depth,
20596            )?;
20597
20598            _prev_end_offset = cur_offset + envelope_size;
20599            if 2 > max_ordinal {
20600                return Ok(());
20601            }
20602
20603            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
20604            // are envelope_size bytes.
20605            let cur_offset: usize = (2 - 1) * envelope_size;
20606
20607            // Zero reserved fields.
20608            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
20609
20610            // Safety:
20611            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
20612            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
20613            //   envelope_size bytes, there is always sufficient room.
20614            fidl::encoding::encode_in_envelope_optional::<i8, D>(
20615                self.tx_power_dbm.as_ref().map(<i8 as fidl::encoding::ValueTypeMarker>::borrow),
20616                encoder,
20617                offset + cur_offset,
20618                depth,
20619            )?;
20620
20621            _prev_end_offset = cur_offset + envelope_size;
20622
20623            Ok(())
20624        }
20625    }
20626
20627    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for NetworkScanParameters {
20628        #[inline(always)]
20629        fn new_empty() -> Self {
20630            Self::default()
20631        }
20632
20633        unsafe fn decode(
20634            &mut self,
20635            decoder: &mut fidl::encoding::Decoder<'_, D>,
20636            offset: usize,
20637            mut depth: fidl::encoding::Depth,
20638        ) -> fidl::Result<()> {
20639            decoder.debug_check_bounds::<Self>(offset);
20640            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
20641                None => return Err(fidl::Error::NotNullable),
20642                Some(len) => len,
20643            };
20644            // Calling decoder.out_of_line_offset(0) is not allowed.
20645            if len == 0 {
20646                return Ok(());
20647            };
20648            depth.increment()?;
20649            let envelope_size = 8;
20650            let bytes_len = len * envelope_size;
20651            let offset = decoder.out_of_line_offset(bytes_len)?;
20652            // Decode the envelope for each type.
20653            let mut _next_ordinal_to_read = 0;
20654            let mut next_offset = offset;
20655            let end_offset = offset + bytes_len;
20656            _next_ordinal_to_read += 1;
20657            if next_offset >= end_offset {
20658                return Ok(());
20659            }
20660
20661            // Decode unknown envelopes for gaps in ordinals.
20662            while _next_ordinal_to_read < 1 {
20663                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
20664                _next_ordinal_to_read += 1;
20665                next_offset += envelope_size;
20666            }
20667
20668            let next_out_of_line = decoder.next_out_of_line();
20669            let handles_before = decoder.remaining_handles();
20670            if let Some((inlined, num_bytes, num_handles)) =
20671                fidl::encoding::decode_envelope_header(decoder, next_offset)?
20672            {
20673                let member_inline_size =
20674                    <fidl::encoding::Vector<u16, 200> as fidl::encoding::TypeMarker>::inline_size(
20675                        decoder.context,
20676                    );
20677                if inlined != (member_inline_size <= 4) {
20678                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
20679                }
20680                let inner_offset;
20681                let mut inner_depth = depth.clone();
20682                if inlined {
20683                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
20684                    inner_offset = next_offset;
20685                } else {
20686                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
20687                    inner_depth.increment()?;
20688                }
20689                let val_ref = self
20690                    .channels
20691                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u16, 200>, D));
20692                fidl::decode!(fidl::encoding::Vector<u16, 200>, D, val_ref, decoder, inner_offset, inner_depth)?;
20693                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
20694                {
20695                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
20696                }
20697                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
20698                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
20699                }
20700            }
20701
20702            next_offset += envelope_size;
20703            _next_ordinal_to_read += 1;
20704            if next_offset >= end_offset {
20705                return Ok(());
20706            }
20707
20708            // Decode unknown envelopes for gaps in ordinals.
20709            while _next_ordinal_to_read < 2 {
20710                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
20711                _next_ordinal_to_read += 1;
20712                next_offset += envelope_size;
20713            }
20714
20715            let next_out_of_line = decoder.next_out_of_line();
20716            let handles_before = decoder.remaining_handles();
20717            if let Some((inlined, num_bytes, num_handles)) =
20718                fidl::encoding::decode_envelope_header(decoder, next_offset)?
20719            {
20720                let member_inline_size =
20721                    <i8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
20722                if inlined != (member_inline_size <= 4) {
20723                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
20724                }
20725                let inner_offset;
20726                let mut inner_depth = depth.clone();
20727                if inlined {
20728                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
20729                    inner_offset = next_offset;
20730                } else {
20731                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
20732                    inner_depth.increment()?;
20733                }
20734                let val_ref = self.tx_power_dbm.get_or_insert_with(|| fidl::new_empty!(i8, D));
20735                fidl::decode!(i8, D, val_ref, decoder, inner_offset, inner_depth)?;
20736                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
20737                {
20738                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
20739                }
20740                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
20741                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
20742                }
20743            }
20744
20745            next_offset += envelope_size;
20746
20747            // Decode the remaining unknown envelopes.
20748            while next_offset < end_offset {
20749                _next_ordinal_to_read += 1;
20750                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
20751                next_offset += envelope_size;
20752            }
20753
20754            Ok(())
20755        }
20756    }
20757
20758    impl OnMeshPrefix {
20759        #[inline(always)]
20760        fn max_ordinal_present(&self) -> u64 {
20761            if let Some(_) = self.slaac_valid {
20762                return 5;
20763            }
20764            if let Some(_) = self.slaac_preferred {
20765                return 4;
20766            }
20767            if let Some(_) = self.stable {
20768                return 3;
20769            }
20770            if let Some(_) = self.default_route_preference {
20771                return 2;
20772            }
20773            if let Some(_) = self.subnet {
20774                return 1;
20775            }
20776            0
20777        }
20778    }
20779
20780    impl fidl::encoding::ValueTypeMarker for OnMeshPrefix {
20781        type Borrowed<'a> = &'a Self;
20782        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
20783            value
20784        }
20785    }
20786
20787    unsafe impl fidl::encoding::TypeMarker for OnMeshPrefix {
20788        type Owned = Self;
20789
20790        #[inline(always)]
20791        fn inline_align(_context: fidl::encoding::Context) -> usize {
20792            8
20793        }
20794
20795        #[inline(always)]
20796        fn inline_size(_context: fidl::encoding::Context) -> usize {
20797            16
20798        }
20799    }
20800
20801    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<OnMeshPrefix, D>
20802        for &OnMeshPrefix
20803    {
20804        unsafe fn encode(
20805            self,
20806            encoder: &mut fidl::encoding::Encoder<'_, D>,
20807            offset: usize,
20808            mut depth: fidl::encoding::Depth,
20809        ) -> fidl::Result<()> {
20810            encoder.debug_check_bounds::<OnMeshPrefix>(offset);
20811            // Vector header
20812            let max_ordinal: u64 = self.max_ordinal_present();
20813            encoder.write_num(max_ordinal, offset);
20814            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
20815            // Calling encoder.out_of_line_offset(0) is not allowed.
20816            if max_ordinal == 0 {
20817                return Ok(());
20818            }
20819            depth.increment()?;
20820            let envelope_size = 8;
20821            let bytes_len = max_ordinal as usize * envelope_size;
20822            #[allow(unused_variables)]
20823            let offset = encoder.out_of_line_offset(bytes_len);
20824            let mut _prev_end_offset: usize = 0;
20825            if 1 > max_ordinal {
20826                return Ok(());
20827            }
20828
20829            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
20830            // are envelope_size bytes.
20831            let cur_offset: usize = (1 - 1) * envelope_size;
20832
20833            // Zero reserved fields.
20834            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
20835
20836            // Safety:
20837            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
20838            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
20839            //   envelope_size bytes, there is always sufficient room.
20840            fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_net_common::Ipv6AddressWithPrefix, D>(
20841            self.subnet.as_ref().map(<fidl_fuchsia_net_common::Ipv6AddressWithPrefix as fidl::encoding::ValueTypeMarker>::borrow),
20842            encoder, offset + cur_offset, depth
20843        )?;
20844
20845            _prev_end_offset = cur_offset + envelope_size;
20846            if 2 > max_ordinal {
20847                return Ok(());
20848            }
20849
20850            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
20851            // are envelope_size bytes.
20852            let cur_offset: usize = (2 - 1) * envelope_size;
20853
20854            // Zero reserved fields.
20855            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
20856
20857            // Safety:
20858            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
20859            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
20860            //   envelope_size bytes, there is always sufficient room.
20861            fidl::encoding::encode_in_envelope_optional::<RoutePreference, D>(
20862                self.default_route_preference
20863                    .as_ref()
20864                    .map(<RoutePreference as fidl::encoding::ValueTypeMarker>::borrow),
20865                encoder,
20866                offset + cur_offset,
20867                depth,
20868            )?;
20869
20870            _prev_end_offset = cur_offset + envelope_size;
20871            if 3 > max_ordinal {
20872                return Ok(());
20873            }
20874
20875            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
20876            // are envelope_size bytes.
20877            let cur_offset: usize = (3 - 1) * envelope_size;
20878
20879            // Zero reserved fields.
20880            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
20881
20882            // Safety:
20883            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
20884            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
20885            //   envelope_size bytes, there is always sufficient room.
20886            fidl::encoding::encode_in_envelope_optional::<bool, D>(
20887                self.stable.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
20888                encoder,
20889                offset + cur_offset,
20890                depth,
20891            )?;
20892
20893            _prev_end_offset = cur_offset + envelope_size;
20894            if 4 > max_ordinal {
20895                return Ok(());
20896            }
20897
20898            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
20899            // are envelope_size bytes.
20900            let cur_offset: usize = (4 - 1) * envelope_size;
20901
20902            // Zero reserved fields.
20903            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
20904
20905            // Safety:
20906            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
20907            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
20908            //   envelope_size bytes, there is always sufficient room.
20909            fidl::encoding::encode_in_envelope_optional::<bool, D>(
20910                self.slaac_preferred
20911                    .as_ref()
20912                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
20913                encoder,
20914                offset + cur_offset,
20915                depth,
20916            )?;
20917
20918            _prev_end_offset = cur_offset + envelope_size;
20919            if 5 > max_ordinal {
20920                return Ok(());
20921            }
20922
20923            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
20924            // are envelope_size bytes.
20925            let cur_offset: usize = (5 - 1) * envelope_size;
20926
20927            // Zero reserved fields.
20928            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
20929
20930            // Safety:
20931            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
20932            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
20933            //   envelope_size bytes, there is always sufficient room.
20934            fidl::encoding::encode_in_envelope_optional::<bool, D>(
20935                self.slaac_valid.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
20936                encoder,
20937                offset + cur_offset,
20938                depth,
20939            )?;
20940
20941            _prev_end_offset = cur_offset + envelope_size;
20942
20943            Ok(())
20944        }
20945    }
20946
20947    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for OnMeshPrefix {
20948        #[inline(always)]
20949        fn new_empty() -> Self {
20950            Self::default()
20951        }
20952
20953        unsafe fn decode(
20954            &mut self,
20955            decoder: &mut fidl::encoding::Decoder<'_, D>,
20956            offset: usize,
20957            mut depth: fidl::encoding::Depth,
20958        ) -> fidl::Result<()> {
20959            decoder.debug_check_bounds::<Self>(offset);
20960            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
20961                None => return Err(fidl::Error::NotNullable),
20962                Some(len) => len,
20963            };
20964            // Calling decoder.out_of_line_offset(0) is not allowed.
20965            if len == 0 {
20966                return Ok(());
20967            };
20968            depth.increment()?;
20969            let envelope_size = 8;
20970            let bytes_len = len * envelope_size;
20971            let offset = decoder.out_of_line_offset(bytes_len)?;
20972            // Decode the envelope for each type.
20973            let mut _next_ordinal_to_read = 0;
20974            let mut next_offset = offset;
20975            let end_offset = offset + bytes_len;
20976            _next_ordinal_to_read += 1;
20977            if next_offset >= end_offset {
20978                return Ok(());
20979            }
20980
20981            // Decode unknown envelopes for gaps in ordinals.
20982            while _next_ordinal_to_read < 1 {
20983                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
20984                _next_ordinal_to_read += 1;
20985                next_offset += envelope_size;
20986            }
20987
20988            let next_out_of_line = decoder.next_out_of_line();
20989            let handles_before = decoder.remaining_handles();
20990            if let Some((inlined, num_bytes, num_handles)) =
20991                fidl::encoding::decode_envelope_header(decoder, next_offset)?
20992            {
20993                let member_inline_size = <fidl_fuchsia_net_common::Ipv6AddressWithPrefix as fidl::encoding::TypeMarker>::inline_size(decoder.context);
20994                if inlined != (member_inline_size <= 4) {
20995                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
20996                }
20997                let inner_offset;
20998                let mut inner_depth = depth.clone();
20999                if inlined {
21000                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
21001                    inner_offset = next_offset;
21002                } else {
21003                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
21004                    inner_depth.increment()?;
21005                }
21006                let val_ref = self.subnet.get_or_insert_with(|| {
21007                    fidl::new_empty!(fidl_fuchsia_net_common::Ipv6AddressWithPrefix, D)
21008                });
21009                fidl::decode!(
21010                    fidl_fuchsia_net_common::Ipv6AddressWithPrefix,
21011                    D,
21012                    val_ref,
21013                    decoder,
21014                    inner_offset,
21015                    inner_depth
21016                )?;
21017                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
21018                {
21019                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
21020                }
21021                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
21022                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
21023                }
21024            }
21025
21026            next_offset += envelope_size;
21027            _next_ordinal_to_read += 1;
21028            if next_offset >= end_offset {
21029                return Ok(());
21030            }
21031
21032            // Decode unknown envelopes for gaps in ordinals.
21033            while _next_ordinal_to_read < 2 {
21034                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
21035                _next_ordinal_to_read += 1;
21036                next_offset += envelope_size;
21037            }
21038
21039            let next_out_of_line = decoder.next_out_of_line();
21040            let handles_before = decoder.remaining_handles();
21041            if let Some((inlined, num_bytes, num_handles)) =
21042                fidl::encoding::decode_envelope_header(decoder, next_offset)?
21043            {
21044                let member_inline_size =
21045                    <RoutePreference as fidl::encoding::TypeMarker>::inline_size(decoder.context);
21046                if inlined != (member_inline_size <= 4) {
21047                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
21048                }
21049                let inner_offset;
21050                let mut inner_depth = depth.clone();
21051                if inlined {
21052                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
21053                    inner_offset = next_offset;
21054                } else {
21055                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
21056                    inner_depth.increment()?;
21057                }
21058                let val_ref = self
21059                    .default_route_preference
21060                    .get_or_insert_with(|| fidl::new_empty!(RoutePreference, D));
21061                fidl::decode!(RoutePreference, D, val_ref, decoder, inner_offset, inner_depth)?;
21062                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
21063                {
21064                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
21065                }
21066                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
21067                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
21068                }
21069            }
21070
21071            next_offset += envelope_size;
21072            _next_ordinal_to_read += 1;
21073            if next_offset >= end_offset {
21074                return Ok(());
21075            }
21076
21077            // Decode unknown envelopes for gaps in ordinals.
21078            while _next_ordinal_to_read < 3 {
21079                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
21080                _next_ordinal_to_read += 1;
21081                next_offset += envelope_size;
21082            }
21083
21084            let next_out_of_line = decoder.next_out_of_line();
21085            let handles_before = decoder.remaining_handles();
21086            if let Some((inlined, num_bytes, num_handles)) =
21087                fidl::encoding::decode_envelope_header(decoder, next_offset)?
21088            {
21089                let member_inline_size =
21090                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
21091                if inlined != (member_inline_size <= 4) {
21092                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
21093                }
21094                let inner_offset;
21095                let mut inner_depth = depth.clone();
21096                if inlined {
21097                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
21098                    inner_offset = next_offset;
21099                } else {
21100                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
21101                    inner_depth.increment()?;
21102                }
21103                let val_ref = self.stable.get_or_insert_with(|| fidl::new_empty!(bool, D));
21104                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
21105                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
21106                {
21107                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
21108                }
21109                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
21110                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
21111                }
21112            }
21113
21114            next_offset += envelope_size;
21115            _next_ordinal_to_read += 1;
21116            if next_offset >= end_offset {
21117                return Ok(());
21118            }
21119
21120            // Decode unknown envelopes for gaps in ordinals.
21121            while _next_ordinal_to_read < 4 {
21122                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
21123                _next_ordinal_to_read += 1;
21124                next_offset += envelope_size;
21125            }
21126
21127            let next_out_of_line = decoder.next_out_of_line();
21128            let handles_before = decoder.remaining_handles();
21129            if let Some((inlined, num_bytes, num_handles)) =
21130                fidl::encoding::decode_envelope_header(decoder, next_offset)?
21131            {
21132                let member_inline_size =
21133                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
21134                if inlined != (member_inline_size <= 4) {
21135                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
21136                }
21137                let inner_offset;
21138                let mut inner_depth = depth.clone();
21139                if inlined {
21140                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
21141                    inner_offset = next_offset;
21142                } else {
21143                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
21144                    inner_depth.increment()?;
21145                }
21146                let val_ref = self.slaac_preferred.get_or_insert_with(|| fidl::new_empty!(bool, D));
21147                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
21148                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
21149                {
21150                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
21151                }
21152                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
21153                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
21154                }
21155            }
21156
21157            next_offset += envelope_size;
21158            _next_ordinal_to_read += 1;
21159            if next_offset >= end_offset {
21160                return Ok(());
21161            }
21162
21163            // Decode unknown envelopes for gaps in ordinals.
21164            while _next_ordinal_to_read < 5 {
21165                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
21166                _next_ordinal_to_read += 1;
21167                next_offset += envelope_size;
21168            }
21169
21170            let next_out_of_line = decoder.next_out_of_line();
21171            let handles_before = decoder.remaining_handles();
21172            if let Some((inlined, num_bytes, num_handles)) =
21173                fidl::encoding::decode_envelope_header(decoder, next_offset)?
21174            {
21175                let member_inline_size =
21176                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
21177                if inlined != (member_inline_size <= 4) {
21178                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
21179                }
21180                let inner_offset;
21181                let mut inner_depth = depth.clone();
21182                if inlined {
21183                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
21184                    inner_offset = next_offset;
21185                } else {
21186                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
21187                    inner_depth.increment()?;
21188                }
21189                let val_ref = self.slaac_valid.get_or_insert_with(|| fidl::new_empty!(bool, D));
21190                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
21191                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
21192                {
21193                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
21194                }
21195                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
21196                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
21197                }
21198            }
21199
21200            next_offset += envelope_size;
21201
21202            // Decode the remaining unknown envelopes.
21203            while next_offset < end_offset {
21204                _next_ordinal_to_read += 1;
21205                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
21206                next_offset += envelope_size;
21207            }
21208
21209            Ok(())
21210        }
21211    }
21212
21213    impl OperationalDataset {
21214        #[inline(always)]
21215        fn max_ordinal_present(&self) -> u64 {
21216            if let Some(_) = self.channel_mask {
21217                return 13;
21218            }
21219            if let Some(_) = self.security_policy {
21220                return 12;
21221            }
21222            if let Some(_) = self.pskc {
21223                return 11;
21224            }
21225            if let Some(_) = self.wakeup_channel {
21226                return 10;
21227            }
21228            if let Some(_) = self.channel {
21229                return 9;
21230            }
21231            if let Some(_) = self.pan_id {
21232                return 8;
21233            }
21234            if let Some(_) = self.delay {
21235                return 7;
21236            }
21237            if let Some(_) = self.mesh_local_prefix {
21238                return 6;
21239            }
21240            if let Some(_) = self.extended_pan_id {
21241                return 5;
21242            }
21243            if let Some(_) = self.network_name {
21244                return 4;
21245            }
21246            if let Some(_) = self.network_key {
21247                return 3;
21248            }
21249            if let Some(_) = self.pending_timestamp {
21250                return 2;
21251            }
21252            if let Some(_) = self.active_timestamp {
21253                return 1;
21254            }
21255            0
21256        }
21257    }
21258
21259    impl fidl::encoding::ValueTypeMarker for OperationalDataset {
21260        type Borrowed<'a> = &'a Self;
21261        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
21262            value
21263        }
21264    }
21265
21266    unsafe impl fidl::encoding::TypeMarker for OperationalDataset {
21267        type Owned = Self;
21268
21269        #[inline(always)]
21270        fn inline_align(_context: fidl::encoding::Context) -> usize {
21271            8
21272        }
21273
21274        #[inline(always)]
21275        fn inline_size(_context: fidl::encoding::Context) -> usize {
21276            16
21277        }
21278    }
21279
21280    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<OperationalDataset, D>
21281        for &OperationalDataset
21282    {
21283        unsafe fn encode(
21284            self,
21285            encoder: &mut fidl::encoding::Encoder<'_, D>,
21286            offset: usize,
21287            mut depth: fidl::encoding::Depth,
21288        ) -> fidl::Result<()> {
21289            encoder.debug_check_bounds::<OperationalDataset>(offset);
21290            // Vector header
21291            let max_ordinal: u64 = self.max_ordinal_present();
21292            encoder.write_num(max_ordinal, offset);
21293            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
21294            // Calling encoder.out_of_line_offset(0) is not allowed.
21295            if max_ordinal == 0 {
21296                return Ok(());
21297            }
21298            depth.increment()?;
21299            let envelope_size = 8;
21300            let bytes_len = max_ordinal as usize * envelope_size;
21301            #[allow(unused_variables)]
21302            let offset = encoder.out_of_line_offset(bytes_len);
21303            let mut _prev_end_offset: usize = 0;
21304            if 1 > max_ordinal {
21305                return Ok(());
21306            }
21307
21308            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
21309            // are envelope_size bytes.
21310            let cur_offset: usize = (1 - 1) * envelope_size;
21311
21312            // Zero reserved fields.
21313            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
21314
21315            // Safety:
21316            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
21317            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
21318            //   envelope_size bytes, there is always sufficient room.
21319            fidl::encoding::encode_in_envelope_optional::<i64, D>(
21320                self.active_timestamp
21321                    .as_ref()
21322                    .map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
21323                encoder,
21324                offset + cur_offset,
21325                depth,
21326            )?;
21327
21328            _prev_end_offset = cur_offset + envelope_size;
21329            if 2 > max_ordinal {
21330                return Ok(());
21331            }
21332
21333            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
21334            // are envelope_size bytes.
21335            let cur_offset: usize = (2 - 1) * envelope_size;
21336
21337            // Zero reserved fields.
21338            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
21339
21340            // Safety:
21341            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
21342            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
21343            //   envelope_size bytes, there is always sufficient room.
21344            fidl::encoding::encode_in_envelope_optional::<i64, D>(
21345                self.pending_timestamp
21346                    .as_ref()
21347                    .map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
21348                encoder,
21349                offset + cur_offset,
21350                depth,
21351            )?;
21352
21353            _prev_end_offset = cur_offset + envelope_size;
21354            if 3 > max_ordinal {
21355                return Ok(());
21356            }
21357
21358            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
21359            // are envelope_size bytes.
21360            let cur_offset: usize = (3 - 1) * envelope_size;
21361
21362            // Zero reserved fields.
21363            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
21364
21365            // Safety:
21366            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
21367            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
21368            //   envelope_size bytes, there is always sufficient room.
21369            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u8, 16>, D>(
21370                self.network_key.as_ref().map(
21371                    <fidl::encoding::Vector<u8, 16> as fidl::encoding::ValueTypeMarker>::borrow,
21372                ),
21373                encoder,
21374                offset + cur_offset,
21375                depth,
21376            )?;
21377
21378            _prev_end_offset = cur_offset + envelope_size;
21379            if 4 > max_ordinal {
21380                return Ok(());
21381            }
21382
21383            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
21384            // are envelope_size bytes.
21385            let cur_offset: usize = (4 - 1) * envelope_size;
21386
21387            // Zero reserved fields.
21388            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
21389
21390            // Safety:
21391            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
21392            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
21393            //   envelope_size bytes, there is always sufficient room.
21394            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u8, 17>, D>(
21395                self.network_name.as_ref().map(
21396                    <fidl::encoding::Vector<u8, 17> as fidl::encoding::ValueTypeMarker>::borrow,
21397                ),
21398                encoder,
21399                offset + cur_offset,
21400                depth,
21401            )?;
21402
21403            _prev_end_offset = cur_offset + envelope_size;
21404            if 5 > max_ordinal {
21405                return Ok(());
21406            }
21407
21408            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
21409            // are envelope_size bytes.
21410            let cur_offset: usize = (5 - 1) * envelope_size;
21411
21412            // Zero reserved fields.
21413            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
21414
21415            // Safety:
21416            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
21417            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
21418            //   envelope_size bytes, there is always sufficient room.
21419            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u8, 8>, D>(
21420                self.extended_pan_id.as_ref().map(
21421                    <fidl::encoding::Vector<u8, 8> as fidl::encoding::ValueTypeMarker>::borrow,
21422                ),
21423                encoder,
21424                offset + cur_offset,
21425                depth,
21426            )?;
21427
21428            _prev_end_offset = cur_offset + envelope_size;
21429            if 6 > max_ordinal {
21430                return Ok(());
21431            }
21432
21433            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
21434            // are envelope_size bytes.
21435            let cur_offset: usize = (6 - 1) * envelope_size;
21436
21437            // Zero reserved fields.
21438            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
21439
21440            // Safety:
21441            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
21442            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
21443            //   envelope_size bytes, there is always sufficient room.
21444            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u8, 8>, D>(
21445                self.mesh_local_prefix.as_ref().map(
21446                    <fidl::encoding::Vector<u8, 8> as fidl::encoding::ValueTypeMarker>::borrow,
21447                ),
21448                encoder,
21449                offset + cur_offset,
21450                depth,
21451            )?;
21452
21453            _prev_end_offset = cur_offset + envelope_size;
21454            if 7 > max_ordinal {
21455                return Ok(());
21456            }
21457
21458            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
21459            // are envelope_size bytes.
21460            let cur_offset: usize = (7 - 1) * envelope_size;
21461
21462            // Zero reserved fields.
21463            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
21464
21465            // Safety:
21466            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
21467            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
21468            //   envelope_size bytes, there is always sufficient room.
21469            fidl::encoding::encode_in_envelope_optional::<u32, D>(
21470                self.delay.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
21471                encoder,
21472                offset + cur_offset,
21473                depth,
21474            )?;
21475
21476            _prev_end_offset = cur_offset + envelope_size;
21477            if 8 > max_ordinal {
21478                return Ok(());
21479            }
21480
21481            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
21482            // are envelope_size bytes.
21483            let cur_offset: usize = (8 - 1) * envelope_size;
21484
21485            // Zero reserved fields.
21486            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
21487
21488            // Safety:
21489            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
21490            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
21491            //   envelope_size bytes, there is always sufficient room.
21492            fidl::encoding::encode_in_envelope_optional::<u16, D>(
21493                self.pan_id.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
21494                encoder,
21495                offset + cur_offset,
21496                depth,
21497            )?;
21498
21499            _prev_end_offset = cur_offset + envelope_size;
21500            if 9 > max_ordinal {
21501                return Ok(());
21502            }
21503
21504            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
21505            // are envelope_size bytes.
21506            let cur_offset: usize = (9 - 1) * envelope_size;
21507
21508            // Zero reserved fields.
21509            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
21510
21511            // Safety:
21512            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
21513            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
21514            //   envelope_size bytes, there is always sufficient room.
21515            fidl::encoding::encode_in_envelope_optional::<u16, D>(
21516                self.channel.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
21517                encoder,
21518                offset + cur_offset,
21519                depth,
21520            )?;
21521
21522            _prev_end_offset = cur_offset + envelope_size;
21523            if 10 > max_ordinal {
21524                return Ok(());
21525            }
21526
21527            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
21528            // are envelope_size bytes.
21529            let cur_offset: usize = (10 - 1) * envelope_size;
21530
21531            // Zero reserved fields.
21532            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
21533
21534            // Safety:
21535            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
21536            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
21537            //   envelope_size bytes, there is always sufficient room.
21538            fidl::encoding::encode_in_envelope_optional::<u16, D>(
21539                self.wakeup_channel.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
21540                encoder,
21541                offset + cur_offset,
21542                depth,
21543            )?;
21544
21545            _prev_end_offset = cur_offset + envelope_size;
21546            if 11 > max_ordinal {
21547                return Ok(());
21548            }
21549
21550            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
21551            // are envelope_size bytes.
21552            let cur_offset: usize = (11 - 1) * envelope_size;
21553
21554            // Zero reserved fields.
21555            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
21556
21557            // Safety:
21558            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
21559            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
21560            //   envelope_size bytes, there is always sufficient room.
21561            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u8, 16>, D>(
21562                self.pskc.as_ref().map(
21563                    <fidl::encoding::Vector<u8, 16> as fidl::encoding::ValueTypeMarker>::borrow,
21564                ),
21565                encoder,
21566                offset + cur_offset,
21567                depth,
21568            )?;
21569
21570            _prev_end_offset = cur_offset + envelope_size;
21571            if 12 > max_ordinal {
21572                return Ok(());
21573            }
21574
21575            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
21576            // are envelope_size bytes.
21577            let cur_offset: usize = (12 - 1) * envelope_size;
21578
21579            // Zero reserved fields.
21580            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
21581
21582            // Safety:
21583            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
21584            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
21585            //   envelope_size bytes, there is always sufficient room.
21586            fidl::encoding::encode_in_envelope_optional::<SecurityPolicy, D>(
21587                self.security_policy
21588                    .as_ref()
21589                    .map(<SecurityPolicy as fidl::encoding::ValueTypeMarker>::borrow),
21590                encoder,
21591                offset + cur_offset,
21592                depth,
21593            )?;
21594
21595            _prev_end_offset = cur_offset + envelope_size;
21596            if 13 > max_ordinal {
21597                return Ok(());
21598            }
21599
21600            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
21601            // are envelope_size bytes.
21602            let cur_offset: usize = (13 - 1) * envelope_size;
21603
21604            // Zero reserved fields.
21605            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
21606
21607            // Safety:
21608            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
21609            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
21610            //   envelope_size bytes, there is always sufficient room.
21611            fidl::encoding::encode_in_envelope_optional::<u32, D>(
21612                self.channel_mask.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
21613                encoder,
21614                offset + cur_offset,
21615                depth,
21616            )?;
21617
21618            _prev_end_offset = cur_offset + envelope_size;
21619
21620            Ok(())
21621        }
21622    }
21623
21624    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for OperationalDataset {
21625        #[inline(always)]
21626        fn new_empty() -> Self {
21627            Self::default()
21628        }
21629
21630        unsafe fn decode(
21631            &mut self,
21632            decoder: &mut fidl::encoding::Decoder<'_, D>,
21633            offset: usize,
21634            mut depth: fidl::encoding::Depth,
21635        ) -> fidl::Result<()> {
21636            decoder.debug_check_bounds::<Self>(offset);
21637            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
21638                None => return Err(fidl::Error::NotNullable),
21639                Some(len) => len,
21640            };
21641            // Calling decoder.out_of_line_offset(0) is not allowed.
21642            if len == 0 {
21643                return Ok(());
21644            };
21645            depth.increment()?;
21646            let envelope_size = 8;
21647            let bytes_len = len * envelope_size;
21648            let offset = decoder.out_of_line_offset(bytes_len)?;
21649            // Decode the envelope for each type.
21650            let mut _next_ordinal_to_read = 0;
21651            let mut next_offset = offset;
21652            let end_offset = offset + bytes_len;
21653            _next_ordinal_to_read += 1;
21654            if next_offset >= end_offset {
21655                return Ok(());
21656            }
21657
21658            // Decode unknown envelopes for gaps in ordinals.
21659            while _next_ordinal_to_read < 1 {
21660                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
21661                _next_ordinal_to_read += 1;
21662                next_offset += envelope_size;
21663            }
21664
21665            let next_out_of_line = decoder.next_out_of_line();
21666            let handles_before = decoder.remaining_handles();
21667            if let Some((inlined, num_bytes, num_handles)) =
21668                fidl::encoding::decode_envelope_header(decoder, next_offset)?
21669            {
21670                let member_inline_size =
21671                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
21672                if inlined != (member_inline_size <= 4) {
21673                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
21674                }
21675                let inner_offset;
21676                let mut inner_depth = depth.clone();
21677                if inlined {
21678                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
21679                    inner_offset = next_offset;
21680                } else {
21681                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
21682                    inner_depth.increment()?;
21683                }
21684                let val_ref = self.active_timestamp.get_or_insert_with(|| fidl::new_empty!(i64, D));
21685                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
21686                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
21687                {
21688                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
21689                }
21690                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
21691                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
21692                }
21693            }
21694
21695            next_offset += envelope_size;
21696            _next_ordinal_to_read += 1;
21697            if next_offset >= end_offset {
21698                return Ok(());
21699            }
21700
21701            // Decode unknown envelopes for gaps in ordinals.
21702            while _next_ordinal_to_read < 2 {
21703                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
21704                _next_ordinal_to_read += 1;
21705                next_offset += envelope_size;
21706            }
21707
21708            let next_out_of_line = decoder.next_out_of_line();
21709            let handles_before = decoder.remaining_handles();
21710            if let Some((inlined, num_bytes, num_handles)) =
21711                fidl::encoding::decode_envelope_header(decoder, next_offset)?
21712            {
21713                let member_inline_size =
21714                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
21715                if inlined != (member_inline_size <= 4) {
21716                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
21717                }
21718                let inner_offset;
21719                let mut inner_depth = depth.clone();
21720                if inlined {
21721                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
21722                    inner_offset = next_offset;
21723                } else {
21724                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
21725                    inner_depth.increment()?;
21726                }
21727                let val_ref =
21728                    self.pending_timestamp.get_or_insert_with(|| fidl::new_empty!(i64, D));
21729                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
21730                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
21731                {
21732                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
21733                }
21734                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
21735                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
21736                }
21737            }
21738
21739            next_offset += envelope_size;
21740            _next_ordinal_to_read += 1;
21741            if next_offset >= end_offset {
21742                return Ok(());
21743            }
21744
21745            // Decode unknown envelopes for gaps in ordinals.
21746            while _next_ordinal_to_read < 3 {
21747                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
21748                _next_ordinal_to_read += 1;
21749                next_offset += envelope_size;
21750            }
21751
21752            let next_out_of_line = decoder.next_out_of_line();
21753            let handles_before = decoder.remaining_handles();
21754            if let Some((inlined, num_bytes, num_handles)) =
21755                fidl::encoding::decode_envelope_header(decoder, next_offset)?
21756            {
21757                let member_inline_size =
21758                    <fidl::encoding::Vector<u8, 16> as fidl::encoding::TypeMarker>::inline_size(
21759                        decoder.context,
21760                    );
21761                if inlined != (member_inline_size <= 4) {
21762                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
21763                }
21764                let inner_offset;
21765                let mut inner_depth = depth.clone();
21766                if inlined {
21767                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
21768                    inner_offset = next_offset;
21769                } else {
21770                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
21771                    inner_depth.increment()?;
21772                }
21773                let val_ref = self
21774                    .network_key
21775                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u8, 16>, D));
21776                fidl::decode!(fidl::encoding::Vector<u8, 16>, D, val_ref, decoder, inner_offset, inner_depth)?;
21777                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
21778                {
21779                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
21780                }
21781                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
21782                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
21783                }
21784            }
21785
21786            next_offset += envelope_size;
21787            _next_ordinal_to_read += 1;
21788            if next_offset >= end_offset {
21789                return Ok(());
21790            }
21791
21792            // Decode unknown envelopes for gaps in ordinals.
21793            while _next_ordinal_to_read < 4 {
21794                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
21795                _next_ordinal_to_read += 1;
21796                next_offset += envelope_size;
21797            }
21798
21799            let next_out_of_line = decoder.next_out_of_line();
21800            let handles_before = decoder.remaining_handles();
21801            if let Some((inlined, num_bytes, num_handles)) =
21802                fidl::encoding::decode_envelope_header(decoder, next_offset)?
21803            {
21804                let member_inline_size =
21805                    <fidl::encoding::Vector<u8, 17> as fidl::encoding::TypeMarker>::inline_size(
21806                        decoder.context,
21807                    );
21808                if inlined != (member_inline_size <= 4) {
21809                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
21810                }
21811                let inner_offset;
21812                let mut inner_depth = depth.clone();
21813                if inlined {
21814                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
21815                    inner_offset = next_offset;
21816                } else {
21817                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
21818                    inner_depth.increment()?;
21819                }
21820                let val_ref = self
21821                    .network_name
21822                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u8, 17>, D));
21823                fidl::decode!(fidl::encoding::Vector<u8, 17>, D, val_ref, decoder, inner_offset, inner_depth)?;
21824                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
21825                {
21826                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
21827                }
21828                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
21829                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
21830                }
21831            }
21832
21833            next_offset += envelope_size;
21834            _next_ordinal_to_read += 1;
21835            if next_offset >= end_offset {
21836                return Ok(());
21837            }
21838
21839            // Decode unknown envelopes for gaps in ordinals.
21840            while _next_ordinal_to_read < 5 {
21841                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
21842                _next_ordinal_to_read += 1;
21843                next_offset += envelope_size;
21844            }
21845
21846            let next_out_of_line = decoder.next_out_of_line();
21847            let handles_before = decoder.remaining_handles();
21848            if let Some((inlined, num_bytes, num_handles)) =
21849                fidl::encoding::decode_envelope_header(decoder, next_offset)?
21850            {
21851                let member_inline_size =
21852                    <fidl::encoding::Vector<u8, 8> as fidl::encoding::TypeMarker>::inline_size(
21853                        decoder.context,
21854                    );
21855                if inlined != (member_inline_size <= 4) {
21856                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
21857                }
21858                let inner_offset;
21859                let mut inner_depth = depth.clone();
21860                if inlined {
21861                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
21862                    inner_offset = next_offset;
21863                } else {
21864                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
21865                    inner_depth.increment()?;
21866                }
21867                let val_ref = self
21868                    .extended_pan_id
21869                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u8, 8>, D));
21870                fidl::decode!(fidl::encoding::Vector<u8, 8>, D, val_ref, decoder, inner_offset, inner_depth)?;
21871                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
21872                {
21873                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
21874                }
21875                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
21876                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
21877                }
21878            }
21879
21880            next_offset += envelope_size;
21881            _next_ordinal_to_read += 1;
21882            if next_offset >= end_offset {
21883                return Ok(());
21884            }
21885
21886            // Decode unknown envelopes for gaps in ordinals.
21887            while _next_ordinal_to_read < 6 {
21888                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
21889                _next_ordinal_to_read += 1;
21890                next_offset += envelope_size;
21891            }
21892
21893            let next_out_of_line = decoder.next_out_of_line();
21894            let handles_before = decoder.remaining_handles();
21895            if let Some((inlined, num_bytes, num_handles)) =
21896                fidl::encoding::decode_envelope_header(decoder, next_offset)?
21897            {
21898                let member_inline_size =
21899                    <fidl::encoding::Vector<u8, 8> as fidl::encoding::TypeMarker>::inline_size(
21900                        decoder.context,
21901                    );
21902                if inlined != (member_inline_size <= 4) {
21903                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
21904                }
21905                let inner_offset;
21906                let mut inner_depth = depth.clone();
21907                if inlined {
21908                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
21909                    inner_offset = next_offset;
21910                } else {
21911                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
21912                    inner_depth.increment()?;
21913                }
21914                let val_ref = self
21915                    .mesh_local_prefix
21916                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u8, 8>, D));
21917                fidl::decode!(fidl::encoding::Vector<u8, 8>, D, val_ref, decoder, inner_offset, inner_depth)?;
21918                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
21919                {
21920                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
21921                }
21922                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
21923                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
21924                }
21925            }
21926
21927            next_offset += envelope_size;
21928            _next_ordinal_to_read += 1;
21929            if next_offset >= end_offset {
21930                return Ok(());
21931            }
21932
21933            // Decode unknown envelopes for gaps in ordinals.
21934            while _next_ordinal_to_read < 7 {
21935                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
21936                _next_ordinal_to_read += 1;
21937                next_offset += envelope_size;
21938            }
21939
21940            let next_out_of_line = decoder.next_out_of_line();
21941            let handles_before = decoder.remaining_handles();
21942            if let Some((inlined, num_bytes, num_handles)) =
21943                fidl::encoding::decode_envelope_header(decoder, next_offset)?
21944            {
21945                let member_inline_size =
21946                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
21947                if inlined != (member_inline_size <= 4) {
21948                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
21949                }
21950                let inner_offset;
21951                let mut inner_depth = depth.clone();
21952                if inlined {
21953                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
21954                    inner_offset = next_offset;
21955                } else {
21956                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
21957                    inner_depth.increment()?;
21958                }
21959                let val_ref = self.delay.get_or_insert_with(|| fidl::new_empty!(u32, D));
21960                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
21961                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
21962                {
21963                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
21964                }
21965                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
21966                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
21967                }
21968            }
21969
21970            next_offset += envelope_size;
21971            _next_ordinal_to_read += 1;
21972            if next_offset >= end_offset {
21973                return Ok(());
21974            }
21975
21976            // Decode unknown envelopes for gaps in ordinals.
21977            while _next_ordinal_to_read < 8 {
21978                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
21979                _next_ordinal_to_read += 1;
21980                next_offset += envelope_size;
21981            }
21982
21983            let next_out_of_line = decoder.next_out_of_line();
21984            let handles_before = decoder.remaining_handles();
21985            if let Some((inlined, num_bytes, num_handles)) =
21986                fidl::encoding::decode_envelope_header(decoder, next_offset)?
21987            {
21988                let member_inline_size =
21989                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
21990                if inlined != (member_inline_size <= 4) {
21991                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
21992                }
21993                let inner_offset;
21994                let mut inner_depth = depth.clone();
21995                if inlined {
21996                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
21997                    inner_offset = next_offset;
21998                } else {
21999                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
22000                    inner_depth.increment()?;
22001                }
22002                let val_ref = self.pan_id.get_or_insert_with(|| fidl::new_empty!(u16, D));
22003                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
22004                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
22005                {
22006                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
22007                }
22008                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
22009                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
22010                }
22011            }
22012
22013            next_offset += envelope_size;
22014            _next_ordinal_to_read += 1;
22015            if next_offset >= end_offset {
22016                return Ok(());
22017            }
22018
22019            // Decode unknown envelopes for gaps in ordinals.
22020            while _next_ordinal_to_read < 9 {
22021                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
22022                _next_ordinal_to_read += 1;
22023                next_offset += envelope_size;
22024            }
22025
22026            let next_out_of_line = decoder.next_out_of_line();
22027            let handles_before = decoder.remaining_handles();
22028            if let Some((inlined, num_bytes, num_handles)) =
22029                fidl::encoding::decode_envelope_header(decoder, next_offset)?
22030            {
22031                let member_inline_size =
22032                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
22033                if inlined != (member_inline_size <= 4) {
22034                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
22035                }
22036                let inner_offset;
22037                let mut inner_depth = depth.clone();
22038                if inlined {
22039                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
22040                    inner_offset = next_offset;
22041                } else {
22042                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
22043                    inner_depth.increment()?;
22044                }
22045                let val_ref = self.channel.get_or_insert_with(|| fidl::new_empty!(u16, D));
22046                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
22047                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
22048                {
22049                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
22050                }
22051                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
22052                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
22053                }
22054            }
22055
22056            next_offset += envelope_size;
22057            _next_ordinal_to_read += 1;
22058            if next_offset >= end_offset {
22059                return Ok(());
22060            }
22061
22062            // Decode unknown envelopes for gaps in ordinals.
22063            while _next_ordinal_to_read < 10 {
22064                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
22065                _next_ordinal_to_read += 1;
22066                next_offset += envelope_size;
22067            }
22068
22069            let next_out_of_line = decoder.next_out_of_line();
22070            let handles_before = decoder.remaining_handles();
22071            if let Some((inlined, num_bytes, num_handles)) =
22072                fidl::encoding::decode_envelope_header(decoder, next_offset)?
22073            {
22074                let member_inline_size =
22075                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
22076                if inlined != (member_inline_size <= 4) {
22077                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
22078                }
22079                let inner_offset;
22080                let mut inner_depth = depth.clone();
22081                if inlined {
22082                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
22083                    inner_offset = next_offset;
22084                } else {
22085                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
22086                    inner_depth.increment()?;
22087                }
22088                let val_ref = self.wakeup_channel.get_or_insert_with(|| fidl::new_empty!(u16, D));
22089                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
22090                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
22091                {
22092                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
22093                }
22094                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
22095                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
22096                }
22097            }
22098
22099            next_offset += envelope_size;
22100            _next_ordinal_to_read += 1;
22101            if next_offset >= end_offset {
22102                return Ok(());
22103            }
22104
22105            // Decode unknown envelopes for gaps in ordinals.
22106            while _next_ordinal_to_read < 11 {
22107                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
22108                _next_ordinal_to_read += 1;
22109                next_offset += envelope_size;
22110            }
22111
22112            let next_out_of_line = decoder.next_out_of_line();
22113            let handles_before = decoder.remaining_handles();
22114            if let Some((inlined, num_bytes, num_handles)) =
22115                fidl::encoding::decode_envelope_header(decoder, next_offset)?
22116            {
22117                let member_inline_size =
22118                    <fidl::encoding::Vector<u8, 16> as fidl::encoding::TypeMarker>::inline_size(
22119                        decoder.context,
22120                    );
22121                if inlined != (member_inline_size <= 4) {
22122                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
22123                }
22124                let inner_offset;
22125                let mut inner_depth = depth.clone();
22126                if inlined {
22127                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
22128                    inner_offset = next_offset;
22129                } else {
22130                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
22131                    inner_depth.increment()?;
22132                }
22133                let val_ref = self
22134                    .pskc
22135                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u8, 16>, D));
22136                fidl::decode!(fidl::encoding::Vector<u8, 16>, D, val_ref, decoder, inner_offset, inner_depth)?;
22137                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
22138                {
22139                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
22140                }
22141                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
22142                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
22143                }
22144            }
22145
22146            next_offset += envelope_size;
22147            _next_ordinal_to_read += 1;
22148            if next_offset >= end_offset {
22149                return Ok(());
22150            }
22151
22152            // Decode unknown envelopes for gaps in ordinals.
22153            while _next_ordinal_to_read < 12 {
22154                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
22155                _next_ordinal_to_read += 1;
22156                next_offset += envelope_size;
22157            }
22158
22159            let next_out_of_line = decoder.next_out_of_line();
22160            let handles_before = decoder.remaining_handles();
22161            if let Some((inlined, num_bytes, num_handles)) =
22162                fidl::encoding::decode_envelope_header(decoder, next_offset)?
22163            {
22164                let member_inline_size =
22165                    <SecurityPolicy as fidl::encoding::TypeMarker>::inline_size(decoder.context);
22166                if inlined != (member_inline_size <= 4) {
22167                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
22168                }
22169                let inner_offset;
22170                let mut inner_depth = depth.clone();
22171                if inlined {
22172                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
22173                    inner_offset = next_offset;
22174                } else {
22175                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
22176                    inner_depth.increment()?;
22177                }
22178                let val_ref =
22179                    self.security_policy.get_or_insert_with(|| fidl::new_empty!(SecurityPolicy, D));
22180                fidl::decode!(SecurityPolicy, D, val_ref, decoder, inner_offset, inner_depth)?;
22181                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
22182                {
22183                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
22184                }
22185                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
22186                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
22187                }
22188            }
22189
22190            next_offset += envelope_size;
22191            _next_ordinal_to_read += 1;
22192            if next_offset >= end_offset {
22193                return Ok(());
22194            }
22195
22196            // Decode unknown envelopes for gaps in ordinals.
22197            while _next_ordinal_to_read < 13 {
22198                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
22199                _next_ordinal_to_read += 1;
22200                next_offset += envelope_size;
22201            }
22202
22203            let next_out_of_line = decoder.next_out_of_line();
22204            let handles_before = decoder.remaining_handles();
22205            if let Some((inlined, num_bytes, num_handles)) =
22206                fidl::encoding::decode_envelope_header(decoder, next_offset)?
22207            {
22208                let member_inline_size =
22209                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
22210                if inlined != (member_inline_size <= 4) {
22211                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
22212                }
22213                let inner_offset;
22214                let mut inner_depth = depth.clone();
22215                if inlined {
22216                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
22217                    inner_offset = next_offset;
22218                } else {
22219                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
22220                    inner_depth.increment()?;
22221                }
22222                let val_ref = self.channel_mask.get_or_insert_with(|| fidl::new_empty!(u32, D));
22223                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
22224                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
22225                {
22226                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
22227                }
22228                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
22229                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
22230                }
22231            }
22232
22233            next_offset += envelope_size;
22234
22235            // Decode the remaining unknown envelopes.
22236            while next_offset < end_offset {
22237                _next_ordinal_to_read += 1;
22238                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
22239                next_offset += envelope_size;
22240            }
22241
22242            Ok(())
22243        }
22244    }
22245
22246    impl PdProcessedRaInfo {
22247        #[inline(always)]
22248        fn max_ordinal_present(&self) -> u64 {
22249            if let Some(_) = self.last_platform_ra_msec {
22250                return 3;
22251            }
22252            if let Some(_) = self.num_platform_pio_processed {
22253                return 2;
22254            }
22255            if let Some(_) = self.num_platform_ra_received {
22256                return 1;
22257            }
22258            0
22259        }
22260    }
22261
22262    impl fidl::encoding::ValueTypeMarker for PdProcessedRaInfo {
22263        type Borrowed<'a> = &'a Self;
22264        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
22265            value
22266        }
22267    }
22268
22269    unsafe impl fidl::encoding::TypeMarker for PdProcessedRaInfo {
22270        type Owned = Self;
22271
22272        #[inline(always)]
22273        fn inline_align(_context: fidl::encoding::Context) -> usize {
22274            8
22275        }
22276
22277        #[inline(always)]
22278        fn inline_size(_context: fidl::encoding::Context) -> usize {
22279            16
22280        }
22281    }
22282
22283    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<PdProcessedRaInfo, D>
22284        for &PdProcessedRaInfo
22285    {
22286        unsafe fn encode(
22287            self,
22288            encoder: &mut fidl::encoding::Encoder<'_, D>,
22289            offset: usize,
22290            mut depth: fidl::encoding::Depth,
22291        ) -> fidl::Result<()> {
22292            encoder.debug_check_bounds::<PdProcessedRaInfo>(offset);
22293            // Vector header
22294            let max_ordinal: u64 = self.max_ordinal_present();
22295            encoder.write_num(max_ordinal, offset);
22296            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
22297            // Calling encoder.out_of_line_offset(0) is not allowed.
22298            if max_ordinal == 0 {
22299                return Ok(());
22300            }
22301            depth.increment()?;
22302            let envelope_size = 8;
22303            let bytes_len = max_ordinal as usize * envelope_size;
22304            #[allow(unused_variables)]
22305            let offset = encoder.out_of_line_offset(bytes_len);
22306            let mut _prev_end_offset: usize = 0;
22307            if 1 > max_ordinal {
22308                return Ok(());
22309            }
22310
22311            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
22312            // are envelope_size bytes.
22313            let cur_offset: usize = (1 - 1) * envelope_size;
22314
22315            // Zero reserved fields.
22316            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
22317
22318            // Safety:
22319            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
22320            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
22321            //   envelope_size bytes, there is always sufficient room.
22322            fidl::encoding::encode_in_envelope_optional::<u32, D>(
22323                self.num_platform_ra_received
22324                    .as_ref()
22325                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
22326                encoder,
22327                offset + cur_offset,
22328                depth,
22329            )?;
22330
22331            _prev_end_offset = cur_offset + envelope_size;
22332            if 2 > max_ordinal {
22333                return Ok(());
22334            }
22335
22336            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
22337            // are envelope_size bytes.
22338            let cur_offset: usize = (2 - 1) * envelope_size;
22339
22340            // Zero reserved fields.
22341            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
22342
22343            // Safety:
22344            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
22345            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
22346            //   envelope_size bytes, there is always sufficient room.
22347            fidl::encoding::encode_in_envelope_optional::<u32, D>(
22348                self.num_platform_pio_processed
22349                    .as_ref()
22350                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
22351                encoder,
22352                offset + cur_offset,
22353                depth,
22354            )?;
22355
22356            _prev_end_offset = cur_offset + envelope_size;
22357            if 3 > max_ordinal {
22358                return Ok(());
22359            }
22360
22361            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
22362            // are envelope_size bytes.
22363            let cur_offset: usize = (3 - 1) * envelope_size;
22364
22365            // Zero reserved fields.
22366            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
22367
22368            // Safety:
22369            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
22370            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
22371            //   envelope_size bytes, there is always sufficient room.
22372            fidl::encoding::encode_in_envelope_optional::<u32, D>(
22373                self.last_platform_ra_msec
22374                    .as_ref()
22375                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
22376                encoder,
22377                offset + cur_offset,
22378                depth,
22379            )?;
22380
22381            _prev_end_offset = cur_offset + envelope_size;
22382
22383            Ok(())
22384        }
22385    }
22386
22387    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for PdProcessedRaInfo {
22388        #[inline(always)]
22389        fn new_empty() -> Self {
22390            Self::default()
22391        }
22392
22393        unsafe fn decode(
22394            &mut self,
22395            decoder: &mut fidl::encoding::Decoder<'_, D>,
22396            offset: usize,
22397            mut depth: fidl::encoding::Depth,
22398        ) -> fidl::Result<()> {
22399            decoder.debug_check_bounds::<Self>(offset);
22400            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
22401                None => return Err(fidl::Error::NotNullable),
22402                Some(len) => len,
22403            };
22404            // Calling decoder.out_of_line_offset(0) is not allowed.
22405            if len == 0 {
22406                return Ok(());
22407            };
22408            depth.increment()?;
22409            let envelope_size = 8;
22410            let bytes_len = len * envelope_size;
22411            let offset = decoder.out_of_line_offset(bytes_len)?;
22412            // Decode the envelope for each type.
22413            let mut _next_ordinal_to_read = 0;
22414            let mut next_offset = offset;
22415            let end_offset = offset + bytes_len;
22416            _next_ordinal_to_read += 1;
22417            if next_offset >= end_offset {
22418                return Ok(());
22419            }
22420
22421            // Decode unknown envelopes for gaps in ordinals.
22422            while _next_ordinal_to_read < 1 {
22423                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
22424                _next_ordinal_to_read += 1;
22425                next_offset += envelope_size;
22426            }
22427
22428            let next_out_of_line = decoder.next_out_of_line();
22429            let handles_before = decoder.remaining_handles();
22430            if let Some((inlined, num_bytes, num_handles)) =
22431                fidl::encoding::decode_envelope_header(decoder, next_offset)?
22432            {
22433                let member_inline_size =
22434                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
22435                if inlined != (member_inline_size <= 4) {
22436                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
22437                }
22438                let inner_offset;
22439                let mut inner_depth = depth.clone();
22440                if inlined {
22441                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
22442                    inner_offset = next_offset;
22443                } else {
22444                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
22445                    inner_depth.increment()?;
22446                }
22447                let val_ref =
22448                    self.num_platform_ra_received.get_or_insert_with(|| fidl::new_empty!(u32, D));
22449                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
22450                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
22451                {
22452                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
22453                }
22454                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
22455                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
22456                }
22457            }
22458
22459            next_offset += envelope_size;
22460            _next_ordinal_to_read += 1;
22461            if next_offset >= end_offset {
22462                return Ok(());
22463            }
22464
22465            // Decode unknown envelopes for gaps in ordinals.
22466            while _next_ordinal_to_read < 2 {
22467                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
22468                _next_ordinal_to_read += 1;
22469                next_offset += envelope_size;
22470            }
22471
22472            let next_out_of_line = decoder.next_out_of_line();
22473            let handles_before = decoder.remaining_handles();
22474            if let Some((inlined, num_bytes, num_handles)) =
22475                fidl::encoding::decode_envelope_header(decoder, next_offset)?
22476            {
22477                let member_inline_size =
22478                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
22479                if inlined != (member_inline_size <= 4) {
22480                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
22481                }
22482                let inner_offset;
22483                let mut inner_depth = depth.clone();
22484                if inlined {
22485                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
22486                    inner_offset = next_offset;
22487                } else {
22488                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
22489                    inner_depth.increment()?;
22490                }
22491                let val_ref =
22492                    self.num_platform_pio_processed.get_or_insert_with(|| fidl::new_empty!(u32, D));
22493                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
22494                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
22495                {
22496                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
22497                }
22498                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
22499                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
22500                }
22501            }
22502
22503            next_offset += envelope_size;
22504            _next_ordinal_to_read += 1;
22505            if next_offset >= end_offset {
22506                return Ok(());
22507            }
22508
22509            // Decode unknown envelopes for gaps in ordinals.
22510            while _next_ordinal_to_read < 3 {
22511                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
22512                _next_ordinal_to_read += 1;
22513                next_offset += envelope_size;
22514            }
22515
22516            let next_out_of_line = decoder.next_out_of_line();
22517            let handles_before = decoder.remaining_handles();
22518            if let Some((inlined, num_bytes, num_handles)) =
22519                fidl::encoding::decode_envelope_header(decoder, next_offset)?
22520            {
22521                let member_inline_size =
22522                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
22523                if inlined != (member_inline_size <= 4) {
22524                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
22525                }
22526                let inner_offset;
22527                let mut inner_depth = depth.clone();
22528                if inlined {
22529                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
22530                    inner_offset = next_offset;
22531                } else {
22532                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
22533                    inner_depth.increment()?;
22534                }
22535                let val_ref =
22536                    self.last_platform_ra_msec.get_or_insert_with(|| fidl::new_empty!(u32, D));
22537                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
22538                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
22539                {
22540                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
22541                }
22542                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
22543                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
22544                }
22545            }
22546
22547            next_offset += envelope_size;
22548
22549            // Decode the remaining unknown envelopes.
22550            while next_offset < end_offset {
22551                _next_ordinal_to_read += 1;
22552                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
22553                next_offset += envelope_size;
22554            }
22555
22556            Ok(())
22557        }
22558    }
22559
22560    impl RadioLinkInfo {
22561        #[inline(always)]
22562        fn max_ordinal_present(&self) -> u64 {
22563            if let Some(_) = self.preference {
22564                return 2;
22565            }
22566            if let Some(_) = self.link_type {
22567                return 1;
22568            }
22569            0
22570        }
22571    }
22572
22573    impl fidl::encoding::ValueTypeMarker for RadioLinkInfo {
22574        type Borrowed<'a> = &'a Self;
22575        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
22576            value
22577        }
22578    }
22579
22580    unsafe impl fidl::encoding::TypeMarker for RadioLinkInfo {
22581        type Owned = Self;
22582
22583        #[inline(always)]
22584        fn inline_align(_context: fidl::encoding::Context) -> usize {
22585            8
22586        }
22587
22588        #[inline(always)]
22589        fn inline_size(_context: fidl::encoding::Context) -> usize {
22590            16
22591        }
22592    }
22593
22594    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<RadioLinkInfo, D>
22595        for &RadioLinkInfo
22596    {
22597        unsafe fn encode(
22598            self,
22599            encoder: &mut fidl::encoding::Encoder<'_, D>,
22600            offset: usize,
22601            mut depth: fidl::encoding::Depth,
22602        ) -> fidl::Result<()> {
22603            encoder.debug_check_bounds::<RadioLinkInfo>(offset);
22604            // Vector header
22605            let max_ordinal: u64 = self.max_ordinal_present();
22606            encoder.write_num(max_ordinal, offset);
22607            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
22608            // Calling encoder.out_of_line_offset(0) is not allowed.
22609            if max_ordinal == 0 {
22610                return Ok(());
22611            }
22612            depth.increment()?;
22613            let envelope_size = 8;
22614            let bytes_len = max_ordinal as usize * envelope_size;
22615            #[allow(unused_variables)]
22616            let offset = encoder.out_of_line_offset(bytes_len);
22617            let mut _prev_end_offset: usize = 0;
22618            if 1 > max_ordinal {
22619                return Ok(());
22620            }
22621
22622            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
22623            // are envelope_size bytes.
22624            let cur_offset: usize = (1 - 1) * envelope_size;
22625
22626            // Zero reserved fields.
22627            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
22628
22629            // Safety:
22630            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
22631            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
22632            //   envelope_size bytes, there is always sufficient room.
22633            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<10>, D>(
22634                self.link_type.as_ref().map(
22635                    <fidl::encoding::BoundedString<10> as fidl::encoding::ValueTypeMarker>::borrow,
22636                ),
22637                encoder,
22638                offset + cur_offset,
22639                depth,
22640            )?;
22641
22642            _prev_end_offset = cur_offset + envelope_size;
22643            if 2 > max_ordinal {
22644                return Ok(());
22645            }
22646
22647            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
22648            // are envelope_size bytes.
22649            let cur_offset: usize = (2 - 1) * envelope_size;
22650
22651            // Zero reserved fields.
22652            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
22653
22654            // Safety:
22655            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
22656            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
22657            //   envelope_size bytes, there is always sufficient room.
22658            fidl::encoding::encode_in_envelope_optional::<u8, D>(
22659                self.preference.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
22660                encoder,
22661                offset + cur_offset,
22662                depth,
22663            )?;
22664
22665            _prev_end_offset = cur_offset + envelope_size;
22666
22667            Ok(())
22668        }
22669    }
22670
22671    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for RadioLinkInfo {
22672        #[inline(always)]
22673        fn new_empty() -> Self {
22674            Self::default()
22675        }
22676
22677        unsafe fn decode(
22678            &mut self,
22679            decoder: &mut fidl::encoding::Decoder<'_, D>,
22680            offset: usize,
22681            mut depth: fidl::encoding::Depth,
22682        ) -> fidl::Result<()> {
22683            decoder.debug_check_bounds::<Self>(offset);
22684            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
22685                None => return Err(fidl::Error::NotNullable),
22686                Some(len) => len,
22687            };
22688            // Calling decoder.out_of_line_offset(0) is not allowed.
22689            if len == 0 {
22690                return Ok(());
22691            };
22692            depth.increment()?;
22693            let envelope_size = 8;
22694            let bytes_len = len * envelope_size;
22695            let offset = decoder.out_of_line_offset(bytes_len)?;
22696            // Decode the envelope for each type.
22697            let mut _next_ordinal_to_read = 0;
22698            let mut next_offset = offset;
22699            let end_offset = offset + bytes_len;
22700            _next_ordinal_to_read += 1;
22701            if next_offset >= end_offset {
22702                return Ok(());
22703            }
22704
22705            // Decode unknown envelopes for gaps in ordinals.
22706            while _next_ordinal_to_read < 1 {
22707                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
22708                _next_ordinal_to_read += 1;
22709                next_offset += envelope_size;
22710            }
22711
22712            let next_out_of_line = decoder.next_out_of_line();
22713            let handles_before = decoder.remaining_handles();
22714            if let Some((inlined, num_bytes, num_handles)) =
22715                fidl::encoding::decode_envelope_header(decoder, next_offset)?
22716            {
22717                let member_inline_size =
22718                    <fidl::encoding::BoundedString<10> as fidl::encoding::TypeMarker>::inline_size(
22719                        decoder.context,
22720                    );
22721                if inlined != (member_inline_size <= 4) {
22722                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
22723                }
22724                let inner_offset;
22725                let mut inner_depth = depth.clone();
22726                if inlined {
22727                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
22728                    inner_offset = next_offset;
22729                } else {
22730                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
22731                    inner_depth.increment()?;
22732                }
22733                let val_ref = self
22734                    .link_type
22735                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<10>, D));
22736                fidl::decode!(
22737                    fidl::encoding::BoundedString<10>,
22738                    D,
22739                    val_ref,
22740                    decoder,
22741                    inner_offset,
22742                    inner_depth
22743                )?;
22744                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
22745                {
22746                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
22747                }
22748                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
22749                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
22750                }
22751            }
22752
22753            next_offset += envelope_size;
22754            _next_ordinal_to_read += 1;
22755            if next_offset >= end_offset {
22756                return Ok(());
22757            }
22758
22759            // Decode unknown envelopes for gaps in ordinals.
22760            while _next_ordinal_to_read < 2 {
22761                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
22762                _next_ordinal_to_read += 1;
22763                next_offset += envelope_size;
22764            }
22765
22766            let next_out_of_line = decoder.next_out_of_line();
22767            let handles_before = decoder.remaining_handles();
22768            if let Some((inlined, num_bytes, num_handles)) =
22769                fidl::encoding::decode_envelope_header(decoder, next_offset)?
22770            {
22771                let member_inline_size =
22772                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
22773                if inlined != (member_inline_size <= 4) {
22774                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
22775                }
22776                let inner_offset;
22777                let mut inner_depth = depth.clone();
22778                if inlined {
22779                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
22780                    inner_offset = next_offset;
22781                } else {
22782                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
22783                    inner_depth.increment()?;
22784                }
22785                let val_ref = self.preference.get_or_insert_with(|| fidl::new_empty!(u8, D));
22786                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
22787                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
22788                {
22789                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
22790                }
22791                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
22792                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
22793                }
22794            }
22795
22796            next_offset += envelope_size;
22797
22798            // Decode the remaining unknown envelopes.
22799            while next_offset < end_offset {
22800                _next_ordinal_to_read += 1;
22801                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
22802                next_offset += envelope_size;
22803            }
22804
22805            Ok(())
22806        }
22807    }
22808
22809    impl RouterInfo {
22810        #[inline(always)]
22811        fn max_ordinal_present(&self) -> u64 {
22812            if let Some(_) = self.link_established {
22813                return 9;
22814            }
22815            if let Some(_) = self.age {
22816                return 8;
22817            }
22818            if let Some(_) = self.link_quality_out {
22819                return 7;
22820            }
22821            if let Some(_) = self.link_quality_in {
22822                return 6;
22823            }
22824            if let Some(_) = self.path_cost {
22825                return 5;
22826            }
22827            if let Some(_) = self.next_hop {
22828                return 4;
22829            }
22830            if let Some(_) = self.router_id {
22831                return 3;
22832            }
22833            if let Some(_) = self.thread_rloc {
22834                return 2;
22835            }
22836            if let Some(_) = self.extended_address {
22837                return 1;
22838            }
22839            0
22840        }
22841    }
22842
22843    impl fidl::encoding::ValueTypeMarker for RouterInfo {
22844        type Borrowed<'a> = &'a Self;
22845        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
22846            value
22847        }
22848    }
22849
22850    unsafe impl fidl::encoding::TypeMarker for RouterInfo {
22851        type Owned = Self;
22852
22853        #[inline(always)]
22854        fn inline_align(_context: fidl::encoding::Context) -> usize {
22855            8
22856        }
22857
22858        #[inline(always)]
22859        fn inline_size(_context: fidl::encoding::Context) -> usize {
22860            16
22861        }
22862    }
22863
22864    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<RouterInfo, D>
22865        for &RouterInfo
22866    {
22867        unsafe fn encode(
22868            self,
22869            encoder: &mut fidl::encoding::Encoder<'_, D>,
22870            offset: usize,
22871            mut depth: fidl::encoding::Depth,
22872        ) -> fidl::Result<()> {
22873            encoder.debug_check_bounds::<RouterInfo>(offset);
22874            // Vector header
22875            let max_ordinal: u64 = self.max_ordinal_present();
22876            encoder.write_num(max_ordinal, offset);
22877            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
22878            // Calling encoder.out_of_line_offset(0) is not allowed.
22879            if max_ordinal == 0 {
22880                return Ok(());
22881            }
22882            depth.increment()?;
22883            let envelope_size = 8;
22884            let bytes_len = max_ordinal as usize * envelope_size;
22885            #[allow(unused_variables)]
22886            let offset = encoder.out_of_line_offset(bytes_len);
22887            let mut _prev_end_offset: usize = 0;
22888            if 1 > max_ordinal {
22889                return Ok(());
22890            }
22891
22892            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
22893            // are envelope_size bytes.
22894            let cur_offset: usize = (1 - 1) * envelope_size;
22895
22896            // Zero reserved fields.
22897            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
22898
22899            // Safety:
22900            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
22901            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
22902            //   envelope_size bytes, there is always sufficient room.
22903            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u8, 8>, D>(
22904                self.extended_address.as_ref().map(
22905                    <fidl::encoding::Vector<u8, 8> as fidl::encoding::ValueTypeMarker>::borrow,
22906                ),
22907                encoder,
22908                offset + cur_offset,
22909                depth,
22910            )?;
22911
22912            _prev_end_offset = cur_offset + envelope_size;
22913            if 2 > max_ordinal {
22914                return Ok(());
22915            }
22916
22917            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
22918            // are envelope_size bytes.
22919            let cur_offset: usize = (2 - 1) * envelope_size;
22920
22921            // Zero reserved fields.
22922            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
22923
22924            // Safety:
22925            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
22926            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
22927            //   envelope_size bytes, there is always sufficient room.
22928            fidl::encoding::encode_in_envelope_optional::<u16, D>(
22929                self.thread_rloc.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
22930                encoder,
22931                offset + cur_offset,
22932                depth,
22933            )?;
22934
22935            _prev_end_offset = cur_offset + envelope_size;
22936            if 3 > max_ordinal {
22937                return Ok(());
22938            }
22939
22940            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
22941            // are envelope_size bytes.
22942            let cur_offset: usize = (3 - 1) * envelope_size;
22943
22944            // Zero reserved fields.
22945            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
22946
22947            // Safety:
22948            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
22949            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
22950            //   envelope_size bytes, there is always sufficient room.
22951            fidl::encoding::encode_in_envelope_optional::<u8, D>(
22952                self.router_id.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
22953                encoder,
22954                offset + cur_offset,
22955                depth,
22956            )?;
22957
22958            _prev_end_offset = cur_offset + envelope_size;
22959            if 4 > max_ordinal {
22960                return Ok(());
22961            }
22962
22963            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
22964            // are envelope_size bytes.
22965            let cur_offset: usize = (4 - 1) * envelope_size;
22966
22967            // Zero reserved fields.
22968            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
22969
22970            // Safety:
22971            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
22972            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
22973            //   envelope_size bytes, there is always sufficient room.
22974            fidl::encoding::encode_in_envelope_optional::<u8, D>(
22975                self.next_hop.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
22976                encoder,
22977                offset + cur_offset,
22978                depth,
22979            )?;
22980
22981            _prev_end_offset = cur_offset + envelope_size;
22982            if 5 > max_ordinal {
22983                return Ok(());
22984            }
22985
22986            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
22987            // are envelope_size bytes.
22988            let cur_offset: usize = (5 - 1) * envelope_size;
22989
22990            // Zero reserved fields.
22991            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
22992
22993            // Safety:
22994            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
22995            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
22996            //   envelope_size bytes, there is always sufficient room.
22997            fidl::encoding::encode_in_envelope_optional::<u8, D>(
22998                self.path_cost.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
22999                encoder,
23000                offset + cur_offset,
23001                depth,
23002            )?;
23003
23004            _prev_end_offset = cur_offset + envelope_size;
23005            if 6 > max_ordinal {
23006                return Ok(());
23007            }
23008
23009            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
23010            // are envelope_size bytes.
23011            let cur_offset: usize = (6 - 1) * envelope_size;
23012
23013            // Zero reserved fields.
23014            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
23015
23016            // Safety:
23017            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
23018            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
23019            //   envelope_size bytes, there is always sufficient room.
23020            fidl::encoding::encode_in_envelope_optional::<u8, D>(
23021                self.link_quality_in.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
23022                encoder,
23023                offset + cur_offset,
23024                depth,
23025            )?;
23026
23027            _prev_end_offset = cur_offset + envelope_size;
23028            if 7 > max_ordinal {
23029                return Ok(());
23030            }
23031
23032            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
23033            // are envelope_size bytes.
23034            let cur_offset: usize = (7 - 1) * envelope_size;
23035
23036            // Zero reserved fields.
23037            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
23038
23039            // Safety:
23040            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
23041            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
23042            //   envelope_size bytes, there is always sufficient room.
23043            fidl::encoding::encode_in_envelope_optional::<u8, D>(
23044                self.link_quality_out.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
23045                encoder,
23046                offset + cur_offset,
23047                depth,
23048            )?;
23049
23050            _prev_end_offset = cur_offset + envelope_size;
23051            if 8 > max_ordinal {
23052                return Ok(());
23053            }
23054
23055            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
23056            // are envelope_size bytes.
23057            let cur_offset: usize = (8 - 1) * envelope_size;
23058
23059            // Zero reserved fields.
23060            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
23061
23062            // Safety:
23063            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
23064            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
23065            //   envelope_size bytes, there is always sufficient room.
23066            fidl::encoding::encode_in_envelope_optional::<i64, D>(
23067                self.age.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
23068                encoder,
23069                offset + cur_offset,
23070                depth,
23071            )?;
23072
23073            _prev_end_offset = cur_offset + envelope_size;
23074            if 9 > max_ordinal {
23075                return Ok(());
23076            }
23077
23078            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
23079            // are envelope_size bytes.
23080            let cur_offset: usize = (9 - 1) * envelope_size;
23081
23082            // Zero reserved fields.
23083            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
23084
23085            // Safety:
23086            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
23087            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
23088            //   envelope_size bytes, there is always sufficient room.
23089            fidl::encoding::encode_in_envelope_optional::<bool, D>(
23090                self.link_established
23091                    .as_ref()
23092                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
23093                encoder,
23094                offset + cur_offset,
23095                depth,
23096            )?;
23097
23098            _prev_end_offset = cur_offset + envelope_size;
23099
23100            Ok(())
23101        }
23102    }
23103
23104    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for RouterInfo {
23105        #[inline(always)]
23106        fn new_empty() -> Self {
23107            Self::default()
23108        }
23109
23110        unsafe fn decode(
23111            &mut self,
23112            decoder: &mut fidl::encoding::Decoder<'_, D>,
23113            offset: usize,
23114            mut depth: fidl::encoding::Depth,
23115        ) -> fidl::Result<()> {
23116            decoder.debug_check_bounds::<Self>(offset);
23117            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
23118                None => return Err(fidl::Error::NotNullable),
23119                Some(len) => len,
23120            };
23121            // Calling decoder.out_of_line_offset(0) is not allowed.
23122            if len == 0 {
23123                return Ok(());
23124            };
23125            depth.increment()?;
23126            let envelope_size = 8;
23127            let bytes_len = len * envelope_size;
23128            let offset = decoder.out_of_line_offset(bytes_len)?;
23129            // Decode the envelope for each type.
23130            let mut _next_ordinal_to_read = 0;
23131            let mut next_offset = offset;
23132            let end_offset = offset + bytes_len;
23133            _next_ordinal_to_read += 1;
23134            if next_offset >= end_offset {
23135                return Ok(());
23136            }
23137
23138            // Decode unknown envelopes for gaps in ordinals.
23139            while _next_ordinal_to_read < 1 {
23140                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
23141                _next_ordinal_to_read += 1;
23142                next_offset += envelope_size;
23143            }
23144
23145            let next_out_of_line = decoder.next_out_of_line();
23146            let handles_before = decoder.remaining_handles();
23147            if let Some((inlined, num_bytes, num_handles)) =
23148                fidl::encoding::decode_envelope_header(decoder, next_offset)?
23149            {
23150                let member_inline_size =
23151                    <fidl::encoding::Vector<u8, 8> as fidl::encoding::TypeMarker>::inline_size(
23152                        decoder.context,
23153                    );
23154                if inlined != (member_inline_size <= 4) {
23155                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
23156                }
23157                let inner_offset;
23158                let mut inner_depth = depth.clone();
23159                if inlined {
23160                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
23161                    inner_offset = next_offset;
23162                } else {
23163                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
23164                    inner_depth.increment()?;
23165                }
23166                let val_ref = self
23167                    .extended_address
23168                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u8, 8>, D));
23169                fidl::decode!(fidl::encoding::Vector<u8, 8>, D, val_ref, decoder, inner_offset, inner_depth)?;
23170                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
23171                {
23172                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
23173                }
23174                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
23175                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
23176                }
23177            }
23178
23179            next_offset += envelope_size;
23180            _next_ordinal_to_read += 1;
23181            if next_offset >= end_offset {
23182                return Ok(());
23183            }
23184
23185            // Decode unknown envelopes for gaps in ordinals.
23186            while _next_ordinal_to_read < 2 {
23187                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
23188                _next_ordinal_to_read += 1;
23189                next_offset += envelope_size;
23190            }
23191
23192            let next_out_of_line = decoder.next_out_of_line();
23193            let handles_before = decoder.remaining_handles();
23194            if let Some((inlined, num_bytes, num_handles)) =
23195                fidl::encoding::decode_envelope_header(decoder, next_offset)?
23196            {
23197                let member_inline_size =
23198                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
23199                if inlined != (member_inline_size <= 4) {
23200                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
23201                }
23202                let inner_offset;
23203                let mut inner_depth = depth.clone();
23204                if inlined {
23205                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
23206                    inner_offset = next_offset;
23207                } else {
23208                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
23209                    inner_depth.increment()?;
23210                }
23211                let val_ref = self.thread_rloc.get_or_insert_with(|| fidl::new_empty!(u16, D));
23212                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
23213                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
23214                {
23215                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
23216                }
23217                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
23218                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
23219                }
23220            }
23221
23222            next_offset += envelope_size;
23223            _next_ordinal_to_read += 1;
23224            if next_offset >= end_offset {
23225                return Ok(());
23226            }
23227
23228            // Decode unknown envelopes for gaps in ordinals.
23229            while _next_ordinal_to_read < 3 {
23230                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
23231                _next_ordinal_to_read += 1;
23232                next_offset += envelope_size;
23233            }
23234
23235            let next_out_of_line = decoder.next_out_of_line();
23236            let handles_before = decoder.remaining_handles();
23237            if let Some((inlined, num_bytes, num_handles)) =
23238                fidl::encoding::decode_envelope_header(decoder, next_offset)?
23239            {
23240                let member_inline_size =
23241                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
23242                if inlined != (member_inline_size <= 4) {
23243                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
23244                }
23245                let inner_offset;
23246                let mut inner_depth = depth.clone();
23247                if inlined {
23248                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
23249                    inner_offset = next_offset;
23250                } else {
23251                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
23252                    inner_depth.increment()?;
23253                }
23254                let val_ref = self.router_id.get_or_insert_with(|| fidl::new_empty!(u8, D));
23255                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
23256                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
23257                {
23258                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
23259                }
23260                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
23261                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
23262                }
23263            }
23264
23265            next_offset += envelope_size;
23266            _next_ordinal_to_read += 1;
23267            if next_offset >= end_offset {
23268                return Ok(());
23269            }
23270
23271            // Decode unknown envelopes for gaps in ordinals.
23272            while _next_ordinal_to_read < 4 {
23273                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
23274                _next_ordinal_to_read += 1;
23275                next_offset += envelope_size;
23276            }
23277
23278            let next_out_of_line = decoder.next_out_of_line();
23279            let handles_before = decoder.remaining_handles();
23280            if let Some((inlined, num_bytes, num_handles)) =
23281                fidl::encoding::decode_envelope_header(decoder, next_offset)?
23282            {
23283                let member_inline_size =
23284                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
23285                if inlined != (member_inline_size <= 4) {
23286                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
23287                }
23288                let inner_offset;
23289                let mut inner_depth = depth.clone();
23290                if inlined {
23291                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
23292                    inner_offset = next_offset;
23293                } else {
23294                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
23295                    inner_depth.increment()?;
23296                }
23297                let val_ref = self.next_hop.get_or_insert_with(|| fidl::new_empty!(u8, D));
23298                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
23299                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
23300                {
23301                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
23302                }
23303                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
23304                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
23305                }
23306            }
23307
23308            next_offset += envelope_size;
23309            _next_ordinal_to_read += 1;
23310            if next_offset >= end_offset {
23311                return Ok(());
23312            }
23313
23314            // Decode unknown envelopes for gaps in ordinals.
23315            while _next_ordinal_to_read < 5 {
23316                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
23317                _next_ordinal_to_read += 1;
23318                next_offset += envelope_size;
23319            }
23320
23321            let next_out_of_line = decoder.next_out_of_line();
23322            let handles_before = decoder.remaining_handles();
23323            if let Some((inlined, num_bytes, num_handles)) =
23324                fidl::encoding::decode_envelope_header(decoder, next_offset)?
23325            {
23326                let member_inline_size =
23327                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
23328                if inlined != (member_inline_size <= 4) {
23329                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
23330                }
23331                let inner_offset;
23332                let mut inner_depth = depth.clone();
23333                if inlined {
23334                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
23335                    inner_offset = next_offset;
23336                } else {
23337                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
23338                    inner_depth.increment()?;
23339                }
23340                let val_ref = self.path_cost.get_or_insert_with(|| fidl::new_empty!(u8, D));
23341                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
23342                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
23343                {
23344                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
23345                }
23346                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
23347                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
23348                }
23349            }
23350
23351            next_offset += envelope_size;
23352            _next_ordinal_to_read += 1;
23353            if next_offset >= end_offset {
23354                return Ok(());
23355            }
23356
23357            // Decode unknown envelopes for gaps in ordinals.
23358            while _next_ordinal_to_read < 6 {
23359                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
23360                _next_ordinal_to_read += 1;
23361                next_offset += envelope_size;
23362            }
23363
23364            let next_out_of_line = decoder.next_out_of_line();
23365            let handles_before = decoder.remaining_handles();
23366            if let Some((inlined, num_bytes, num_handles)) =
23367                fidl::encoding::decode_envelope_header(decoder, next_offset)?
23368            {
23369                let member_inline_size =
23370                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
23371                if inlined != (member_inline_size <= 4) {
23372                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
23373                }
23374                let inner_offset;
23375                let mut inner_depth = depth.clone();
23376                if inlined {
23377                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
23378                    inner_offset = next_offset;
23379                } else {
23380                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
23381                    inner_depth.increment()?;
23382                }
23383                let val_ref = self.link_quality_in.get_or_insert_with(|| fidl::new_empty!(u8, D));
23384                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
23385                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
23386                {
23387                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
23388                }
23389                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
23390                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
23391                }
23392            }
23393
23394            next_offset += envelope_size;
23395            _next_ordinal_to_read += 1;
23396            if next_offset >= end_offset {
23397                return Ok(());
23398            }
23399
23400            // Decode unknown envelopes for gaps in ordinals.
23401            while _next_ordinal_to_read < 7 {
23402                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
23403                _next_ordinal_to_read += 1;
23404                next_offset += envelope_size;
23405            }
23406
23407            let next_out_of_line = decoder.next_out_of_line();
23408            let handles_before = decoder.remaining_handles();
23409            if let Some((inlined, num_bytes, num_handles)) =
23410                fidl::encoding::decode_envelope_header(decoder, next_offset)?
23411            {
23412                let member_inline_size =
23413                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
23414                if inlined != (member_inline_size <= 4) {
23415                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
23416                }
23417                let inner_offset;
23418                let mut inner_depth = depth.clone();
23419                if inlined {
23420                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
23421                    inner_offset = next_offset;
23422                } else {
23423                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
23424                    inner_depth.increment()?;
23425                }
23426                let val_ref = self.link_quality_out.get_or_insert_with(|| fidl::new_empty!(u8, D));
23427                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
23428                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
23429                {
23430                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
23431                }
23432                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
23433                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
23434                }
23435            }
23436
23437            next_offset += envelope_size;
23438            _next_ordinal_to_read += 1;
23439            if next_offset >= end_offset {
23440                return Ok(());
23441            }
23442
23443            // Decode unknown envelopes for gaps in ordinals.
23444            while _next_ordinal_to_read < 8 {
23445                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
23446                _next_ordinal_to_read += 1;
23447                next_offset += envelope_size;
23448            }
23449
23450            let next_out_of_line = decoder.next_out_of_line();
23451            let handles_before = decoder.remaining_handles();
23452            if let Some((inlined, num_bytes, num_handles)) =
23453                fidl::encoding::decode_envelope_header(decoder, next_offset)?
23454            {
23455                let member_inline_size =
23456                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
23457                if inlined != (member_inline_size <= 4) {
23458                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
23459                }
23460                let inner_offset;
23461                let mut inner_depth = depth.clone();
23462                if inlined {
23463                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
23464                    inner_offset = next_offset;
23465                } else {
23466                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
23467                    inner_depth.increment()?;
23468                }
23469                let val_ref = self.age.get_or_insert_with(|| fidl::new_empty!(i64, D));
23470                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
23471                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
23472                {
23473                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
23474                }
23475                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
23476                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
23477                }
23478            }
23479
23480            next_offset += envelope_size;
23481            _next_ordinal_to_read += 1;
23482            if next_offset >= end_offset {
23483                return Ok(());
23484            }
23485
23486            // Decode unknown envelopes for gaps in ordinals.
23487            while _next_ordinal_to_read < 9 {
23488                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
23489                _next_ordinal_to_read += 1;
23490                next_offset += envelope_size;
23491            }
23492
23493            let next_out_of_line = decoder.next_out_of_line();
23494            let handles_before = decoder.remaining_handles();
23495            if let Some((inlined, num_bytes, num_handles)) =
23496                fidl::encoding::decode_envelope_header(decoder, next_offset)?
23497            {
23498                let member_inline_size =
23499                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
23500                if inlined != (member_inline_size <= 4) {
23501                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
23502                }
23503                let inner_offset;
23504                let mut inner_depth = depth.clone();
23505                if inlined {
23506                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
23507                    inner_offset = next_offset;
23508                } else {
23509                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
23510                    inner_depth.increment()?;
23511                }
23512                let val_ref =
23513                    self.link_established.get_or_insert_with(|| fidl::new_empty!(bool, D));
23514                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
23515                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
23516                {
23517                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
23518                }
23519                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
23520                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
23521                }
23522            }
23523
23524            next_offset += envelope_size;
23525
23526            // Decode the remaining unknown envelopes.
23527            while next_offset < end_offset {
23528                _next_ordinal_to_read += 1;
23529                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
23530                next_offset += envelope_size;
23531            }
23532
23533            Ok(())
23534        }
23535    }
23536
23537    impl SecurityPolicy {
23538        #[inline(always)]
23539        fn max_ordinal_present(&self) -> u64 {
23540            if let Some(_) = self.version_threshold_for_routing {
23541                return 10;
23542            }
23543            if let Some(_) = self.nonccm_routers_enabled {
23544                return 9;
23545            }
23546            if let Some(_) = self.toble_link_enabled {
23547                return 8;
23548            }
23549            if let Some(_) = self.network_key_provisioning_enabled {
23550                return 7;
23551            }
23552            if let Some(_) = self.autonomous_enrollment_enabled {
23553                return 6;
23554            }
23555            if let Some(_) = self.external_commissioning_enabled {
23556                return 5;
23557            }
23558            if let Some(_) = self.routers_enabled {
23559                return 4;
23560            }
23561            if let Some(_) = self.native_commissioning_enabled {
23562                return 3;
23563            }
23564            if let Some(_) = self.obtain_network_key_enabled {
23565                return 2;
23566            }
23567            if let Some(_) = self.rotation_time {
23568                return 1;
23569            }
23570            0
23571        }
23572    }
23573
23574    impl fidl::encoding::ValueTypeMarker for SecurityPolicy {
23575        type Borrowed<'a> = &'a Self;
23576        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
23577            value
23578        }
23579    }
23580
23581    unsafe impl fidl::encoding::TypeMarker for SecurityPolicy {
23582        type Owned = Self;
23583
23584        #[inline(always)]
23585        fn inline_align(_context: fidl::encoding::Context) -> usize {
23586            8
23587        }
23588
23589        #[inline(always)]
23590        fn inline_size(_context: fidl::encoding::Context) -> usize {
23591            16
23592        }
23593    }
23594
23595    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<SecurityPolicy, D>
23596        for &SecurityPolicy
23597    {
23598        unsafe fn encode(
23599            self,
23600            encoder: &mut fidl::encoding::Encoder<'_, D>,
23601            offset: usize,
23602            mut depth: fidl::encoding::Depth,
23603        ) -> fidl::Result<()> {
23604            encoder.debug_check_bounds::<SecurityPolicy>(offset);
23605            // Vector header
23606            let max_ordinal: u64 = self.max_ordinal_present();
23607            encoder.write_num(max_ordinal, offset);
23608            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
23609            // Calling encoder.out_of_line_offset(0) is not allowed.
23610            if max_ordinal == 0 {
23611                return Ok(());
23612            }
23613            depth.increment()?;
23614            let envelope_size = 8;
23615            let bytes_len = max_ordinal as usize * envelope_size;
23616            #[allow(unused_variables)]
23617            let offset = encoder.out_of_line_offset(bytes_len);
23618            let mut _prev_end_offset: usize = 0;
23619            if 1 > max_ordinal {
23620                return Ok(());
23621            }
23622
23623            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
23624            // are envelope_size bytes.
23625            let cur_offset: usize = (1 - 1) * envelope_size;
23626
23627            // Zero reserved fields.
23628            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
23629
23630            // Safety:
23631            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
23632            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
23633            //   envelope_size bytes, there is always sufficient room.
23634            fidl::encoding::encode_in_envelope_optional::<u16, D>(
23635                self.rotation_time.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
23636                encoder,
23637                offset + cur_offset,
23638                depth,
23639            )?;
23640
23641            _prev_end_offset = cur_offset + envelope_size;
23642            if 2 > max_ordinal {
23643                return Ok(());
23644            }
23645
23646            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
23647            // are envelope_size bytes.
23648            let cur_offset: usize = (2 - 1) * envelope_size;
23649
23650            // Zero reserved fields.
23651            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
23652
23653            // Safety:
23654            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
23655            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
23656            //   envelope_size bytes, there is always sufficient room.
23657            fidl::encoding::encode_in_envelope_optional::<bool, D>(
23658                self.obtain_network_key_enabled
23659                    .as_ref()
23660                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
23661                encoder,
23662                offset + cur_offset,
23663                depth,
23664            )?;
23665
23666            _prev_end_offset = cur_offset + envelope_size;
23667            if 3 > max_ordinal {
23668                return Ok(());
23669            }
23670
23671            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
23672            // are envelope_size bytes.
23673            let cur_offset: usize = (3 - 1) * envelope_size;
23674
23675            // Zero reserved fields.
23676            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
23677
23678            // Safety:
23679            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
23680            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
23681            //   envelope_size bytes, there is always sufficient room.
23682            fidl::encoding::encode_in_envelope_optional::<bool, D>(
23683                self.native_commissioning_enabled
23684                    .as_ref()
23685                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
23686                encoder,
23687                offset + cur_offset,
23688                depth,
23689            )?;
23690
23691            _prev_end_offset = cur_offset + envelope_size;
23692            if 4 > max_ordinal {
23693                return Ok(());
23694            }
23695
23696            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
23697            // are envelope_size bytes.
23698            let cur_offset: usize = (4 - 1) * envelope_size;
23699
23700            // Zero reserved fields.
23701            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
23702
23703            // Safety:
23704            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
23705            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
23706            //   envelope_size bytes, there is always sufficient room.
23707            fidl::encoding::encode_in_envelope_optional::<bool, D>(
23708                self.routers_enabled
23709                    .as_ref()
23710                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
23711                encoder,
23712                offset + cur_offset,
23713                depth,
23714            )?;
23715
23716            _prev_end_offset = cur_offset + envelope_size;
23717            if 5 > max_ordinal {
23718                return Ok(());
23719            }
23720
23721            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
23722            // are envelope_size bytes.
23723            let cur_offset: usize = (5 - 1) * envelope_size;
23724
23725            // Zero reserved fields.
23726            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
23727
23728            // Safety:
23729            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
23730            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
23731            //   envelope_size bytes, there is always sufficient room.
23732            fidl::encoding::encode_in_envelope_optional::<bool, D>(
23733                self.external_commissioning_enabled
23734                    .as_ref()
23735                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
23736                encoder,
23737                offset + cur_offset,
23738                depth,
23739            )?;
23740
23741            _prev_end_offset = cur_offset + envelope_size;
23742            if 6 > max_ordinal {
23743                return Ok(());
23744            }
23745
23746            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
23747            // are envelope_size bytes.
23748            let cur_offset: usize = (6 - 1) * envelope_size;
23749
23750            // Zero reserved fields.
23751            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
23752
23753            // Safety:
23754            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
23755            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
23756            //   envelope_size bytes, there is always sufficient room.
23757            fidl::encoding::encode_in_envelope_optional::<bool, D>(
23758                self.autonomous_enrollment_enabled
23759                    .as_ref()
23760                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
23761                encoder,
23762                offset + cur_offset,
23763                depth,
23764            )?;
23765
23766            _prev_end_offset = cur_offset + envelope_size;
23767            if 7 > max_ordinal {
23768                return Ok(());
23769            }
23770
23771            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
23772            // are envelope_size bytes.
23773            let cur_offset: usize = (7 - 1) * envelope_size;
23774
23775            // Zero reserved fields.
23776            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
23777
23778            // Safety:
23779            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
23780            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
23781            //   envelope_size bytes, there is always sufficient room.
23782            fidl::encoding::encode_in_envelope_optional::<bool, D>(
23783                self.network_key_provisioning_enabled
23784                    .as_ref()
23785                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
23786                encoder,
23787                offset + cur_offset,
23788                depth,
23789            )?;
23790
23791            _prev_end_offset = cur_offset + envelope_size;
23792            if 8 > max_ordinal {
23793                return Ok(());
23794            }
23795
23796            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
23797            // are envelope_size bytes.
23798            let cur_offset: usize = (8 - 1) * envelope_size;
23799
23800            // Zero reserved fields.
23801            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
23802
23803            // Safety:
23804            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
23805            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
23806            //   envelope_size bytes, there is always sufficient room.
23807            fidl::encoding::encode_in_envelope_optional::<bool, D>(
23808                self.toble_link_enabled
23809                    .as_ref()
23810                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
23811                encoder,
23812                offset + cur_offset,
23813                depth,
23814            )?;
23815
23816            _prev_end_offset = cur_offset + envelope_size;
23817            if 9 > max_ordinal {
23818                return Ok(());
23819            }
23820
23821            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
23822            // are envelope_size bytes.
23823            let cur_offset: usize = (9 - 1) * envelope_size;
23824
23825            // Zero reserved fields.
23826            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
23827
23828            // Safety:
23829            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
23830            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
23831            //   envelope_size bytes, there is always sufficient room.
23832            fidl::encoding::encode_in_envelope_optional::<bool, D>(
23833                self.nonccm_routers_enabled
23834                    .as_ref()
23835                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
23836                encoder,
23837                offset + cur_offset,
23838                depth,
23839            )?;
23840
23841            _prev_end_offset = cur_offset + envelope_size;
23842            if 10 > max_ordinal {
23843                return Ok(());
23844            }
23845
23846            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
23847            // are envelope_size bytes.
23848            let cur_offset: usize = (10 - 1) * envelope_size;
23849
23850            // Zero reserved fields.
23851            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
23852
23853            // Safety:
23854            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
23855            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
23856            //   envelope_size bytes, there is always sufficient room.
23857            fidl::encoding::encode_in_envelope_optional::<u8, D>(
23858                self.version_threshold_for_routing
23859                    .as_ref()
23860                    .map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
23861                encoder,
23862                offset + cur_offset,
23863                depth,
23864            )?;
23865
23866            _prev_end_offset = cur_offset + envelope_size;
23867
23868            Ok(())
23869        }
23870    }
23871
23872    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SecurityPolicy {
23873        #[inline(always)]
23874        fn new_empty() -> Self {
23875            Self::default()
23876        }
23877
23878        unsafe fn decode(
23879            &mut self,
23880            decoder: &mut fidl::encoding::Decoder<'_, D>,
23881            offset: usize,
23882            mut depth: fidl::encoding::Depth,
23883        ) -> fidl::Result<()> {
23884            decoder.debug_check_bounds::<Self>(offset);
23885            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
23886                None => return Err(fidl::Error::NotNullable),
23887                Some(len) => len,
23888            };
23889            // Calling decoder.out_of_line_offset(0) is not allowed.
23890            if len == 0 {
23891                return Ok(());
23892            };
23893            depth.increment()?;
23894            let envelope_size = 8;
23895            let bytes_len = len * envelope_size;
23896            let offset = decoder.out_of_line_offset(bytes_len)?;
23897            // Decode the envelope for each type.
23898            let mut _next_ordinal_to_read = 0;
23899            let mut next_offset = offset;
23900            let end_offset = offset + bytes_len;
23901            _next_ordinal_to_read += 1;
23902            if next_offset >= end_offset {
23903                return Ok(());
23904            }
23905
23906            // Decode unknown envelopes for gaps in ordinals.
23907            while _next_ordinal_to_read < 1 {
23908                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
23909                _next_ordinal_to_read += 1;
23910                next_offset += envelope_size;
23911            }
23912
23913            let next_out_of_line = decoder.next_out_of_line();
23914            let handles_before = decoder.remaining_handles();
23915            if let Some((inlined, num_bytes, num_handles)) =
23916                fidl::encoding::decode_envelope_header(decoder, next_offset)?
23917            {
23918                let member_inline_size =
23919                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
23920                if inlined != (member_inline_size <= 4) {
23921                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
23922                }
23923                let inner_offset;
23924                let mut inner_depth = depth.clone();
23925                if inlined {
23926                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
23927                    inner_offset = next_offset;
23928                } else {
23929                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
23930                    inner_depth.increment()?;
23931                }
23932                let val_ref = self.rotation_time.get_or_insert_with(|| fidl::new_empty!(u16, D));
23933                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
23934                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
23935                {
23936                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
23937                }
23938                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
23939                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
23940                }
23941            }
23942
23943            next_offset += envelope_size;
23944            _next_ordinal_to_read += 1;
23945            if next_offset >= end_offset {
23946                return Ok(());
23947            }
23948
23949            // Decode unknown envelopes for gaps in ordinals.
23950            while _next_ordinal_to_read < 2 {
23951                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
23952                _next_ordinal_to_read += 1;
23953                next_offset += envelope_size;
23954            }
23955
23956            let next_out_of_line = decoder.next_out_of_line();
23957            let handles_before = decoder.remaining_handles();
23958            if let Some((inlined, num_bytes, num_handles)) =
23959                fidl::encoding::decode_envelope_header(decoder, next_offset)?
23960            {
23961                let member_inline_size =
23962                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
23963                if inlined != (member_inline_size <= 4) {
23964                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
23965                }
23966                let inner_offset;
23967                let mut inner_depth = depth.clone();
23968                if inlined {
23969                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
23970                    inner_offset = next_offset;
23971                } else {
23972                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
23973                    inner_depth.increment()?;
23974                }
23975                let val_ref = self
23976                    .obtain_network_key_enabled
23977                    .get_or_insert_with(|| fidl::new_empty!(bool, D));
23978                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
23979                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
23980                {
23981                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
23982                }
23983                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
23984                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
23985                }
23986            }
23987
23988            next_offset += envelope_size;
23989            _next_ordinal_to_read += 1;
23990            if next_offset >= end_offset {
23991                return Ok(());
23992            }
23993
23994            // Decode unknown envelopes for gaps in ordinals.
23995            while _next_ordinal_to_read < 3 {
23996                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
23997                _next_ordinal_to_read += 1;
23998                next_offset += envelope_size;
23999            }
24000
24001            let next_out_of_line = decoder.next_out_of_line();
24002            let handles_before = decoder.remaining_handles();
24003            if let Some((inlined, num_bytes, num_handles)) =
24004                fidl::encoding::decode_envelope_header(decoder, next_offset)?
24005            {
24006                let member_inline_size =
24007                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
24008                if inlined != (member_inline_size <= 4) {
24009                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
24010                }
24011                let inner_offset;
24012                let mut inner_depth = depth.clone();
24013                if inlined {
24014                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
24015                    inner_offset = next_offset;
24016                } else {
24017                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
24018                    inner_depth.increment()?;
24019                }
24020                let val_ref = self
24021                    .native_commissioning_enabled
24022                    .get_or_insert_with(|| fidl::new_empty!(bool, D));
24023                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
24024                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
24025                {
24026                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
24027                }
24028                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
24029                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
24030                }
24031            }
24032
24033            next_offset += envelope_size;
24034            _next_ordinal_to_read += 1;
24035            if next_offset >= end_offset {
24036                return Ok(());
24037            }
24038
24039            // Decode unknown envelopes for gaps in ordinals.
24040            while _next_ordinal_to_read < 4 {
24041                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
24042                _next_ordinal_to_read += 1;
24043                next_offset += envelope_size;
24044            }
24045
24046            let next_out_of_line = decoder.next_out_of_line();
24047            let handles_before = decoder.remaining_handles();
24048            if let Some((inlined, num_bytes, num_handles)) =
24049                fidl::encoding::decode_envelope_header(decoder, next_offset)?
24050            {
24051                let member_inline_size =
24052                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
24053                if inlined != (member_inline_size <= 4) {
24054                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
24055                }
24056                let inner_offset;
24057                let mut inner_depth = depth.clone();
24058                if inlined {
24059                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
24060                    inner_offset = next_offset;
24061                } else {
24062                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
24063                    inner_depth.increment()?;
24064                }
24065                let val_ref = self.routers_enabled.get_or_insert_with(|| fidl::new_empty!(bool, D));
24066                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
24067                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
24068                {
24069                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
24070                }
24071                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
24072                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
24073                }
24074            }
24075
24076            next_offset += envelope_size;
24077            _next_ordinal_to_read += 1;
24078            if next_offset >= end_offset {
24079                return Ok(());
24080            }
24081
24082            // Decode unknown envelopes for gaps in ordinals.
24083            while _next_ordinal_to_read < 5 {
24084                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
24085                _next_ordinal_to_read += 1;
24086                next_offset += envelope_size;
24087            }
24088
24089            let next_out_of_line = decoder.next_out_of_line();
24090            let handles_before = decoder.remaining_handles();
24091            if let Some((inlined, num_bytes, num_handles)) =
24092                fidl::encoding::decode_envelope_header(decoder, next_offset)?
24093            {
24094                let member_inline_size =
24095                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
24096                if inlined != (member_inline_size <= 4) {
24097                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
24098                }
24099                let inner_offset;
24100                let mut inner_depth = depth.clone();
24101                if inlined {
24102                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
24103                    inner_offset = next_offset;
24104                } else {
24105                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
24106                    inner_depth.increment()?;
24107                }
24108                let val_ref = self
24109                    .external_commissioning_enabled
24110                    .get_or_insert_with(|| fidl::new_empty!(bool, D));
24111                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
24112                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
24113                {
24114                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
24115                }
24116                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
24117                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
24118                }
24119            }
24120
24121            next_offset += envelope_size;
24122            _next_ordinal_to_read += 1;
24123            if next_offset >= end_offset {
24124                return Ok(());
24125            }
24126
24127            // Decode unknown envelopes for gaps in ordinals.
24128            while _next_ordinal_to_read < 6 {
24129                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
24130                _next_ordinal_to_read += 1;
24131                next_offset += envelope_size;
24132            }
24133
24134            let next_out_of_line = decoder.next_out_of_line();
24135            let handles_before = decoder.remaining_handles();
24136            if let Some((inlined, num_bytes, num_handles)) =
24137                fidl::encoding::decode_envelope_header(decoder, next_offset)?
24138            {
24139                let member_inline_size =
24140                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
24141                if inlined != (member_inline_size <= 4) {
24142                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
24143                }
24144                let inner_offset;
24145                let mut inner_depth = depth.clone();
24146                if inlined {
24147                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
24148                    inner_offset = next_offset;
24149                } else {
24150                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
24151                    inner_depth.increment()?;
24152                }
24153                let val_ref = self
24154                    .autonomous_enrollment_enabled
24155                    .get_or_insert_with(|| fidl::new_empty!(bool, D));
24156                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
24157                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
24158                {
24159                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
24160                }
24161                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
24162                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
24163                }
24164            }
24165
24166            next_offset += envelope_size;
24167            _next_ordinal_to_read += 1;
24168            if next_offset >= end_offset {
24169                return Ok(());
24170            }
24171
24172            // Decode unknown envelopes for gaps in ordinals.
24173            while _next_ordinal_to_read < 7 {
24174                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
24175                _next_ordinal_to_read += 1;
24176                next_offset += envelope_size;
24177            }
24178
24179            let next_out_of_line = decoder.next_out_of_line();
24180            let handles_before = decoder.remaining_handles();
24181            if let Some((inlined, num_bytes, num_handles)) =
24182                fidl::encoding::decode_envelope_header(decoder, next_offset)?
24183            {
24184                let member_inline_size =
24185                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
24186                if inlined != (member_inline_size <= 4) {
24187                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
24188                }
24189                let inner_offset;
24190                let mut inner_depth = depth.clone();
24191                if inlined {
24192                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
24193                    inner_offset = next_offset;
24194                } else {
24195                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
24196                    inner_depth.increment()?;
24197                }
24198                let val_ref = self
24199                    .network_key_provisioning_enabled
24200                    .get_or_insert_with(|| fidl::new_empty!(bool, D));
24201                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
24202                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
24203                {
24204                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
24205                }
24206                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
24207                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
24208                }
24209            }
24210
24211            next_offset += envelope_size;
24212            _next_ordinal_to_read += 1;
24213            if next_offset >= end_offset {
24214                return Ok(());
24215            }
24216
24217            // Decode unknown envelopes for gaps in ordinals.
24218            while _next_ordinal_to_read < 8 {
24219                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
24220                _next_ordinal_to_read += 1;
24221                next_offset += envelope_size;
24222            }
24223
24224            let next_out_of_line = decoder.next_out_of_line();
24225            let handles_before = decoder.remaining_handles();
24226            if let Some((inlined, num_bytes, num_handles)) =
24227                fidl::encoding::decode_envelope_header(decoder, next_offset)?
24228            {
24229                let member_inline_size =
24230                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
24231                if inlined != (member_inline_size <= 4) {
24232                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
24233                }
24234                let inner_offset;
24235                let mut inner_depth = depth.clone();
24236                if inlined {
24237                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
24238                    inner_offset = next_offset;
24239                } else {
24240                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
24241                    inner_depth.increment()?;
24242                }
24243                let val_ref =
24244                    self.toble_link_enabled.get_or_insert_with(|| fidl::new_empty!(bool, D));
24245                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
24246                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
24247                {
24248                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
24249                }
24250                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
24251                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
24252                }
24253            }
24254
24255            next_offset += envelope_size;
24256            _next_ordinal_to_read += 1;
24257            if next_offset >= end_offset {
24258                return Ok(());
24259            }
24260
24261            // Decode unknown envelopes for gaps in ordinals.
24262            while _next_ordinal_to_read < 9 {
24263                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
24264                _next_ordinal_to_read += 1;
24265                next_offset += envelope_size;
24266            }
24267
24268            let next_out_of_line = decoder.next_out_of_line();
24269            let handles_before = decoder.remaining_handles();
24270            if let Some((inlined, num_bytes, num_handles)) =
24271                fidl::encoding::decode_envelope_header(decoder, next_offset)?
24272            {
24273                let member_inline_size =
24274                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
24275                if inlined != (member_inline_size <= 4) {
24276                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
24277                }
24278                let inner_offset;
24279                let mut inner_depth = depth.clone();
24280                if inlined {
24281                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
24282                    inner_offset = next_offset;
24283                } else {
24284                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
24285                    inner_depth.increment()?;
24286                }
24287                let val_ref =
24288                    self.nonccm_routers_enabled.get_or_insert_with(|| fidl::new_empty!(bool, D));
24289                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
24290                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
24291                {
24292                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
24293                }
24294                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
24295                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
24296                }
24297            }
24298
24299            next_offset += envelope_size;
24300            _next_ordinal_to_read += 1;
24301            if next_offset >= end_offset {
24302                return Ok(());
24303            }
24304
24305            // Decode unknown envelopes for gaps in ordinals.
24306            while _next_ordinal_to_read < 10 {
24307                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
24308                _next_ordinal_to_read += 1;
24309                next_offset += envelope_size;
24310            }
24311
24312            let next_out_of_line = decoder.next_out_of_line();
24313            let handles_before = decoder.remaining_handles();
24314            if let Some((inlined, num_bytes, num_handles)) =
24315                fidl::encoding::decode_envelope_header(decoder, next_offset)?
24316            {
24317                let member_inline_size =
24318                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
24319                if inlined != (member_inline_size <= 4) {
24320                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
24321                }
24322                let inner_offset;
24323                let mut inner_depth = depth.clone();
24324                if inlined {
24325                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
24326                    inner_offset = next_offset;
24327                } else {
24328                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
24329                    inner_depth.increment()?;
24330                }
24331                let val_ref = self
24332                    .version_threshold_for_routing
24333                    .get_or_insert_with(|| fidl::new_empty!(u8, D));
24334                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
24335                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
24336                {
24337                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
24338                }
24339                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
24340                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
24341                }
24342            }
24343
24344            next_offset += envelope_size;
24345
24346            // Decode the remaining unknown envelopes.
24347            while next_offset < end_offset {
24348                _next_ordinal_to_read += 1;
24349                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
24350                next_offset += envelope_size;
24351            }
24352
24353            Ok(())
24354        }
24355    }
24356
24357    impl ServerConfig {
24358        #[inline(always)]
24359        fn max_ordinal_present(&self) -> u64 {
24360            if let Some(_) = self.rloc16 {
24361                return 4;
24362            }
24363            if let Some(_) = self.server_data {
24364                return 3;
24365            }
24366            if let Some(_) = self.server_data_length {
24367                return 2;
24368            }
24369            if let Some(_) = self.stable {
24370                return 1;
24371            }
24372            0
24373        }
24374    }
24375
24376    impl fidl::encoding::ValueTypeMarker for ServerConfig {
24377        type Borrowed<'a> = &'a Self;
24378        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
24379            value
24380        }
24381    }
24382
24383    unsafe impl fidl::encoding::TypeMarker for ServerConfig {
24384        type Owned = Self;
24385
24386        #[inline(always)]
24387        fn inline_align(_context: fidl::encoding::Context) -> usize {
24388            8
24389        }
24390
24391        #[inline(always)]
24392        fn inline_size(_context: fidl::encoding::Context) -> usize {
24393            16
24394        }
24395    }
24396
24397    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<ServerConfig, D>
24398        for &ServerConfig
24399    {
24400        unsafe fn encode(
24401            self,
24402            encoder: &mut fidl::encoding::Encoder<'_, D>,
24403            offset: usize,
24404            mut depth: fidl::encoding::Depth,
24405        ) -> fidl::Result<()> {
24406            encoder.debug_check_bounds::<ServerConfig>(offset);
24407            // Vector header
24408            let max_ordinal: u64 = self.max_ordinal_present();
24409            encoder.write_num(max_ordinal, offset);
24410            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
24411            // Calling encoder.out_of_line_offset(0) is not allowed.
24412            if max_ordinal == 0 {
24413                return Ok(());
24414            }
24415            depth.increment()?;
24416            let envelope_size = 8;
24417            let bytes_len = max_ordinal as usize * envelope_size;
24418            #[allow(unused_variables)]
24419            let offset = encoder.out_of_line_offset(bytes_len);
24420            let mut _prev_end_offset: usize = 0;
24421            if 1 > max_ordinal {
24422                return Ok(());
24423            }
24424
24425            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
24426            // are envelope_size bytes.
24427            let cur_offset: usize = (1 - 1) * envelope_size;
24428
24429            // Zero reserved fields.
24430            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
24431
24432            // Safety:
24433            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
24434            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
24435            //   envelope_size bytes, there is always sufficient room.
24436            fidl::encoding::encode_in_envelope_optional::<bool, D>(
24437                self.stable.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
24438                encoder,
24439                offset + cur_offset,
24440                depth,
24441            )?;
24442
24443            _prev_end_offset = cur_offset + envelope_size;
24444            if 2 > max_ordinal {
24445                return Ok(());
24446            }
24447
24448            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
24449            // are envelope_size bytes.
24450            let cur_offset: usize = (2 - 1) * envelope_size;
24451
24452            // Zero reserved fields.
24453            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
24454
24455            // Safety:
24456            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
24457            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
24458            //   envelope_size bytes, there is always sufficient room.
24459            fidl::encoding::encode_in_envelope_optional::<u8, D>(
24460                self.server_data_length
24461                    .as_ref()
24462                    .map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
24463                encoder,
24464                offset + cur_offset,
24465                depth,
24466            )?;
24467
24468            _prev_end_offset = cur_offset + envelope_size;
24469            if 3 > max_ordinal {
24470                return Ok(());
24471            }
24472
24473            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
24474            // are envelope_size bytes.
24475            let cur_offset: usize = (3 - 1) * envelope_size;
24476
24477            // Zero reserved fields.
24478            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
24479
24480            // Safety:
24481            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
24482            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
24483            //   envelope_size bytes, there is always sufficient room.
24484            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u8, 252>, D>(
24485                self.server_data.as_ref().map(
24486                    <fidl::encoding::Vector<u8, 252> as fidl::encoding::ValueTypeMarker>::borrow,
24487                ),
24488                encoder,
24489                offset + cur_offset,
24490                depth,
24491            )?;
24492
24493            _prev_end_offset = cur_offset + envelope_size;
24494            if 4 > max_ordinal {
24495                return Ok(());
24496            }
24497
24498            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
24499            // are envelope_size bytes.
24500            let cur_offset: usize = (4 - 1) * envelope_size;
24501
24502            // Zero reserved fields.
24503            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
24504
24505            // Safety:
24506            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
24507            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
24508            //   envelope_size bytes, there is always sufficient room.
24509            fidl::encoding::encode_in_envelope_optional::<u16, D>(
24510                self.rloc16.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
24511                encoder,
24512                offset + cur_offset,
24513                depth,
24514            )?;
24515
24516            _prev_end_offset = cur_offset + envelope_size;
24517
24518            Ok(())
24519        }
24520    }
24521
24522    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ServerConfig {
24523        #[inline(always)]
24524        fn new_empty() -> Self {
24525            Self::default()
24526        }
24527
24528        unsafe fn decode(
24529            &mut self,
24530            decoder: &mut fidl::encoding::Decoder<'_, D>,
24531            offset: usize,
24532            mut depth: fidl::encoding::Depth,
24533        ) -> fidl::Result<()> {
24534            decoder.debug_check_bounds::<Self>(offset);
24535            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
24536                None => return Err(fidl::Error::NotNullable),
24537                Some(len) => len,
24538            };
24539            // Calling decoder.out_of_line_offset(0) is not allowed.
24540            if len == 0 {
24541                return Ok(());
24542            };
24543            depth.increment()?;
24544            let envelope_size = 8;
24545            let bytes_len = len * envelope_size;
24546            let offset = decoder.out_of_line_offset(bytes_len)?;
24547            // Decode the envelope for each type.
24548            let mut _next_ordinal_to_read = 0;
24549            let mut next_offset = offset;
24550            let end_offset = offset + bytes_len;
24551            _next_ordinal_to_read += 1;
24552            if next_offset >= end_offset {
24553                return Ok(());
24554            }
24555
24556            // Decode unknown envelopes for gaps in ordinals.
24557            while _next_ordinal_to_read < 1 {
24558                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
24559                _next_ordinal_to_read += 1;
24560                next_offset += envelope_size;
24561            }
24562
24563            let next_out_of_line = decoder.next_out_of_line();
24564            let handles_before = decoder.remaining_handles();
24565            if let Some((inlined, num_bytes, num_handles)) =
24566                fidl::encoding::decode_envelope_header(decoder, next_offset)?
24567            {
24568                let member_inline_size =
24569                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
24570                if inlined != (member_inline_size <= 4) {
24571                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
24572                }
24573                let inner_offset;
24574                let mut inner_depth = depth.clone();
24575                if inlined {
24576                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
24577                    inner_offset = next_offset;
24578                } else {
24579                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
24580                    inner_depth.increment()?;
24581                }
24582                let val_ref = self.stable.get_or_insert_with(|| fidl::new_empty!(bool, D));
24583                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
24584                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
24585                {
24586                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
24587                }
24588                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
24589                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
24590                }
24591            }
24592
24593            next_offset += envelope_size;
24594            _next_ordinal_to_read += 1;
24595            if next_offset >= end_offset {
24596                return Ok(());
24597            }
24598
24599            // Decode unknown envelopes for gaps in ordinals.
24600            while _next_ordinal_to_read < 2 {
24601                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
24602                _next_ordinal_to_read += 1;
24603                next_offset += envelope_size;
24604            }
24605
24606            let next_out_of_line = decoder.next_out_of_line();
24607            let handles_before = decoder.remaining_handles();
24608            if let Some((inlined, num_bytes, num_handles)) =
24609                fidl::encoding::decode_envelope_header(decoder, next_offset)?
24610            {
24611                let member_inline_size =
24612                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
24613                if inlined != (member_inline_size <= 4) {
24614                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
24615                }
24616                let inner_offset;
24617                let mut inner_depth = depth.clone();
24618                if inlined {
24619                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
24620                    inner_offset = next_offset;
24621                } else {
24622                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
24623                    inner_depth.increment()?;
24624                }
24625                let val_ref =
24626                    self.server_data_length.get_or_insert_with(|| fidl::new_empty!(u8, D));
24627                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
24628                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
24629                {
24630                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
24631                }
24632                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
24633                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
24634                }
24635            }
24636
24637            next_offset += envelope_size;
24638            _next_ordinal_to_read += 1;
24639            if next_offset >= end_offset {
24640                return Ok(());
24641            }
24642
24643            // Decode unknown envelopes for gaps in ordinals.
24644            while _next_ordinal_to_read < 3 {
24645                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
24646                _next_ordinal_to_read += 1;
24647                next_offset += envelope_size;
24648            }
24649
24650            let next_out_of_line = decoder.next_out_of_line();
24651            let handles_before = decoder.remaining_handles();
24652            if let Some((inlined, num_bytes, num_handles)) =
24653                fidl::encoding::decode_envelope_header(decoder, next_offset)?
24654            {
24655                let member_inline_size =
24656                    <fidl::encoding::Vector<u8, 252> as fidl::encoding::TypeMarker>::inline_size(
24657                        decoder.context,
24658                    );
24659                if inlined != (member_inline_size <= 4) {
24660                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
24661                }
24662                let inner_offset;
24663                let mut inner_depth = depth.clone();
24664                if inlined {
24665                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
24666                    inner_offset = next_offset;
24667                } else {
24668                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
24669                    inner_depth.increment()?;
24670                }
24671                let val_ref = self
24672                    .server_data
24673                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u8, 252>, D));
24674                fidl::decode!(fidl::encoding::Vector<u8, 252>, D, val_ref, decoder, inner_offset, inner_depth)?;
24675                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
24676                {
24677                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
24678                }
24679                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
24680                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
24681                }
24682            }
24683
24684            next_offset += envelope_size;
24685            _next_ordinal_to_read += 1;
24686            if next_offset >= end_offset {
24687                return Ok(());
24688            }
24689
24690            // Decode unknown envelopes for gaps in ordinals.
24691            while _next_ordinal_to_read < 4 {
24692                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
24693                _next_ordinal_to_read += 1;
24694                next_offset += envelope_size;
24695            }
24696
24697            let next_out_of_line = decoder.next_out_of_line();
24698            let handles_before = decoder.remaining_handles();
24699            if let Some((inlined, num_bytes, num_handles)) =
24700                fidl::encoding::decode_envelope_header(decoder, next_offset)?
24701            {
24702                let member_inline_size =
24703                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
24704                if inlined != (member_inline_size <= 4) {
24705                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
24706                }
24707                let inner_offset;
24708                let mut inner_depth = depth.clone();
24709                if inlined {
24710                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
24711                    inner_offset = next_offset;
24712                } else {
24713                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
24714                    inner_depth.increment()?;
24715                }
24716                let val_ref = self.rloc16.get_or_insert_with(|| fidl::new_empty!(u16, D));
24717                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
24718                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
24719                {
24720                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
24721                }
24722                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
24723                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
24724                }
24725            }
24726
24727            next_offset += envelope_size;
24728
24729            // Decode the remaining unknown envelopes.
24730            while next_offset < end_offset {
24731                _next_ordinal_to_read += 1;
24732                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
24733                next_offset += envelope_size;
24734            }
24735
24736            Ok(())
24737        }
24738    }
24739
24740    impl ServiceConfig {
24741        #[inline(always)]
24742        fn max_ordinal_present(&self) -> u64 {
24743            if let Some(_) = self.server_config {
24744                return 5;
24745            }
24746            if let Some(_) = self.service_data {
24747                return 4;
24748            }
24749            if let Some(_) = self.service_data_length {
24750                return 3;
24751            }
24752            if let Some(_) = self.enterprise_number {
24753                return 2;
24754            }
24755            if let Some(_) = self.service_id {
24756                return 1;
24757            }
24758            0
24759        }
24760    }
24761
24762    impl fidl::encoding::ValueTypeMarker for ServiceConfig {
24763        type Borrowed<'a> = &'a Self;
24764        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
24765            value
24766        }
24767    }
24768
24769    unsafe impl fidl::encoding::TypeMarker for ServiceConfig {
24770        type Owned = Self;
24771
24772        #[inline(always)]
24773        fn inline_align(_context: fidl::encoding::Context) -> usize {
24774            8
24775        }
24776
24777        #[inline(always)]
24778        fn inline_size(_context: fidl::encoding::Context) -> usize {
24779            16
24780        }
24781    }
24782
24783    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<ServiceConfig, D>
24784        for &ServiceConfig
24785    {
24786        unsafe fn encode(
24787            self,
24788            encoder: &mut fidl::encoding::Encoder<'_, D>,
24789            offset: usize,
24790            mut depth: fidl::encoding::Depth,
24791        ) -> fidl::Result<()> {
24792            encoder.debug_check_bounds::<ServiceConfig>(offset);
24793            // Vector header
24794            let max_ordinal: u64 = self.max_ordinal_present();
24795            encoder.write_num(max_ordinal, offset);
24796            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
24797            // Calling encoder.out_of_line_offset(0) is not allowed.
24798            if max_ordinal == 0 {
24799                return Ok(());
24800            }
24801            depth.increment()?;
24802            let envelope_size = 8;
24803            let bytes_len = max_ordinal as usize * envelope_size;
24804            #[allow(unused_variables)]
24805            let offset = encoder.out_of_line_offset(bytes_len);
24806            let mut _prev_end_offset: usize = 0;
24807            if 1 > max_ordinal {
24808                return Ok(());
24809            }
24810
24811            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
24812            // are envelope_size bytes.
24813            let cur_offset: usize = (1 - 1) * envelope_size;
24814
24815            // Zero reserved fields.
24816            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
24817
24818            // Safety:
24819            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
24820            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
24821            //   envelope_size bytes, there is always sufficient room.
24822            fidl::encoding::encode_in_envelope_optional::<u8, D>(
24823                self.service_id.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
24824                encoder,
24825                offset + cur_offset,
24826                depth,
24827            )?;
24828
24829            _prev_end_offset = cur_offset + envelope_size;
24830            if 2 > max_ordinal {
24831                return Ok(());
24832            }
24833
24834            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
24835            // are envelope_size bytes.
24836            let cur_offset: usize = (2 - 1) * envelope_size;
24837
24838            // Zero reserved fields.
24839            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
24840
24841            // Safety:
24842            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
24843            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
24844            //   envelope_size bytes, there is always sufficient room.
24845            fidl::encoding::encode_in_envelope_optional::<u32, D>(
24846                self.enterprise_number
24847                    .as_ref()
24848                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
24849                encoder,
24850                offset + cur_offset,
24851                depth,
24852            )?;
24853
24854            _prev_end_offset = cur_offset + envelope_size;
24855            if 3 > max_ordinal {
24856                return Ok(());
24857            }
24858
24859            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
24860            // are envelope_size bytes.
24861            let cur_offset: usize = (3 - 1) * envelope_size;
24862
24863            // Zero reserved fields.
24864            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
24865
24866            // Safety:
24867            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
24868            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
24869            //   envelope_size bytes, there is always sufficient room.
24870            fidl::encoding::encode_in_envelope_optional::<u8, D>(
24871                self.service_data_length
24872                    .as_ref()
24873                    .map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
24874                encoder,
24875                offset + cur_offset,
24876                depth,
24877            )?;
24878
24879            _prev_end_offset = cur_offset + envelope_size;
24880            if 4 > max_ordinal {
24881                return Ok(());
24882            }
24883
24884            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
24885            // are envelope_size bytes.
24886            let cur_offset: usize = (4 - 1) * envelope_size;
24887
24888            // Zero reserved fields.
24889            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
24890
24891            // Safety:
24892            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
24893            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
24894            //   envelope_size bytes, there is always sufficient room.
24895            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u8, 252>, D>(
24896                self.service_data.as_ref().map(
24897                    <fidl::encoding::Vector<u8, 252> as fidl::encoding::ValueTypeMarker>::borrow,
24898                ),
24899                encoder,
24900                offset + cur_offset,
24901                depth,
24902            )?;
24903
24904            _prev_end_offset = cur_offset + envelope_size;
24905            if 5 > max_ordinal {
24906                return Ok(());
24907            }
24908
24909            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
24910            // are envelope_size bytes.
24911            let cur_offset: usize = (5 - 1) * envelope_size;
24912
24913            // Zero reserved fields.
24914            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
24915
24916            // Safety:
24917            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
24918            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
24919            //   envelope_size bytes, there is always sufficient room.
24920            fidl::encoding::encode_in_envelope_optional::<ServerConfig, D>(
24921                self.server_config
24922                    .as_ref()
24923                    .map(<ServerConfig as fidl::encoding::ValueTypeMarker>::borrow),
24924                encoder,
24925                offset + cur_offset,
24926                depth,
24927            )?;
24928
24929            _prev_end_offset = cur_offset + envelope_size;
24930
24931            Ok(())
24932        }
24933    }
24934
24935    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ServiceConfig {
24936        #[inline(always)]
24937        fn new_empty() -> Self {
24938            Self::default()
24939        }
24940
24941        unsafe fn decode(
24942            &mut self,
24943            decoder: &mut fidl::encoding::Decoder<'_, D>,
24944            offset: usize,
24945            mut depth: fidl::encoding::Depth,
24946        ) -> fidl::Result<()> {
24947            decoder.debug_check_bounds::<Self>(offset);
24948            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
24949                None => return Err(fidl::Error::NotNullable),
24950                Some(len) => len,
24951            };
24952            // Calling decoder.out_of_line_offset(0) is not allowed.
24953            if len == 0 {
24954                return Ok(());
24955            };
24956            depth.increment()?;
24957            let envelope_size = 8;
24958            let bytes_len = len * envelope_size;
24959            let offset = decoder.out_of_line_offset(bytes_len)?;
24960            // Decode the envelope for each type.
24961            let mut _next_ordinal_to_read = 0;
24962            let mut next_offset = offset;
24963            let end_offset = offset + bytes_len;
24964            _next_ordinal_to_read += 1;
24965            if next_offset >= end_offset {
24966                return Ok(());
24967            }
24968
24969            // Decode unknown envelopes for gaps in ordinals.
24970            while _next_ordinal_to_read < 1 {
24971                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
24972                _next_ordinal_to_read += 1;
24973                next_offset += envelope_size;
24974            }
24975
24976            let next_out_of_line = decoder.next_out_of_line();
24977            let handles_before = decoder.remaining_handles();
24978            if let Some((inlined, num_bytes, num_handles)) =
24979                fidl::encoding::decode_envelope_header(decoder, next_offset)?
24980            {
24981                let member_inline_size =
24982                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
24983                if inlined != (member_inline_size <= 4) {
24984                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
24985                }
24986                let inner_offset;
24987                let mut inner_depth = depth.clone();
24988                if inlined {
24989                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
24990                    inner_offset = next_offset;
24991                } else {
24992                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
24993                    inner_depth.increment()?;
24994                }
24995                let val_ref = self.service_id.get_or_insert_with(|| fidl::new_empty!(u8, D));
24996                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
24997                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
24998                {
24999                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
25000                }
25001                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
25002                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
25003                }
25004            }
25005
25006            next_offset += envelope_size;
25007            _next_ordinal_to_read += 1;
25008            if next_offset >= end_offset {
25009                return Ok(());
25010            }
25011
25012            // Decode unknown envelopes for gaps in ordinals.
25013            while _next_ordinal_to_read < 2 {
25014                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
25015                _next_ordinal_to_read += 1;
25016                next_offset += envelope_size;
25017            }
25018
25019            let next_out_of_line = decoder.next_out_of_line();
25020            let handles_before = decoder.remaining_handles();
25021            if let Some((inlined, num_bytes, num_handles)) =
25022                fidl::encoding::decode_envelope_header(decoder, next_offset)?
25023            {
25024                let member_inline_size =
25025                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
25026                if inlined != (member_inline_size <= 4) {
25027                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
25028                }
25029                let inner_offset;
25030                let mut inner_depth = depth.clone();
25031                if inlined {
25032                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
25033                    inner_offset = next_offset;
25034                } else {
25035                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
25036                    inner_depth.increment()?;
25037                }
25038                let val_ref =
25039                    self.enterprise_number.get_or_insert_with(|| fidl::new_empty!(u32, D));
25040                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
25041                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
25042                {
25043                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
25044                }
25045                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
25046                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
25047                }
25048            }
25049
25050            next_offset += envelope_size;
25051            _next_ordinal_to_read += 1;
25052            if next_offset >= end_offset {
25053                return Ok(());
25054            }
25055
25056            // Decode unknown envelopes for gaps in ordinals.
25057            while _next_ordinal_to_read < 3 {
25058                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
25059                _next_ordinal_to_read += 1;
25060                next_offset += envelope_size;
25061            }
25062
25063            let next_out_of_line = decoder.next_out_of_line();
25064            let handles_before = decoder.remaining_handles();
25065            if let Some((inlined, num_bytes, num_handles)) =
25066                fidl::encoding::decode_envelope_header(decoder, next_offset)?
25067            {
25068                let member_inline_size =
25069                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
25070                if inlined != (member_inline_size <= 4) {
25071                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
25072                }
25073                let inner_offset;
25074                let mut inner_depth = depth.clone();
25075                if inlined {
25076                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
25077                    inner_offset = next_offset;
25078                } else {
25079                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
25080                    inner_depth.increment()?;
25081                }
25082                let val_ref =
25083                    self.service_data_length.get_or_insert_with(|| fidl::new_empty!(u8, D));
25084                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
25085                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
25086                {
25087                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
25088                }
25089                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
25090                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
25091                }
25092            }
25093
25094            next_offset += envelope_size;
25095            _next_ordinal_to_read += 1;
25096            if next_offset >= end_offset {
25097                return Ok(());
25098            }
25099
25100            // Decode unknown envelopes for gaps in ordinals.
25101            while _next_ordinal_to_read < 4 {
25102                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
25103                _next_ordinal_to_read += 1;
25104                next_offset += envelope_size;
25105            }
25106
25107            let next_out_of_line = decoder.next_out_of_line();
25108            let handles_before = decoder.remaining_handles();
25109            if let Some((inlined, num_bytes, num_handles)) =
25110                fidl::encoding::decode_envelope_header(decoder, next_offset)?
25111            {
25112                let member_inline_size =
25113                    <fidl::encoding::Vector<u8, 252> as fidl::encoding::TypeMarker>::inline_size(
25114                        decoder.context,
25115                    );
25116                if inlined != (member_inline_size <= 4) {
25117                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
25118                }
25119                let inner_offset;
25120                let mut inner_depth = depth.clone();
25121                if inlined {
25122                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
25123                    inner_offset = next_offset;
25124                } else {
25125                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
25126                    inner_depth.increment()?;
25127                }
25128                let val_ref = self
25129                    .service_data
25130                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u8, 252>, D));
25131                fidl::decode!(fidl::encoding::Vector<u8, 252>, D, val_ref, decoder, inner_offset, inner_depth)?;
25132                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
25133                {
25134                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
25135                }
25136                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
25137                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
25138                }
25139            }
25140
25141            next_offset += envelope_size;
25142            _next_ordinal_to_read += 1;
25143            if next_offset >= end_offset {
25144                return Ok(());
25145            }
25146
25147            // Decode unknown envelopes for gaps in ordinals.
25148            while _next_ordinal_to_read < 5 {
25149                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
25150                _next_ordinal_to_read += 1;
25151                next_offset += envelope_size;
25152            }
25153
25154            let next_out_of_line = decoder.next_out_of_line();
25155            let handles_before = decoder.remaining_handles();
25156            if let Some((inlined, num_bytes, num_handles)) =
25157                fidl::encoding::decode_envelope_header(decoder, next_offset)?
25158            {
25159                let member_inline_size =
25160                    <ServerConfig as fidl::encoding::TypeMarker>::inline_size(decoder.context);
25161                if inlined != (member_inline_size <= 4) {
25162                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
25163                }
25164                let inner_offset;
25165                let mut inner_depth = depth.clone();
25166                if inlined {
25167                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
25168                    inner_offset = next_offset;
25169                } else {
25170                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
25171                    inner_depth.increment()?;
25172                }
25173                let val_ref =
25174                    self.server_config.get_or_insert_with(|| fidl::new_empty!(ServerConfig, D));
25175                fidl::decode!(ServerConfig, D, val_ref, decoder, inner_offset, inner_depth)?;
25176                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
25177                {
25178                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
25179                }
25180                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
25181                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
25182                }
25183            }
25184
25185            next_offset += envelope_size;
25186
25187            // Decode the remaining unknown envelopes.
25188            while next_offset < end_offset {
25189                _next_ordinal_to_read += 1;
25190                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
25191                next_offset += envelope_size;
25192            }
25193
25194            Ok(())
25195        }
25196    }
25197
25198    impl SrpServerHost {
25199        #[inline(always)]
25200        fn max_ordinal_present(&self) -> u64 {
25201            if let Some(_) = self.addresses {
25202                return 3;
25203            }
25204            if let Some(_) = self.deleted {
25205                return 2;
25206            }
25207            if let Some(_) = self.name {
25208                return 1;
25209            }
25210            0
25211        }
25212    }
25213
25214    impl fidl::encoding::ValueTypeMarker for SrpServerHost {
25215        type Borrowed<'a> = &'a Self;
25216        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
25217            value
25218        }
25219    }
25220
25221    unsafe impl fidl::encoding::TypeMarker for SrpServerHost {
25222        type Owned = Self;
25223
25224        #[inline(always)]
25225        fn inline_align(_context: fidl::encoding::Context) -> usize {
25226            8
25227        }
25228
25229        #[inline(always)]
25230        fn inline_size(_context: fidl::encoding::Context) -> usize {
25231            16
25232        }
25233    }
25234
25235    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<SrpServerHost, D>
25236        for &SrpServerHost
25237    {
25238        unsafe fn encode(
25239            self,
25240            encoder: &mut fidl::encoding::Encoder<'_, D>,
25241            offset: usize,
25242            mut depth: fidl::encoding::Depth,
25243        ) -> fidl::Result<()> {
25244            encoder.debug_check_bounds::<SrpServerHost>(offset);
25245            // Vector header
25246            let max_ordinal: u64 = self.max_ordinal_present();
25247            encoder.write_num(max_ordinal, offset);
25248            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
25249            // Calling encoder.out_of_line_offset(0) is not allowed.
25250            if max_ordinal == 0 {
25251                return Ok(());
25252            }
25253            depth.increment()?;
25254            let envelope_size = 8;
25255            let bytes_len = max_ordinal as usize * envelope_size;
25256            #[allow(unused_variables)]
25257            let offset = encoder.out_of_line_offset(bytes_len);
25258            let mut _prev_end_offset: usize = 0;
25259            if 1 > max_ordinal {
25260                return Ok(());
25261            }
25262
25263            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
25264            // are envelope_size bytes.
25265            let cur_offset: usize = (1 - 1) * envelope_size;
25266
25267            // Zero reserved fields.
25268            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
25269
25270            // Safety:
25271            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
25272            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
25273            //   envelope_size bytes, there is always sufficient room.
25274            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<255>, D>(
25275                self.name.as_ref().map(
25276                    <fidl::encoding::BoundedString<255> as fidl::encoding::ValueTypeMarker>::borrow,
25277                ),
25278                encoder,
25279                offset + cur_offset,
25280                depth,
25281            )?;
25282
25283            _prev_end_offset = cur_offset + envelope_size;
25284            if 2 > max_ordinal {
25285                return Ok(());
25286            }
25287
25288            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
25289            // are envelope_size bytes.
25290            let cur_offset: usize = (2 - 1) * envelope_size;
25291
25292            // Zero reserved fields.
25293            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
25294
25295            // Safety:
25296            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
25297            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
25298            //   envelope_size bytes, there is always sufficient room.
25299            fidl::encoding::encode_in_envelope_optional::<bool, D>(
25300                self.deleted.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
25301                encoder,
25302                offset + cur_offset,
25303                depth,
25304            )?;
25305
25306            _prev_end_offset = cur_offset + envelope_size;
25307            if 3 > max_ordinal {
25308                return Ok(());
25309            }
25310
25311            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
25312            // are envelope_size bytes.
25313            let cur_offset: usize = (3 - 1) * envelope_size;
25314
25315            // Zero reserved fields.
25316            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
25317
25318            // Safety:
25319            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
25320            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
25321            //   envelope_size bytes, there is always sufficient room.
25322            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<fidl_fuchsia_net_common::Ipv6Address, 16>, D>(
25323            self.addresses.as_ref().map(<fidl::encoding::Vector<fidl_fuchsia_net_common::Ipv6Address, 16> as fidl::encoding::ValueTypeMarker>::borrow),
25324            encoder, offset + cur_offset, depth
25325        )?;
25326
25327            _prev_end_offset = cur_offset + envelope_size;
25328
25329            Ok(())
25330        }
25331    }
25332
25333    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SrpServerHost {
25334        #[inline(always)]
25335        fn new_empty() -> Self {
25336            Self::default()
25337        }
25338
25339        unsafe fn decode(
25340            &mut self,
25341            decoder: &mut fidl::encoding::Decoder<'_, D>,
25342            offset: usize,
25343            mut depth: fidl::encoding::Depth,
25344        ) -> fidl::Result<()> {
25345            decoder.debug_check_bounds::<Self>(offset);
25346            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
25347                None => return Err(fidl::Error::NotNullable),
25348                Some(len) => len,
25349            };
25350            // Calling decoder.out_of_line_offset(0) is not allowed.
25351            if len == 0 {
25352                return Ok(());
25353            };
25354            depth.increment()?;
25355            let envelope_size = 8;
25356            let bytes_len = len * envelope_size;
25357            let offset = decoder.out_of_line_offset(bytes_len)?;
25358            // Decode the envelope for each type.
25359            let mut _next_ordinal_to_read = 0;
25360            let mut next_offset = offset;
25361            let end_offset = offset + bytes_len;
25362            _next_ordinal_to_read += 1;
25363            if next_offset >= end_offset {
25364                return Ok(());
25365            }
25366
25367            // Decode unknown envelopes for gaps in ordinals.
25368            while _next_ordinal_to_read < 1 {
25369                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
25370                _next_ordinal_to_read += 1;
25371                next_offset += envelope_size;
25372            }
25373
25374            let next_out_of_line = decoder.next_out_of_line();
25375            let handles_before = decoder.remaining_handles();
25376            if let Some((inlined, num_bytes, num_handles)) =
25377                fidl::encoding::decode_envelope_header(decoder, next_offset)?
25378            {
25379                let member_inline_size =
25380                    <fidl::encoding::BoundedString<255> as fidl::encoding::TypeMarker>::inline_size(
25381                        decoder.context,
25382                    );
25383                if inlined != (member_inline_size <= 4) {
25384                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
25385                }
25386                let inner_offset;
25387                let mut inner_depth = depth.clone();
25388                if inlined {
25389                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
25390                    inner_offset = next_offset;
25391                } else {
25392                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
25393                    inner_depth.increment()?;
25394                }
25395                let val_ref = self
25396                    .name
25397                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<255>, D));
25398                fidl::decode!(
25399                    fidl::encoding::BoundedString<255>,
25400                    D,
25401                    val_ref,
25402                    decoder,
25403                    inner_offset,
25404                    inner_depth
25405                )?;
25406                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
25407                {
25408                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
25409                }
25410                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
25411                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
25412                }
25413            }
25414
25415            next_offset += envelope_size;
25416            _next_ordinal_to_read += 1;
25417            if next_offset >= end_offset {
25418                return Ok(());
25419            }
25420
25421            // Decode unknown envelopes for gaps in ordinals.
25422            while _next_ordinal_to_read < 2 {
25423                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
25424                _next_ordinal_to_read += 1;
25425                next_offset += envelope_size;
25426            }
25427
25428            let next_out_of_line = decoder.next_out_of_line();
25429            let handles_before = decoder.remaining_handles();
25430            if let Some((inlined, num_bytes, num_handles)) =
25431                fidl::encoding::decode_envelope_header(decoder, next_offset)?
25432            {
25433                let member_inline_size =
25434                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
25435                if inlined != (member_inline_size <= 4) {
25436                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
25437                }
25438                let inner_offset;
25439                let mut inner_depth = depth.clone();
25440                if inlined {
25441                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
25442                    inner_offset = next_offset;
25443                } else {
25444                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
25445                    inner_depth.increment()?;
25446                }
25447                let val_ref = self.deleted.get_or_insert_with(|| fidl::new_empty!(bool, D));
25448                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
25449                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
25450                {
25451                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
25452                }
25453                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
25454                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
25455                }
25456            }
25457
25458            next_offset += envelope_size;
25459            _next_ordinal_to_read += 1;
25460            if next_offset >= end_offset {
25461                return Ok(());
25462            }
25463
25464            // Decode unknown envelopes for gaps in ordinals.
25465            while _next_ordinal_to_read < 3 {
25466                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
25467                _next_ordinal_to_read += 1;
25468                next_offset += envelope_size;
25469            }
25470
25471            let next_out_of_line = decoder.next_out_of_line();
25472            let handles_before = decoder.remaining_handles();
25473            if let Some((inlined, num_bytes, num_handles)) =
25474                fidl::encoding::decode_envelope_header(decoder, next_offset)?
25475            {
25476                let member_inline_size = <fidl::encoding::Vector<
25477                    fidl_fuchsia_net_common::Ipv6Address,
25478                    16,
25479                > as fidl::encoding::TypeMarker>::inline_size(
25480                    decoder.context
25481                );
25482                if inlined != (member_inline_size <= 4) {
25483                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
25484                }
25485                let inner_offset;
25486                let mut inner_depth = depth.clone();
25487                if inlined {
25488                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
25489                    inner_offset = next_offset;
25490                } else {
25491                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
25492                    inner_depth.increment()?;
25493                }
25494                let val_ref =
25495                self.addresses.get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<fidl_fuchsia_net_common::Ipv6Address, 16>, D));
25496                fidl::decode!(fidl::encoding::Vector<fidl_fuchsia_net_common::Ipv6Address, 16>, D, val_ref, decoder, inner_offset, inner_depth)?;
25497                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
25498                {
25499                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
25500                }
25501                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
25502                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
25503                }
25504            }
25505
25506            next_offset += envelope_size;
25507
25508            // Decode the remaining unknown envelopes.
25509            while next_offset < end_offset {
25510                _next_ordinal_to_read += 1;
25511                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
25512                next_offset += envelope_size;
25513            }
25514
25515            Ok(())
25516        }
25517    }
25518
25519    impl SrpServerInfo {
25520        #[inline(always)]
25521        fn max_ordinal_present(&self) -> u64 {
25522            if let Some(_) = self.services {
25523                return 8;
25524            }
25525            if let Some(_) = self.hosts {
25526                return 7;
25527            }
25528            if let Some(_) = self.services_registration {
25529                return 6;
25530            }
25531            if let Some(_) = self.hosts_registration {
25532                return 5;
25533            }
25534            if let Some(_) = self.response_counters {
25535                return 4;
25536            }
25537            if let Some(_) = self.address_mode {
25538                return 3;
25539            }
25540            if let Some(_) = self.port {
25541                return 2;
25542            }
25543            if let Some(_) = self.state {
25544                return 1;
25545            }
25546            0
25547        }
25548    }
25549
25550    impl fidl::encoding::ValueTypeMarker for SrpServerInfo {
25551        type Borrowed<'a> = &'a Self;
25552        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
25553            value
25554        }
25555    }
25556
25557    unsafe impl fidl::encoding::TypeMarker for SrpServerInfo {
25558        type Owned = Self;
25559
25560        #[inline(always)]
25561        fn inline_align(_context: fidl::encoding::Context) -> usize {
25562            8
25563        }
25564
25565        #[inline(always)]
25566        fn inline_size(_context: fidl::encoding::Context) -> usize {
25567            16
25568        }
25569    }
25570
25571    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<SrpServerInfo, D>
25572        for &SrpServerInfo
25573    {
25574        unsafe fn encode(
25575            self,
25576            encoder: &mut fidl::encoding::Encoder<'_, D>,
25577            offset: usize,
25578            mut depth: fidl::encoding::Depth,
25579        ) -> fidl::Result<()> {
25580            encoder.debug_check_bounds::<SrpServerInfo>(offset);
25581            // Vector header
25582            let max_ordinal: u64 = self.max_ordinal_present();
25583            encoder.write_num(max_ordinal, offset);
25584            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
25585            // Calling encoder.out_of_line_offset(0) is not allowed.
25586            if max_ordinal == 0 {
25587                return Ok(());
25588            }
25589            depth.increment()?;
25590            let envelope_size = 8;
25591            let bytes_len = max_ordinal as usize * envelope_size;
25592            #[allow(unused_variables)]
25593            let offset = encoder.out_of_line_offset(bytes_len);
25594            let mut _prev_end_offset: usize = 0;
25595            if 1 > max_ordinal {
25596                return Ok(());
25597            }
25598
25599            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
25600            // are envelope_size bytes.
25601            let cur_offset: usize = (1 - 1) * envelope_size;
25602
25603            // Zero reserved fields.
25604            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
25605
25606            // Safety:
25607            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
25608            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
25609            //   envelope_size bytes, there is always sufficient room.
25610            fidl::encoding::encode_in_envelope_optional::<SrpServerState, D>(
25611                self.state
25612                    .as_ref()
25613                    .map(<SrpServerState as fidl::encoding::ValueTypeMarker>::borrow),
25614                encoder,
25615                offset + cur_offset,
25616                depth,
25617            )?;
25618
25619            _prev_end_offset = cur_offset + envelope_size;
25620            if 2 > max_ordinal {
25621                return Ok(());
25622            }
25623
25624            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
25625            // are envelope_size bytes.
25626            let cur_offset: usize = (2 - 1) * envelope_size;
25627
25628            // Zero reserved fields.
25629            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
25630
25631            // Safety:
25632            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
25633            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
25634            //   envelope_size bytes, there is always sufficient room.
25635            fidl::encoding::encode_in_envelope_optional::<u16, D>(
25636                self.port.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
25637                encoder,
25638                offset + cur_offset,
25639                depth,
25640            )?;
25641
25642            _prev_end_offset = cur_offset + envelope_size;
25643            if 3 > max_ordinal {
25644                return Ok(());
25645            }
25646
25647            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
25648            // are envelope_size bytes.
25649            let cur_offset: usize = (3 - 1) * envelope_size;
25650
25651            // Zero reserved fields.
25652            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
25653
25654            // Safety:
25655            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
25656            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
25657            //   envelope_size bytes, there is always sufficient room.
25658            fidl::encoding::encode_in_envelope_optional::<SrpServerAddressMode, D>(
25659                self.address_mode
25660                    .as_ref()
25661                    .map(<SrpServerAddressMode as fidl::encoding::ValueTypeMarker>::borrow),
25662                encoder,
25663                offset + cur_offset,
25664                depth,
25665            )?;
25666
25667            _prev_end_offset = cur_offset + envelope_size;
25668            if 4 > max_ordinal {
25669                return Ok(());
25670            }
25671
25672            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
25673            // are envelope_size bytes.
25674            let cur_offset: usize = (4 - 1) * envelope_size;
25675
25676            // Zero reserved fields.
25677            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
25678
25679            // Safety:
25680            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
25681            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
25682            //   envelope_size bytes, there is always sufficient room.
25683            fidl::encoding::encode_in_envelope_optional::<SrpServerResponseCounters, D>(
25684                self.response_counters
25685                    .as_ref()
25686                    .map(<SrpServerResponseCounters as fidl::encoding::ValueTypeMarker>::borrow),
25687                encoder,
25688                offset + cur_offset,
25689                depth,
25690            )?;
25691
25692            _prev_end_offset = cur_offset + envelope_size;
25693            if 5 > max_ordinal {
25694                return Ok(());
25695            }
25696
25697            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
25698            // are envelope_size bytes.
25699            let cur_offset: usize = (5 - 1) * envelope_size;
25700
25701            // Zero reserved fields.
25702            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
25703
25704            // Safety:
25705            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
25706            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
25707            //   envelope_size bytes, there is always sufficient room.
25708            fidl::encoding::encode_in_envelope_optional::<SrpServerRegistration, D>(
25709                self.hosts_registration
25710                    .as_ref()
25711                    .map(<SrpServerRegistration as fidl::encoding::ValueTypeMarker>::borrow),
25712                encoder,
25713                offset + cur_offset,
25714                depth,
25715            )?;
25716
25717            _prev_end_offset = cur_offset + envelope_size;
25718            if 6 > max_ordinal {
25719                return Ok(());
25720            }
25721
25722            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
25723            // are envelope_size bytes.
25724            let cur_offset: usize = (6 - 1) * envelope_size;
25725
25726            // Zero reserved fields.
25727            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
25728
25729            // Safety:
25730            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
25731            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
25732            //   envelope_size bytes, there is always sufficient room.
25733            fidl::encoding::encode_in_envelope_optional::<SrpServerRegistration, D>(
25734                self.services_registration
25735                    .as_ref()
25736                    .map(<SrpServerRegistration as fidl::encoding::ValueTypeMarker>::borrow),
25737                encoder,
25738                offset + cur_offset,
25739                depth,
25740            )?;
25741
25742            _prev_end_offset = cur_offset + envelope_size;
25743            if 7 > max_ordinal {
25744                return Ok(());
25745            }
25746
25747            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
25748            // are envelope_size bytes.
25749            let cur_offset: usize = (7 - 1) * envelope_size;
25750
25751            // Zero reserved fields.
25752            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
25753
25754            // Safety:
25755            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
25756            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
25757            //   envelope_size bytes, there is always sufficient room.
25758            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<SrpServerHost, 64>, D>(
25759            self.hosts.as_ref().map(<fidl::encoding::Vector<SrpServerHost, 64> as fidl::encoding::ValueTypeMarker>::borrow),
25760            encoder, offset + cur_offset, depth
25761        )?;
25762
25763            _prev_end_offset = cur_offset + envelope_size;
25764            if 8 > max_ordinal {
25765                return Ok(());
25766            }
25767
25768            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
25769            // are envelope_size bytes.
25770            let cur_offset: usize = (8 - 1) * envelope_size;
25771
25772            // Zero reserved fields.
25773            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
25774
25775            // Safety:
25776            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
25777            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
25778            //   envelope_size bytes, there is always sufficient room.
25779            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<SrpServerService, 64>, D>(
25780            self.services.as_ref().map(<fidl::encoding::Vector<SrpServerService, 64> as fidl::encoding::ValueTypeMarker>::borrow),
25781            encoder, offset + cur_offset, depth
25782        )?;
25783
25784            _prev_end_offset = cur_offset + envelope_size;
25785
25786            Ok(())
25787        }
25788    }
25789
25790    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SrpServerInfo {
25791        #[inline(always)]
25792        fn new_empty() -> Self {
25793            Self::default()
25794        }
25795
25796        unsafe fn decode(
25797            &mut self,
25798            decoder: &mut fidl::encoding::Decoder<'_, D>,
25799            offset: usize,
25800            mut depth: fidl::encoding::Depth,
25801        ) -> fidl::Result<()> {
25802            decoder.debug_check_bounds::<Self>(offset);
25803            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
25804                None => return Err(fidl::Error::NotNullable),
25805                Some(len) => len,
25806            };
25807            // Calling decoder.out_of_line_offset(0) is not allowed.
25808            if len == 0 {
25809                return Ok(());
25810            };
25811            depth.increment()?;
25812            let envelope_size = 8;
25813            let bytes_len = len * envelope_size;
25814            let offset = decoder.out_of_line_offset(bytes_len)?;
25815            // Decode the envelope for each type.
25816            let mut _next_ordinal_to_read = 0;
25817            let mut next_offset = offset;
25818            let end_offset = offset + bytes_len;
25819            _next_ordinal_to_read += 1;
25820            if next_offset >= end_offset {
25821                return Ok(());
25822            }
25823
25824            // Decode unknown envelopes for gaps in ordinals.
25825            while _next_ordinal_to_read < 1 {
25826                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
25827                _next_ordinal_to_read += 1;
25828                next_offset += envelope_size;
25829            }
25830
25831            let next_out_of_line = decoder.next_out_of_line();
25832            let handles_before = decoder.remaining_handles();
25833            if let Some((inlined, num_bytes, num_handles)) =
25834                fidl::encoding::decode_envelope_header(decoder, next_offset)?
25835            {
25836                let member_inline_size =
25837                    <SrpServerState as fidl::encoding::TypeMarker>::inline_size(decoder.context);
25838                if inlined != (member_inline_size <= 4) {
25839                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
25840                }
25841                let inner_offset;
25842                let mut inner_depth = depth.clone();
25843                if inlined {
25844                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
25845                    inner_offset = next_offset;
25846                } else {
25847                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
25848                    inner_depth.increment()?;
25849                }
25850                let val_ref = self.state.get_or_insert_with(|| fidl::new_empty!(SrpServerState, D));
25851                fidl::decode!(SrpServerState, D, val_ref, decoder, inner_offset, inner_depth)?;
25852                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
25853                {
25854                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
25855                }
25856                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
25857                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
25858                }
25859            }
25860
25861            next_offset += envelope_size;
25862            _next_ordinal_to_read += 1;
25863            if next_offset >= end_offset {
25864                return Ok(());
25865            }
25866
25867            // Decode unknown envelopes for gaps in ordinals.
25868            while _next_ordinal_to_read < 2 {
25869                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
25870                _next_ordinal_to_read += 1;
25871                next_offset += envelope_size;
25872            }
25873
25874            let next_out_of_line = decoder.next_out_of_line();
25875            let handles_before = decoder.remaining_handles();
25876            if let Some((inlined, num_bytes, num_handles)) =
25877                fidl::encoding::decode_envelope_header(decoder, next_offset)?
25878            {
25879                let member_inline_size =
25880                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
25881                if inlined != (member_inline_size <= 4) {
25882                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
25883                }
25884                let inner_offset;
25885                let mut inner_depth = depth.clone();
25886                if inlined {
25887                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
25888                    inner_offset = next_offset;
25889                } else {
25890                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
25891                    inner_depth.increment()?;
25892                }
25893                let val_ref = self.port.get_or_insert_with(|| fidl::new_empty!(u16, D));
25894                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
25895                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
25896                {
25897                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
25898                }
25899                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
25900                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
25901                }
25902            }
25903
25904            next_offset += envelope_size;
25905            _next_ordinal_to_read += 1;
25906            if next_offset >= end_offset {
25907                return Ok(());
25908            }
25909
25910            // Decode unknown envelopes for gaps in ordinals.
25911            while _next_ordinal_to_read < 3 {
25912                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
25913                _next_ordinal_to_read += 1;
25914                next_offset += envelope_size;
25915            }
25916
25917            let next_out_of_line = decoder.next_out_of_line();
25918            let handles_before = decoder.remaining_handles();
25919            if let Some((inlined, num_bytes, num_handles)) =
25920                fidl::encoding::decode_envelope_header(decoder, next_offset)?
25921            {
25922                let member_inline_size =
25923                    <SrpServerAddressMode as fidl::encoding::TypeMarker>::inline_size(
25924                        decoder.context,
25925                    );
25926                if inlined != (member_inline_size <= 4) {
25927                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
25928                }
25929                let inner_offset;
25930                let mut inner_depth = depth.clone();
25931                if inlined {
25932                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
25933                    inner_offset = next_offset;
25934                } else {
25935                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
25936                    inner_depth.increment()?;
25937                }
25938                let val_ref = self
25939                    .address_mode
25940                    .get_or_insert_with(|| fidl::new_empty!(SrpServerAddressMode, D));
25941                fidl::decode!(
25942                    SrpServerAddressMode,
25943                    D,
25944                    val_ref,
25945                    decoder,
25946                    inner_offset,
25947                    inner_depth
25948                )?;
25949                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
25950                {
25951                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
25952                }
25953                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
25954                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
25955                }
25956            }
25957
25958            next_offset += envelope_size;
25959            _next_ordinal_to_read += 1;
25960            if next_offset >= end_offset {
25961                return Ok(());
25962            }
25963
25964            // Decode unknown envelopes for gaps in ordinals.
25965            while _next_ordinal_to_read < 4 {
25966                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
25967                _next_ordinal_to_read += 1;
25968                next_offset += envelope_size;
25969            }
25970
25971            let next_out_of_line = decoder.next_out_of_line();
25972            let handles_before = decoder.remaining_handles();
25973            if let Some((inlined, num_bytes, num_handles)) =
25974                fidl::encoding::decode_envelope_header(decoder, next_offset)?
25975            {
25976                let member_inline_size =
25977                    <SrpServerResponseCounters as fidl::encoding::TypeMarker>::inline_size(
25978                        decoder.context,
25979                    );
25980                if inlined != (member_inline_size <= 4) {
25981                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
25982                }
25983                let inner_offset;
25984                let mut inner_depth = depth.clone();
25985                if inlined {
25986                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
25987                    inner_offset = next_offset;
25988                } else {
25989                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
25990                    inner_depth.increment()?;
25991                }
25992                let val_ref = self
25993                    .response_counters
25994                    .get_or_insert_with(|| fidl::new_empty!(SrpServerResponseCounters, D));
25995                fidl::decode!(
25996                    SrpServerResponseCounters,
25997                    D,
25998                    val_ref,
25999                    decoder,
26000                    inner_offset,
26001                    inner_depth
26002                )?;
26003                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
26004                {
26005                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
26006                }
26007                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
26008                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
26009                }
26010            }
26011
26012            next_offset += envelope_size;
26013            _next_ordinal_to_read += 1;
26014            if next_offset >= end_offset {
26015                return Ok(());
26016            }
26017
26018            // Decode unknown envelopes for gaps in ordinals.
26019            while _next_ordinal_to_read < 5 {
26020                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
26021                _next_ordinal_to_read += 1;
26022                next_offset += envelope_size;
26023            }
26024
26025            let next_out_of_line = decoder.next_out_of_line();
26026            let handles_before = decoder.remaining_handles();
26027            if let Some((inlined, num_bytes, num_handles)) =
26028                fidl::encoding::decode_envelope_header(decoder, next_offset)?
26029            {
26030                let member_inline_size =
26031                    <SrpServerRegistration as fidl::encoding::TypeMarker>::inline_size(
26032                        decoder.context,
26033                    );
26034                if inlined != (member_inline_size <= 4) {
26035                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
26036                }
26037                let inner_offset;
26038                let mut inner_depth = depth.clone();
26039                if inlined {
26040                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
26041                    inner_offset = next_offset;
26042                } else {
26043                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
26044                    inner_depth.increment()?;
26045                }
26046                let val_ref = self
26047                    .hosts_registration
26048                    .get_or_insert_with(|| fidl::new_empty!(SrpServerRegistration, D));
26049                fidl::decode!(
26050                    SrpServerRegistration,
26051                    D,
26052                    val_ref,
26053                    decoder,
26054                    inner_offset,
26055                    inner_depth
26056                )?;
26057                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
26058                {
26059                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
26060                }
26061                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
26062                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
26063                }
26064            }
26065
26066            next_offset += envelope_size;
26067            _next_ordinal_to_read += 1;
26068            if next_offset >= end_offset {
26069                return Ok(());
26070            }
26071
26072            // Decode unknown envelopes for gaps in ordinals.
26073            while _next_ordinal_to_read < 6 {
26074                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
26075                _next_ordinal_to_read += 1;
26076                next_offset += envelope_size;
26077            }
26078
26079            let next_out_of_line = decoder.next_out_of_line();
26080            let handles_before = decoder.remaining_handles();
26081            if let Some((inlined, num_bytes, num_handles)) =
26082                fidl::encoding::decode_envelope_header(decoder, next_offset)?
26083            {
26084                let member_inline_size =
26085                    <SrpServerRegistration as fidl::encoding::TypeMarker>::inline_size(
26086                        decoder.context,
26087                    );
26088                if inlined != (member_inline_size <= 4) {
26089                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
26090                }
26091                let inner_offset;
26092                let mut inner_depth = depth.clone();
26093                if inlined {
26094                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
26095                    inner_offset = next_offset;
26096                } else {
26097                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
26098                    inner_depth.increment()?;
26099                }
26100                let val_ref = self
26101                    .services_registration
26102                    .get_or_insert_with(|| fidl::new_empty!(SrpServerRegistration, D));
26103                fidl::decode!(
26104                    SrpServerRegistration,
26105                    D,
26106                    val_ref,
26107                    decoder,
26108                    inner_offset,
26109                    inner_depth
26110                )?;
26111                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
26112                {
26113                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
26114                }
26115                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
26116                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
26117                }
26118            }
26119
26120            next_offset += envelope_size;
26121            _next_ordinal_to_read += 1;
26122            if next_offset >= end_offset {
26123                return Ok(());
26124            }
26125
26126            // Decode unknown envelopes for gaps in ordinals.
26127            while _next_ordinal_to_read < 7 {
26128                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
26129                _next_ordinal_to_read += 1;
26130                next_offset += envelope_size;
26131            }
26132
26133            let next_out_of_line = decoder.next_out_of_line();
26134            let handles_before = decoder.remaining_handles();
26135            if let Some((inlined, num_bytes, num_handles)) =
26136                fidl::encoding::decode_envelope_header(decoder, next_offset)?
26137            {
26138                let member_inline_size = <fidl::encoding::Vector<SrpServerHost, 64> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
26139                if inlined != (member_inline_size <= 4) {
26140                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
26141                }
26142                let inner_offset;
26143                let mut inner_depth = depth.clone();
26144                if inlined {
26145                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
26146                    inner_offset = next_offset;
26147                } else {
26148                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
26149                    inner_depth.increment()?;
26150                }
26151                let val_ref = self.hosts.get_or_insert_with(
26152                    || fidl::new_empty!(fidl::encoding::Vector<SrpServerHost, 64>, D),
26153                );
26154                fidl::decode!(fidl::encoding::Vector<SrpServerHost, 64>, D, val_ref, decoder, inner_offset, inner_depth)?;
26155                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
26156                {
26157                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
26158                }
26159                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
26160                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
26161                }
26162            }
26163
26164            next_offset += envelope_size;
26165            _next_ordinal_to_read += 1;
26166            if next_offset >= end_offset {
26167                return Ok(());
26168            }
26169
26170            // Decode unknown envelopes for gaps in ordinals.
26171            while _next_ordinal_to_read < 8 {
26172                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
26173                _next_ordinal_to_read += 1;
26174                next_offset += envelope_size;
26175            }
26176
26177            let next_out_of_line = decoder.next_out_of_line();
26178            let handles_before = decoder.remaining_handles();
26179            if let Some((inlined, num_bytes, num_handles)) =
26180                fidl::encoding::decode_envelope_header(decoder, next_offset)?
26181            {
26182                let member_inline_size = <fidl::encoding::Vector<SrpServerService, 64> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
26183                if inlined != (member_inline_size <= 4) {
26184                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
26185                }
26186                let inner_offset;
26187                let mut inner_depth = depth.clone();
26188                if inlined {
26189                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
26190                    inner_offset = next_offset;
26191                } else {
26192                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
26193                    inner_depth.increment()?;
26194                }
26195                let val_ref = self.services.get_or_insert_with(
26196                    || fidl::new_empty!(fidl::encoding::Vector<SrpServerService, 64>, D),
26197                );
26198                fidl::decode!(fidl::encoding::Vector<SrpServerService, 64>, D, val_ref, decoder, inner_offset, inner_depth)?;
26199                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
26200                {
26201                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
26202                }
26203                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
26204                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
26205                }
26206            }
26207
26208            next_offset += envelope_size;
26209
26210            // Decode the remaining unknown envelopes.
26211            while next_offset < end_offset {
26212                _next_ordinal_to_read += 1;
26213                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
26214                next_offset += envelope_size;
26215            }
26216
26217            Ok(())
26218        }
26219    }
26220
26221    impl SrpServerRegistration {
26222        #[inline(always)]
26223        fn max_ordinal_present(&self) -> u64 {
26224            if let Some(_) = self.remaining_key_lease_time_total {
26225                return 6;
26226            }
26227            if let Some(_) = self.remaining_lease_time_total {
26228                return 5;
26229            }
26230            if let Some(_) = self.key_lease_time_total {
26231                return 4;
26232            }
26233            if let Some(_) = self.lease_time_total {
26234                return 3;
26235            }
26236            if let Some(_) = self.deleted_count {
26237                return 2;
26238            }
26239            if let Some(_) = self.fresh_count {
26240                return 1;
26241            }
26242            0
26243        }
26244    }
26245
26246    impl fidl::encoding::ValueTypeMarker for SrpServerRegistration {
26247        type Borrowed<'a> = &'a Self;
26248        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
26249            value
26250        }
26251    }
26252
26253    unsafe impl fidl::encoding::TypeMarker for SrpServerRegistration {
26254        type Owned = Self;
26255
26256        #[inline(always)]
26257        fn inline_align(_context: fidl::encoding::Context) -> usize {
26258            8
26259        }
26260
26261        #[inline(always)]
26262        fn inline_size(_context: fidl::encoding::Context) -> usize {
26263            16
26264        }
26265    }
26266
26267    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<SrpServerRegistration, D>
26268        for &SrpServerRegistration
26269    {
26270        unsafe fn encode(
26271            self,
26272            encoder: &mut fidl::encoding::Encoder<'_, D>,
26273            offset: usize,
26274            mut depth: fidl::encoding::Depth,
26275        ) -> fidl::Result<()> {
26276            encoder.debug_check_bounds::<SrpServerRegistration>(offset);
26277            // Vector header
26278            let max_ordinal: u64 = self.max_ordinal_present();
26279            encoder.write_num(max_ordinal, offset);
26280            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
26281            // Calling encoder.out_of_line_offset(0) is not allowed.
26282            if max_ordinal == 0 {
26283                return Ok(());
26284            }
26285            depth.increment()?;
26286            let envelope_size = 8;
26287            let bytes_len = max_ordinal as usize * envelope_size;
26288            #[allow(unused_variables)]
26289            let offset = encoder.out_of_line_offset(bytes_len);
26290            let mut _prev_end_offset: usize = 0;
26291            if 1 > max_ordinal {
26292                return Ok(());
26293            }
26294
26295            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
26296            // are envelope_size bytes.
26297            let cur_offset: usize = (1 - 1) * envelope_size;
26298
26299            // Zero reserved fields.
26300            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
26301
26302            // Safety:
26303            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
26304            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
26305            //   envelope_size bytes, there is always sufficient room.
26306            fidl::encoding::encode_in_envelope_optional::<u32, D>(
26307                self.fresh_count.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
26308                encoder,
26309                offset + cur_offset,
26310                depth,
26311            )?;
26312
26313            _prev_end_offset = cur_offset + envelope_size;
26314            if 2 > max_ordinal {
26315                return Ok(());
26316            }
26317
26318            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
26319            // are envelope_size bytes.
26320            let cur_offset: usize = (2 - 1) * envelope_size;
26321
26322            // Zero reserved fields.
26323            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
26324
26325            // Safety:
26326            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
26327            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
26328            //   envelope_size bytes, there is always sufficient room.
26329            fidl::encoding::encode_in_envelope_optional::<u32, D>(
26330                self.deleted_count.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
26331                encoder,
26332                offset + cur_offset,
26333                depth,
26334            )?;
26335
26336            _prev_end_offset = cur_offset + envelope_size;
26337            if 3 > max_ordinal {
26338                return Ok(());
26339            }
26340
26341            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
26342            // are envelope_size bytes.
26343            let cur_offset: usize = (3 - 1) * envelope_size;
26344
26345            // Zero reserved fields.
26346            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
26347
26348            // Safety:
26349            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
26350            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
26351            //   envelope_size bytes, there is always sufficient room.
26352            fidl::encoding::encode_in_envelope_optional::<i64, D>(
26353                self.lease_time_total
26354                    .as_ref()
26355                    .map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
26356                encoder,
26357                offset + cur_offset,
26358                depth,
26359            )?;
26360
26361            _prev_end_offset = cur_offset + envelope_size;
26362            if 4 > max_ordinal {
26363                return Ok(());
26364            }
26365
26366            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
26367            // are envelope_size bytes.
26368            let cur_offset: usize = (4 - 1) * envelope_size;
26369
26370            // Zero reserved fields.
26371            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
26372
26373            // Safety:
26374            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
26375            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
26376            //   envelope_size bytes, there is always sufficient room.
26377            fidl::encoding::encode_in_envelope_optional::<i64, D>(
26378                self.key_lease_time_total
26379                    .as_ref()
26380                    .map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
26381                encoder,
26382                offset + cur_offset,
26383                depth,
26384            )?;
26385
26386            _prev_end_offset = cur_offset + envelope_size;
26387            if 5 > max_ordinal {
26388                return Ok(());
26389            }
26390
26391            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
26392            // are envelope_size bytes.
26393            let cur_offset: usize = (5 - 1) * envelope_size;
26394
26395            // Zero reserved fields.
26396            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
26397
26398            // Safety:
26399            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
26400            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
26401            //   envelope_size bytes, there is always sufficient room.
26402            fidl::encoding::encode_in_envelope_optional::<i64, D>(
26403                self.remaining_lease_time_total
26404                    .as_ref()
26405                    .map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
26406                encoder,
26407                offset + cur_offset,
26408                depth,
26409            )?;
26410
26411            _prev_end_offset = cur_offset + envelope_size;
26412            if 6 > max_ordinal {
26413                return Ok(());
26414            }
26415
26416            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
26417            // are envelope_size bytes.
26418            let cur_offset: usize = (6 - 1) * envelope_size;
26419
26420            // Zero reserved fields.
26421            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
26422
26423            // Safety:
26424            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
26425            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
26426            //   envelope_size bytes, there is always sufficient room.
26427            fidl::encoding::encode_in_envelope_optional::<i64, D>(
26428                self.remaining_key_lease_time_total
26429                    .as_ref()
26430                    .map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
26431                encoder,
26432                offset + cur_offset,
26433                depth,
26434            )?;
26435
26436            _prev_end_offset = cur_offset + envelope_size;
26437
26438            Ok(())
26439        }
26440    }
26441
26442    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SrpServerRegistration {
26443        #[inline(always)]
26444        fn new_empty() -> Self {
26445            Self::default()
26446        }
26447
26448        unsafe fn decode(
26449            &mut self,
26450            decoder: &mut fidl::encoding::Decoder<'_, D>,
26451            offset: usize,
26452            mut depth: fidl::encoding::Depth,
26453        ) -> fidl::Result<()> {
26454            decoder.debug_check_bounds::<Self>(offset);
26455            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
26456                None => return Err(fidl::Error::NotNullable),
26457                Some(len) => len,
26458            };
26459            // Calling decoder.out_of_line_offset(0) is not allowed.
26460            if len == 0 {
26461                return Ok(());
26462            };
26463            depth.increment()?;
26464            let envelope_size = 8;
26465            let bytes_len = len * envelope_size;
26466            let offset = decoder.out_of_line_offset(bytes_len)?;
26467            // Decode the envelope for each type.
26468            let mut _next_ordinal_to_read = 0;
26469            let mut next_offset = offset;
26470            let end_offset = offset + bytes_len;
26471            _next_ordinal_to_read += 1;
26472            if next_offset >= end_offset {
26473                return Ok(());
26474            }
26475
26476            // Decode unknown envelopes for gaps in ordinals.
26477            while _next_ordinal_to_read < 1 {
26478                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
26479                _next_ordinal_to_read += 1;
26480                next_offset += envelope_size;
26481            }
26482
26483            let next_out_of_line = decoder.next_out_of_line();
26484            let handles_before = decoder.remaining_handles();
26485            if let Some((inlined, num_bytes, num_handles)) =
26486                fidl::encoding::decode_envelope_header(decoder, next_offset)?
26487            {
26488                let member_inline_size =
26489                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
26490                if inlined != (member_inline_size <= 4) {
26491                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
26492                }
26493                let inner_offset;
26494                let mut inner_depth = depth.clone();
26495                if inlined {
26496                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
26497                    inner_offset = next_offset;
26498                } else {
26499                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
26500                    inner_depth.increment()?;
26501                }
26502                let val_ref = self.fresh_count.get_or_insert_with(|| fidl::new_empty!(u32, D));
26503                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
26504                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
26505                {
26506                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
26507                }
26508                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
26509                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
26510                }
26511            }
26512
26513            next_offset += envelope_size;
26514            _next_ordinal_to_read += 1;
26515            if next_offset >= end_offset {
26516                return Ok(());
26517            }
26518
26519            // Decode unknown envelopes for gaps in ordinals.
26520            while _next_ordinal_to_read < 2 {
26521                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
26522                _next_ordinal_to_read += 1;
26523                next_offset += envelope_size;
26524            }
26525
26526            let next_out_of_line = decoder.next_out_of_line();
26527            let handles_before = decoder.remaining_handles();
26528            if let Some((inlined, num_bytes, num_handles)) =
26529                fidl::encoding::decode_envelope_header(decoder, next_offset)?
26530            {
26531                let member_inline_size =
26532                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
26533                if inlined != (member_inline_size <= 4) {
26534                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
26535                }
26536                let inner_offset;
26537                let mut inner_depth = depth.clone();
26538                if inlined {
26539                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
26540                    inner_offset = next_offset;
26541                } else {
26542                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
26543                    inner_depth.increment()?;
26544                }
26545                let val_ref = self.deleted_count.get_or_insert_with(|| fidl::new_empty!(u32, D));
26546                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
26547                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
26548                {
26549                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
26550                }
26551                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
26552                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
26553                }
26554            }
26555
26556            next_offset += envelope_size;
26557            _next_ordinal_to_read += 1;
26558            if next_offset >= end_offset {
26559                return Ok(());
26560            }
26561
26562            // Decode unknown envelopes for gaps in ordinals.
26563            while _next_ordinal_to_read < 3 {
26564                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
26565                _next_ordinal_to_read += 1;
26566                next_offset += envelope_size;
26567            }
26568
26569            let next_out_of_line = decoder.next_out_of_line();
26570            let handles_before = decoder.remaining_handles();
26571            if let Some((inlined, num_bytes, num_handles)) =
26572                fidl::encoding::decode_envelope_header(decoder, next_offset)?
26573            {
26574                let member_inline_size =
26575                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
26576                if inlined != (member_inline_size <= 4) {
26577                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
26578                }
26579                let inner_offset;
26580                let mut inner_depth = depth.clone();
26581                if inlined {
26582                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
26583                    inner_offset = next_offset;
26584                } else {
26585                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
26586                    inner_depth.increment()?;
26587                }
26588                let val_ref = self.lease_time_total.get_or_insert_with(|| fidl::new_empty!(i64, D));
26589                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
26590                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
26591                {
26592                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
26593                }
26594                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
26595                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
26596                }
26597            }
26598
26599            next_offset += envelope_size;
26600            _next_ordinal_to_read += 1;
26601            if next_offset >= end_offset {
26602                return Ok(());
26603            }
26604
26605            // Decode unknown envelopes for gaps in ordinals.
26606            while _next_ordinal_to_read < 4 {
26607                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
26608                _next_ordinal_to_read += 1;
26609                next_offset += envelope_size;
26610            }
26611
26612            let next_out_of_line = decoder.next_out_of_line();
26613            let handles_before = decoder.remaining_handles();
26614            if let Some((inlined, num_bytes, num_handles)) =
26615                fidl::encoding::decode_envelope_header(decoder, next_offset)?
26616            {
26617                let member_inline_size =
26618                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
26619                if inlined != (member_inline_size <= 4) {
26620                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
26621                }
26622                let inner_offset;
26623                let mut inner_depth = depth.clone();
26624                if inlined {
26625                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
26626                    inner_offset = next_offset;
26627                } else {
26628                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
26629                    inner_depth.increment()?;
26630                }
26631                let val_ref =
26632                    self.key_lease_time_total.get_or_insert_with(|| fidl::new_empty!(i64, D));
26633                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
26634                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
26635                {
26636                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
26637                }
26638                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
26639                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
26640                }
26641            }
26642
26643            next_offset += envelope_size;
26644            _next_ordinal_to_read += 1;
26645            if next_offset >= end_offset {
26646                return Ok(());
26647            }
26648
26649            // Decode unknown envelopes for gaps in ordinals.
26650            while _next_ordinal_to_read < 5 {
26651                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
26652                _next_ordinal_to_read += 1;
26653                next_offset += envelope_size;
26654            }
26655
26656            let next_out_of_line = decoder.next_out_of_line();
26657            let handles_before = decoder.remaining_handles();
26658            if let Some((inlined, num_bytes, num_handles)) =
26659                fidl::encoding::decode_envelope_header(decoder, next_offset)?
26660            {
26661                let member_inline_size =
26662                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
26663                if inlined != (member_inline_size <= 4) {
26664                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
26665                }
26666                let inner_offset;
26667                let mut inner_depth = depth.clone();
26668                if inlined {
26669                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
26670                    inner_offset = next_offset;
26671                } else {
26672                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
26673                    inner_depth.increment()?;
26674                }
26675                let val_ref =
26676                    self.remaining_lease_time_total.get_or_insert_with(|| fidl::new_empty!(i64, D));
26677                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
26678                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
26679                {
26680                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
26681                }
26682                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
26683                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
26684                }
26685            }
26686
26687            next_offset += envelope_size;
26688            _next_ordinal_to_read += 1;
26689            if next_offset >= end_offset {
26690                return Ok(());
26691            }
26692
26693            // Decode unknown envelopes for gaps in ordinals.
26694            while _next_ordinal_to_read < 6 {
26695                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
26696                _next_ordinal_to_read += 1;
26697                next_offset += envelope_size;
26698            }
26699
26700            let next_out_of_line = decoder.next_out_of_line();
26701            let handles_before = decoder.remaining_handles();
26702            if let Some((inlined, num_bytes, num_handles)) =
26703                fidl::encoding::decode_envelope_header(decoder, next_offset)?
26704            {
26705                let member_inline_size =
26706                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
26707                if inlined != (member_inline_size <= 4) {
26708                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
26709                }
26710                let inner_offset;
26711                let mut inner_depth = depth.clone();
26712                if inlined {
26713                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
26714                    inner_offset = next_offset;
26715                } else {
26716                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
26717                    inner_depth.increment()?;
26718                }
26719                let val_ref = self
26720                    .remaining_key_lease_time_total
26721                    .get_or_insert_with(|| fidl::new_empty!(i64, D));
26722                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
26723                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
26724                {
26725                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
26726                }
26727                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
26728                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
26729                }
26730            }
26731
26732            next_offset += envelope_size;
26733
26734            // Decode the remaining unknown envelopes.
26735            while next_offset < end_offset {
26736                _next_ordinal_to_read += 1;
26737                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
26738                next_offset += envelope_size;
26739            }
26740
26741            Ok(())
26742        }
26743    }
26744
26745    impl SrpServerResponseCounters {
26746        #[inline(always)]
26747        fn max_ordinal_present(&self) -> u64 {
26748            if let Some(_) = self.other_response {
26749                return 6;
26750            }
26751            if let Some(_) = self.refused_response {
26752                return 5;
26753            }
26754            if let Some(_) = self.name_exists_response {
26755                return 4;
26756            }
26757            if let Some(_) = self.format_error_response {
26758                return 3;
26759            }
26760            if let Some(_) = self.server_failure_response {
26761                return 2;
26762            }
26763            if let Some(_) = self.success_response {
26764                return 1;
26765            }
26766            0
26767        }
26768    }
26769
26770    impl fidl::encoding::ValueTypeMarker for SrpServerResponseCounters {
26771        type Borrowed<'a> = &'a Self;
26772        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
26773            value
26774        }
26775    }
26776
26777    unsafe impl fidl::encoding::TypeMarker for SrpServerResponseCounters {
26778        type Owned = Self;
26779
26780        #[inline(always)]
26781        fn inline_align(_context: fidl::encoding::Context) -> usize {
26782            8
26783        }
26784
26785        #[inline(always)]
26786        fn inline_size(_context: fidl::encoding::Context) -> usize {
26787            16
26788        }
26789    }
26790
26791    unsafe impl<D: fidl::encoding::ResourceDialect>
26792        fidl::encoding::Encode<SrpServerResponseCounters, D> for &SrpServerResponseCounters
26793    {
26794        unsafe fn encode(
26795            self,
26796            encoder: &mut fidl::encoding::Encoder<'_, D>,
26797            offset: usize,
26798            mut depth: fidl::encoding::Depth,
26799        ) -> fidl::Result<()> {
26800            encoder.debug_check_bounds::<SrpServerResponseCounters>(offset);
26801            // Vector header
26802            let max_ordinal: u64 = self.max_ordinal_present();
26803            encoder.write_num(max_ordinal, offset);
26804            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
26805            // Calling encoder.out_of_line_offset(0) is not allowed.
26806            if max_ordinal == 0 {
26807                return Ok(());
26808            }
26809            depth.increment()?;
26810            let envelope_size = 8;
26811            let bytes_len = max_ordinal as usize * envelope_size;
26812            #[allow(unused_variables)]
26813            let offset = encoder.out_of_line_offset(bytes_len);
26814            let mut _prev_end_offset: usize = 0;
26815            if 1 > max_ordinal {
26816                return Ok(());
26817            }
26818
26819            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
26820            // are envelope_size bytes.
26821            let cur_offset: usize = (1 - 1) * envelope_size;
26822
26823            // Zero reserved fields.
26824            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
26825
26826            // Safety:
26827            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
26828            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
26829            //   envelope_size bytes, there is always sufficient room.
26830            fidl::encoding::encode_in_envelope_optional::<u32, D>(
26831                self.success_response
26832                    .as_ref()
26833                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
26834                encoder,
26835                offset + cur_offset,
26836                depth,
26837            )?;
26838
26839            _prev_end_offset = cur_offset + envelope_size;
26840            if 2 > max_ordinal {
26841                return Ok(());
26842            }
26843
26844            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
26845            // are envelope_size bytes.
26846            let cur_offset: usize = (2 - 1) * envelope_size;
26847
26848            // Zero reserved fields.
26849            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
26850
26851            // Safety:
26852            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
26853            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
26854            //   envelope_size bytes, there is always sufficient room.
26855            fidl::encoding::encode_in_envelope_optional::<u32, D>(
26856                self.server_failure_response
26857                    .as_ref()
26858                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
26859                encoder,
26860                offset + cur_offset,
26861                depth,
26862            )?;
26863
26864            _prev_end_offset = cur_offset + envelope_size;
26865            if 3 > max_ordinal {
26866                return Ok(());
26867            }
26868
26869            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
26870            // are envelope_size bytes.
26871            let cur_offset: usize = (3 - 1) * envelope_size;
26872
26873            // Zero reserved fields.
26874            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
26875
26876            // Safety:
26877            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
26878            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
26879            //   envelope_size bytes, there is always sufficient room.
26880            fidl::encoding::encode_in_envelope_optional::<u32, D>(
26881                self.format_error_response
26882                    .as_ref()
26883                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
26884                encoder,
26885                offset + cur_offset,
26886                depth,
26887            )?;
26888
26889            _prev_end_offset = cur_offset + envelope_size;
26890            if 4 > max_ordinal {
26891                return Ok(());
26892            }
26893
26894            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
26895            // are envelope_size bytes.
26896            let cur_offset: usize = (4 - 1) * envelope_size;
26897
26898            // Zero reserved fields.
26899            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
26900
26901            // Safety:
26902            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
26903            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
26904            //   envelope_size bytes, there is always sufficient room.
26905            fidl::encoding::encode_in_envelope_optional::<u32, D>(
26906                self.name_exists_response
26907                    .as_ref()
26908                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
26909                encoder,
26910                offset + cur_offset,
26911                depth,
26912            )?;
26913
26914            _prev_end_offset = cur_offset + envelope_size;
26915            if 5 > max_ordinal {
26916                return Ok(());
26917            }
26918
26919            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
26920            // are envelope_size bytes.
26921            let cur_offset: usize = (5 - 1) * envelope_size;
26922
26923            // Zero reserved fields.
26924            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
26925
26926            // Safety:
26927            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
26928            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
26929            //   envelope_size bytes, there is always sufficient room.
26930            fidl::encoding::encode_in_envelope_optional::<u32, D>(
26931                self.refused_response
26932                    .as_ref()
26933                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
26934                encoder,
26935                offset + cur_offset,
26936                depth,
26937            )?;
26938
26939            _prev_end_offset = cur_offset + envelope_size;
26940            if 6 > max_ordinal {
26941                return Ok(());
26942            }
26943
26944            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
26945            // are envelope_size bytes.
26946            let cur_offset: usize = (6 - 1) * envelope_size;
26947
26948            // Zero reserved fields.
26949            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
26950
26951            // Safety:
26952            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
26953            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
26954            //   envelope_size bytes, there is always sufficient room.
26955            fidl::encoding::encode_in_envelope_optional::<u32, D>(
26956                self.other_response.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
26957                encoder,
26958                offset + cur_offset,
26959                depth,
26960            )?;
26961
26962            _prev_end_offset = cur_offset + envelope_size;
26963
26964            Ok(())
26965        }
26966    }
26967
26968    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
26969        for SrpServerResponseCounters
26970    {
26971        #[inline(always)]
26972        fn new_empty() -> Self {
26973            Self::default()
26974        }
26975
26976        unsafe fn decode(
26977            &mut self,
26978            decoder: &mut fidl::encoding::Decoder<'_, D>,
26979            offset: usize,
26980            mut depth: fidl::encoding::Depth,
26981        ) -> fidl::Result<()> {
26982            decoder.debug_check_bounds::<Self>(offset);
26983            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
26984                None => return Err(fidl::Error::NotNullable),
26985                Some(len) => len,
26986            };
26987            // Calling decoder.out_of_line_offset(0) is not allowed.
26988            if len == 0 {
26989                return Ok(());
26990            };
26991            depth.increment()?;
26992            let envelope_size = 8;
26993            let bytes_len = len * envelope_size;
26994            let offset = decoder.out_of_line_offset(bytes_len)?;
26995            // Decode the envelope for each type.
26996            let mut _next_ordinal_to_read = 0;
26997            let mut next_offset = offset;
26998            let end_offset = offset + bytes_len;
26999            _next_ordinal_to_read += 1;
27000            if next_offset >= end_offset {
27001                return Ok(());
27002            }
27003
27004            // Decode unknown envelopes for gaps in ordinals.
27005            while _next_ordinal_to_read < 1 {
27006                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
27007                _next_ordinal_to_read += 1;
27008                next_offset += envelope_size;
27009            }
27010
27011            let next_out_of_line = decoder.next_out_of_line();
27012            let handles_before = decoder.remaining_handles();
27013            if let Some((inlined, num_bytes, num_handles)) =
27014                fidl::encoding::decode_envelope_header(decoder, next_offset)?
27015            {
27016                let member_inline_size =
27017                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
27018                if inlined != (member_inline_size <= 4) {
27019                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
27020                }
27021                let inner_offset;
27022                let mut inner_depth = depth.clone();
27023                if inlined {
27024                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
27025                    inner_offset = next_offset;
27026                } else {
27027                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
27028                    inner_depth.increment()?;
27029                }
27030                let val_ref = self.success_response.get_or_insert_with(|| fidl::new_empty!(u32, D));
27031                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
27032                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
27033                {
27034                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
27035                }
27036                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
27037                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
27038                }
27039            }
27040
27041            next_offset += envelope_size;
27042            _next_ordinal_to_read += 1;
27043            if next_offset >= end_offset {
27044                return Ok(());
27045            }
27046
27047            // Decode unknown envelopes for gaps in ordinals.
27048            while _next_ordinal_to_read < 2 {
27049                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
27050                _next_ordinal_to_read += 1;
27051                next_offset += envelope_size;
27052            }
27053
27054            let next_out_of_line = decoder.next_out_of_line();
27055            let handles_before = decoder.remaining_handles();
27056            if let Some((inlined, num_bytes, num_handles)) =
27057                fidl::encoding::decode_envelope_header(decoder, next_offset)?
27058            {
27059                let member_inline_size =
27060                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
27061                if inlined != (member_inline_size <= 4) {
27062                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
27063                }
27064                let inner_offset;
27065                let mut inner_depth = depth.clone();
27066                if inlined {
27067                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
27068                    inner_offset = next_offset;
27069                } else {
27070                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
27071                    inner_depth.increment()?;
27072                }
27073                let val_ref =
27074                    self.server_failure_response.get_or_insert_with(|| fidl::new_empty!(u32, D));
27075                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
27076                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
27077                {
27078                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
27079                }
27080                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
27081                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
27082                }
27083            }
27084
27085            next_offset += envelope_size;
27086            _next_ordinal_to_read += 1;
27087            if next_offset >= end_offset {
27088                return Ok(());
27089            }
27090
27091            // Decode unknown envelopes for gaps in ordinals.
27092            while _next_ordinal_to_read < 3 {
27093                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
27094                _next_ordinal_to_read += 1;
27095                next_offset += envelope_size;
27096            }
27097
27098            let next_out_of_line = decoder.next_out_of_line();
27099            let handles_before = decoder.remaining_handles();
27100            if let Some((inlined, num_bytes, num_handles)) =
27101                fidl::encoding::decode_envelope_header(decoder, next_offset)?
27102            {
27103                let member_inline_size =
27104                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
27105                if inlined != (member_inline_size <= 4) {
27106                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
27107                }
27108                let inner_offset;
27109                let mut inner_depth = depth.clone();
27110                if inlined {
27111                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
27112                    inner_offset = next_offset;
27113                } else {
27114                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
27115                    inner_depth.increment()?;
27116                }
27117                let val_ref =
27118                    self.format_error_response.get_or_insert_with(|| fidl::new_empty!(u32, D));
27119                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
27120                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
27121                {
27122                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
27123                }
27124                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
27125                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
27126                }
27127            }
27128
27129            next_offset += envelope_size;
27130            _next_ordinal_to_read += 1;
27131            if next_offset >= end_offset {
27132                return Ok(());
27133            }
27134
27135            // Decode unknown envelopes for gaps in ordinals.
27136            while _next_ordinal_to_read < 4 {
27137                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
27138                _next_ordinal_to_read += 1;
27139                next_offset += envelope_size;
27140            }
27141
27142            let next_out_of_line = decoder.next_out_of_line();
27143            let handles_before = decoder.remaining_handles();
27144            if let Some((inlined, num_bytes, num_handles)) =
27145                fidl::encoding::decode_envelope_header(decoder, next_offset)?
27146            {
27147                let member_inline_size =
27148                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
27149                if inlined != (member_inline_size <= 4) {
27150                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
27151                }
27152                let inner_offset;
27153                let mut inner_depth = depth.clone();
27154                if inlined {
27155                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
27156                    inner_offset = next_offset;
27157                } else {
27158                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
27159                    inner_depth.increment()?;
27160                }
27161                let val_ref =
27162                    self.name_exists_response.get_or_insert_with(|| fidl::new_empty!(u32, D));
27163                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
27164                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
27165                {
27166                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
27167                }
27168                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
27169                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
27170                }
27171            }
27172
27173            next_offset += envelope_size;
27174            _next_ordinal_to_read += 1;
27175            if next_offset >= end_offset {
27176                return Ok(());
27177            }
27178
27179            // Decode unknown envelopes for gaps in ordinals.
27180            while _next_ordinal_to_read < 5 {
27181                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
27182                _next_ordinal_to_read += 1;
27183                next_offset += envelope_size;
27184            }
27185
27186            let next_out_of_line = decoder.next_out_of_line();
27187            let handles_before = decoder.remaining_handles();
27188            if let Some((inlined, num_bytes, num_handles)) =
27189                fidl::encoding::decode_envelope_header(decoder, next_offset)?
27190            {
27191                let member_inline_size =
27192                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
27193                if inlined != (member_inline_size <= 4) {
27194                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
27195                }
27196                let inner_offset;
27197                let mut inner_depth = depth.clone();
27198                if inlined {
27199                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
27200                    inner_offset = next_offset;
27201                } else {
27202                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
27203                    inner_depth.increment()?;
27204                }
27205                let val_ref = self.refused_response.get_or_insert_with(|| fidl::new_empty!(u32, D));
27206                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
27207                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
27208                {
27209                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
27210                }
27211                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
27212                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
27213                }
27214            }
27215
27216            next_offset += envelope_size;
27217            _next_ordinal_to_read += 1;
27218            if next_offset >= end_offset {
27219                return Ok(());
27220            }
27221
27222            // Decode unknown envelopes for gaps in ordinals.
27223            while _next_ordinal_to_read < 6 {
27224                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
27225                _next_ordinal_to_read += 1;
27226                next_offset += envelope_size;
27227            }
27228
27229            let next_out_of_line = decoder.next_out_of_line();
27230            let handles_before = decoder.remaining_handles();
27231            if let Some((inlined, num_bytes, num_handles)) =
27232                fidl::encoding::decode_envelope_header(decoder, next_offset)?
27233            {
27234                let member_inline_size =
27235                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
27236                if inlined != (member_inline_size <= 4) {
27237                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
27238                }
27239                let inner_offset;
27240                let mut inner_depth = depth.clone();
27241                if inlined {
27242                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
27243                    inner_offset = next_offset;
27244                } else {
27245                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
27246                    inner_depth.increment()?;
27247                }
27248                let val_ref = self.other_response.get_or_insert_with(|| fidl::new_empty!(u32, D));
27249                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
27250                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
27251                {
27252                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
27253                }
27254                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
27255                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
27256                }
27257            }
27258
27259            next_offset += envelope_size;
27260
27261            // Decode the remaining unknown envelopes.
27262            while next_offset < end_offset {
27263                _next_ordinal_to_read += 1;
27264                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
27265                next_offset += envelope_size;
27266            }
27267
27268            Ok(())
27269        }
27270    }
27271
27272    impl SrpServerService {
27273        #[inline(always)]
27274        fn max_ordinal_present(&self) -> u64 {
27275            if let Some(_) = self.host {
27276                return 11;
27277            }
27278            if let Some(_) = self.txt_data {
27279                return 10;
27280            }
27281            if let Some(_) = self.key_lease {
27282                return 9;
27283            }
27284            if let Some(_) = self.lease {
27285                return 8;
27286            }
27287            if let Some(_) = self.ttl {
27288                return 7;
27289            }
27290            if let Some(_) = self.weight {
27291                return 6;
27292            }
27293            if let Some(_) = self.priority {
27294                return 5;
27295            }
27296            if let Some(_) = self.port {
27297                return 4;
27298            }
27299            if let Some(_) = self.subtypes {
27300                return 3;
27301            }
27302            if let Some(_) = self.deleted {
27303                return 2;
27304            }
27305            if let Some(_) = self.instance_name {
27306                return 1;
27307            }
27308            0
27309        }
27310    }
27311
27312    impl fidl::encoding::ValueTypeMarker for SrpServerService {
27313        type Borrowed<'a> = &'a Self;
27314        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
27315            value
27316        }
27317    }
27318
27319    unsafe impl fidl::encoding::TypeMarker for SrpServerService {
27320        type Owned = Self;
27321
27322        #[inline(always)]
27323        fn inline_align(_context: fidl::encoding::Context) -> usize {
27324            8
27325        }
27326
27327        #[inline(always)]
27328        fn inline_size(_context: fidl::encoding::Context) -> usize {
27329            16
27330        }
27331    }
27332
27333    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<SrpServerService, D>
27334        for &SrpServerService
27335    {
27336        unsafe fn encode(
27337            self,
27338            encoder: &mut fidl::encoding::Encoder<'_, D>,
27339            offset: usize,
27340            mut depth: fidl::encoding::Depth,
27341        ) -> fidl::Result<()> {
27342            encoder.debug_check_bounds::<SrpServerService>(offset);
27343            // Vector header
27344            let max_ordinal: u64 = self.max_ordinal_present();
27345            encoder.write_num(max_ordinal, offset);
27346            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
27347            // Calling encoder.out_of_line_offset(0) is not allowed.
27348            if max_ordinal == 0 {
27349                return Ok(());
27350            }
27351            depth.increment()?;
27352            let envelope_size = 8;
27353            let bytes_len = max_ordinal as usize * envelope_size;
27354            #[allow(unused_variables)]
27355            let offset = encoder.out_of_line_offset(bytes_len);
27356            let mut _prev_end_offset: usize = 0;
27357            if 1 > max_ordinal {
27358                return Ok(());
27359            }
27360
27361            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
27362            // are envelope_size bytes.
27363            let cur_offset: usize = (1 - 1) * envelope_size;
27364
27365            // Zero reserved fields.
27366            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
27367
27368            // Safety:
27369            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
27370            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
27371            //   envelope_size bytes, there is always sufficient room.
27372            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<255>, D>(
27373                self.instance_name.as_ref().map(
27374                    <fidl::encoding::BoundedString<255> as fidl::encoding::ValueTypeMarker>::borrow,
27375                ),
27376                encoder,
27377                offset + cur_offset,
27378                depth,
27379            )?;
27380
27381            _prev_end_offset = cur_offset + envelope_size;
27382            if 2 > max_ordinal {
27383                return Ok(());
27384            }
27385
27386            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
27387            // are envelope_size bytes.
27388            let cur_offset: usize = (2 - 1) * envelope_size;
27389
27390            // Zero reserved fields.
27391            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
27392
27393            // Safety:
27394            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
27395            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
27396            //   envelope_size bytes, there is always sufficient room.
27397            fidl::encoding::encode_in_envelope_optional::<bool, D>(
27398                self.deleted.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
27399                encoder,
27400                offset + cur_offset,
27401                depth,
27402            )?;
27403
27404            _prev_end_offset = cur_offset + envelope_size;
27405            if 3 > max_ordinal {
27406                return Ok(());
27407            }
27408
27409            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
27410            // are envelope_size bytes.
27411            let cur_offset: usize = (3 - 1) * envelope_size;
27412
27413            // Zero reserved fields.
27414            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
27415
27416            // Safety:
27417            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
27418            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
27419            //   envelope_size bytes, there is always sufficient room.
27420            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<fidl::encoding::BoundedString<63>, 6>, D>(
27421            self.subtypes.as_ref().map(<fidl::encoding::Vector<fidl::encoding::BoundedString<63>, 6> as fidl::encoding::ValueTypeMarker>::borrow),
27422            encoder, offset + cur_offset, depth
27423        )?;
27424
27425            _prev_end_offset = cur_offset + envelope_size;
27426            if 4 > max_ordinal {
27427                return Ok(());
27428            }
27429
27430            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
27431            // are envelope_size bytes.
27432            let cur_offset: usize = (4 - 1) * envelope_size;
27433
27434            // Zero reserved fields.
27435            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
27436
27437            // Safety:
27438            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
27439            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
27440            //   envelope_size bytes, there is always sufficient room.
27441            fidl::encoding::encode_in_envelope_optional::<u16, D>(
27442                self.port.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
27443                encoder,
27444                offset + cur_offset,
27445                depth,
27446            )?;
27447
27448            _prev_end_offset = cur_offset + envelope_size;
27449            if 5 > max_ordinal {
27450                return Ok(());
27451            }
27452
27453            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
27454            // are envelope_size bytes.
27455            let cur_offset: usize = (5 - 1) * envelope_size;
27456
27457            // Zero reserved fields.
27458            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
27459
27460            // Safety:
27461            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
27462            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
27463            //   envelope_size bytes, there is always sufficient room.
27464            fidl::encoding::encode_in_envelope_optional::<u16, D>(
27465                self.priority.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
27466                encoder,
27467                offset + cur_offset,
27468                depth,
27469            )?;
27470
27471            _prev_end_offset = cur_offset + envelope_size;
27472            if 6 > max_ordinal {
27473                return Ok(());
27474            }
27475
27476            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
27477            // are envelope_size bytes.
27478            let cur_offset: usize = (6 - 1) * envelope_size;
27479
27480            // Zero reserved fields.
27481            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
27482
27483            // Safety:
27484            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
27485            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
27486            //   envelope_size bytes, there is always sufficient room.
27487            fidl::encoding::encode_in_envelope_optional::<u16, D>(
27488                self.weight.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
27489                encoder,
27490                offset + cur_offset,
27491                depth,
27492            )?;
27493
27494            _prev_end_offset = cur_offset + envelope_size;
27495            if 7 > max_ordinal {
27496                return Ok(());
27497            }
27498
27499            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
27500            // are envelope_size bytes.
27501            let cur_offset: usize = (7 - 1) * envelope_size;
27502
27503            // Zero reserved fields.
27504            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
27505
27506            // Safety:
27507            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
27508            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
27509            //   envelope_size bytes, there is always sufficient room.
27510            fidl::encoding::encode_in_envelope_optional::<i64, D>(
27511                self.ttl.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
27512                encoder,
27513                offset + cur_offset,
27514                depth,
27515            )?;
27516
27517            _prev_end_offset = cur_offset + envelope_size;
27518            if 8 > max_ordinal {
27519                return Ok(());
27520            }
27521
27522            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
27523            // are envelope_size bytes.
27524            let cur_offset: usize = (8 - 1) * envelope_size;
27525
27526            // Zero reserved fields.
27527            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
27528
27529            // Safety:
27530            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
27531            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
27532            //   envelope_size bytes, there is always sufficient room.
27533            fidl::encoding::encode_in_envelope_optional::<i64, D>(
27534                self.lease.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
27535                encoder,
27536                offset + cur_offset,
27537                depth,
27538            )?;
27539
27540            _prev_end_offset = cur_offset + envelope_size;
27541            if 9 > max_ordinal {
27542                return Ok(());
27543            }
27544
27545            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
27546            // are envelope_size bytes.
27547            let cur_offset: usize = (9 - 1) * envelope_size;
27548
27549            // Zero reserved fields.
27550            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
27551
27552            // Safety:
27553            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
27554            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
27555            //   envelope_size bytes, there is always sufficient room.
27556            fidl::encoding::encode_in_envelope_optional::<i64, D>(
27557                self.key_lease.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
27558                encoder,
27559                offset + cur_offset,
27560                depth,
27561            )?;
27562
27563            _prev_end_offset = cur_offset + envelope_size;
27564            if 10 > max_ordinal {
27565                return Ok(());
27566            }
27567
27568            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
27569            // are envelope_size bytes.
27570            let cur_offset: usize = (10 - 1) * envelope_size;
27571
27572            // Zero reserved fields.
27573            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
27574
27575            // Safety:
27576            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
27577            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
27578            //   envelope_size bytes, there is always sufficient room.
27579            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<DnsTxtEntry>, D>(
27580            self.txt_data.as_ref().map(<fidl::encoding::UnboundedVector<DnsTxtEntry> as fidl::encoding::ValueTypeMarker>::borrow),
27581            encoder, offset + cur_offset, depth
27582        )?;
27583
27584            _prev_end_offset = cur_offset + envelope_size;
27585            if 11 > max_ordinal {
27586                return Ok(());
27587            }
27588
27589            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
27590            // are envelope_size bytes.
27591            let cur_offset: usize = (11 - 1) * envelope_size;
27592
27593            // Zero reserved fields.
27594            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
27595
27596            // Safety:
27597            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
27598            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
27599            //   envelope_size bytes, there is always sufficient room.
27600            fidl::encoding::encode_in_envelope_optional::<SrpServerHost, D>(
27601                self.host.as_ref().map(<SrpServerHost as fidl::encoding::ValueTypeMarker>::borrow),
27602                encoder,
27603                offset + cur_offset,
27604                depth,
27605            )?;
27606
27607            _prev_end_offset = cur_offset + envelope_size;
27608
27609            Ok(())
27610        }
27611    }
27612
27613    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SrpServerService {
27614        #[inline(always)]
27615        fn new_empty() -> Self {
27616            Self::default()
27617        }
27618
27619        unsafe fn decode(
27620            &mut self,
27621            decoder: &mut fidl::encoding::Decoder<'_, D>,
27622            offset: usize,
27623            mut depth: fidl::encoding::Depth,
27624        ) -> fidl::Result<()> {
27625            decoder.debug_check_bounds::<Self>(offset);
27626            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
27627                None => return Err(fidl::Error::NotNullable),
27628                Some(len) => len,
27629            };
27630            // Calling decoder.out_of_line_offset(0) is not allowed.
27631            if len == 0 {
27632                return Ok(());
27633            };
27634            depth.increment()?;
27635            let envelope_size = 8;
27636            let bytes_len = len * envelope_size;
27637            let offset = decoder.out_of_line_offset(bytes_len)?;
27638            // Decode the envelope for each type.
27639            let mut _next_ordinal_to_read = 0;
27640            let mut next_offset = offset;
27641            let end_offset = offset + bytes_len;
27642            _next_ordinal_to_read += 1;
27643            if next_offset >= end_offset {
27644                return Ok(());
27645            }
27646
27647            // Decode unknown envelopes for gaps in ordinals.
27648            while _next_ordinal_to_read < 1 {
27649                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
27650                _next_ordinal_to_read += 1;
27651                next_offset += envelope_size;
27652            }
27653
27654            let next_out_of_line = decoder.next_out_of_line();
27655            let handles_before = decoder.remaining_handles();
27656            if let Some((inlined, num_bytes, num_handles)) =
27657                fidl::encoding::decode_envelope_header(decoder, next_offset)?
27658            {
27659                let member_inline_size =
27660                    <fidl::encoding::BoundedString<255> as fidl::encoding::TypeMarker>::inline_size(
27661                        decoder.context,
27662                    );
27663                if inlined != (member_inline_size <= 4) {
27664                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
27665                }
27666                let inner_offset;
27667                let mut inner_depth = depth.clone();
27668                if inlined {
27669                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
27670                    inner_offset = next_offset;
27671                } else {
27672                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
27673                    inner_depth.increment()?;
27674                }
27675                let val_ref = self
27676                    .instance_name
27677                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<255>, D));
27678                fidl::decode!(
27679                    fidl::encoding::BoundedString<255>,
27680                    D,
27681                    val_ref,
27682                    decoder,
27683                    inner_offset,
27684                    inner_depth
27685                )?;
27686                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
27687                {
27688                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
27689                }
27690                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
27691                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
27692                }
27693            }
27694
27695            next_offset += envelope_size;
27696            _next_ordinal_to_read += 1;
27697            if next_offset >= end_offset {
27698                return Ok(());
27699            }
27700
27701            // Decode unknown envelopes for gaps in ordinals.
27702            while _next_ordinal_to_read < 2 {
27703                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
27704                _next_ordinal_to_read += 1;
27705                next_offset += envelope_size;
27706            }
27707
27708            let next_out_of_line = decoder.next_out_of_line();
27709            let handles_before = decoder.remaining_handles();
27710            if let Some((inlined, num_bytes, num_handles)) =
27711                fidl::encoding::decode_envelope_header(decoder, next_offset)?
27712            {
27713                let member_inline_size =
27714                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
27715                if inlined != (member_inline_size <= 4) {
27716                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
27717                }
27718                let inner_offset;
27719                let mut inner_depth = depth.clone();
27720                if inlined {
27721                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
27722                    inner_offset = next_offset;
27723                } else {
27724                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
27725                    inner_depth.increment()?;
27726                }
27727                let val_ref = self.deleted.get_or_insert_with(|| fidl::new_empty!(bool, D));
27728                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
27729                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
27730                {
27731                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
27732                }
27733                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
27734                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
27735                }
27736            }
27737
27738            next_offset += envelope_size;
27739            _next_ordinal_to_read += 1;
27740            if next_offset >= end_offset {
27741                return Ok(());
27742            }
27743
27744            // Decode unknown envelopes for gaps in ordinals.
27745            while _next_ordinal_to_read < 3 {
27746                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
27747                _next_ordinal_to_read += 1;
27748                next_offset += envelope_size;
27749            }
27750
27751            let next_out_of_line = decoder.next_out_of_line();
27752            let handles_before = decoder.remaining_handles();
27753            if let Some((inlined, num_bytes, num_handles)) =
27754                fidl::encoding::decode_envelope_header(decoder, next_offset)?
27755            {
27756                let member_inline_size = <fidl::encoding::Vector<
27757                    fidl::encoding::BoundedString<63>,
27758                    6,
27759                > as fidl::encoding::TypeMarker>::inline_size(
27760                    decoder.context
27761                );
27762                if inlined != (member_inline_size <= 4) {
27763                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
27764                }
27765                let inner_offset;
27766                let mut inner_depth = depth.clone();
27767                if inlined {
27768                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
27769                    inner_offset = next_offset;
27770                } else {
27771                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
27772                    inner_depth.increment()?;
27773                }
27774                let val_ref = self.subtypes.get_or_insert_with(|| {
27775                    fidl::new_empty!(
27776                        fidl::encoding::Vector<fidl::encoding::BoundedString<63>, 6>,
27777                        D
27778                    )
27779                });
27780                fidl::decode!(
27781                    fidl::encoding::Vector<fidl::encoding::BoundedString<63>, 6>,
27782                    D,
27783                    val_ref,
27784                    decoder,
27785                    inner_offset,
27786                    inner_depth
27787                )?;
27788                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
27789                {
27790                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
27791                }
27792                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
27793                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
27794                }
27795            }
27796
27797            next_offset += envelope_size;
27798            _next_ordinal_to_read += 1;
27799            if next_offset >= end_offset {
27800                return Ok(());
27801            }
27802
27803            // Decode unknown envelopes for gaps in ordinals.
27804            while _next_ordinal_to_read < 4 {
27805                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
27806                _next_ordinal_to_read += 1;
27807                next_offset += envelope_size;
27808            }
27809
27810            let next_out_of_line = decoder.next_out_of_line();
27811            let handles_before = decoder.remaining_handles();
27812            if let Some((inlined, num_bytes, num_handles)) =
27813                fidl::encoding::decode_envelope_header(decoder, next_offset)?
27814            {
27815                let member_inline_size =
27816                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
27817                if inlined != (member_inline_size <= 4) {
27818                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
27819                }
27820                let inner_offset;
27821                let mut inner_depth = depth.clone();
27822                if inlined {
27823                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
27824                    inner_offset = next_offset;
27825                } else {
27826                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
27827                    inner_depth.increment()?;
27828                }
27829                let val_ref = self.port.get_or_insert_with(|| fidl::new_empty!(u16, D));
27830                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
27831                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
27832                {
27833                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
27834                }
27835                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
27836                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
27837                }
27838            }
27839
27840            next_offset += envelope_size;
27841            _next_ordinal_to_read += 1;
27842            if next_offset >= end_offset {
27843                return Ok(());
27844            }
27845
27846            // Decode unknown envelopes for gaps in ordinals.
27847            while _next_ordinal_to_read < 5 {
27848                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
27849                _next_ordinal_to_read += 1;
27850                next_offset += envelope_size;
27851            }
27852
27853            let next_out_of_line = decoder.next_out_of_line();
27854            let handles_before = decoder.remaining_handles();
27855            if let Some((inlined, num_bytes, num_handles)) =
27856                fidl::encoding::decode_envelope_header(decoder, next_offset)?
27857            {
27858                let member_inline_size =
27859                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
27860                if inlined != (member_inline_size <= 4) {
27861                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
27862                }
27863                let inner_offset;
27864                let mut inner_depth = depth.clone();
27865                if inlined {
27866                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
27867                    inner_offset = next_offset;
27868                } else {
27869                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
27870                    inner_depth.increment()?;
27871                }
27872                let val_ref = self.priority.get_or_insert_with(|| fidl::new_empty!(u16, D));
27873                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
27874                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
27875                {
27876                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
27877                }
27878                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
27879                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
27880                }
27881            }
27882
27883            next_offset += envelope_size;
27884            _next_ordinal_to_read += 1;
27885            if next_offset >= end_offset {
27886                return Ok(());
27887            }
27888
27889            // Decode unknown envelopes for gaps in ordinals.
27890            while _next_ordinal_to_read < 6 {
27891                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
27892                _next_ordinal_to_read += 1;
27893                next_offset += envelope_size;
27894            }
27895
27896            let next_out_of_line = decoder.next_out_of_line();
27897            let handles_before = decoder.remaining_handles();
27898            if let Some((inlined, num_bytes, num_handles)) =
27899                fidl::encoding::decode_envelope_header(decoder, next_offset)?
27900            {
27901                let member_inline_size =
27902                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
27903                if inlined != (member_inline_size <= 4) {
27904                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
27905                }
27906                let inner_offset;
27907                let mut inner_depth = depth.clone();
27908                if inlined {
27909                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
27910                    inner_offset = next_offset;
27911                } else {
27912                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
27913                    inner_depth.increment()?;
27914                }
27915                let val_ref = self.weight.get_or_insert_with(|| fidl::new_empty!(u16, D));
27916                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
27917                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
27918                {
27919                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
27920                }
27921                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
27922                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
27923                }
27924            }
27925
27926            next_offset += envelope_size;
27927            _next_ordinal_to_read += 1;
27928            if next_offset >= end_offset {
27929                return Ok(());
27930            }
27931
27932            // Decode unknown envelopes for gaps in ordinals.
27933            while _next_ordinal_to_read < 7 {
27934                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
27935                _next_ordinal_to_read += 1;
27936                next_offset += envelope_size;
27937            }
27938
27939            let next_out_of_line = decoder.next_out_of_line();
27940            let handles_before = decoder.remaining_handles();
27941            if let Some((inlined, num_bytes, num_handles)) =
27942                fidl::encoding::decode_envelope_header(decoder, next_offset)?
27943            {
27944                let member_inline_size =
27945                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
27946                if inlined != (member_inline_size <= 4) {
27947                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
27948                }
27949                let inner_offset;
27950                let mut inner_depth = depth.clone();
27951                if inlined {
27952                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
27953                    inner_offset = next_offset;
27954                } else {
27955                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
27956                    inner_depth.increment()?;
27957                }
27958                let val_ref = self.ttl.get_or_insert_with(|| fidl::new_empty!(i64, D));
27959                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
27960                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
27961                {
27962                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
27963                }
27964                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
27965                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
27966                }
27967            }
27968
27969            next_offset += envelope_size;
27970            _next_ordinal_to_read += 1;
27971            if next_offset >= end_offset {
27972                return Ok(());
27973            }
27974
27975            // Decode unknown envelopes for gaps in ordinals.
27976            while _next_ordinal_to_read < 8 {
27977                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
27978                _next_ordinal_to_read += 1;
27979                next_offset += envelope_size;
27980            }
27981
27982            let next_out_of_line = decoder.next_out_of_line();
27983            let handles_before = decoder.remaining_handles();
27984            if let Some((inlined, num_bytes, num_handles)) =
27985                fidl::encoding::decode_envelope_header(decoder, next_offset)?
27986            {
27987                let member_inline_size =
27988                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
27989                if inlined != (member_inline_size <= 4) {
27990                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
27991                }
27992                let inner_offset;
27993                let mut inner_depth = depth.clone();
27994                if inlined {
27995                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
27996                    inner_offset = next_offset;
27997                } else {
27998                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
27999                    inner_depth.increment()?;
28000                }
28001                let val_ref = self.lease.get_or_insert_with(|| fidl::new_empty!(i64, D));
28002                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
28003                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
28004                {
28005                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
28006                }
28007                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
28008                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
28009                }
28010            }
28011
28012            next_offset += envelope_size;
28013            _next_ordinal_to_read += 1;
28014            if next_offset >= end_offset {
28015                return Ok(());
28016            }
28017
28018            // Decode unknown envelopes for gaps in ordinals.
28019            while _next_ordinal_to_read < 9 {
28020                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
28021                _next_ordinal_to_read += 1;
28022                next_offset += envelope_size;
28023            }
28024
28025            let next_out_of_line = decoder.next_out_of_line();
28026            let handles_before = decoder.remaining_handles();
28027            if let Some((inlined, num_bytes, num_handles)) =
28028                fidl::encoding::decode_envelope_header(decoder, next_offset)?
28029            {
28030                let member_inline_size =
28031                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
28032                if inlined != (member_inline_size <= 4) {
28033                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
28034                }
28035                let inner_offset;
28036                let mut inner_depth = depth.clone();
28037                if inlined {
28038                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
28039                    inner_offset = next_offset;
28040                } else {
28041                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
28042                    inner_depth.increment()?;
28043                }
28044                let val_ref = self.key_lease.get_or_insert_with(|| fidl::new_empty!(i64, D));
28045                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
28046                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
28047                {
28048                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
28049                }
28050                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
28051                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
28052                }
28053            }
28054
28055            next_offset += envelope_size;
28056            _next_ordinal_to_read += 1;
28057            if next_offset >= end_offset {
28058                return Ok(());
28059            }
28060
28061            // Decode unknown envelopes for gaps in ordinals.
28062            while _next_ordinal_to_read < 10 {
28063                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
28064                _next_ordinal_to_read += 1;
28065                next_offset += envelope_size;
28066            }
28067
28068            let next_out_of_line = decoder.next_out_of_line();
28069            let handles_before = decoder.remaining_handles();
28070            if let Some((inlined, num_bytes, num_handles)) =
28071                fidl::encoding::decode_envelope_header(decoder, next_offset)?
28072            {
28073                let member_inline_size = <fidl::encoding::UnboundedVector<DnsTxtEntry> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
28074                if inlined != (member_inline_size <= 4) {
28075                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
28076                }
28077                let inner_offset;
28078                let mut inner_depth = depth.clone();
28079                if inlined {
28080                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
28081                    inner_offset = next_offset;
28082                } else {
28083                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
28084                    inner_depth.increment()?;
28085                }
28086                let val_ref = self.txt_data.get_or_insert_with(|| {
28087                    fidl::new_empty!(fidl::encoding::UnboundedVector<DnsTxtEntry>, D)
28088                });
28089                fidl::decode!(
28090                    fidl::encoding::UnboundedVector<DnsTxtEntry>,
28091                    D,
28092                    val_ref,
28093                    decoder,
28094                    inner_offset,
28095                    inner_depth
28096                )?;
28097                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
28098                {
28099                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
28100                }
28101                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
28102                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
28103                }
28104            }
28105
28106            next_offset += envelope_size;
28107            _next_ordinal_to_read += 1;
28108            if next_offset >= end_offset {
28109                return Ok(());
28110            }
28111
28112            // Decode unknown envelopes for gaps in ordinals.
28113            while _next_ordinal_to_read < 11 {
28114                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
28115                _next_ordinal_to_read += 1;
28116                next_offset += envelope_size;
28117            }
28118
28119            let next_out_of_line = decoder.next_out_of_line();
28120            let handles_before = decoder.remaining_handles();
28121            if let Some((inlined, num_bytes, num_handles)) =
28122                fidl::encoding::decode_envelope_header(decoder, next_offset)?
28123            {
28124                let member_inline_size =
28125                    <SrpServerHost as fidl::encoding::TypeMarker>::inline_size(decoder.context);
28126                if inlined != (member_inline_size <= 4) {
28127                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
28128                }
28129                let inner_offset;
28130                let mut inner_depth = depth.clone();
28131                if inlined {
28132                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
28133                    inner_offset = next_offset;
28134                } else {
28135                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
28136                    inner_depth.increment()?;
28137                }
28138                let val_ref = self.host.get_or_insert_with(|| fidl::new_empty!(SrpServerHost, D));
28139                fidl::decode!(SrpServerHost, D, val_ref, decoder, inner_offset, inner_depth)?;
28140                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
28141                {
28142                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
28143                }
28144                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
28145                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
28146                }
28147            }
28148
28149            next_offset += envelope_size;
28150
28151            // Decode the remaining unknown envelopes.
28152            while next_offset < end_offset {
28153                _next_ordinal_to_read += 1;
28154                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
28155                next_offset += envelope_size;
28156            }
28157
28158            Ok(())
28159        }
28160    }
28161
28162    impl Telemetry {
28163        #[inline(always)]
28164        fn max_ordinal_present(&self) -> u64 {
28165            if let Some(_) = self.mle_counters {
28166                return 44;
28167            }
28168            if let Some(_) = self.buffer_info {
28169                return 43;
28170            }
28171            if let Some(_) = self.csl_info {
28172                return 42;
28173            }
28174            if let Some(_) = self.cca_threshold {
28175                return 41;
28176            }
28177            if let Some(_) = self.eid_cache_entries {
28178                return 40;
28179            }
28180            if let Some(_) = self.netstat {
28181                return 39;
28182            }
28183            if let Some(_) = self.border_routing_rdnsses {
28184                return 38;
28185            }
28186            if let Some(_) = self.border_routing_prefixes {
28187                return 37;
28188            }
28189            if let Some(_) = self.ipmaddrs {
28190                return 36;
28191            }
28192            if let Some(_) = self.ipaddrs {
28193                return 35;
28194            }
28195            if let Some(_) = self.history_report {
28196                return 34;
28197            }
28198            if let Some(_) = self.network_data {
28199                return 33;
28200            }
28201            if let Some(_) = self.router_info {
28202                return 32;
28203            }
28204            if let Some(_) = self.multiradio_neighbor_info {
28205                return 31;
28206            }
28207            if let Some(_) = self.active_dataset {
28208                return 30;
28209            }
28210            if let Some(_) = self.border_routing_routers {
28211                return 29;
28212            }
28213            if let Some(_) = self.border_routing_peers {
28214                return 28;
28215            }
28216            if let Some(_) = self.extended_pan_id {
28217                return 27;
28218            }
28219            if let Some(_) = self.multi_ail_detected {
28220                return 26;
28221            }
28222            if let Some(_) = self.border_agent_counters {
28223                return 25;
28224            }
28225            if let Some(_) = self.link_metrics_entries {
28226                return 24;
28227            }
28228            if let Some(_) = self.dhcp6pd_info {
28229                return 23;
28230            }
28231            if let Some(_) = self.upstream_dns_info {
28232                return 22;
28233            }
28234            if let Some(_) = self.trel_peers_info {
28235                return 21;
28236            }
28237            if let Some(_) = self.trel_counters {
28238                return 20;
28239            }
28240            if let Some(_) = self.nat64_info {
28241                return 19;
28242            }
28243            if let Some(_) = self.uptime {
28244                return 18;
28245            }
28246            if let Some(_) = self.leader_data {
28247                return 17;
28248            }
28249            if let Some(_) = self.dnssd_counters {
28250                return 16;
28251            }
28252            if let Some(_) = self.srp_server_info {
28253                return 15;
28254            }
28255            if let Some(_) = self.thread_border_routing_counters {
28256                return 14;
28257            }
28258            if let Some(_) = self.thread_stable_network_data {
28259                return 13;
28260            }
28261            if let Some(_) = self.thread_network_data {
28262                return 12;
28263            }
28264            if let Some(_) = self.thread_stable_network_data_version {
28265                return 11;
28266            }
28267            if let Some(_) = self.thread_network_data_version {
28268                return 10;
28269            }
28270            if let Some(_) = self.thread_rloc {
28271                return 9;
28272            }
28273            if let Some(_) = self.thread_router_id {
28274                return 8;
28275            }
28276            if let Some(_) = self.thread_link_mode {
28277                return 7;
28278            }
28279            if let Some(_) = self.rcp_version {
28280                return 6;
28281            }
28282            if let Some(_) = self.stack_version {
28283                return 5;
28284            }
28285            if let Some(_) = self.partition_id {
28286                return 4;
28287            }
28288            if let Some(_) = self.channel_index {
28289                return 3;
28290            }
28291            if let Some(_) = self.tx_power {
28292                return 2;
28293            }
28294            if let Some(_) = self.rssi {
28295                return 1;
28296            }
28297            0
28298        }
28299    }
28300
28301    impl fidl::encoding::ValueTypeMarker for Telemetry {
28302        type Borrowed<'a> = &'a Self;
28303        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
28304            value
28305        }
28306    }
28307
28308    unsafe impl fidl::encoding::TypeMarker for Telemetry {
28309        type Owned = Self;
28310
28311        #[inline(always)]
28312        fn inline_align(_context: fidl::encoding::Context) -> usize {
28313            8
28314        }
28315
28316        #[inline(always)]
28317        fn inline_size(_context: fidl::encoding::Context) -> usize {
28318            16
28319        }
28320    }
28321
28322    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Telemetry, D>
28323        for &Telemetry
28324    {
28325        unsafe fn encode(
28326            self,
28327            encoder: &mut fidl::encoding::Encoder<'_, D>,
28328            offset: usize,
28329            mut depth: fidl::encoding::Depth,
28330        ) -> fidl::Result<()> {
28331            encoder.debug_check_bounds::<Telemetry>(offset);
28332            // Vector header
28333            let max_ordinal: u64 = self.max_ordinal_present();
28334            encoder.write_num(max_ordinal, offset);
28335            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
28336            // Calling encoder.out_of_line_offset(0) is not allowed.
28337            if max_ordinal == 0 {
28338                return Ok(());
28339            }
28340            depth.increment()?;
28341            let envelope_size = 8;
28342            let bytes_len = max_ordinal as usize * envelope_size;
28343            #[allow(unused_variables)]
28344            let offset = encoder.out_of_line_offset(bytes_len);
28345            let mut _prev_end_offset: usize = 0;
28346            if 1 > max_ordinal {
28347                return Ok(());
28348            }
28349
28350            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
28351            // are envelope_size bytes.
28352            let cur_offset: usize = (1 - 1) * envelope_size;
28353
28354            // Zero reserved fields.
28355            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
28356
28357            // Safety:
28358            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
28359            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
28360            //   envelope_size bytes, there is always sufficient room.
28361            fidl::encoding::encode_in_envelope_optional::<i8, D>(
28362                self.rssi.as_ref().map(<i8 as fidl::encoding::ValueTypeMarker>::borrow),
28363                encoder,
28364                offset + cur_offset,
28365                depth,
28366            )?;
28367
28368            _prev_end_offset = cur_offset + envelope_size;
28369            if 2 > max_ordinal {
28370                return Ok(());
28371            }
28372
28373            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
28374            // are envelope_size bytes.
28375            let cur_offset: usize = (2 - 1) * envelope_size;
28376
28377            // Zero reserved fields.
28378            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
28379
28380            // Safety:
28381            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
28382            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
28383            //   envelope_size bytes, there is always sufficient room.
28384            fidl::encoding::encode_in_envelope_optional::<i8, D>(
28385                self.tx_power.as_ref().map(<i8 as fidl::encoding::ValueTypeMarker>::borrow),
28386                encoder,
28387                offset + cur_offset,
28388                depth,
28389            )?;
28390
28391            _prev_end_offset = cur_offset + envelope_size;
28392            if 3 > max_ordinal {
28393                return Ok(());
28394            }
28395
28396            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
28397            // are envelope_size bytes.
28398            let cur_offset: usize = (3 - 1) * envelope_size;
28399
28400            // Zero reserved fields.
28401            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
28402
28403            // Safety:
28404            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
28405            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
28406            //   envelope_size bytes, there is always sufficient room.
28407            fidl::encoding::encode_in_envelope_optional::<u16, D>(
28408                self.channel_index.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
28409                encoder,
28410                offset + cur_offset,
28411                depth,
28412            )?;
28413
28414            _prev_end_offset = cur_offset + envelope_size;
28415            if 4 > max_ordinal {
28416                return Ok(());
28417            }
28418
28419            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
28420            // are envelope_size bytes.
28421            let cur_offset: usize = (4 - 1) * envelope_size;
28422
28423            // Zero reserved fields.
28424            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
28425
28426            // Safety:
28427            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
28428            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
28429            //   envelope_size bytes, there is always sufficient room.
28430            fidl::encoding::encode_in_envelope_optional::<u32, D>(
28431                self.partition_id.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
28432                encoder,
28433                offset + cur_offset,
28434                depth,
28435            )?;
28436
28437            _prev_end_offset = cur_offset + envelope_size;
28438            if 5 > max_ordinal {
28439                return Ok(());
28440            }
28441
28442            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
28443            // are envelope_size bytes.
28444            let cur_offset: usize = (5 - 1) * envelope_size;
28445
28446            // Zero reserved fields.
28447            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
28448
28449            // Safety:
28450            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
28451            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
28452            //   envelope_size bytes, there is always sufficient room.
28453            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<256>, D>(
28454                self.stack_version.as_ref().map(
28455                    <fidl::encoding::BoundedString<256> as fidl::encoding::ValueTypeMarker>::borrow,
28456                ),
28457                encoder,
28458                offset + cur_offset,
28459                depth,
28460            )?;
28461
28462            _prev_end_offset = cur_offset + envelope_size;
28463            if 6 > max_ordinal {
28464                return Ok(());
28465            }
28466
28467            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
28468            // are envelope_size bytes.
28469            let cur_offset: usize = (6 - 1) * envelope_size;
28470
28471            // Zero reserved fields.
28472            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
28473
28474            // Safety:
28475            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
28476            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
28477            //   envelope_size bytes, there is always sufficient room.
28478            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<256>, D>(
28479                self.rcp_version.as_ref().map(
28480                    <fidl::encoding::BoundedString<256> as fidl::encoding::ValueTypeMarker>::borrow,
28481                ),
28482                encoder,
28483                offset + cur_offset,
28484                depth,
28485            )?;
28486
28487            _prev_end_offset = cur_offset + envelope_size;
28488            if 7 > max_ordinal {
28489                return Ok(());
28490            }
28491
28492            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
28493            // are envelope_size bytes.
28494            let cur_offset: usize = (7 - 1) * envelope_size;
28495
28496            // Zero reserved fields.
28497            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
28498
28499            // Safety:
28500            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
28501            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
28502            //   envelope_size bytes, there is always sufficient room.
28503            fidl::encoding::encode_in_envelope_optional::<u8, D>(
28504                self.thread_link_mode.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
28505                encoder,
28506                offset + cur_offset,
28507                depth,
28508            )?;
28509
28510            _prev_end_offset = cur_offset + envelope_size;
28511            if 8 > max_ordinal {
28512                return Ok(());
28513            }
28514
28515            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
28516            // are envelope_size bytes.
28517            let cur_offset: usize = (8 - 1) * envelope_size;
28518
28519            // Zero reserved fields.
28520            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
28521
28522            // Safety:
28523            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
28524            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
28525            //   envelope_size bytes, there is always sufficient room.
28526            fidl::encoding::encode_in_envelope_optional::<u8, D>(
28527                self.thread_router_id.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
28528                encoder,
28529                offset + cur_offset,
28530                depth,
28531            )?;
28532
28533            _prev_end_offset = cur_offset + envelope_size;
28534            if 9 > max_ordinal {
28535                return Ok(());
28536            }
28537
28538            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
28539            // are envelope_size bytes.
28540            let cur_offset: usize = (9 - 1) * envelope_size;
28541
28542            // Zero reserved fields.
28543            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
28544
28545            // Safety:
28546            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
28547            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
28548            //   envelope_size bytes, there is always sufficient room.
28549            fidl::encoding::encode_in_envelope_optional::<u16, D>(
28550                self.thread_rloc.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
28551                encoder,
28552                offset + cur_offset,
28553                depth,
28554            )?;
28555
28556            _prev_end_offset = cur_offset + envelope_size;
28557            if 10 > max_ordinal {
28558                return Ok(());
28559            }
28560
28561            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
28562            // are envelope_size bytes.
28563            let cur_offset: usize = (10 - 1) * envelope_size;
28564
28565            // Zero reserved fields.
28566            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
28567
28568            // Safety:
28569            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
28570            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
28571            //   envelope_size bytes, there is always sufficient room.
28572            fidl::encoding::encode_in_envelope_optional::<u8, D>(
28573                self.thread_network_data_version
28574                    .as_ref()
28575                    .map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
28576                encoder,
28577                offset + cur_offset,
28578                depth,
28579            )?;
28580
28581            _prev_end_offset = cur_offset + envelope_size;
28582            if 11 > max_ordinal {
28583                return Ok(());
28584            }
28585
28586            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
28587            // are envelope_size bytes.
28588            let cur_offset: usize = (11 - 1) * envelope_size;
28589
28590            // Zero reserved fields.
28591            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
28592
28593            // Safety:
28594            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
28595            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
28596            //   envelope_size bytes, there is always sufficient room.
28597            fidl::encoding::encode_in_envelope_optional::<u8, D>(
28598                self.thread_stable_network_data_version
28599                    .as_ref()
28600                    .map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
28601                encoder,
28602                offset + cur_offset,
28603                depth,
28604            )?;
28605
28606            _prev_end_offset = cur_offset + envelope_size;
28607            if 12 > max_ordinal {
28608                return Ok(());
28609            }
28610
28611            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
28612            // are envelope_size bytes.
28613            let cur_offset: usize = (12 - 1) * envelope_size;
28614
28615            // Zero reserved fields.
28616            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
28617
28618            // Safety:
28619            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
28620            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
28621            //   envelope_size bytes, there is always sufficient room.
28622            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u8, 255>, D>(
28623                self.thread_network_data.as_ref().map(
28624                    <fidl::encoding::Vector<u8, 255> as fidl::encoding::ValueTypeMarker>::borrow,
28625                ),
28626                encoder,
28627                offset + cur_offset,
28628                depth,
28629            )?;
28630
28631            _prev_end_offset = cur_offset + envelope_size;
28632            if 13 > max_ordinal {
28633                return Ok(());
28634            }
28635
28636            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
28637            // are envelope_size bytes.
28638            let cur_offset: usize = (13 - 1) * envelope_size;
28639
28640            // Zero reserved fields.
28641            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
28642
28643            // Safety:
28644            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
28645            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
28646            //   envelope_size bytes, there is always sufficient room.
28647            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u8, 255>, D>(
28648                self.thread_stable_network_data.as_ref().map(
28649                    <fidl::encoding::Vector<u8, 255> as fidl::encoding::ValueTypeMarker>::borrow,
28650                ),
28651                encoder,
28652                offset + cur_offset,
28653                depth,
28654            )?;
28655
28656            _prev_end_offset = cur_offset + envelope_size;
28657            if 14 > max_ordinal {
28658                return Ok(());
28659            }
28660
28661            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
28662            // are envelope_size bytes.
28663            let cur_offset: usize = (14 - 1) * envelope_size;
28664
28665            // Zero reserved fields.
28666            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
28667
28668            // Safety:
28669            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
28670            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
28671            //   envelope_size bytes, there is always sufficient room.
28672            fidl::encoding::encode_in_envelope_optional::<BorderRoutingCounters, D>(
28673                self.thread_border_routing_counters
28674                    .as_ref()
28675                    .map(<BorderRoutingCounters as fidl::encoding::ValueTypeMarker>::borrow),
28676                encoder,
28677                offset + cur_offset,
28678                depth,
28679            )?;
28680
28681            _prev_end_offset = cur_offset + envelope_size;
28682            if 15 > max_ordinal {
28683                return Ok(());
28684            }
28685
28686            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
28687            // are envelope_size bytes.
28688            let cur_offset: usize = (15 - 1) * envelope_size;
28689
28690            // Zero reserved fields.
28691            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
28692
28693            // Safety:
28694            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
28695            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
28696            //   envelope_size bytes, there is always sufficient room.
28697            fidl::encoding::encode_in_envelope_optional::<SrpServerInfo, D>(
28698                self.srp_server_info
28699                    .as_ref()
28700                    .map(<SrpServerInfo as fidl::encoding::ValueTypeMarker>::borrow),
28701                encoder,
28702                offset + cur_offset,
28703                depth,
28704            )?;
28705
28706            _prev_end_offset = cur_offset + envelope_size;
28707            if 16 > max_ordinal {
28708                return Ok(());
28709            }
28710
28711            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
28712            // are envelope_size bytes.
28713            let cur_offset: usize = (16 - 1) * envelope_size;
28714
28715            // Zero reserved fields.
28716            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
28717
28718            // Safety:
28719            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
28720            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
28721            //   envelope_size bytes, there is always sufficient room.
28722            fidl::encoding::encode_in_envelope_optional::<DnssdCounters, D>(
28723                self.dnssd_counters
28724                    .as_ref()
28725                    .map(<DnssdCounters as fidl::encoding::ValueTypeMarker>::borrow),
28726                encoder,
28727                offset + cur_offset,
28728                depth,
28729            )?;
28730
28731            _prev_end_offset = cur_offset + envelope_size;
28732            if 17 > max_ordinal {
28733                return Ok(());
28734            }
28735
28736            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
28737            // are envelope_size bytes.
28738            let cur_offset: usize = (17 - 1) * envelope_size;
28739
28740            // Zero reserved fields.
28741            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
28742
28743            // Safety:
28744            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
28745            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
28746            //   envelope_size bytes, there is always sufficient room.
28747            fidl::encoding::encode_in_envelope_optional::<LeaderData, D>(
28748                self.leader_data
28749                    .as_ref()
28750                    .map(<LeaderData as fidl::encoding::ValueTypeMarker>::borrow),
28751                encoder,
28752                offset + cur_offset,
28753                depth,
28754            )?;
28755
28756            _prev_end_offset = cur_offset + envelope_size;
28757            if 18 > max_ordinal {
28758                return Ok(());
28759            }
28760
28761            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
28762            // are envelope_size bytes.
28763            let cur_offset: usize = (18 - 1) * envelope_size;
28764
28765            // Zero reserved fields.
28766            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
28767
28768            // Safety:
28769            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
28770            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
28771            //   envelope_size bytes, there is always sufficient room.
28772            fidl::encoding::encode_in_envelope_optional::<i64, D>(
28773                self.uptime.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
28774                encoder,
28775                offset + cur_offset,
28776                depth,
28777            )?;
28778
28779            _prev_end_offset = cur_offset + envelope_size;
28780            if 19 > max_ordinal {
28781                return Ok(());
28782            }
28783
28784            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
28785            // are envelope_size bytes.
28786            let cur_offset: usize = (19 - 1) * envelope_size;
28787
28788            // Zero reserved fields.
28789            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
28790
28791            // Safety:
28792            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
28793            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
28794            //   envelope_size bytes, there is always sufficient room.
28795            fidl::encoding::encode_in_envelope_optional::<Nat64Info, D>(
28796                self.nat64_info
28797                    .as_ref()
28798                    .map(<Nat64Info as fidl::encoding::ValueTypeMarker>::borrow),
28799                encoder,
28800                offset + cur_offset,
28801                depth,
28802            )?;
28803
28804            _prev_end_offset = cur_offset + envelope_size;
28805            if 20 > max_ordinal {
28806                return Ok(());
28807            }
28808
28809            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
28810            // are envelope_size bytes.
28811            let cur_offset: usize = (20 - 1) * envelope_size;
28812
28813            // Zero reserved fields.
28814            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
28815
28816            // Safety:
28817            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
28818            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
28819            //   envelope_size bytes, there is always sufficient room.
28820            fidl::encoding::encode_in_envelope_optional::<TrelCounters, D>(
28821                self.trel_counters
28822                    .as_ref()
28823                    .map(<TrelCounters as fidl::encoding::ValueTypeMarker>::borrow),
28824                encoder,
28825                offset + cur_offset,
28826                depth,
28827            )?;
28828
28829            _prev_end_offset = cur_offset + envelope_size;
28830            if 21 > max_ordinal {
28831                return Ok(());
28832            }
28833
28834            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
28835            // are envelope_size bytes.
28836            let cur_offset: usize = (21 - 1) * envelope_size;
28837
28838            // Zero reserved fields.
28839            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
28840
28841            // Safety:
28842            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
28843            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
28844            //   envelope_size bytes, there is always sufficient room.
28845            fidl::encoding::encode_in_envelope_optional::<TrelPeersInfo, D>(
28846                self.trel_peers_info
28847                    .as_ref()
28848                    .map(<TrelPeersInfo as fidl::encoding::ValueTypeMarker>::borrow),
28849                encoder,
28850                offset + cur_offset,
28851                depth,
28852            )?;
28853
28854            _prev_end_offset = cur_offset + envelope_size;
28855            if 22 > max_ordinal {
28856                return Ok(());
28857            }
28858
28859            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
28860            // are envelope_size bytes.
28861            let cur_offset: usize = (22 - 1) * envelope_size;
28862
28863            // Zero reserved fields.
28864            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
28865
28866            // Safety:
28867            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
28868            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
28869            //   envelope_size bytes, there is always sufficient room.
28870            fidl::encoding::encode_in_envelope_optional::<UpstreamDnsInfo, D>(
28871                self.upstream_dns_info
28872                    .as_ref()
28873                    .map(<UpstreamDnsInfo as fidl::encoding::ValueTypeMarker>::borrow),
28874                encoder,
28875                offset + cur_offset,
28876                depth,
28877            )?;
28878
28879            _prev_end_offset = cur_offset + envelope_size;
28880            if 23 > max_ordinal {
28881                return Ok(());
28882            }
28883
28884            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
28885            // are envelope_size bytes.
28886            let cur_offset: usize = (23 - 1) * envelope_size;
28887
28888            // Zero reserved fields.
28889            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
28890
28891            // Safety:
28892            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
28893            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
28894            //   envelope_size bytes, there is always sufficient room.
28895            fidl::encoding::encode_in_envelope_optional::<Dhcp6PdInfo, D>(
28896                self.dhcp6pd_info
28897                    .as_ref()
28898                    .map(<Dhcp6PdInfo as fidl::encoding::ValueTypeMarker>::borrow),
28899                encoder,
28900                offset + cur_offset,
28901                depth,
28902            )?;
28903
28904            _prev_end_offset = cur_offset + envelope_size;
28905            if 24 > max_ordinal {
28906                return Ok(());
28907            }
28908
28909            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
28910            // are envelope_size bytes.
28911            let cur_offset: usize = (24 - 1) * envelope_size;
28912
28913            // Zero reserved fields.
28914            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
28915
28916            // Safety:
28917            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
28918            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
28919            //   envelope_size bytes, there is always sufficient room.
28920            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<LinkMetricsEntry, 64>, D>(
28921            self.link_metrics_entries.as_ref().map(<fidl::encoding::Vector<LinkMetricsEntry, 64> as fidl::encoding::ValueTypeMarker>::borrow),
28922            encoder, offset + cur_offset, depth
28923        )?;
28924
28925            _prev_end_offset = cur_offset + envelope_size;
28926            if 25 > max_ordinal {
28927                return Ok(());
28928            }
28929
28930            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
28931            // are envelope_size bytes.
28932            let cur_offset: usize = (25 - 1) * envelope_size;
28933
28934            // Zero reserved fields.
28935            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
28936
28937            // Safety:
28938            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
28939            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
28940            //   envelope_size bytes, there is always sufficient room.
28941            fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_lowpan_device_common::BorderAgentCounters, D>(
28942            self.border_agent_counters.as_ref().map(<fidl_fuchsia_lowpan_device_common::BorderAgentCounters as fidl::encoding::ValueTypeMarker>::borrow),
28943            encoder, offset + cur_offset, depth
28944        )?;
28945
28946            _prev_end_offset = cur_offset + envelope_size;
28947            if 26 > max_ordinal {
28948                return Ok(());
28949            }
28950
28951            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
28952            // are envelope_size bytes.
28953            let cur_offset: usize = (26 - 1) * envelope_size;
28954
28955            // Zero reserved fields.
28956            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
28957
28958            // Safety:
28959            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
28960            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
28961            //   envelope_size bytes, there is always sufficient room.
28962            fidl::encoding::encode_in_envelope_optional::<bool, D>(
28963                self.multi_ail_detected
28964                    .as_ref()
28965                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
28966                encoder,
28967                offset + cur_offset,
28968                depth,
28969            )?;
28970
28971            _prev_end_offset = cur_offset + envelope_size;
28972            if 27 > max_ordinal {
28973                return Ok(());
28974            }
28975
28976            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
28977            // are envelope_size bytes.
28978            let cur_offset: usize = (27 - 1) * envelope_size;
28979
28980            // Zero reserved fields.
28981            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
28982
28983            // Safety:
28984            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
28985            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
28986            //   envelope_size bytes, there is always sufficient room.
28987            fidl::encoding::encode_in_envelope_optional::<u64, D>(
28988                self.extended_pan_id.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
28989                encoder,
28990                offset + cur_offset,
28991                depth,
28992            )?;
28993
28994            _prev_end_offset = cur_offset + envelope_size;
28995            if 28 > max_ordinal {
28996                return Ok(());
28997            }
28998
28999            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
29000            // are envelope_size bytes.
29001            let cur_offset: usize = (28 - 1) * envelope_size;
29002
29003            // Zero reserved fields.
29004            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
29005
29006            // Safety:
29007            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
29008            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
29009            //   envelope_size bytes, there is always sufficient room.
29010            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<BorderRoutingPeer, 64>, D>(
29011            self.border_routing_peers.as_ref().map(<fidl::encoding::Vector<BorderRoutingPeer, 64> as fidl::encoding::ValueTypeMarker>::borrow),
29012            encoder, offset + cur_offset, depth
29013        )?;
29014
29015            _prev_end_offset = cur_offset + envelope_size;
29016            if 29 > max_ordinal {
29017                return Ok(());
29018            }
29019
29020            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
29021            // are envelope_size bytes.
29022            let cur_offset: usize = (29 - 1) * envelope_size;
29023
29024            // Zero reserved fields.
29025            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
29026
29027            // Safety:
29028            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
29029            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
29030            //   envelope_size bytes, there is always sufficient room.
29031            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<BorderRoutingRouter, 64>, D>(
29032            self.border_routing_routers.as_ref().map(<fidl::encoding::Vector<BorderRoutingRouter, 64> as fidl::encoding::ValueTypeMarker>::borrow),
29033            encoder, offset + cur_offset, depth
29034        )?;
29035
29036            _prev_end_offset = cur_offset + envelope_size;
29037            if 30 > max_ordinal {
29038                return Ok(());
29039            }
29040
29041            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
29042            // are envelope_size bytes.
29043            let cur_offset: usize = (30 - 1) * envelope_size;
29044
29045            // Zero reserved fields.
29046            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
29047
29048            // Safety:
29049            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
29050            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
29051            //   envelope_size bytes, there is always sufficient room.
29052            fidl::encoding::encode_in_envelope_optional::<OperationalDataset, D>(
29053                self.active_dataset
29054                    .as_ref()
29055                    .map(<OperationalDataset as fidl::encoding::ValueTypeMarker>::borrow),
29056                encoder,
29057                offset + cur_offset,
29058                depth,
29059            )?;
29060
29061            _prev_end_offset = cur_offset + envelope_size;
29062            if 31 > max_ordinal {
29063                return Ok(());
29064            }
29065
29066            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
29067            // are envelope_size bytes.
29068            let cur_offset: usize = (31 - 1) * envelope_size;
29069
29070            // Zero reserved fields.
29071            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
29072
29073            // Safety:
29074            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
29075            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
29076            //   envelope_size bytes, there is always sufficient room.
29077            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<MultiRadioNeighborInfo, 64>, D>(
29078            self.multiradio_neighbor_info.as_ref().map(<fidl::encoding::Vector<MultiRadioNeighborInfo, 64> as fidl::encoding::ValueTypeMarker>::borrow),
29079            encoder, offset + cur_offset, depth
29080        )?;
29081
29082            _prev_end_offset = cur_offset + envelope_size;
29083            if 32 > max_ordinal {
29084                return Ok(());
29085            }
29086
29087            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
29088            // are envelope_size bytes.
29089            let cur_offset: usize = (32 - 1) * envelope_size;
29090
29091            // Zero reserved fields.
29092            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
29093
29094            // Safety:
29095            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
29096            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
29097            //   envelope_size bytes, there is always sufficient room.
29098            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<RouterInfo, 64>, D>(
29099            self.router_info.as_ref().map(<fidl::encoding::Vector<RouterInfo, 64> as fidl::encoding::ValueTypeMarker>::borrow),
29100            encoder, offset + cur_offset, depth
29101        )?;
29102
29103            _prev_end_offset = cur_offset + envelope_size;
29104            if 33 > max_ordinal {
29105                return Ok(());
29106            }
29107
29108            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
29109            // are envelope_size bytes.
29110            let cur_offset: usize = (33 - 1) * envelope_size;
29111
29112            // Zero reserved fields.
29113            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
29114
29115            // Safety:
29116            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
29117            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
29118            //   envelope_size bytes, there is always sufficient room.
29119            fidl::encoding::encode_in_envelope_optional::<NetworkData, D>(
29120                self.network_data
29121                    .as_ref()
29122                    .map(<NetworkData as fidl::encoding::ValueTypeMarker>::borrow),
29123                encoder,
29124                offset + cur_offset,
29125                depth,
29126            )?;
29127
29128            _prev_end_offset = cur_offset + envelope_size;
29129            if 34 > max_ordinal {
29130                return Ok(());
29131            }
29132
29133            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
29134            // are envelope_size bytes.
29135            let cur_offset: usize = (34 - 1) * envelope_size;
29136
29137            // Zero reserved fields.
29138            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
29139
29140            // Safety:
29141            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
29142            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
29143            //   envelope_size bytes, there is always sufficient room.
29144            fidl::encoding::encode_in_envelope_optional::<ThreadHistoryReport, D>(
29145                self.history_report
29146                    .as_ref()
29147                    .map(<ThreadHistoryReport as fidl::encoding::ValueTypeMarker>::borrow),
29148                encoder,
29149                offset + cur_offset,
29150                depth,
29151            )?;
29152
29153            _prev_end_offset = cur_offset + envelope_size;
29154            if 35 > max_ordinal {
29155                return Ok(());
29156            }
29157
29158            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
29159            // are envelope_size bytes.
29160            let cur_offset: usize = (35 - 1) * envelope_size;
29161
29162            // Zero reserved fields.
29163            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
29164
29165            // Safety:
29166            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
29167            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
29168            //   envelope_size bytes, there is always sufficient room.
29169            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<NetifAddress, 32>, D>(
29170            self.ipaddrs.as_ref().map(<fidl::encoding::Vector<NetifAddress, 32> as fidl::encoding::ValueTypeMarker>::borrow),
29171            encoder, offset + cur_offset, depth
29172        )?;
29173
29174            _prev_end_offset = cur_offset + envelope_size;
29175            if 36 > max_ordinal {
29176                return Ok(());
29177            }
29178
29179            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
29180            // are envelope_size bytes.
29181            let cur_offset: usize = (36 - 1) * envelope_size;
29182
29183            // Zero reserved fields.
29184            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
29185
29186            // Safety:
29187            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
29188            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
29189            //   envelope_size bytes, there is always sufficient room.
29190            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<fidl_fuchsia_net_common::Ipv6Address, 32>, D>(
29191            self.ipmaddrs.as_ref().map(<fidl::encoding::Vector<fidl_fuchsia_net_common::Ipv6Address, 32> as fidl::encoding::ValueTypeMarker>::borrow),
29192            encoder, offset + cur_offset, depth
29193        )?;
29194
29195            _prev_end_offset = cur_offset + envelope_size;
29196            if 37 > max_ordinal {
29197                return Ok(());
29198            }
29199
29200            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
29201            // are envelope_size bytes.
29202            let cur_offset: usize = (37 - 1) * envelope_size;
29203
29204            // Zero reserved fields.
29205            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
29206
29207            // Safety:
29208            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
29209            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
29210            //   envelope_size bytes, there is always sufficient room.
29211            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<BorderRoutingPrefixTable, 64>, D>(
29212            self.border_routing_prefixes.as_ref().map(<fidl::encoding::Vector<BorderRoutingPrefixTable, 64> as fidl::encoding::ValueTypeMarker>::borrow),
29213            encoder, offset + cur_offset, depth
29214        )?;
29215
29216            _prev_end_offset = cur_offset + envelope_size;
29217            if 38 > max_ordinal {
29218                return Ok(());
29219            }
29220
29221            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
29222            // are envelope_size bytes.
29223            let cur_offset: usize = (38 - 1) * envelope_size;
29224
29225            // Zero reserved fields.
29226            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
29227
29228            // Safety:
29229            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
29230            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
29231            //   envelope_size bytes, there is always sufficient room.
29232            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<BorderRoutingRdnss, 64>, D>(
29233            self.border_routing_rdnsses.as_ref().map(<fidl::encoding::Vector<BorderRoutingRdnss, 64> as fidl::encoding::ValueTypeMarker>::borrow),
29234            encoder, offset + cur_offset, depth
29235        )?;
29236
29237            _prev_end_offset = cur_offset + envelope_size;
29238            if 39 > max_ordinal {
29239                return Ok(());
29240            }
29241
29242            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
29243            // are envelope_size bytes.
29244            let cur_offset: usize = (39 - 1) * envelope_size;
29245
29246            // Zero reserved fields.
29247            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
29248
29249            // Safety:
29250            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
29251            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
29252            //   envelope_size bytes, there is always sufficient room.
29253            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<UdpSocket, 32>, D>(
29254            self.netstat.as_ref().map(<fidl::encoding::Vector<UdpSocket, 32> as fidl::encoding::ValueTypeMarker>::borrow),
29255            encoder, offset + cur_offset, depth
29256        )?;
29257
29258            _prev_end_offset = cur_offset + envelope_size;
29259            if 40 > max_ordinal {
29260                return Ok(());
29261            }
29262
29263            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
29264            // are envelope_size bytes.
29265            let cur_offset: usize = (40 - 1) * envelope_size;
29266
29267            // Zero reserved fields.
29268            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
29269
29270            // Safety:
29271            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
29272            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
29273            //   envelope_size bytes, there is always sufficient room.
29274            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<EidCacheEntry, 64>, D>(
29275            self.eid_cache_entries.as_ref().map(<fidl::encoding::Vector<EidCacheEntry, 64> as fidl::encoding::ValueTypeMarker>::borrow),
29276            encoder, offset + cur_offset, depth
29277        )?;
29278
29279            _prev_end_offset = cur_offset + envelope_size;
29280            if 41 > max_ordinal {
29281                return Ok(());
29282            }
29283
29284            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
29285            // are envelope_size bytes.
29286            let cur_offset: usize = (41 - 1) * envelope_size;
29287
29288            // Zero reserved fields.
29289            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
29290
29291            // Safety:
29292            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
29293            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
29294            //   envelope_size bytes, there is always sufficient room.
29295            fidl::encoding::encode_in_envelope_optional::<i8, D>(
29296                self.cca_threshold.as_ref().map(<i8 as fidl::encoding::ValueTypeMarker>::borrow),
29297                encoder,
29298                offset + cur_offset,
29299                depth,
29300            )?;
29301
29302            _prev_end_offset = cur_offset + envelope_size;
29303            if 42 > max_ordinal {
29304                return Ok(());
29305            }
29306
29307            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
29308            // are envelope_size bytes.
29309            let cur_offset: usize = (42 - 1) * envelope_size;
29310
29311            // Zero reserved fields.
29312            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
29313
29314            // Safety:
29315            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
29316            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
29317            //   envelope_size bytes, there is always sufficient room.
29318            fidl::encoding::encode_in_envelope_optional::<CslInfo, D>(
29319                self.csl_info.as_ref().map(<CslInfo as fidl::encoding::ValueTypeMarker>::borrow),
29320                encoder,
29321                offset + cur_offset,
29322                depth,
29323            )?;
29324
29325            _prev_end_offset = cur_offset + envelope_size;
29326            if 43 > max_ordinal {
29327                return Ok(());
29328            }
29329
29330            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
29331            // are envelope_size bytes.
29332            let cur_offset: usize = (43 - 1) * envelope_size;
29333
29334            // Zero reserved fields.
29335            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
29336
29337            // Safety:
29338            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
29339            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
29340            //   envelope_size bytes, there is always sufficient room.
29341            fidl::encoding::encode_in_envelope_optional::<BufferInfo, D>(
29342                self.buffer_info
29343                    .as_ref()
29344                    .map(<BufferInfo as fidl::encoding::ValueTypeMarker>::borrow),
29345                encoder,
29346                offset + cur_offset,
29347                depth,
29348            )?;
29349
29350            _prev_end_offset = cur_offset + envelope_size;
29351            if 44 > max_ordinal {
29352                return Ok(());
29353            }
29354
29355            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
29356            // are envelope_size bytes.
29357            let cur_offset: usize = (44 - 1) * envelope_size;
29358
29359            // Zero reserved fields.
29360            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
29361
29362            // Safety:
29363            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
29364            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
29365            //   envelope_size bytes, there is always sufficient room.
29366            fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_lowpan_device_common::MleCounters, D>(
29367            self.mle_counters.as_ref().map(<fidl_fuchsia_lowpan_device_common::MleCounters as fidl::encoding::ValueTypeMarker>::borrow),
29368            encoder, offset + cur_offset, depth
29369        )?;
29370
29371            _prev_end_offset = cur_offset + envelope_size;
29372
29373            Ok(())
29374        }
29375    }
29376
29377    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Telemetry {
29378        #[inline(always)]
29379        fn new_empty() -> Self {
29380            Self::default()
29381        }
29382
29383        unsafe fn decode(
29384            &mut self,
29385            decoder: &mut fidl::encoding::Decoder<'_, D>,
29386            offset: usize,
29387            mut depth: fidl::encoding::Depth,
29388        ) -> fidl::Result<()> {
29389            decoder.debug_check_bounds::<Self>(offset);
29390            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
29391                None => return Err(fidl::Error::NotNullable),
29392                Some(len) => len,
29393            };
29394            // Calling decoder.out_of_line_offset(0) is not allowed.
29395            if len == 0 {
29396                return Ok(());
29397            };
29398            depth.increment()?;
29399            let envelope_size = 8;
29400            let bytes_len = len * envelope_size;
29401            let offset = decoder.out_of_line_offset(bytes_len)?;
29402            // Decode the envelope for each type.
29403            let mut _next_ordinal_to_read = 0;
29404            let mut next_offset = offset;
29405            let end_offset = offset + bytes_len;
29406            _next_ordinal_to_read += 1;
29407            if next_offset >= end_offset {
29408                return Ok(());
29409            }
29410
29411            // Decode unknown envelopes for gaps in ordinals.
29412            while _next_ordinal_to_read < 1 {
29413                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
29414                _next_ordinal_to_read += 1;
29415                next_offset += envelope_size;
29416            }
29417
29418            let next_out_of_line = decoder.next_out_of_line();
29419            let handles_before = decoder.remaining_handles();
29420            if let Some((inlined, num_bytes, num_handles)) =
29421                fidl::encoding::decode_envelope_header(decoder, next_offset)?
29422            {
29423                let member_inline_size =
29424                    <i8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
29425                if inlined != (member_inline_size <= 4) {
29426                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
29427                }
29428                let inner_offset;
29429                let mut inner_depth = depth.clone();
29430                if inlined {
29431                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
29432                    inner_offset = next_offset;
29433                } else {
29434                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
29435                    inner_depth.increment()?;
29436                }
29437                let val_ref = self.rssi.get_or_insert_with(|| fidl::new_empty!(i8, D));
29438                fidl::decode!(i8, D, val_ref, decoder, inner_offset, inner_depth)?;
29439                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
29440                {
29441                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
29442                }
29443                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
29444                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
29445                }
29446            }
29447
29448            next_offset += envelope_size;
29449            _next_ordinal_to_read += 1;
29450            if next_offset >= end_offset {
29451                return Ok(());
29452            }
29453
29454            // Decode unknown envelopes for gaps in ordinals.
29455            while _next_ordinal_to_read < 2 {
29456                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
29457                _next_ordinal_to_read += 1;
29458                next_offset += envelope_size;
29459            }
29460
29461            let next_out_of_line = decoder.next_out_of_line();
29462            let handles_before = decoder.remaining_handles();
29463            if let Some((inlined, num_bytes, num_handles)) =
29464                fidl::encoding::decode_envelope_header(decoder, next_offset)?
29465            {
29466                let member_inline_size =
29467                    <i8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
29468                if inlined != (member_inline_size <= 4) {
29469                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
29470                }
29471                let inner_offset;
29472                let mut inner_depth = depth.clone();
29473                if inlined {
29474                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
29475                    inner_offset = next_offset;
29476                } else {
29477                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
29478                    inner_depth.increment()?;
29479                }
29480                let val_ref = self.tx_power.get_or_insert_with(|| fidl::new_empty!(i8, D));
29481                fidl::decode!(i8, D, val_ref, decoder, inner_offset, inner_depth)?;
29482                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
29483                {
29484                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
29485                }
29486                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
29487                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
29488                }
29489            }
29490
29491            next_offset += envelope_size;
29492            _next_ordinal_to_read += 1;
29493            if next_offset >= end_offset {
29494                return Ok(());
29495            }
29496
29497            // Decode unknown envelopes for gaps in ordinals.
29498            while _next_ordinal_to_read < 3 {
29499                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
29500                _next_ordinal_to_read += 1;
29501                next_offset += envelope_size;
29502            }
29503
29504            let next_out_of_line = decoder.next_out_of_line();
29505            let handles_before = decoder.remaining_handles();
29506            if let Some((inlined, num_bytes, num_handles)) =
29507                fidl::encoding::decode_envelope_header(decoder, next_offset)?
29508            {
29509                let member_inline_size =
29510                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
29511                if inlined != (member_inline_size <= 4) {
29512                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
29513                }
29514                let inner_offset;
29515                let mut inner_depth = depth.clone();
29516                if inlined {
29517                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
29518                    inner_offset = next_offset;
29519                } else {
29520                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
29521                    inner_depth.increment()?;
29522                }
29523                let val_ref = self.channel_index.get_or_insert_with(|| fidl::new_empty!(u16, D));
29524                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
29525                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
29526                {
29527                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
29528                }
29529                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
29530                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
29531                }
29532            }
29533
29534            next_offset += envelope_size;
29535            _next_ordinal_to_read += 1;
29536            if next_offset >= end_offset {
29537                return Ok(());
29538            }
29539
29540            // Decode unknown envelopes for gaps in ordinals.
29541            while _next_ordinal_to_read < 4 {
29542                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
29543                _next_ordinal_to_read += 1;
29544                next_offset += envelope_size;
29545            }
29546
29547            let next_out_of_line = decoder.next_out_of_line();
29548            let handles_before = decoder.remaining_handles();
29549            if let Some((inlined, num_bytes, num_handles)) =
29550                fidl::encoding::decode_envelope_header(decoder, next_offset)?
29551            {
29552                let member_inline_size =
29553                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
29554                if inlined != (member_inline_size <= 4) {
29555                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
29556                }
29557                let inner_offset;
29558                let mut inner_depth = depth.clone();
29559                if inlined {
29560                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
29561                    inner_offset = next_offset;
29562                } else {
29563                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
29564                    inner_depth.increment()?;
29565                }
29566                let val_ref = self.partition_id.get_or_insert_with(|| fidl::new_empty!(u32, D));
29567                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
29568                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
29569                {
29570                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
29571                }
29572                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
29573                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
29574                }
29575            }
29576
29577            next_offset += envelope_size;
29578            _next_ordinal_to_read += 1;
29579            if next_offset >= end_offset {
29580                return Ok(());
29581            }
29582
29583            // Decode unknown envelopes for gaps in ordinals.
29584            while _next_ordinal_to_read < 5 {
29585                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
29586                _next_ordinal_to_read += 1;
29587                next_offset += envelope_size;
29588            }
29589
29590            let next_out_of_line = decoder.next_out_of_line();
29591            let handles_before = decoder.remaining_handles();
29592            if let Some((inlined, num_bytes, num_handles)) =
29593                fidl::encoding::decode_envelope_header(decoder, next_offset)?
29594            {
29595                let member_inline_size =
29596                    <fidl::encoding::BoundedString<256> as fidl::encoding::TypeMarker>::inline_size(
29597                        decoder.context,
29598                    );
29599                if inlined != (member_inline_size <= 4) {
29600                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
29601                }
29602                let inner_offset;
29603                let mut inner_depth = depth.clone();
29604                if inlined {
29605                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
29606                    inner_offset = next_offset;
29607                } else {
29608                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
29609                    inner_depth.increment()?;
29610                }
29611                let val_ref = self
29612                    .stack_version
29613                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<256>, D));
29614                fidl::decode!(
29615                    fidl::encoding::BoundedString<256>,
29616                    D,
29617                    val_ref,
29618                    decoder,
29619                    inner_offset,
29620                    inner_depth
29621                )?;
29622                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
29623                {
29624                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
29625                }
29626                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
29627                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
29628                }
29629            }
29630
29631            next_offset += envelope_size;
29632            _next_ordinal_to_read += 1;
29633            if next_offset >= end_offset {
29634                return Ok(());
29635            }
29636
29637            // Decode unknown envelopes for gaps in ordinals.
29638            while _next_ordinal_to_read < 6 {
29639                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
29640                _next_ordinal_to_read += 1;
29641                next_offset += envelope_size;
29642            }
29643
29644            let next_out_of_line = decoder.next_out_of_line();
29645            let handles_before = decoder.remaining_handles();
29646            if let Some((inlined, num_bytes, num_handles)) =
29647                fidl::encoding::decode_envelope_header(decoder, next_offset)?
29648            {
29649                let member_inline_size =
29650                    <fidl::encoding::BoundedString<256> as fidl::encoding::TypeMarker>::inline_size(
29651                        decoder.context,
29652                    );
29653                if inlined != (member_inline_size <= 4) {
29654                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
29655                }
29656                let inner_offset;
29657                let mut inner_depth = depth.clone();
29658                if inlined {
29659                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
29660                    inner_offset = next_offset;
29661                } else {
29662                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
29663                    inner_depth.increment()?;
29664                }
29665                let val_ref = self
29666                    .rcp_version
29667                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<256>, D));
29668                fidl::decode!(
29669                    fidl::encoding::BoundedString<256>,
29670                    D,
29671                    val_ref,
29672                    decoder,
29673                    inner_offset,
29674                    inner_depth
29675                )?;
29676                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
29677                {
29678                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
29679                }
29680                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
29681                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
29682                }
29683            }
29684
29685            next_offset += envelope_size;
29686            _next_ordinal_to_read += 1;
29687            if next_offset >= end_offset {
29688                return Ok(());
29689            }
29690
29691            // Decode unknown envelopes for gaps in ordinals.
29692            while _next_ordinal_to_read < 7 {
29693                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
29694                _next_ordinal_to_read += 1;
29695                next_offset += envelope_size;
29696            }
29697
29698            let next_out_of_line = decoder.next_out_of_line();
29699            let handles_before = decoder.remaining_handles();
29700            if let Some((inlined, num_bytes, num_handles)) =
29701                fidl::encoding::decode_envelope_header(decoder, next_offset)?
29702            {
29703                let member_inline_size =
29704                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
29705                if inlined != (member_inline_size <= 4) {
29706                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
29707                }
29708                let inner_offset;
29709                let mut inner_depth = depth.clone();
29710                if inlined {
29711                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
29712                    inner_offset = next_offset;
29713                } else {
29714                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
29715                    inner_depth.increment()?;
29716                }
29717                let val_ref = self.thread_link_mode.get_or_insert_with(|| fidl::new_empty!(u8, D));
29718                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
29719                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
29720                {
29721                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
29722                }
29723                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
29724                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
29725                }
29726            }
29727
29728            next_offset += envelope_size;
29729            _next_ordinal_to_read += 1;
29730            if next_offset >= end_offset {
29731                return Ok(());
29732            }
29733
29734            // Decode unknown envelopes for gaps in ordinals.
29735            while _next_ordinal_to_read < 8 {
29736                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
29737                _next_ordinal_to_read += 1;
29738                next_offset += envelope_size;
29739            }
29740
29741            let next_out_of_line = decoder.next_out_of_line();
29742            let handles_before = decoder.remaining_handles();
29743            if let Some((inlined, num_bytes, num_handles)) =
29744                fidl::encoding::decode_envelope_header(decoder, next_offset)?
29745            {
29746                let member_inline_size =
29747                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
29748                if inlined != (member_inline_size <= 4) {
29749                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
29750                }
29751                let inner_offset;
29752                let mut inner_depth = depth.clone();
29753                if inlined {
29754                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
29755                    inner_offset = next_offset;
29756                } else {
29757                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
29758                    inner_depth.increment()?;
29759                }
29760                let val_ref = self.thread_router_id.get_or_insert_with(|| fidl::new_empty!(u8, D));
29761                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
29762                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
29763                {
29764                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
29765                }
29766                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
29767                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
29768                }
29769            }
29770
29771            next_offset += envelope_size;
29772            _next_ordinal_to_read += 1;
29773            if next_offset >= end_offset {
29774                return Ok(());
29775            }
29776
29777            // Decode unknown envelopes for gaps in ordinals.
29778            while _next_ordinal_to_read < 9 {
29779                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
29780                _next_ordinal_to_read += 1;
29781                next_offset += envelope_size;
29782            }
29783
29784            let next_out_of_line = decoder.next_out_of_line();
29785            let handles_before = decoder.remaining_handles();
29786            if let Some((inlined, num_bytes, num_handles)) =
29787                fidl::encoding::decode_envelope_header(decoder, next_offset)?
29788            {
29789                let member_inline_size =
29790                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
29791                if inlined != (member_inline_size <= 4) {
29792                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
29793                }
29794                let inner_offset;
29795                let mut inner_depth = depth.clone();
29796                if inlined {
29797                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
29798                    inner_offset = next_offset;
29799                } else {
29800                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
29801                    inner_depth.increment()?;
29802                }
29803                let val_ref = self.thread_rloc.get_or_insert_with(|| fidl::new_empty!(u16, D));
29804                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
29805                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
29806                {
29807                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
29808                }
29809                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
29810                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
29811                }
29812            }
29813
29814            next_offset += envelope_size;
29815            _next_ordinal_to_read += 1;
29816            if next_offset >= end_offset {
29817                return Ok(());
29818            }
29819
29820            // Decode unknown envelopes for gaps in ordinals.
29821            while _next_ordinal_to_read < 10 {
29822                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
29823                _next_ordinal_to_read += 1;
29824                next_offset += envelope_size;
29825            }
29826
29827            let next_out_of_line = decoder.next_out_of_line();
29828            let handles_before = decoder.remaining_handles();
29829            if let Some((inlined, num_bytes, num_handles)) =
29830                fidl::encoding::decode_envelope_header(decoder, next_offset)?
29831            {
29832                let member_inline_size =
29833                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
29834                if inlined != (member_inline_size <= 4) {
29835                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
29836                }
29837                let inner_offset;
29838                let mut inner_depth = depth.clone();
29839                if inlined {
29840                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
29841                    inner_offset = next_offset;
29842                } else {
29843                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
29844                    inner_depth.increment()?;
29845                }
29846                let val_ref =
29847                    self.thread_network_data_version.get_or_insert_with(|| fidl::new_empty!(u8, D));
29848                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
29849                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
29850                {
29851                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
29852                }
29853                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
29854                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
29855                }
29856            }
29857
29858            next_offset += envelope_size;
29859            _next_ordinal_to_read += 1;
29860            if next_offset >= end_offset {
29861                return Ok(());
29862            }
29863
29864            // Decode unknown envelopes for gaps in ordinals.
29865            while _next_ordinal_to_read < 11 {
29866                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
29867                _next_ordinal_to_read += 1;
29868                next_offset += envelope_size;
29869            }
29870
29871            let next_out_of_line = decoder.next_out_of_line();
29872            let handles_before = decoder.remaining_handles();
29873            if let Some((inlined, num_bytes, num_handles)) =
29874                fidl::encoding::decode_envelope_header(decoder, next_offset)?
29875            {
29876                let member_inline_size =
29877                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
29878                if inlined != (member_inline_size <= 4) {
29879                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
29880                }
29881                let inner_offset;
29882                let mut inner_depth = depth.clone();
29883                if inlined {
29884                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
29885                    inner_offset = next_offset;
29886                } else {
29887                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
29888                    inner_depth.increment()?;
29889                }
29890                let val_ref = self
29891                    .thread_stable_network_data_version
29892                    .get_or_insert_with(|| fidl::new_empty!(u8, D));
29893                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
29894                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
29895                {
29896                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
29897                }
29898                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
29899                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
29900                }
29901            }
29902
29903            next_offset += envelope_size;
29904            _next_ordinal_to_read += 1;
29905            if next_offset >= end_offset {
29906                return Ok(());
29907            }
29908
29909            // Decode unknown envelopes for gaps in ordinals.
29910            while _next_ordinal_to_read < 12 {
29911                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
29912                _next_ordinal_to_read += 1;
29913                next_offset += envelope_size;
29914            }
29915
29916            let next_out_of_line = decoder.next_out_of_line();
29917            let handles_before = decoder.remaining_handles();
29918            if let Some((inlined, num_bytes, num_handles)) =
29919                fidl::encoding::decode_envelope_header(decoder, next_offset)?
29920            {
29921                let member_inline_size =
29922                    <fidl::encoding::Vector<u8, 255> as fidl::encoding::TypeMarker>::inline_size(
29923                        decoder.context,
29924                    );
29925                if inlined != (member_inline_size <= 4) {
29926                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
29927                }
29928                let inner_offset;
29929                let mut inner_depth = depth.clone();
29930                if inlined {
29931                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
29932                    inner_offset = next_offset;
29933                } else {
29934                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
29935                    inner_depth.increment()?;
29936                }
29937                let val_ref = self
29938                    .thread_network_data
29939                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u8, 255>, D));
29940                fidl::decode!(fidl::encoding::Vector<u8, 255>, D, val_ref, decoder, inner_offset, inner_depth)?;
29941                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
29942                {
29943                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
29944                }
29945                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
29946                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
29947                }
29948            }
29949
29950            next_offset += envelope_size;
29951            _next_ordinal_to_read += 1;
29952            if next_offset >= end_offset {
29953                return Ok(());
29954            }
29955
29956            // Decode unknown envelopes for gaps in ordinals.
29957            while _next_ordinal_to_read < 13 {
29958                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
29959                _next_ordinal_to_read += 1;
29960                next_offset += envelope_size;
29961            }
29962
29963            let next_out_of_line = decoder.next_out_of_line();
29964            let handles_before = decoder.remaining_handles();
29965            if let Some((inlined, num_bytes, num_handles)) =
29966                fidl::encoding::decode_envelope_header(decoder, next_offset)?
29967            {
29968                let member_inline_size =
29969                    <fidl::encoding::Vector<u8, 255> as fidl::encoding::TypeMarker>::inline_size(
29970                        decoder.context,
29971                    );
29972                if inlined != (member_inline_size <= 4) {
29973                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
29974                }
29975                let inner_offset;
29976                let mut inner_depth = depth.clone();
29977                if inlined {
29978                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
29979                    inner_offset = next_offset;
29980                } else {
29981                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
29982                    inner_depth.increment()?;
29983                }
29984                let val_ref = self
29985                    .thread_stable_network_data
29986                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u8, 255>, D));
29987                fidl::decode!(fidl::encoding::Vector<u8, 255>, D, val_ref, decoder, inner_offset, inner_depth)?;
29988                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
29989                {
29990                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
29991                }
29992                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
29993                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
29994                }
29995            }
29996
29997            next_offset += envelope_size;
29998            _next_ordinal_to_read += 1;
29999            if next_offset >= end_offset {
30000                return Ok(());
30001            }
30002
30003            // Decode unknown envelopes for gaps in ordinals.
30004            while _next_ordinal_to_read < 14 {
30005                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
30006                _next_ordinal_to_read += 1;
30007                next_offset += envelope_size;
30008            }
30009
30010            let next_out_of_line = decoder.next_out_of_line();
30011            let handles_before = decoder.remaining_handles();
30012            if let Some((inlined, num_bytes, num_handles)) =
30013                fidl::encoding::decode_envelope_header(decoder, next_offset)?
30014            {
30015                let member_inline_size =
30016                    <BorderRoutingCounters as fidl::encoding::TypeMarker>::inline_size(
30017                        decoder.context,
30018                    );
30019                if inlined != (member_inline_size <= 4) {
30020                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
30021                }
30022                let inner_offset;
30023                let mut inner_depth = depth.clone();
30024                if inlined {
30025                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
30026                    inner_offset = next_offset;
30027                } else {
30028                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
30029                    inner_depth.increment()?;
30030                }
30031                let val_ref = self
30032                    .thread_border_routing_counters
30033                    .get_or_insert_with(|| fidl::new_empty!(BorderRoutingCounters, D));
30034                fidl::decode!(
30035                    BorderRoutingCounters,
30036                    D,
30037                    val_ref,
30038                    decoder,
30039                    inner_offset,
30040                    inner_depth
30041                )?;
30042                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
30043                {
30044                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
30045                }
30046                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
30047                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
30048                }
30049            }
30050
30051            next_offset += envelope_size;
30052            _next_ordinal_to_read += 1;
30053            if next_offset >= end_offset {
30054                return Ok(());
30055            }
30056
30057            // Decode unknown envelopes for gaps in ordinals.
30058            while _next_ordinal_to_read < 15 {
30059                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
30060                _next_ordinal_to_read += 1;
30061                next_offset += envelope_size;
30062            }
30063
30064            let next_out_of_line = decoder.next_out_of_line();
30065            let handles_before = decoder.remaining_handles();
30066            if let Some((inlined, num_bytes, num_handles)) =
30067                fidl::encoding::decode_envelope_header(decoder, next_offset)?
30068            {
30069                let member_inline_size =
30070                    <SrpServerInfo as fidl::encoding::TypeMarker>::inline_size(decoder.context);
30071                if inlined != (member_inline_size <= 4) {
30072                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
30073                }
30074                let inner_offset;
30075                let mut inner_depth = depth.clone();
30076                if inlined {
30077                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
30078                    inner_offset = next_offset;
30079                } else {
30080                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
30081                    inner_depth.increment()?;
30082                }
30083                let val_ref =
30084                    self.srp_server_info.get_or_insert_with(|| fidl::new_empty!(SrpServerInfo, D));
30085                fidl::decode!(SrpServerInfo, D, val_ref, decoder, inner_offset, inner_depth)?;
30086                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
30087                {
30088                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
30089                }
30090                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
30091                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
30092                }
30093            }
30094
30095            next_offset += envelope_size;
30096            _next_ordinal_to_read += 1;
30097            if next_offset >= end_offset {
30098                return Ok(());
30099            }
30100
30101            // Decode unknown envelopes for gaps in ordinals.
30102            while _next_ordinal_to_read < 16 {
30103                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
30104                _next_ordinal_to_read += 1;
30105                next_offset += envelope_size;
30106            }
30107
30108            let next_out_of_line = decoder.next_out_of_line();
30109            let handles_before = decoder.remaining_handles();
30110            if let Some((inlined, num_bytes, num_handles)) =
30111                fidl::encoding::decode_envelope_header(decoder, next_offset)?
30112            {
30113                let member_inline_size =
30114                    <DnssdCounters as fidl::encoding::TypeMarker>::inline_size(decoder.context);
30115                if inlined != (member_inline_size <= 4) {
30116                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
30117                }
30118                let inner_offset;
30119                let mut inner_depth = depth.clone();
30120                if inlined {
30121                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
30122                    inner_offset = next_offset;
30123                } else {
30124                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
30125                    inner_depth.increment()?;
30126                }
30127                let val_ref =
30128                    self.dnssd_counters.get_or_insert_with(|| fidl::new_empty!(DnssdCounters, D));
30129                fidl::decode!(DnssdCounters, D, val_ref, decoder, inner_offset, inner_depth)?;
30130                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
30131                {
30132                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
30133                }
30134                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
30135                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
30136                }
30137            }
30138
30139            next_offset += envelope_size;
30140            _next_ordinal_to_read += 1;
30141            if next_offset >= end_offset {
30142                return Ok(());
30143            }
30144
30145            // Decode unknown envelopes for gaps in ordinals.
30146            while _next_ordinal_to_read < 17 {
30147                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
30148                _next_ordinal_to_read += 1;
30149                next_offset += envelope_size;
30150            }
30151
30152            let next_out_of_line = decoder.next_out_of_line();
30153            let handles_before = decoder.remaining_handles();
30154            if let Some((inlined, num_bytes, num_handles)) =
30155                fidl::encoding::decode_envelope_header(decoder, next_offset)?
30156            {
30157                let member_inline_size =
30158                    <LeaderData as fidl::encoding::TypeMarker>::inline_size(decoder.context);
30159                if inlined != (member_inline_size <= 4) {
30160                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
30161                }
30162                let inner_offset;
30163                let mut inner_depth = depth.clone();
30164                if inlined {
30165                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
30166                    inner_offset = next_offset;
30167                } else {
30168                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
30169                    inner_depth.increment()?;
30170                }
30171                let val_ref =
30172                    self.leader_data.get_or_insert_with(|| fidl::new_empty!(LeaderData, D));
30173                fidl::decode!(LeaderData, D, val_ref, decoder, inner_offset, inner_depth)?;
30174                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
30175                {
30176                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
30177                }
30178                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
30179                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
30180                }
30181            }
30182
30183            next_offset += envelope_size;
30184            _next_ordinal_to_read += 1;
30185            if next_offset >= end_offset {
30186                return Ok(());
30187            }
30188
30189            // Decode unknown envelopes for gaps in ordinals.
30190            while _next_ordinal_to_read < 18 {
30191                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
30192                _next_ordinal_to_read += 1;
30193                next_offset += envelope_size;
30194            }
30195
30196            let next_out_of_line = decoder.next_out_of_line();
30197            let handles_before = decoder.remaining_handles();
30198            if let Some((inlined, num_bytes, num_handles)) =
30199                fidl::encoding::decode_envelope_header(decoder, next_offset)?
30200            {
30201                let member_inline_size =
30202                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
30203                if inlined != (member_inline_size <= 4) {
30204                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
30205                }
30206                let inner_offset;
30207                let mut inner_depth = depth.clone();
30208                if inlined {
30209                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
30210                    inner_offset = next_offset;
30211                } else {
30212                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
30213                    inner_depth.increment()?;
30214                }
30215                let val_ref = self.uptime.get_or_insert_with(|| fidl::new_empty!(i64, D));
30216                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
30217                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
30218                {
30219                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
30220                }
30221                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
30222                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
30223                }
30224            }
30225
30226            next_offset += envelope_size;
30227            _next_ordinal_to_read += 1;
30228            if next_offset >= end_offset {
30229                return Ok(());
30230            }
30231
30232            // Decode unknown envelopes for gaps in ordinals.
30233            while _next_ordinal_to_read < 19 {
30234                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
30235                _next_ordinal_to_read += 1;
30236                next_offset += envelope_size;
30237            }
30238
30239            let next_out_of_line = decoder.next_out_of_line();
30240            let handles_before = decoder.remaining_handles();
30241            if let Some((inlined, num_bytes, num_handles)) =
30242                fidl::encoding::decode_envelope_header(decoder, next_offset)?
30243            {
30244                let member_inline_size =
30245                    <Nat64Info as fidl::encoding::TypeMarker>::inline_size(decoder.context);
30246                if inlined != (member_inline_size <= 4) {
30247                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
30248                }
30249                let inner_offset;
30250                let mut inner_depth = depth.clone();
30251                if inlined {
30252                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
30253                    inner_offset = next_offset;
30254                } else {
30255                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
30256                    inner_depth.increment()?;
30257                }
30258                let val_ref = self.nat64_info.get_or_insert_with(|| fidl::new_empty!(Nat64Info, D));
30259                fidl::decode!(Nat64Info, D, val_ref, decoder, inner_offset, inner_depth)?;
30260                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
30261                {
30262                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
30263                }
30264                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
30265                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
30266                }
30267            }
30268
30269            next_offset += envelope_size;
30270            _next_ordinal_to_read += 1;
30271            if next_offset >= end_offset {
30272                return Ok(());
30273            }
30274
30275            // Decode unknown envelopes for gaps in ordinals.
30276            while _next_ordinal_to_read < 20 {
30277                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
30278                _next_ordinal_to_read += 1;
30279                next_offset += envelope_size;
30280            }
30281
30282            let next_out_of_line = decoder.next_out_of_line();
30283            let handles_before = decoder.remaining_handles();
30284            if let Some((inlined, num_bytes, num_handles)) =
30285                fidl::encoding::decode_envelope_header(decoder, next_offset)?
30286            {
30287                let member_inline_size =
30288                    <TrelCounters as fidl::encoding::TypeMarker>::inline_size(decoder.context);
30289                if inlined != (member_inline_size <= 4) {
30290                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
30291                }
30292                let inner_offset;
30293                let mut inner_depth = depth.clone();
30294                if inlined {
30295                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
30296                    inner_offset = next_offset;
30297                } else {
30298                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
30299                    inner_depth.increment()?;
30300                }
30301                let val_ref =
30302                    self.trel_counters.get_or_insert_with(|| fidl::new_empty!(TrelCounters, D));
30303                fidl::decode!(TrelCounters, D, val_ref, decoder, inner_offset, inner_depth)?;
30304                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
30305                {
30306                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
30307                }
30308                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
30309                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
30310                }
30311            }
30312
30313            next_offset += envelope_size;
30314            _next_ordinal_to_read += 1;
30315            if next_offset >= end_offset {
30316                return Ok(());
30317            }
30318
30319            // Decode unknown envelopes for gaps in ordinals.
30320            while _next_ordinal_to_read < 21 {
30321                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
30322                _next_ordinal_to_read += 1;
30323                next_offset += envelope_size;
30324            }
30325
30326            let next_out_of_line = decoder.next_out_of_line();
30327            let handles_before = decoder.remaining_handles();
30328            if let Some((inlined, num_bytes, num_handles)) =
30329                fidl::encoding::decode_envelope_header(decoder, next_offset)?
30330            {
30331                let member_inline_size =
30332                    <TrelPeersInfo as fidl::encoding::TypeMarker>::inline_size(decoder.context);
30333                if inlined != (member_inline_size <= 4) {
30334                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
30335                }
30336                let inner_offset;
30337                let mut inner_depth = depth.clone();
30338                if inlined {
30339                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
30340                    inner_offset = next_offset;
30341                } else {
30342                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
30343                    inner_depth.increment()?;
30344                }
30345                let val_ref =
30346                    self.trel_peers_info.get_or_insert_with(|| fidl::new_empty!(TrelPeersInfo, D));
30347                fidl::decode!(TrelPeersInfo, D, val_ref, decoder, inner_offset, inner_depth)?;
30348                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
30349                {
30350                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
30351                }
30352                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
30353                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
30354                }
30355            }
30356
30357            next_offset += envelope_size;
30358            _next_ordinal_to_read += 1;
30359            if next_offset >= end_offset {
30360                return Ok(());
30361            }
30362
30363            // Decode unknown envelopes for gaps in ordinals.
30364            while _next_ordinal_to_read < 22 {
30365                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
30366                _next_ordinal_to_read += 1;
30367                next_offset += envelope_size;
30368            }
30369
30370            let next_out_of_line = decoder.next_out_of_line();
30371            let handles_before = decoder.remaining_handles();
30372            if let Some((inlined, num_bytes, num_handles)) =
30373                fidl::encoding::decode_envelope_header(decoder, next_offset)?
30374            {
30375                let member_inline_size =
30376                    <UpstreamDnsInfo as fidl::encoding::TypeMarker>::inline_size(decoder.context);
30377                if inlined != (member_inline_size <= 4) {
30378                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
30379                }
30380                let inner_offset;
30381                let mut inner_depth = depth.clone();
30382                if inlined {
30383                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
30384                    inner_offset = next_offset;
30385                } else {
30386                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
30387                    inner_depth.increment()?;
30388                }
30389                let val_ref = self
30390                    .upstream_dns_info
30391                    .get_or_insert_with(|| fidl::new_empty!(UpstreamDnsInfo, D));
30392                fidl::decode!(UpstreamDnsInfo, D, val_ref, decoder, inner_offset, inner_depth)?;
30393                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
30394                {
30395                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
30396                }
30397                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
30398                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
30399                }
30400            }
30401
30402            next_offset += envelope_size;
30403            _next_ordinal_to_read += 1;
30404            if next_offset >= end_offset {
30405                return Ok(());
30406            }
30407
30408            // Decode unknown envelopes for gaps in ordinals.
30409            while _next_ordinal_to_read < 23 {
30410                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
30411                _next_ordinal_to_read += 1;
30412                next_offset += envelope_size;
30413            }
30414
30415            let next_out_of_line = decoder.next_out_of_line();
30416            let handles_before = decoder.remaining_handles();
30417            if let Some((inlined, num_bytes, num_handles)) =
30418                fidl::encoding::decode_envelope_header(decoder, next_offset)?
30419            {
30420                let member_inline_size =
30421                    <Dhcp6PdInfo as fidl::encoding::TypeMarker>::inline_size(decoder.context);
30422                if inlined != (member_inline_size <= 4) {
30423                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
30424                }
30425                let inner_offset;
30426                let mut inner_depth = depth.clone();
30427                if inlined {
30428                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
30429                    inner_offset = next_offset;
30430                } else {
30431                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
30432                    inner_depth.increment()?;
30433                }
30434                let val_ref =
30435                    self.dhcp6pd_info.get_or_insert_with(|| fidl::new_empty!(Dhcp6PdInfo, D));
30436                fidl::decode!(Dhcp6PdInfo, D, val_ref, decoder, inner_offset, inner_depth)?;
30437                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
30438                {
30439                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
30440                }
30441                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
30442                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
30443                }
30444            }
30445
30446            next_offset += envelope_size;
30447            _next_ordinal_to_read += 1;
30448            if next_offset >= end_offset {
30449                return Ok(());
30450            }
30451
30452            // Decode unknown envelopes for gaps in ordinals.
30453            while _next_ordinal_to_read < 24 {
30454                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
30455                _next_ordinal_to_read += 1;
30456                next_offset += envelope_size;
30457            }
30458
30459            let next_out_of_line = decoder.next_out_of_line();
30460            let handles_before = decoder.remaining_handles();
30461            if let Some((inlined, num_bytes, num_handles)) =
30462                fidl::encoding::decode_envelope_header(decoder, next_offset)?
30463            {
30464                let member_inline_size = <fidl::encoding::Vector<LinkMetricsEntry, 64> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
30465                if inlined != (member_inline_size <= 4) {
30466                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
30467                }
30468                let inner_offset;
30469                let mut inner_depth = depth.clone();
30470                if inlined {
30471                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
30472                    inner_offset = next_offset;
30473                } else {
30474                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
30475                    inner_depth.increment()?;
30476                }
30477                let val_ref = self.link_metrics_entries.get_or_insert_with(
30478                    || fidl::new_empty!(fidl::encoding::Vector<LinkMetricsEntry, 64>, D),
30479                );
30480                fidl::decode!(fidl::encoding::Vector<LinkMetricsEntry, 64>, D, val_ref, decoder, inner_offset, inner_depth)?;
30481                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
30482                {
30483                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
30484                }
30485                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
30486                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
30487                }
30488            }
30489
30490            next_offset += envelope_size;
30491            _next_ordinal_to_read += 1;
30492            if next_offset >= end_offset {
30493                return Ok(());
30494            }
30495
30496            // Decode unknown envelopes for gaps in ordinals.
30497            while _next_ordinal_to_read < 25 {
30498                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
30499                _next_ordinal_to_read += 1;
30500                next_offset += envelope_size;
30501            }
30502
30503            let next_out_of_line = decoder.next_out_of_line();
30504            let handles_before = decoder.remaining_handles();
30505            if let Some((inlined, num_bytes, num_handles)) =
30506                fidl::encoding::decode_envelope_header(decoder, next_offset)?
30507            {
30508                let member_inline_size = <fidl_fuchsia_lowpan_device_common::BorderAgentCounters as fidl::encoding::TypeMarker>::inline_size(decoder.context);
30509                if inlined != (member_inline_size <= 4) {
30510                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
30511                }
30512                let inner_offset;
30513                let mut inner_depth = depth.clone();
30514                if inlined {
30515                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
30516                    inner_offset = next_offset;
30517                } else {
30518                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
30519                    inner_depth.increment()?;
30520                }
30521                let val_ref = self.border_agent_counters.get_or_insert_with(|| {
30522                    fidl::new_empty!(fidl_fuchsia_lowpan_device_common::BorderAgentCounters, D)
30523                });
30524                fidl::decode!(
30525                    fidl_fuchsia_lowpan_device_common::BorderAgentCounters,
30526                    D,
30527                    val_ref,
30528                    decoder,
30529                    inner_offset,
30530                    inner_depth
30531                )?;
30532                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
30533                {
30534                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
30535                }
30536                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
30537                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
30538                }
30539            }
30540
30541            next_offset += envelope_size;
30542            _next_ordinal_to_read += 1;
30543            if next_offset >= end_offset {
30544                return Ok(());
30545            }
30546
30547            // Decode unknown envelopes for gaps in ordinals.
30548            while _next_ordinal_to_read < 26 {
30549                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
30550                _next_ordinal_to_read += 1;
30551                next_offset += envelope_size;
30552            }
30553
30554            let next_out_of_line = decoder.next_out_of_line();
30555            let handles_before = decoder.remaining_handles();
30556            if let Some((inlined, num_bytes, num_handles)) =
30557                fidl::encoding::decode_envelope_header(decoder, next_offset)?
30558            {
30559                let member_inline_size =
30560                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
30561                if inlined != (member_inline_size <= 4) {
30562                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
30563                }
30564                let inner_offset;
30565                let mut inner_depth = depth.clone();
30566                if inlined {
30567                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
30568                    inner_offset = next_offset;
30569                } else {
30570                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
30571                    inner_depth.increment()?;
30572                }
30573                let val_ref =
30574                    self.multi_ail_detected.get_or_insert_with(|| fidl::new_empty!(bool, D));
30575                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
30576                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
30577                {
30578                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
30579                }
30580                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
30581                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
30582                }
30583            }
30584
30585            next_offset += envelope_size;
30586            _next_ordinal_to_read += 1;
30587            if next_offset >= end_offset {
30588                return Ok(());
30589            }
30590
30591            // Decode unknown envelopes for gaps in ordinals.
30592            while _next_ordinal_to_read < 27 {
30593                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
30594                _next_ordinal_to_read += 1;
30595                next_offset += envelope_size;
30596            }
30597
30598            let next_out_of_line = decoder.next_out_of_line();
30599            let handles_before = decoder.remaining_handles();
30600            if let Some((inlined, num_bytes, num_handles)) =
30601                fidl::encoding::decode_envelope_header(decoder, next_offset)?
30602            {
30603                let member_inline_size =
30604                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
30605                if inlined != (member_inline_size <= 4) {
30606                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
30607                }
30608                let inner_offset;
30609                let mut inner_depth = depth.clone();
30610                if inlined {
30611                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
30612                    inner_offset = next_offset;
30613                } else {
30614                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
30615                    inner_depth.increment()?;
30616                }
30617                let val_ref = self.extended_pan_id.get_or_insert_with(|| fidl::new_empty!(u64, D));
30618                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
30619                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
30620                {
30621                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
30622                }
30623                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
30624                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
30625                }
30626            }
30627
30628            next_offset += envelope_size;
30629            _next_ordinal_to_read += 1;
30630            if next_offset >= end_offset {
30631                return Ok(());
30632            }
30633
30634            // Decode unknown envelopes for gaps in ordinals.
30635            while _next_ordinal_to_read < 28 {
30636                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
30637                _next_ordinal_to_read += 1;
30638                next_offset += envelope_size;
30639            }
30640
30641            let next_out_of_line = decoder.next_out_of_line();
30642            let handles_before = decoder.remaining_handles();
30643            if let Some((inlined, num_bytes, num_handles)) =
30644                fidl::encoding::decode_envelope_header(decoder, next_offset)?
30645            {
30646                let member_inline_size = <fidl::encoding::Vector<BorderRoutingPeer, 64> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
30647                if inlined != (member_inline_size <= 4) {
30648                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
30649                }
30650                let inner_offset;
30651                let mut inner_depth = depth.clone();
30652                if inlined {
30653                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
30654                    inner_offset = next_offset;
30655                } else {
30656                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
30657                    inner_depth.increment()?;
30658                }
30659                let val_ref = self.border_routing_peers.get_or_insert_with(
30660                    || fidl::new_empty!(fidl::encoding::Vector<BorderRoutingPeer, 64>, D),
30661                );
30662                fidl::decode!(fidl::encoding::Vector<BorderRoutingPeer, 64>, D, val_ref, decoder, inner_offset, inner_depth)?;
30663                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
30664                {
30665                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
30666                }
30667                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
30668                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
30669                }
30670            }
30671
30672            next_offset += envelope_size;
30673            _next_ordinal_to_read += 1;
30674            if next_offset >= end_offset {
30675                return Ok(());
30676            }
30677
30678            // Decode unknown envelopes for gaps in ordinals.
30679            while _next_ordinal_to_read < 29 {
30680                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
30681                _next_ordinal_to_read += 1;
30682                next_offset += envelope_size;
30683            }
30684
30685            let next_out_of_line = decoder.next_out_of_line();
30686            let handles_before = decoder.remaining_handles();
30687            if let Some((inlined, num_bytes, num_handles)) =
30688                fidl::encoding::decode_envelope_header(decoder, next_offset)?
30689            {
30690                let member_inline_size = <fidl::encoding::Vector<BorderRoutingRouter, 64> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
30691                if inlined != (member_inline_size <= 4) {
30692                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
30693                }
30694                let inner_offset;
30695                let mut inner_depth = depth.clone();
30696                if inlined {
30697                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
30698                    inner_offset = next_offset;
30699                } else {
30700                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
30701                    inner_depth.increment()?;
30702                }
30703                let val_ref = self.border_routing_routers.get_or_insert_with(
30704                    || fidl::new_empty!(fidl::encoding::Vector<BorderRoutingRouter, 64>, D),
30705                );
30706                fidl::decode!(fidl::encoding::Vector<BorderRoutingRouter, 64>, D, val_ref, decoder, inner_offset, inner_depth)?;
30707                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
30708                {
30709                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
30710                }
30711                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
30712                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
30713                }
30714            }
30715
30716            next_offset += envelope_size;
30717            _next_ordinal_to_read += 1;
30718            if next_offset >= end_offset {
30719                return Ok(());
30720            }
30721
30722            // Decode unknown envelopes for gaps in ordinals.
30723            while _next_ordinal_to_read < 30 {
30724                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
30725                _next_ordinal_to_read += 1;
30726                next_offset += envelope_size;
30727            }
30728
30729            let next_out_of_line = decoder.next_out_of_line();
30730            let handles_before = decoder.remaining_handles();
30731            if let Some((inlined, num_bytes, num_handles)) =
30732                fidl::encoding::decode_envelope_header(decoder, next_offset)?
30733            {
30734                let member_inline_size =
30735                    <OperationalDataset as fidl::encoding::TypeMarker>::inline_size(
30736                        decoder.context,
30737                    );
30738                if inlined != (member_inline_size <= 4) {
30739                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
30740                }
30741                let inner_offset;
30742                let mut inner_depth = depth.clone();
30743                if inlined {
30744                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
30745                    inner_offset = next_offset;
30746                } else {
30747                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
30748                    inner_depth.increment()?;
30749                }
30750                let val_ref = self
30751                    .active_dataset
30752                    .get_or_insert_with(|| fidl::new_empty!(OperationalDataset, D));
30753                fidl::decode!(OperationalDataset, D, val_ref, decoder, inner_offset, inner_depth)?;
30754                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
30755                {
30756                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
30757                }
30758                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
30759                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
30760                }
30761            }
30762
30763            next_offset += envelope_size;
30764            _next_ordinal_to_read += 1;
30765            if next_offset >= end_offset {
30766                return Ok(());
30767            }
30768
30769            // Decode unknown envelopes for gaps in ordinals.
30770            while _next_ordinal_to_read < 31 {
30771                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
30772                _next_ordinal_to_read += 1;
30773                next_offset += envelope_size;
30774            }
30775
30776            let next_out_of_line = decoder.next_out_of_line();
30777            let handles_before = decoder.remaining_handles();
30778            if let Some((inlined, num_bytes, num_handles)) =
30779                fidl::encoding::decode_envelope_header(decoder, next_offset)?
30780            {
30781                let member_inline_size = <fidl::encoding::Vector<MultiRadioNeighborInfo, 64> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
30782                if inlined != (member_inline_size <= 4) {
30783                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
30784                }
30785                let inner_offset;
30786                let mut inner_depth = depth.clone();
30787                if inlined {
30788                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
30789                    inner_offset = next_offset;
30790                } else {
30791                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
30792                    inner_depth.increment()?;
30793                }
30794                let val_ref = self.multiradio_neighbor_info.get_or_insert_with(
30795                    || fidl::new_empty!(fidl::encoding::Vector<MultiRadioNeighborInfo, 64>, D),
30796                );
30797                fidl::decode!(fidl::encoding::Vector<MultiRadioNeighborInfo, 64>, D, val_ref, decoder, inner_offset, inner_depth)?;
30798                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
30799                {
30800                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
30801                }
30802                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
30803                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
30804                }
30805            }
30806
30807            next_offset += envelope_size;
30808            _next_ordinal_to_read += 1;
30809            if next_offset >= end_offset {
30810                return Ok(());
30811            }
30812
30813            // Decode unknown envelopes for gaps in ordinals.
30814            while _next_ordinal_to_read < 32 {
30815                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
30816                _next_ordinal_to_read += 1;
30817                next_offset += envelope_size;
30818            }
30819
30820            let next_out_of_line = decoder.next_out_of_line();
30821            let handles_before = decoder.remaining_handles();
30822            if let Some((inlined, num_bytes, num_handles)) =
30823                fidl::encoding::decode_envelope_header(decoder, next_offset)?
30824            {
30825                let member_inline_size = <fidl::encoding::Vector<RouterInfo, 64> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
30826                if inlined != (member_inline_size <= 4) {
30827                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
30828                }
30829                let inner_offset;
30830                let mut inner_depth = depth.clone();
30831                if inlined {
30832                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
30833                    inner_offset = next_offset;
30834                } else {
30835                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
30836                    inner_depth.increment()?;
30837                }
30838                let val_ref = self.router_info.get_or_insert_with(
30839                    || fidl::new_empty!(fidl::encoding::Vector<RouterInfo, 64>, D),
30840                );
30841                fidl::decode!(fidl::encoding::Vector<RouterInfo, 64>, D, val_ref, decoder, inner_offset, inner_depth)?;
30842                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
30843                {
30844                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
30845                }
30846                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
30847                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
30848                }
30849            }
30850
30851            next_offset += envelope_size;
30852            _next_ordinal_to_read += 1;
30853            if next_offset >= end_offset {
30854                return Ok(());
30855            }
30856
30857            // Decode unknown envelopes for gaps in ordinals.
30858            while _next_ordinal_to_read < 33 {
30859                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
30860                _next_ordinal_to_read += 1;
30861                next_offset += envelope_size;
30862            }
30863
30864            let next_out_of_line = decoder.next_out_of_line();
30865            let handles_before = decoder.remaining_handles();
30866            if let Some((inlined, num_bytes, num_handles)) =
30867                fidl::encoding::decode_envelope_header(decoder, next_offset)?
30868            {
30869                let member_inline_size =
30870                    <NetworkData as fidl::encoding::TypeMarker>::inline_size(decoder.context);
30871                if inlined != (member_inline_size <= 4) {
30872                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
30873                }
30874                let inner_offset;
30875                let mut inner_depth = depth.clone();
30876                if inlined {
30877                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
30878                    inner_offset = next_offset;
30879                } else {
30880                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
30881                    inner_depth.increment()?;
30882                }
30883                let val_ref =
30884                    self.network_data.get_or_insert_with(|| fidl::new_empty!(NetworkData, D));
30885                fidl::decode!(NetworkData, D, val_ref, decoder, inner_offset, inner_depth)?;
30886                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
30887                {
30888                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
30889                }
30890                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
30891                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
30892                }
30893            }
30894
30895            next_offset += envelope_size;
30896            _next_ordinal_to_read += 1;
30897            if next_offset >= end_offset {
30898                return Ok(());
30899            }
30900
30901            // Decode unknown envelopes for gaps in ordinals.
30902            while _next_ordinal_to_read < 34 {
30903                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
30904                _next_ordinal_to_read += 1;
30905                next_offset += envelope_size;
30906            }
30907
30908            let next_out_of_line = decoder.next_out_of_line();
30909            let handles_before = decoder.remaining_handles();
30910            if let Some((inlined, num_bytes, num_handles)) =
30911                fidl::encoding::decode_envelope_header(decoder, next_offset)?
30912            {
30913                let member_inline_size =
30914                    <ThreadHistoryReport as fidl::encoding::TypeMarker>::inline_size(
30915                        decoder.context,
30916                    );
30917                if inlined != (member_inline_size <= 4) {
30918                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
30919                }
30920                let inner_offset;
30921                let mut inner_depth = depth.clone();
30922                if inlined {
30923                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
30924                    inner_offset = next_offset;
30925                } else {
30926                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
30927                    inner_depth.increment()?;
30928                }
30929                let val_ref = self
30930                    .history_report
30931                    .get_or_insert_with(|| fidl::new_empty!(ThreadHistoryReport, D));
30932                fidl::decode!(ThreadHistoryReport, D, val_ref, decoder, inner_offset, inner_depth)?;
30933                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
30934                {
30935                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
30936                }
30937                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
30938                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
30939                }
30940            }
30941
30942            next_offset += envelope_size;
30943            _next_ordinal_to_read += 1;
30944            if next_offset >= end_offset {
30945                return Ok(());
30946            }
30947
30948            // Decode unknown envelopes for gaps in ordinals.
30949            while _next_ordinal_to_read < 35 {
30950                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
30951                _next_ordinal_to_read += 1;
30952                next_offset += envelope_size;
30953            }
30954
30955            let next_out_of_line = decoder.next_out_of_line();
30956            let handles_before = decoder.remaining_handles();
30957            if let Some((inlined, num_bytes, num_handles)) =
30958                fidl::encoding::decode_envelope_header(decoder, next_offset)?
30959            {
30960                let member_inline_size = <fidl::encoding::Vector<NetifAddress, 32> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
30961                if inlined != (member_inline_size <= 4) {
30962                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
30963                }
30964                let inner_offset;
30965                let mut inner_depth = depth.clone();
30966                if inlined {
30967                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
30968                    inner_offset = next_offset;
30969                } else {
30970                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
30971                    inner_depth.increment()?;
30972                }
30973                let val_ref = self.ipaddrs.get_or_insert_with(
30974                    || fidl::new_empty!(fidl::encoding::Vector<NetifAddress, 32>, D),
30975                );
30976                fidl::decode!(fidl::encoding::Vector<NetifAddress, 32>, D, val_ref, decoder, inner_offset, inner_depth)?;
30977                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
30978                {
30979                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
30980                }
30981                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
30982                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
30983                }
30984            }
30985
30986            next_offset += envelope_size;
30987            _next_ordinal_to_read += 1;
30988            if next_offset >= end_offset {
30989                return Ok(());
30990            }
30991
30992            // Decode unknown envelopes for gaps in ordinals.
30993            while _next_ordinal_to_read < 36 {
30994                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
30995                _next_ordinal_to_read += 1;
30996                next_offset += envelope_size;
30997            }
30998
30999            let next_out_of_line = decoder.next_out_of_line();
31000            let handles_before = decoder.remaining_handles();
31001            if let Some((inlined, num_bytes, num_handles)) =
31002                fidl::encoding::decode_envelope_header(decoder, next_offset)?
31003            {
31004                let member_inline_size = <fidl::encoding::Vector<
31005                    fidl_fuchsia_net_common::Ipv6Address,
31006                    32,
31007                > as fidl::encoding::TypeMarker>::inline_size(
31008                    decoder.context
31009                );
31010                if inlined != (member_inline_size <= 4) {
31011                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
31012                }
31013                let inner_offset;
31014                let mut inner_depth = depth.clone();
31015                if inlined {
31016                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
31017                    inner_offset = next_offset;
31018                } else {
31019                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
31020                    inner_depth.increment()?;
31021                }
31022                let val_ref =
31023                self.ipmaddrs.get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<fidl_fuchsia_net_common::Ipv6Address, 32>, D));
31024                fidl::decode!(fidl::encoding::Vector<fidl_fuchsia_net_common::Ipv6Address, 32>, D, val_ref, decoder, inner_offset, inner_depth)?;
31025                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
31026                {
31027                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
31028                }
31029                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
31030                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
31031                }
31032            }
31033
31034            next_offset += envelope_size;
31035            _next_ordinal_to_read += 1;
31036            if next_offset >= end_offset {
31037                return Ok(());
31038            }
31039
31040            // Decode unknown envelopes for gaps in ordinals.
31041            while _next_ordinal_to_read < 37 {
31042                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
31043                _next_ordinal_to_read += 1;
31044                next_offset += envelope_size;
31045            }
31046
31047            let next_out_of_line = decoder.next_out_of_line();
31048            let handles_before = decoder.remaining_handles();
31049            if let Some((inlined, num_bytes, num_handles)) =
31050                fidl::encoding::decode_envelope_header(decoder, next_offset)?
31051            {
31052                let member_inline_size = <fidl::encoding::Vector<BorderRoutingPrefixTable, 64> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
31053                if inlined != (member_inline_size <= 4) {
31054                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
31055                }
31056                let inner_offset;
31057                let mut inner_depth = depth.clone();
31058                if inlined {
31059                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
31060                    inner_offset = next_offset;
31061                } else {
31062                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
31063                    inner_depth.increment()?;
31064                }
31065                let val_ref = self.border_routing_prefixes.get_or_insert_with(
31066                    || fidl::new_empty!(fidl::encoding::Vector<BorderRoutingPrefixTable, 64>, D),
31067                );
31068                fidl::decode!(fidl::encoding::Vector<BorderRoutingPrefixTable, 64>, D, val_ref, decoder, inner_offset, inner_depth)?;
31069                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
31070                {
31071                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
31072                }
31073                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
31074                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
31075                }
31076            }
31077
31078            next_offset += envelope_size;
31079            _next_ordinal_to_read += 1;
31080            if next_offset >= end_offset {
31081                return Ok(());
31082            }
31083
31084            // Decode unknown envelopes for gaps in ordinals.
31085            while _next_ordinal_to_read < 38 {
31086                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
31087                _next_ordinal_to_read += 1;
31088                next_offset += envelope_size;
31089            }
31090
31091            let next_out_of_line = decoder.next_out_of_line();
31092            let handles_before = decoder.remaining_handles();
31093            if let Some((inlined, num_bytes, num_handles)) =
31094                fidl::encoding::decode_envelope_header(decoder, next_offset)?
31095            {
31096                let member_inline_size = <fidl::encoding::Vector<BorderRoutingRdnss, 64> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
31097                if inlined != (member_inline_size <= 4) {
31098                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
31099                }
31100                let inner_offset;
31101                let mut inner_depth = depth.clone();
31102                if inlined {
31103                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
31104                    inner_offset = next_offset;
31105                } else {
31106                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
31107                    inner_depth.increment()?;
31108                }
31109                let val_ref = self.border_routing_rdnsses.get_or_insert_with(
31110                    || fidl::new_empty!(fidl::encoding::Vector<BorderRoutingRdnss, 64>, D),
31111                );
31112                fidl::decode!(fidl::encoding::Vector<BorderRoutingRdnss, 64>, D, val_ref, decoder, inner_offset, inner_depth)?;
31113                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
31114                {
31115                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
31116                }
31117                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
31118                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
31119                }
31120            }
31121
31122            next_offset += envelope_size;
31123            _next_ordinal_to_read += 1;
31124            if next_offset >= end_offset {
31125                return Ok(());
31126            }
31127
31128            // Decode unknown envelopes for gaps in ordinals.
31129            while _next_ordinal_to_read < 39 {
31130                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
31131                _next_ordinal_to_read += 1;
31132                next_offset += envelope_size;
31133            }
31134
31135            let next_out_of_line = decoder.next_out_of_line();
31136            let handles_before = decoder.remaining_handles();
31137            if let Some((inlined, num_bytes, num_handles)) =
31138                fidl::encoding::decode_envelope_header(decoder, next_offset)?
31139            {
31140                let member_inline_size = <fidl::encoding::Vector<UdpSocket, 32> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
31141                if inlined != (member_inline_size <= 4) {
31142                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
31143                }
31144                let inner_offset;
31145                let mut inner_depth = depth.clone();
31146                if inlined {
31147                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
31148                    inner_offset = next_offset;
31149                } else {
31150                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
31151                    inner_depth.increment()?;
31152                }
31153                let val_ref = self.netstat.get_or_insert_with(
31154                    || fidl::new_empty!(fidl::encoding::Vector<UdpSocket, 32>, D),
31155                );
31156                fidl::decode!(fidl::encoding::Vector<UdpSocket, 32>, D, val_ref, decoder, inner_offset, inner_depth)?;
31157                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
31158                {
31159                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
31160                }
31161                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
31162                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
31163                }
31164            }
31165
31166            next_offset += envelope_size;
31167            _next_ordinal_to_read += 1;
31168            if next_offset >= end_offset {
31169                return Ok(());
31170            }
31171
31172            // Decode unknown envelopes for gaps in ordinals.
31173            while _next_ordinal_to_read < 40 {
31174                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
31175                _next_ordinal_to_read += 1;
31176                next_offset += envelope_size;
31177            }
31178
31179            let next_out_of_line = decoder.next_out_of_line();
31180            let handles_before = decoder.remaining_handles();
31181            if let Some((inlined, num_bytes, num_handles)) =
31182                fidl::encoding::decode_envelope_header(decoder, next_offset)?
31183            {
31184                let member_inline_size = <fidl::encoding::Vector<EidCacheEntry, 64> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
31185                if inlined != (member_inline_size <= 4) {
31186                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
31187                }
31188                let inner_offset;
31189                let mut inner_depth = depth.clone();
31190                if inlined {
31191                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
31192                    inner_offset = next_offset;
31193                } else {
31194                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
31195                    inner_depth.increment()?;
31196                }
31197                let val_ref = self.eid_cache_entries.get_or_insert_with(
31198                    || fidl::new_empty!(fidl::encoding::Vector<EidCacheEntry, 64>, D),
31199                );
31200                fidl::decode!(fidl::encoding::Vector<EidCacheEntry, 64>, D, val_ref, decoder, inner_offset, inner_depth)?;
31201                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
31202                {
31203                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
31204                }
31205                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
31206                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
31207                }
31208            }
31209
31210            next_offset += envelope_size;
31211            _next_ordinal_to_read += 1;
31212            if next_offset >= end_offset {
31213                return Ok(());
31214            }
31215
31216            // Decode unknown envelopes for gaps in ordinals.
31217            while _next_ordinal_to_read < 41 {
31218                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
31219                _next_ordinal_to_read += 1;
31220                next_offset += envelope_size;
31221            }
31222
31223            let next_out_of_line = decoder.next_out_of_line();
31224            let handles_before = decoder.remaining_handles();
31225            if let Some((inlined, num_bytes, num_handles)) =
31226                fidl::encoding::decode_envelope_header(decoder, next_offset)?
31227            {
31228                let member_inline_size =
31229                    <i8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
31230                if inlined != (member_inline_size <= 4) {
31231                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
31232                }
31233                let inner_offset;
31234                let mut inner_depth = depth.clone();
31235                if inlined {
31236                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
31237                    inner_offset = next_offset;
31238                } else {
31239                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
31240                    inner_depth.increment()?;
31241                }
31242                let val_ref = self.cca_threshold.get_or_insert_with(|| fidl::new_empty!(i8, D));
31243                fidl::decode!(i8, D, val_ref, decoder, inner_offset, inner_depth)?;
31244                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
31245                {
31246                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
31247                }
31248                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
31249                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
31250                }
31251            }
31252
31253            next_offset += envelope_size;
31254            _next_ordinal_to_read += 1;
31255            if next_offset >= end_offset {
31256                return Ok(());
31257            }
31258
31259            // Decode unknown envelopes for gaps in ordinals.
31260            while _next_ordinal_to_read < 42 {
31261                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
31262                _next_ordinal_to_read += 1;
31263                next_offset += envelope_size;
31264            }
31265
31266            let next_out_of_line = decoder.next_out_of_line();
31267            let handles_before = decoder.remaining_handles();
31268            if let Some((inlined, num_bytes, num_handles)) =
31269                fidl::encoding::decode_envelope_header(decoder, next_offset)?
31270            {
31271                let member_inline_size =
31272                    <CslInfo as fidl::encoding::TypeMarker>::inline_size(decoder.context);
31273                if inlined != (member_inline_size <= 4) {
31274                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
31275                }
31276                let inner_offset;
31277                let mut inner_depth = depth.clone();
31278                if inlined {
31279                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
31280                    inner_offset = next_offset;
31281                } else {
31282                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
31283                    inner_depth.increment()?;
31284                }
31285                let val_ref = self.csl_info.get_or_insert_with(|| fidl::new_empty!(CslInfo, D));
31286                fidl::decode!(CslInfo, D, val_ref, decoder, inner_offset, inner_depth)?;
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 < 43 {
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                    <BufferInfo as fidl::encoding::TypeMarker>::inline_size(decoder.context);
31316                if inlined != (member_inline_size <= 4) {
31317                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
31318                }
31319                let inner_offset;
31320                let mut inner_depth = depth.clone();
31321                if inlined {
31322                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
31323                    inner_offset = next_offset;
31324                } else {
31325                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
31326                    inner_depth.increment()?;
31327                }
31328                let val_ref =
31329                    self.buffer_info.get_or_insert_with(|| fidl::new_empty!(BufferInfo, D));
31330                fidl::decode!(BufferInfo, D, val_ref, decoder, inner_offset, inner_depth)?;
31331                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
31332                {
31333                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
31334                }
31335                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
31336                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
31337                }
31338            }
31339
31340            next_offset += envelope_size;
31341            _next_ordinal_to_read += 1;
31342            if next_offset >= end_offset {
31343                return Ok(());
31344            }
31345
31346            // Decode unknown envelopes for gaps in ordinals.
31347            while _next_ordinal_to_read < 44 {
31348                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
31349                _next_ordinal_to_read += 1;
31350                next_offset += envelope_size;
31351            }
31352
31353            let next_out_of_line = decoder.next_out_of_line();
31354            let handles_before = decoder.remaining_handles();
31355            if let Some((inlined, num_bytes, num_handles)) =
31356                fidl::encoding::decode_envelope_header(decoder, next_offset)?
31357            {
31358                let member_inline_size = <fidl_fuchsia_lowpan_device_common::MleCounters as fidl::encoding::TypeMarker>::inline_size(decoder.context);
31359                if inlined != (member_inline_size <= 4) {
31360                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
31361                }
31362                let inner_offset;
31363                let mut inner_depth = depth.clone();
31364                if inlined {
31365                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
31366                    inner_offset = next_offset;
31367                } else {
31368                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
31369                    inner_depth.increment()?;
31370                }
31371                let val_ref = self.mle_counters.get_or_insert_with(|| {
31372                    fidl::new_empty!(fidl_fuchsia_lowpan_device_common::MleCounters, D)
31373                });
31374                fidl::decode!(
31375                    fidl_fuchsia_lowpan_device_common::MleCounters,
31376                    D,
31377                    val_ref,
31378                    decoder,
31379                    inner_offset,
31380                    inner_depth
31381                )?;
31382                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
31383                {
31384                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
31385                }
31386                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
31387                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
31388                }
31389            }
31390
31391            next_offset += envelope_size;
31392
31393            // Decode the remaining unknown envelopes.
31394            while next_offset < end_offset {
31395                _next_ordinal_to_read += 1;
31396                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
31397                next_offset += envelope_size;
31398            }
31399
31400            Ok(())
31401        }
31402    }
31403
31404    impl ThreadHistoryReport {
31405        #[inline(always)]
31406        fn max_ordinal_present(&self) -> u64 {
31407            if let Some(_) = self.route_info_history {
31408                return 5;
31409            }
31410            if let Some(_) = self.prefix_info_history {
31411                return 4;
31412            }
31413            if let Some(_) = self.router_info_history {
31414                return 3;
31415            }
31416            if let Some(_) = self.neighbor_info_history {
31417                return 2;
31418            }
31419            if let Some(_) = self.net_info_history {
31420                return 1;
31421            }
31422            0
31423        }
31424    }
31425
31426    impl fidl::encoding::ValueTypeMarker for ThreadHistoryReport {
31427        type Borrowed<'a> = &'a Self;
31428        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
31429            value
31430        }
31431    }
31432
31433    unsafe impl fidl::encoding::TypeMarker for ThreadHistoryReport {
31434        type Owned = Self;
31435
31436        #[inline(always)]
31437        fn inline_align(_context: fidl::encoding::Context) -> usize {
31438            8
31439        }
31440
31441        #[inline(always)]
31442        fn inline_size(_context: fidl::encoding::Context) -> usize {
31443            16
31444        }
31445    }
31446
31447    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<ThreadHistoryReport, D>
31448        for &ThreadHistoryReport
31449    {
31450        unsafe fn encode(
31451            self,
31452            encoder: &mut fidl::encoding::Encoder<'_, D>,
31453            offset: usize,
31454            mut depth: fidl::encoding::Depth,
31455        ) -> fidl::Result<()> {
31456            encoder.debug_check_bounds::<ThreadHistoryReport>(offset);
31457            // Vector header
31458            let max_ordinal: u64 = self.max_ordinal_present();
31459            encoder.write_num(max_ordinal, offset);
31460            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
31461            // Calling encoder.out_of_line_offset(0) is not allowed.
31462            if max_ordinal == 0 {
31463                return Ok(());
31464            }
31465            depth.increment()?;
31466            let envelope_size = 8;
31467            let bytes_len = max_ordinal as usize * envelope_size;
31468            #[allow(unused_variables)]
31469            let offset = encoder.out_of_line_offset(bytes_len);
31470            let mut _prev_end_offset: usize = 0;
31471            if 1 > max_ordinal {
31472                return Ok(());
31473            }
31474
31475            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
31476            // are envelope_size bytes.
31477            let cur_offset: usize = (1 - 1) * envelope_size;
31478
31479            // Zero reserved fields.
31480            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
31481
31482            // Safety:
31483            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
31484            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
31485            //   envelope_size bytes, there is always sufficient room.
31486            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<ThreadNetworkInfoEntry, 32>, D>(
31487            self.net_info_history.as_ref().map(<fidl::encoding::Vector<ThreadNetworkInfoEntry, 32> as fidl::encoding::ValueTypeMarker>::borrow),
31488            encoder, offset + cur_offset, depth
31489        )?;
31490
31491            _prev_end_offset = cur_offset + envelope_size;
31492            if 2 > max_ordinal {
31493                return Ok(());
31494            }
31495
31496            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
31497            // are envelope_size bytes.
31498            let cur_offset: usize = (2 - 1) * envelope_size;
31499
31500            // Zero reserved fields.
31501            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
31502
31503            // Safety:
31504            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
31505            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
31506            //   envelope_size bytes, there is always sufficient room.
31507            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<ThreadNeighborInfoEntry, 64>, D>(
31508            self.neighbor_info_history.as_ref().map(<fidl::encoding::Vector<ThreadNeighborInfoEntry, 64> as fidl::encoding::ValueTypeMarker>::borrow),
31509            encoder, offset + cur_offset, depth
31510        )?;
31511
31512            _prev_end_offset = cur_offset + envelope_size;
31513            if 3 > max_ordinal {
31514                return Ok(());
31515            }
31516
31517            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
31518            // are envelope_size bytes.
31519            let cur_offset: usize = (3 - 1) * envelope_size;
31520
31521            // Zero reserved fields.
31522            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
31523
31524            // Safety:
31525            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
31526            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
31527            //   envelope_size bytes, there is always sufficient room.
31528            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<ThreadRouterInfoEntry, 256>, D>(
31529            self.router_info_history.as_ref().map(<fidl::encoding::Vector<ThreadRouterInfoEntry, 256> as fidl::encoding::ValueTypeMarker>::borrow),
31530            encoder, offset + cur_offset, depth
31531        )?;
31532
31533            _prev_end_offset = cur_offset + envelope_size;
31534            if 4 > max_ordinal {
31535                return Ok(());
31536            }
31537
31538            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
31539            // are envelope_size bytes.
31540            let cur_offset: usize = (4 - 1) * envelope_size;
31541
31542            // Zero reserved fields.
31543            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
31544
31545            // Safety:
31546            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
31547            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
31548            //   envelope_size bytes, there is always sufficient room.
31549            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<ThreadNetDataPrefixInfoEntry, 32>, D>(
31550            self.prefix_info_history.as_ref().map(<fidl::encoding::Vector<ThreadNetDataPrefixInfoEntry, 32> as fidl::encoding::ValueTypeMarker>::borrow),
31551            encoder, offset + cur_offset, depth
31552        )?;
31553
31554            _prev_end_offset = cur_offset + envelope_size;
31555            if 5 > max_ordinal {
31556                return Ok(());
31557            }
31558
31559            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
31560            // are envelope_size bytes.
31561            let cur_offset: usize = (5 - 1) * envelope_size;
31562
31563            // Zero reserved fields.
31564            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
31565
31566            // Safety:
31567            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
31568            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
31569            //   envelope_size bytes, there is always sufficient room.
31570            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<ThreadNetDataRouteInfoEntry, 32>, D>(
31571            self.route_info_history.as_ref().map(<fidl::encoding::Vector<ThreadNetDataRouteInfoEntry, 32> as fidl::encoding::ValueTypeMarker>::borrow),
31572            encoder, offset + cur_offset, depth
31573        )?;
31574
31575            _prev_end_offset = cur_offset + envelope_size;
31576
31577            Ok(())
31578        }
31579    }
31580
31581    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ThreadHistoryReport {
31582        #[inline(always)]
31583        fn new_empty() -> Self {
31584            Self::default()
31585        }
31586
31587        unsafe fn decode(
31588            &mut self,
31589            decoder: &mut fidl::encoding::Decoder<'_, D>,
31590            offset: usize,
31591            mut depth: fidl::encoding::Depth,
31592        ) -> fidl::Result<()> {
31593            decoder.debug_check_bounds::<Self>(offset);
31594            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
31595                None => return Err(fidl::Error::NotNullable),
31596                Some(len) => len,
31597            };
31598            // Calling decoder.out_of_line_offset(0) is not allowed.
31599            if len == 0 {
31600                return Ok(());
31601            };
31602            depth.increment()?;
31603            let envelope_size = 8;
31604            let bytes_len = len * envelope_size;
31605            let offset = decoder.out_of_line_offset(bytes_len)?;
31606            // Decode the envelope for each type.
31607            let mut _next_ordinal_to_read = 0;
31608            let mut next_offset = offset;
31609            let end_offset = offset + bytes_len;
31610            _next_ordinal_to_read += 1;
31611            if next_offset >= end_offset {
31612                return Ok(());
31613            }
31614
31615            // Decode unknown envelopes for gaps in ordinals.
31616            while _next_ordinal_to_read < 1 {
31617                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
31618                _next_ordinal_to_read += 1;
31619                next_offset += envelope_size;
31620            }
31621
31622            let next_out_of_line = decoder.next_out_of_line();
31623            let handles_before = decoder.remaining_handles();
31624            if let Some((inlined, num_bytes, num_handles)) =
31625                fidl::encoding::decode_envelope_header(decoder, next_offset)?
31626            {
31627                let member_inline_size = <fidl::encoding::Vector<ThreadNetworkInfoEntry, 32> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
31628                if inlined != (member_inline_size <= 4) {
31629                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
31630                }
31631                let inner_offset;
31632                let mut inner_depth = depth.clone();
31633                if inlined {
31634                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
31635                    inner_offset = next_offset;
31636                } else {
31637                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
31638                    inner_depth.increment()?;
31639                }
31640                let val_ref = self.net_info_history.get_or_insert_with(
31641                    || fidl::new_empty!(fidl::encoding::Vector<ThreadNetworkInfoEntry, 32>, D),
31642                );
31643                fidl::decode!(fidl::encoding::Vector<ThreadNetworkInfoEntry, 32>, D, val_ref, decoder, inner_offset, inner_depth)?;
31644                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
31645                {
31646                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
31647                }
31648                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
31649                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
31650                }
31651            }
31652
31653            next_offset += envelope_size;
31654            _next_ordinal_to_read += 1;
31655            if next_offset >= end_offset {
31656                return Ok(());
31657            }
31658
31659            // Decode unknown envelopes for gaps in ordinals.
31660            while _next_ordinal_to_read < 2 {
31661                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
31662                _next_ordinal_to_read += 1;
31663                next_offset += envelope_size;
31664            }
31665
31666            let next_out_of_line = decoder.next_out_of_line();
31667            let handles_before = decoder.remaining_handles();
31668            if let Some((inlined, num_bytes, num_handles)) =
31669                fidl::encoding::decode_envelope_header(decoder, next_offset)?
31670            {
31671                let member_inline_size = <fidl::encoding::Vector<ThreadNeighborInfoEntry, 64> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
31672                if inlined != (member_inline_size <= 4) {
31673                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
31674                }
31675                let inner_offset;
31676                let mut inner_depth = depth.clone();
31677                if inlined {
31678                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
31679                    inner_offset = next_offset;
31680                } else {
31681                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
31682                    inner_depth.increment()?;
31683                }
31684                let val_ref = self.neighbor_info_history.get_or_insert_with(
31685                    || fidl::new_empty!(fidl::encoding::Vector<ThreadNeighborInfoEntry, 64>, D),
31686                );
31687                fidl::decode!(fidl::encoding::Vector<ThreadNeighborInfoEntry, 64>, D, val_ref, decoder, inner_offset, inner_depth)?;
31688                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
31689                {
31690                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
31691                }
31692                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
31693                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
31694                }
31695            }
31696
31697            next_offset += envelope_size;
31698            _next_ordinal_to_read += 1;
31699            if next_offset >= end_offset {
31700                return Ok(());
31701            }
31702
31703            // Decode unknown envelopes for gaps in ordinals.
31704            while _next_ordinal_to_read < 3 {
31705                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
31706                _next_ordinal_to_read += 1;
31707                next_offset += envelope_size;
31708            }
31709
31710            let next_out_of_line = decoder.next_out_of_line();
31711            let handles_before = decoder.remaining_handles();
31712            if let Some((inlined, num_bytes, num_handles)) =
31713                fidl::encoding::decode_envelope_header(decoder, next_offset)?
31714            {
31715                let member_inline_size = <fidl::encoding::Vector<ThreadRouterInfoEntry, 256> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
31716                if inlined != (member_inline_size <= 4) {
31717                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
31718                }
31719                let inner_offset;
31720                let mut inner_depth = depth.clone();
31721                if inlined {
31722                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
31723                    inner_offset = next_offset;
31724                } else {
31725                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
31726                    inner_depth.increment()?;
31727                }
31728                let val_ref = self.router_info_history.get_or_insert_with(
31729                    || fidl::new_empty!(fidl::encoding::Vector<ThreadRouterInfoEntry, 256>, D),
31730                );
31731                fidl::decode!(fidl::encoding::Vector<ThreadRouterInfoEntry, 256>, D, val_ref, decoder, inner_offset, inner_depth)?;
31732                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
31733                {
31734                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
31735                }
31736                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
31737                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
31738                }
31739            }
31740
31741            next_offset += envelope_size;
31742            _next_ordinal_to_read += 1;
31743            if next_offset >= end_offset {
31744                return Ok(());
31745            }
31746
31747            // Decode unknown envelopes for gaps in ordinals.
31748            while _next_ordinal_to_read < 4 {
31749                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
31750                _next_ordinal_to_read += 1;
31751                next_offset += envelope_size;
31752            }
31753
31754            let next_out_of_line = decoder.next_out_of_line();
31755            let handles_before = decoder.remaining_handles();
31756            if let Some((inlined, num_bytes, num_handles)) =
31757                fidl::encoding::decode_envelope_header(decoder, next_offset)?
31758            {
31759                let member_inline_size = <fidl::encoding::Vector<ThreadNetDataPrefixInfoEntry, 32> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
31760                if inlined != (member_inline_size <= 4) {
31761                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
31762                }
31763                let inner_offset;
31764                let mut inner_depth = depth.clone();
31765                if inlined {
31766                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
31767                    inner_offset = next_offset;
31768                } else {
31769                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
31770                    inner_depth.increment()?;
31771                }
31772                let val_ref =
31773                self.prefix_info_history.get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<ThreadNetDataPrefixInfoEntry, 32>, D));
31774                fidl::decode!(fidl::encoding::Vector<ThreadNetDataPrefixInfoEntry, 32>, D, val_ref, decoder, inner_offset, inner_depth)?;
31775                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
31776                {
31777                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
31778                }
31779                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
31780                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
31781                }
31782            }
31783
31784            next_offset += envelope_size;
31785            _next_ordinal_to_read += 1;
31786            if next_offset >= end_offset {
31787                return Ok(());
31788            }
31789
31790            // Decode unknown envelopes for gaps in ordinals.
31791            while _next_ordinal_to_read < 5 {
31792                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
31793                _next_ordinal_to_read += 1;
31794                next_offset += envelope_size;
31795            }
31796
31797            let next_out_of_line = decoder.next_out_of_line();
31798            let handles_before = decoder.remaining_handles();
31799            if let Some((inlined, num_bytes, num_handles)) =
31800                fidl::encoding::decode_envelope_header(decoder, next_offset)?
31801            {
31802                let member_inline_size = <fidl::encoding::Vector<ThreadNetDataRouteInfoEntry, 32> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
31803                if inlined != (member_inline_size <= 4) {
31804                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
31805                }
31806                let inner_offset;
31807                let mut inner_depth = depth.clone();
31808                if inlined {
31809                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
31810                    inner_offset = next_offset;
31811                } else {
31812                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
31813                    inner_depth.increment()?;
31814                }
31815                let val_ref = self.route_info_history.get_or_insert_with(
31816                    || fidl::new_empty!(fidl::encoding::Vector<ThreadNetDataRouteInfoEntry, 32>, D),
31817                );
31818                fidl::decode!(fidl::encoding::Vector<ThreadNetDataRouteInfoEntry, 32>, D, val_ref, decoder, inner_offset, inner_depth)?;
31819                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
31820                {
31821                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
31822                }
31823                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
31824                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
31825                }
31826            }
31827
31828            next_offset += envelope_size;
31829
31830            // Decode the remaining unknown envelopes.
31831            while next_offset < end_offset {
31832                _next_ordinal_to_read += 1;
31833                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
31834                next_offset += envelope_size;
31835            }
31836
31837            Ok(())
31838        }
31839    }
31840
31841    impl ThreadLinkMode {
31842        #[inline(always)]
31843        fn max_ordinal_present(&self) -> u64 {
31844            if let Some(_) = self.network_data {
31845                return 3;
31846            }
31847            if let Some(_) = self.device_type {
31848                return 2;
31849            }
31850            if let Some(_) = self.rx_on_when_idle {
31851                return 1;
31852            }
31853            0
31854        }
31855    }
31856
31857    impl fidl::encoding::ValueTypeMarker for ThreadLinkMode {
31858        type Borrowed<'a> = &'a Self;
31859        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
31860            value
31861        }
31862    }
31863
31864    unsafe impl fidl::encoding::TypeMarker for ThreadLinkMode {
31865        type Owned = Self;
31866
31867        #[inline(always)]
31868        fn inline_align(_context: fidl::encoding::Context) -> usize {
31869            8
31870        }
31871
31872        #[inline(always)]
31873        fn inline_size(_context: fidl::encoding::Context) -> usize {
31874            16
31875        }
31876    }
31877
31878    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<ThreadLinkMode, D>
31879        for &ThreadLinkMode
31880    {
31881        unsafe fn encode(
31882            self,
31883            encoder: &mut fidl::encoding::Encoder<'_, D>,
31884            offset: usize,
31885            mut depth: fidl::encoding::Depth,
31886        ) -> fidl::Result<()> {
31887            encoder.debug_check_bounds::<ThreadLinkMode>(offset);
31888            // Vector header
31889            let max_ordinal: u64 = self.max_ordinal_present();
31890            encoder.write_num(max_ordinal, offset);
31891            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
31892            // Calling encoder.out_of_line_offset(0) is not allowed.
31893            if max_ordinal == 0 {
31894                return Ok(());
31895            }
31896            depth.increment()?;
31897            let envelope_size = 8;
31898            let bytes_len = max_ordinal as usize * envelope_size;
31899            #[allow(unused_variables)]
31900            let offset = encoder.out_of_line_offset(bytes_len);
31901            let mut _prev_end_offset: usize = 0;
31902            if 1 > max_ordinal {
31903                return Ok(());
31904            }
31905
31906            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
31907            // are envelope_size bytes.
31908            let cur_offset: usize = (1 - 1) * envelope_size;
31909
31910            // Zero reserved fields.
31911            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
31912
31913            // Safety:
31914            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
31915            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
31916            //   envelope_size bytes, there is always sufficient room.
31917            fidl::encoding::encode_in_envelope_optional::<bool, D>(
31918                self.rx_on_when_idle
31919                    .as_ref()
31920                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
31921                encoder,
31922                offset + cur_offset,
31923                depth,
31924            )?;
31925
31926            _prev_end_offset = cur_offset + envelope_size;
31927            if 2 > max_ordinal {
31928                return Ok(());
31929            }
31930
31931            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
31932            // are envelope_size bytes.
31933            let cur_offset: usize = (2 - 1) * envelope_size;
31934
31935            // Zero reserved fields.
31936            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
31937
31938            // Safety:
31939            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
31940            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
31941            //   envelope_size bytes, there is always sufficient room.
31942            fidl::encoding::encode_in_envelope_optional::<bool, D>(
31943                self.device_type.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
31944                encoder,
31945                offset + cur_offset,
31946                depth,
31947            )?;
31948
31949            _prev_end_offset = cur_offset + envelope_size;
31950            if 3 > max_ordinal {
31951                return Ok(());
31952            }
31953
31954            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
31955            // are envelope_size bytes.
31956            let cur_offset: usize = (3 - 1) * envelope_size;
31957
31958            // Zero reserved fields.
31959            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
31960
31961            // Safety:
31962            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
31963            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
31964            //   envelope_size bytes, there is always sufficient room.
31965            fidl::encoding::encode_in_envelope_optional::<bool, D>(
31966                self.network_data.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
31967                encoder,
31968                offset + cur_offset,
31969                depth,
31970            )?;
31971
31972            _prev_end_offset = cur_offset + envelope_size;
31973
31974            Ok(())
31975        }
31976    }
31977
31978    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ThreadLinkMode {
31979        #[inline(always)]
31980        fn new_empty() -> Self {
31981            Self::default()
31982        }
31983
31984        unsafe fn decode(
31985            &mut self,
31986            decoder: &mut fidl::encoding::Decoder<'_, D>,
31987            offset: usize,
31988            mut depth: fidl::encoding::Depth,
31989        ) -> fidl::Result<()> {
31990            decoder.debug_check_bounds::<Self>(offset);
31991            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
31992                None => return Err(fidl::Error::NotNullable),
31993                Some(len) => len,
31994            };
31995            // Calling decoder.out_of_line_offset(0) is not allowed.
31996            if len == 0 {
31997                return Ok(());
31998            };
31999            depth.increment()?;
32000            let envelope_size = 8;
32001            let bytes_len = len * envelope_size;
32002            let offset = decoder.out_of_line_offset(bytes_len)?;
32003            // Decode the envelope for each type.
32004            let mut _next_ordinal_to_read = 0;
32005            let mut next_offset = offset;
32006            let end_offset = offset + bytes_len;
32007            _next_ordinal_to_read += 1;
32008            if next_offset >= end_offset {
32009                return Ok(());
32010            }
32011
32012            // Decode unknown envelopes for gaps in ordinals.
32013            while _next_ordinal_to_read < 1 {
32014                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
32015                _next_ordinal_to_read += 1;
32016                next_offset += envelope_size;
32017            }
32018
32019            let next_out_of_line = decoder.next_out_of_line();
32020            let handles_before = decoder.remaining_handles();
32021            if let Some((inlined, num_bytes, num_handles)) =
32022                fidl::encoding::decode_envelope_header(decoder, next_offset)?
32023            {
32024                let member_inline_size =
32025                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
32026                if inlined != (member_inline_size <= 4) {
32027                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
32028                }
32029                let inner_offset;
32030                let mut inner_depth = depth.clone();
32031                if inlined {
32032                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
32033                    inner_offset = next_offset;
32034                } else {
32035                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
32036                    inner_depth.increment()?;
32037                }
32038                let val_ref = self.rx_on_when_idle.get_or_insert_with(|| fidl::new_empty!(bool, D));
32039                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
32040                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
32041                {
32042                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
32043                }
32044                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
32045                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
32046                }
32047            }
32048
32049            next_offset += envelope_size;
32050            _next_ordinal_to_read += 1;
32051            if next_offset >= end_offset {
32052                return Ok(());
32053            }
32054
32055            // Decode unknown envelopes for gaps in ordinals.
32056            while _next_ordinal_to_read < 2 {
32057                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
32058                _next_ordinal_to_read += 1;
32059                next_offset += envelope_size;
32060            }
32061
32062            let next_out_of_line = decoder.next_out_of_line();
32063            let handles_before = decoder.remaining_handles();
32064            if let Some((inlined, num_bytes, num_handles)) =
32065                fidl::encoding::decode_envelope_header(decoder, next_offset)?
32066            {
32067                let member_inline_size =
32068                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
32069                if inlined != (member_inline_size <= 4) {
32070                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
32071                }
32072                let inner_offset;
32073                let mut inner_depth = depth.clone();
32074                if inlined {
32075                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
32076                    inner_offset = next_offset;
32077                } else {
32078                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
32079                    inner_depth.increment()?;
32080                }
32081                let val_ref = self.device_type.get_or_insert_with(|| fidl::new_empty!(bool, D));
32082                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
32083                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
32084                {
32085                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
32086                }
32087                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
32088                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
32089                }
32090            }
32091
32092            next_offset += envelope_size;
32093            _next_ordinal_to_read += 1;
32094            if next_offset >= end_offset {
32095                return Ok(());
32096            }
32097
32098            // Decode unknown envelopes for gaps in ordinals.
32099            while _next_ordinal_to_read < 3 {
32100                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
32101                _next_ordinal_to_read += 1;
32102                next_offset += envelope_size;
32103            }
32104
32105            let next_out_of_line = decoder.next_out_of_line();
32106            let handles_before = decoder.remaining_handles();
32107            if let Some((inlined, num_bytes, num_handles)) =
32108                fidl::encoding::decode_envelope_header(decoder, next_offset)?
32109            {
32110                let member_inline_size =
32111                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
32112                if inlined != (member_inline_size <= 4) {
32113                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
32114                }
32115                let inner_offset;
32116                let mut inner_depth = depth.clone();
32117                if inlined {
32118                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
32119                    inner_offset = next_offset;
32120                } else {
32121                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
32122                    inner_depth.increment()?;
32123                }
32124                let val_ref = self.network_data.get_or_insert_with(|| fidl::new_empty!(bool, D));
32125                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
32126                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
32127                {
32128                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
32129                }
32130                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
32131                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
32132                }
32133            }
32134
32135            next_offset += envelope_size;
32136
32137            // Decode the remaining unknown envelopes.
32138            while next_offset < end_offset {
32139                _next_ordinal_to_read += 1;
32140                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
32141                next_offset += envelope_size;
32142            }
32143
32144            Ok(())
32145        }
32146    }
32147
32148    impl ThreadNeighborInfoEntry {
32149        #[inline(always)]
32150        fn max_ordinal_present(&self) -> u64 {
32151            if let Some(_) = self.avg_rssi {
32152                return 7;
32153            }
32154            if let Some(_) = self.mode {
32155                return 6;
32156            }
32157            if let Some(_) = self.rloc16 {
32158                return 5;
32159            }
32160            if let Some(_) = self.extended_address {
32161                return 4;
32162            }
32163            if let Some(_) = self.event {
32164                return 3;
32165            }
32166            if let Some(_) = self.is_child {
32167                return 2;
32168            }
32169            if let Some(_) = self.age {
32170                return 1;
32171            }
32172            0
32173        }
32174    }
32175
32176    impl fidl::encoding::ValueTypeMarker for ThreadNeighborInfoEntry {
32177        type Borrowed<'a> = &'a Self;
32178        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
32179            value
32180        }
32181    }
32182
32183    unsafe impl fidl::encoding::TypeMarker for ThreadNeighborInfoEntry {
32184        type Owned = Self;
32185
32186        #[inline(always)]
32187        fn inline_align(_context: fidl::encoding::Context) -> usize {
32188            8
32189        }
32190
32191        #[inline(always)]
32192        fn inline_size(_context: fidl::encoding::Context) -> usize {
32193            16
32194        }
32195    }
32196
32197    unsafe impl<D: fidl::encoding::ResourceDialect>
32198        fidl::encoding::Encode<ThreadNeighborInfoEntry, D> for &ThreadNeighborInfoEntry
32199    {
32200        unsafe fn encode(
32201            self,
32202            encoder: &mut fidl::encoding::Encoder<'_, D>,
32203            offset: usize,
32204            mut depth: fidl::encoding::Depth,
32205        ) -> fidl::Result<()> {
32206            encoder.debug_check_bounds::<ThreadNeighborInfoEntry>(offset);
32207            // Vector header
32208            let max_ordinal: u64 = self.max_ordinal_present();
32209            encoder.write_num(max_ordinal, offset);
32210            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
32211            // Calling encoder.out_of_line_offset(0) is not allowed.
32212            if max_ordinal == 0 {
32213                return Ok(());
32214            }
32215            depth.increment()?;
32216            let envelope_size = 8;
32217            let bytes_len = max_ordinal as usize * envelope_size;
32218            #[allow(unused_variables)]
32219            let offset = encoder.out_of_line_offset(bytes_len);
32220            let mut _prev_end_offset: usize = 0;
32221            if 1 > max_ordinal {
32222                return Ok(());
32223            }
32224
32225            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
32226            // are envelope_size bytes.
32227            let cur_offset: usize = (1 - 1) * envelope_size;
32228
32229            // Zero reserved fields.
32230            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
32231
32232            // Safety:
32233            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
32234            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
32235            //   envelope_size bytes, there is always sufficient room.
32236            fidl::encoding::encode_in_envelope_optional::<i64, D>(
32237                self.age.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
32238                encoder,
32239                offset + cur_offset,
32240                depth,
32241            )?;
32242
32243            _prev_end_offset = cur_offset + envelope_size;
32244            if 2 > max_ordinal {
32245                return Ok(());
32246            }
32247
32248            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
32249            // are envelope_size bytes.
32250            let cur_offset: usize = (2 - 1) * envelope_size;
32251
32252            // Zero reserved fields.
32253            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
32254
32255            // Safety:
32256            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
32257            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
32258            //   envelope_size bytes, there is always sufficient room.
32259            fidl::encoding::encode_in_envelope_optional::<bool, D>(
32260                self.is_child.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
32261                encoder,
32262                offset + cur_offset,
32263                depth,
32264            )?;
32265
32266            _prev_end_offset = cur_offset + envelope_size;
32267            if 3 > max_ordinal {
32268                return Ok(());
32269            }
32270
32271            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
32272            // are envelope_size bytes.
32273            let cur_offset: usize = (3 - 1) * envelope_size;
32274
32275            // Zero reserved fields.
32276            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
32277
32278            // Safety:
32279            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
32280            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
32281            //   envelope_size bytes, there is always sufficient room.
32282            fidl::encoding::encode_in_envelope_optional::<HistoryTrackerNeighborEvent, D>(
32283                self.event
32284                    .as_ref()
32285                    .map(<HistoryTrackerNeighborEvent as fidl::encoding::ValueTypeMarker>::borrow),
32286                encoder,
32287                offset + cur_offset,
32288                depth,
32289            )?;
32290
32291            _prev_end_offset = cur_offset + envelope_size;
32292            if 4 > max_ordinal {
32293                return Ok(());
32294            }
32295
32296            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
32297            // are envelope_size bytes.
32298            let cur_offset: usize = (4 - 1) * envelope_size;
32299
32300            // Zero reserved fields.
32301            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
32302
32303            // Safety:
32304            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
32305            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
32306            //   envelope_size bytes, there is always sufficient room.
32307            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u8, 8>, D>(
32308                self.extended_address.as_ref().map(
32309                    <fidl::encoding::Vector<u8, 8> as fidl::encoding::ValueTypeMarker>::borrow,
32310                ),
32311                encoder,
32312                offset + cur_offset,
32313                depth,
32314            )?;
32315
32316            _prev_end_offset = cur_offset + envelope_size;
32317            if 5 > max_ordinal {
32318                return Ok(());
32319            }
32320
32321            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
32322            // are envelope_size bytes.
32323            let cur_offset: usize = (5 - 1) * envelope_size;
32324
32325            // Zero reserved fields.
32326            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
32327
32328            // Safety:
32329            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
32330            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
32331            //   envelope_size bytes, there is always sufficient room.
32332            fidl::encoding::encode_in_envelope_optional::<u16, D>(
32333                self.rloc16.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
32334                encoder,
32335                offset + cur_offset,
32336                depth,
32337            )?;
32338
32339            _prev_end_offset = cur_offset + envelope_size;
32340            if 6 > max_ordinal {
32341                return Ok(());
32342            }
32343
32344            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
32345            // are envelope_size bytes.
32346            let cur_offset: usize = (6 - 1) * envelope_size;
32347
32348            // Zero reserved fields.
32349            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
32350
32351            // Safety:
32352            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
32353            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
32354            //   envelope_size bytes, there is always sufficient room.
32355            fidl::encoding::encode_in_envelope_optional::<ThreadLinkMode, D>(
32356                self.mode.as_ref().map(<ThreadLinkMode as fidl::encoding::ValueTypeMarker>::borrow),
32357                encoder,
32358                offset + cur_offset,
32359                depth,
32360            )?;
32361
32362            _prev_end_offset = cur_offset + envelope_size;
32363            if 7 > max_ordinal {
32364                return Ok(());
32365            }
32366
32367            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
32368            // are envelope_size bytes.
32369            let cur_offset: usize = (7 - 1) * envelope_size;
32370
32371            // Zero reserved fields.
32372            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
32373
32374            // Safety:
32375            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
32376            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
32377            //   envelope_size bytes, there is always sufficient room.
32378            fidl::encoding::encode_in_envelope_optional::<i32, D>(
32379                self.avg_rssi.as_ref().map(<i32 as fidl::encoding::ValueTypeMarker>::borrow),
32380                encoder,
32381                offset + cur_offset,
32382                depth,
32383            )?;
32384
32385            _prev_end_offset = cur_offset + envelope_size;
32386
32387            Ok(())
32388        }
32389    }
32390
32391    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
32392        for ThreadNeighborInfoEntry
32393    {
32394        #[inline(always)]
32395        fn new_empty() -> Self {
32396            Self::default()
32397        }
32398
32399        unsafe fn decode(
32400            &mut self,
32401            decoder: &mut fidl::encoding::Decoder<'_, D>,
32402            offset: usize,
32403            mut depth: fidl::encoding::Depth,
32404        ) -> fidl::Result<()> {
32405            decoder.debug_check_bounds::<Self>(offset);
32406            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
32407                None => return Err(fidl::Error::NotNullable),
32408                Some(len) => len,
32409            };
32410            // Calling decoder.out_of_line_offset(0) is not allowed.
32411            if len == 0 {
32412                return Ok(());
32413            };
32414            depth.increment()?;
32415            let envelope_size = 8;
32416            let bytes_len = len * envelope_size;
32417            let offset = decoder.out_of_line_offset(bytes_len)?;
32418            // Decode the envelope for each type.
32419            let mut _next_ordinal_to_read = 0;
32420            let mut next_offset = offset;
32421            let end_offset = offset + bytes_len;
32422            _next_ordinal_to_read += 1;
32423            if next_offset >= end_offset {
32424                return Ok(());
32425            }
32426
32427            // Decode unknown envelopes for gaps in ordinals.
32428            while _next_ordinal_to_read < 1 {
32429                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
32430                _next_ordinal_to_read += 1;
32431                next_offset += envelope_size;
32432            }
32433
32434            let next_out_of_line = decoder.next_out_of_line();
32435            let handles_before = decoder.remaining_handles();
32436            if let Some((inlined, num_bytes, num_handles)) =
32437                fidl::encoding::decode_envelope_header(decoder, next_offset)?
32438            {
32439                let member_inline_size =
32440                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
32441                if inlined != (member_inline_size <= 4) {
32442                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
32443                }
32444                let inner_offset;
32445                let mut inner_depth = depth.clone();
32446                if inlined {
32447                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
32448                    inner_offset = next_offset;
32449                } else {
32450                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
32451                    inner_depth.increment()?;
32452                }
32453                let val_ref = self.age.get_or_insert_with(|| fidl::new_empty!(i64, D));
32454                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
32455                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
32456                {
32457                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
32458                }
32459                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
32460                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
32461                }
32462            }
32463
32464            next_offset += envelope_size;
32465            _next_ordinal_to_read += 1;
32466            if next_offset >= end_offset {
32467                return Ok(());
32468            }
32469
32470            // Decode unknown envelopes for gaps in ordinals.
32471            while _next_ordinal_to_read < 2 {
32472                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
32473                _next_ordinal_to_read += 1;
32474                next_offset += envelope_size;
32475            }
32476
32477            let next_out_of_line = decoder.next_out_of_line();
32478            let handles_before = decoder.remaining_handles();
32479            if let Some((inlined, num_bytes, num_handles)) =
32480                fidl::encoding::decode_envelope_header(decoder, next_offset)?
32481            {
32482                let member_inline_size =
32483                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
32484                if inlined != (member_inline_size <= 4) {
32485                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
32486                }
32487                let inner_offset;
32488                let mut inner_depth = depth.clone();
32489                if inlined {
32490                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
32491                    inner_offset = next_offset;
32492                } else {
32493                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
32494                    inner_depth.increment()?;
32495                }
32496                let val_ref = self.is_child.get_or_insert_with(|| fidl::new_empty!(bool, D));
32497                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
32498                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
32499                {
32500                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
32501                }
32502                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
32503                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
32504                }
32505            }
32506
32507            next_offset += envelope_size;
32508            _next_ordinal_to_read += 1;
32509            if next_offset >= end_offset {
32510                return Ok(());
32511            }
32512
32513            // Decode unknown envelopes for gaps in ordinals.
32514            while _next_ordinal_to_read < 3 {
32515                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
32516                _next_ordinal_to_read += 1;
32517                next_offset += envelope_size;
32518            }
32519
32520            let next_out_of_line = decoder.next_out_of_line();
32521            let handles_before = decoder.remaining_handles();
32522            if let Some((inlined, num_bytes, num_handles)) =
32523                fidl::encoding::decode_envelope_header(decoder, next_offset)?
32524            {
32525                let member_inline_size =
32526                    <HistoryTrackerNeighborEvent as fidl::encoding::TypeMarker>::inline_size(
32527                        decoder.context,
32528                    );
32529                if inlined != (member_inline_size <= 4) {
32530                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
32531                }
32532                let inner_offset;
32533                let mut inner_depth = depth.clone();
32534                if inlined {
32535                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
32536                    inner_offset = next_offset;
32537                } else {
32538                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
32539                    inner_depth.increment()?;
32540                }
32541                let val_ref = self
32542                    .event
32543                    .get_or_insert_with(|| fidl::new_empty!(HistoryTrackerNeighborEvent, D));
32544                fidl::decode!(
32545                    HistoryTrackerNeighborEvent,
32546                    D,
32547                    val_ref,
32548                    decoder,
32549                    inner_offset,
32550                    inner_depth
32551                )?;
32552                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
32553                {
32554                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
32555                }
32556                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
32557                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
32558                }
32559            }
32560
32561            next_offset += envelope_size;
32562            _next_ordinal_to_read += 1;
32563            if next_offset >= end_offset {
32564                return Ok(());
32565            }
32566
32567            // Decode unknown envelopes for gaps in ordinals.
32568            while _next_ordinal_to_read < 4 {
32569                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
32570                _next_ordinal_to_read += 1;
32571                next_offset += envelope_size;
32572            }
32573
32574            let next_out_of_line = decoder.next_out_of_line();
32575            let handles_before = decoder.remaining_handles();
32576            if let Some((inlined, num_bytes, num_handles)) =
32577                fidl::encoding::decode_envelope_header(decoder, next_offset)?
32578            {
32579                let member_inline_size =
32580                    <fidl::encoding::Vector<u8, 8> as fidl::encoding::TypeMarker>::inline_size(
32581                        decoder.context,
32582                    );
32583                if inlined != (member_inline_size <= 4) {
32584                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
32585                }
32586                let inner_offset;
32587                let mut inner_depth = depth.clone();
32588                if inlined {
32589                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
32590                    inner_offset = next_offset;
32591                } else {
32592                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
32593                    inner_depth.increment()?;
32594                }
32595                let val_ref = self
32596                    .extended_address
32597                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u8, 8>, D));
32598                fidl::decode!(fidl::encoding::Vector<u8, 8>, D, val_ref, decoder, inner_offset, inner_depth)?;
32599                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
32600                {
32601                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
32602                }
32603                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
32604                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
32605                }
32606            }
32607
32608            next_offset += envelope_size;
32609            _next_ordinal_to_read += 1;
32610            if next_offset >= end_offset {
32611                return Ok(());
32612            }
32613
32614            // Decode unknown envelopes for gaps in ordinals.
32615            while _next_ordinal_to_read < 5 {
32616                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
32617                _next_ordinal_to_read += 1;
32618                next_offset += envelope_size;
32619            }
32620
32621            let next_out_of_line = decoder.next_out_of_line();
32622            let handles_before = decoder.remaining_handles();
32623            if let Some((inlined, num_bytes, num_handles)) =
32624                fidl::encoding::decode_envelope_header(decoder, next_offset)?
32625            {
32626                let member_inline_size =
32627                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
32628                if inlined != (member_inline_size <= 4) {
32629                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
32630                }
32631                let inner_offset;
32632                let mut inner_depth = depth.clone();
32633                if inlined {
32634                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
32635                    inner_offset = next_offset;
32636                } else {
32637                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
32638                    inner_depth.increment()?;
32639                }
32640                let val_ref = self.rloc16.get_or_insert_with(|| fidl::new_empty!(u16, D));
32641                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
32642                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
32643                {
32644                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
32645                }
32646                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
32647                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
32648                }
32649            }
32650
32651            next_offset += envelope_size;
32652            _next_ordinal_to_read += 1;
32653            if next_offset >= end_offset {
32654                return Ok(());
32655            }
32656
32657            // Decode unknown envelopes for gaps in ordinals.
32658            while _next_ordinal_to_read < 6 {
32659                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
32660                _next_ordinal_to_read += 1;
32661                next_offset += envelope_size;
32662            }
32663
32664            let next_out_of_line = decoder.next_out_of_line();
32665            let handles_before = decoder.remaining_handles();
32666            if let Some((inlined, num_bytes, num_handles)) =
32667                fidl::encoding::decode_envelope_header(decoder, next_offset)?
32668            {
32669                let member_inline_size =
32670                    <ThreadLinkMode as fidl::encoding::TypeMarker>::inline_size(decoder.context);
32671                if inlined != (member_inline_size <= 4) {
32672                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
32673                }
32674                let inner_offset;
32675                let mut inner_depth = depth.clone();
32676                if inlined {
32677                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
32678                    inner_offset = next_offset;
32679                } else {
32680                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
32681                    inner_depth.increment()?;
32682                }
32683                let val_ref = self.mode.get_or_insert_with(|| fidl::new_empty!(ThreadLinkMode, D));
32684                fidl::decode!(ThreadLinkMode, D, val_ref, decoder, inner_offset, inner_depth)?;
32685                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
32686                {
32687                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
32688                }
32689                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
32690                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
32691                }
32692            }
32693
32694            next_offset += envelope_size;
32695            _next_ordinal_to_read += 1;
32696            if next_offset >= end_offset {
32697                return Ok(());
32698            }
32699
32700            // Decode unknown envelopes for gaps in ordinals.
32701            while _next_ordinal_to_read < 7 {
32702                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
32703                _next_ordinal_to_read += 1;
32704                next_offset += envelope_size;
32705            }
32706
32707            let next_out_of_line = decoder.next_out_of_line();
32708            let handles_before = decoder.remaining_handles();
32709            if let Some((inlined, num_bytes, num_handles)) =
32710                fidl::encoding::decode_envelope_header(decoder, next_offset)?
32711            {
32712                let member_inline_size =
32713                    <i32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
32714                if inlined != (member_inline_size <= 4) {
32715                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
32716                }
32717                let inner_offset;
32718                let mut inner_depth = depth.clone();
32719                if inlined {
32720                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
32721                    inner_offset = next_offset;
32722                } else {
32723                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
32724                    inner_depth.increment()?;
32725                }
32726                let val_ref = self.avg_rssi.get_or_insert_with(|| fidl::new_empty!(i32, D));
32727                fidl::decode!(i32, D, val_ref, decoder, inner_offset, inner_depth)?;
32728                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
32729                {
32730                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
32731                }
32732                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
32733                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
32734                }
32735            }
32736
32737            next_offset += envelope_size;
32738
32739            // Decode the remaining unknown envelopes.
32740            while next_offset < end_offset {
32741                _next_ordinal_to_read += 1;
32742                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
32743                next_offset += envelope_size;
32744            }
32745
32746            Ok(())
32747        }
32748    }
32749
32750    impl ThreadNetDataPrefixInfoEntry {
32751        #[inline(always)]
32752        fn max_ordinal_present(&self) -> u64 {
32753            if let Some(_) = self.on_mesh_prefix {
32754                return 3;
32755            }
32756            if let Some(_) = self.event {
32757                return 2;
32758            }
32759            if let Some(_) = self.age {
32760                return 1;
32761            }
32762            0
32763        }
32764    }
32765
32766    impl fidl::encoding::ValueTypeMarker for ThreadNetDataPrefixInfoEntry {
32767        type Borrowed<'a> = &'a Self;
32768        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
32769            value
32770        }
32771    }
32772
32773    unsafe impl fidl::encoding::TypeMarker for ThreadNetDataPrefixInfoEntry {
32774        type Owned = Self;
32775
32776        #[inline(always)]
32777        fn inline_align(_context: fidl::encoding::Context) -> usize {
32778            8
32779        }
32780
32781        #[inline(always)]
32782        fn inline_size(_context: fidl::encoding::Context) -> usize {
32783            16
32784        }
32785    }
32786
32787    unsafe impl<D: fidl::encoding::ResourceDialect>
32788        fidl::encoding::Encode<ThreadNetDataPrefixInfoEntry, D> for &ThreadNetDataPrefixInfoEntry
32789    {
32790        unsafe fn encode(
32791            self,
32792            encoder: &mut fidl::encoding::Encoder<'_, D>,
32793            offset: usize,
32794            mut depth: fidl::encoding::Depth,
32795        ) -> fidl::Result<()> {
32796            encoder.debug_check_bounds::<ThreadNetDataPrefixInfoEntry>(offset);
32797            // Vector header
32798            let max_ordinal: u64 = self.max_ordinal_present();
32799            encoder.write_num(max_ordinal, offset);
32800            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
32801            // Calling encoder.out_of_line_offset(0) is not allowed.
32802            if max_ordinal == 0 {
32803                return Ok(());
32804            }
32805            depth.increment()?;
32806            let envelope_size = 8;
32807            let bytes_len = max_ordinal as usize * envelope_size;
32808            #[allow(unused_variables)]
32809            let offset = encoder.out_of_line_offset(bytes_len);
32810            let mut _prev_end_offset: usize = 0;
32811            if 1 > max_ordinal {
32812                return Ok(());
32813            }
32814
32815            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
32816            // are envelope_size bytes.
32817            let cur_offset: usize = (1 - 1) * envelope_size;
32818
32819            // Zero reserved fields.
32820            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
32821
32822            // Safety:
32823            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
32824            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
32825            //   envelope_size bytes, there is always sufficient room.
32826            fidl::encoding::encode_in_envelope_optional::<i64, D>(
32827                self.age.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
32828                encoder,
32829                offset + cur_offset,
32830                depth,
32831            )?;
32832
32833            _prev_end_offset = cur_offset + envelope_size;
32834            if 2 > max_ordinal {
32835                return Ok(());
32836            }
32837
32838            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
32839            // are envelope_size bytes.
32840            let cur_offset: usize = (2 - 1) * envelope_size;
32841
32842            // Zero reserved fields.
32843            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
32844
32845            // Safety:
32846            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
32847            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
32848            //   envelope_size bytes, there is always sufficient room.
32849            fidl::encoding::encode_in_envelope_optional::<HistoryTrackerNetDataEvent, D>(
32850                self.event
32851                    .as_ref()
32852                    .map(<HistoryTrackerNetDataEvent as fidl::encoding::ValueTypeMarker>::borrow),
32853                encoder,
32854                offset + cur_offset,
32855                depth,
32856            )?;
32857
32858            _prev_end_offset = cur_offset + envelope_size;
32859            if 3 > max_ordinal {
32860                return Ok(());
32861            }
32862
32863            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
32864            // are envelope_size bytes.
32865            let cur_offset: usize = (3 - 1) * envelope_size;
32866
32867            // Zero reserved fields.
32868            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
32869
32870            // Safety:
32871            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
32872            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
32873            //   envelope_size bytes, there is always sufficient room.
32874            fidl::encoding::encode_in_envelope_optional::<BorderRouterConfig, D>(
32875                self.on_mesh_prefix
32876                    .as_ref()
32877                    .map(<BorderRouterConfig as fidl::encoding::ValueTypeMarker>::borrow),
32878                encoder,
32879                offset + cur_offset,
32880                depth,
32881            )?;
32882
32883            _prev_end_offset = cur_offset + envelope_size;
32884
32885            Ok(())
32886        }
32887    }
32888
32889    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
32890        for ThreadNetDataPrefixInfoEntry
32891    {
32892        #[inline(always)]
32893        fn new_empty() -> Self {
32894            Self::default()
32895        }
32896
32897        unsafe fn decode(
32898            &mut self,
32899            decoder: &mut fidl::encoding::Decoder<'_, D>,
32900            offset: usize,
32901            mut depth: fidl::encoding::Depth,
32902        ) -> fidl::Result<()> {
32903            decoder.debug_check_bounds::<Self>(offset);
32904            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
32905                None => return Err(fidl::Error::NotNullable),
32906                Some(len) => len,
32907            };
32908            // Calling decoder.out_of_line_offset(0) is not allowed.
32909            if len == 0 {
32910                return Ok(());
32911            };
32912            depth.increment()?;
32913            let envelope_size = 8;
32914            let bytes_len = len * envelope_size;
32915            let offset = decoder.out_of_line_offset(bytes_len)?;
32916            // Decode the envelope for each type.
32917            let mut _next_ordinal_to_read = 0;
32918            let mut next_offset = offset;
32919            let end_offset = offset + bytes_len;
32920            _next_ordinal_to_read += 1;
32921            if next_offset >= end_offset {
32922                return Ok(());
32923            }
32924
32925            // Decode unknown envelopes for gaps in ordinals.
32926            while _next_ordinal_to_read < 1 {
32927                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
32928                _next_ordinal_to_read += 1;
32929                next_offset += envelope_size;
32930            }
32931
32932            let next_out_of_line = decoder.next_out_of_line();
32933            let handles_before = decoder.remaining_handles();
32934            if let Some((inlined, num_bytes, num_handles)) =
32935                fidl::encoding::decode_envelope_header(decoder, next_offset)?
32936            {
32937                let member_inline_size =
32938                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
32939                if inlined != (member_inline_size <= 4) {
32940                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
32941                }
32942                let inner_offset;
32943                let mut inner_depth = depth.clone();
32944                if inlined {
32945                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
32946                    inner_offset = next_offset;
32947                } else {
32948                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
32949                    inner_depth.increment()?;
32950                }
32951                let val_ref = self.age.get_or_insert_with(|| fidl::new_empty!(i64, D));
32952                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
32953                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
32954                {
32955                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
32956                }
32957                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
32958                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
32959                }
32960            }
32961
32962            next_offset += envelope_size;
32963            _next_ordinal_to_read += 1;
32964            if next_offset >= end_offset {
32965                return Ok(());
32966            }
32967
32968            // Decode unknown envelopes for gaps in ordinals.
32969            while _next_ordinal_to_read < 2 {
32970                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
32971                _next_ordinal_to_read += 1;
32972                next_offset += envelope_size;
32973            }
32974
32975            let next_out_of_line = decoder.next_out_of_line();
32976            let handles_before = decoder.remaining_handles();
32977            if let Some((inlined, num_bytes, num_handles)) =
32978                fidl::encoding::decode_envelope_header(decoder, next_offset)?
32979            {
32980                let member_inline_size =
32981                    <HistoryTrackerNetDataEvent as fidl::encoding::TypeMarker>::inline_size(
32982                        decoder.context,
32983                    );
32984                if inlined != (member_inline_size <= 4) {
32985                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
32986                }
32987                let inner_offset;
32988                let mut inner_depth = depth.clone();
32989                if inlined {
32990                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
32991                    inner_offset = next_offset;
32992                } else {
32993                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
32994                    inner_depth.increment()?;
32995                }
32996                let val_ref = self
32997                    .event
32998                    .get_or_insert_with(|| fidl::new_empty!(HistoryTrackerNetDataEvent, D));
32999                fidl::decode!(
33000                    HistoryTrackerNetDataEvent,
33001                    D,
33002                    val_ref,
33003                    decoder,
33004                    inner_offset,
33005                    inner_depth
33006                )?;
33007                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
33008                {
33009                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
33010                }
33011                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
33012                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
33013                }
33014            }
33015
33016            next_offset += envelope_size;
33017            _next_ordinal_to_read += 1;
33018            if next_offset >= end_offset {
33019                return Ok(());
33020            }
33021
33022            // Decode unknown envelopes for gaps in ordinals.
33023            while _next_ordinal_to_read < 3 {
33024                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
33025                _next_ordinal_to_read += 1;
33026                next_offset += envelope_size;
33027            }
33028
33029            let next_out_of_line = decoder.next_out_of_line();
33030            let handles_before = decoder.remaining_handles();
33031            if let Some((inlined, num_bytes, num_handles)) =
33032                fidl::encoding::decode_envelope_header(decoder, next_offset)?
33033            {
33034                let member_inline_size =
33035                    <BorderRouterConfig as fidl::encoding::TypeMarker>::inline_size(
33036                        decoder.context,
33037                    );
33038                if inlined != (member_inline_size <= 4) {
33039                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
33040                }
33041                let inner_offset;
33042                let mut inner_depth = depth.clone();
33043                if inlined {
33044                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
33045                    inner_offset = next_offset;
33046                } else {
33047                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
33048                    inner_depth.increment()?;
33049                }
33050                let val_ref = self
33051                    .on_mesh_prefix
33052                    .get_or_insert_with(|| fidl::new_empty!(BorderRouterConfig, D));
33053                fidl::decode!(BorderRouterConfig, D, val_ref, decoder, inner_offset, inner_depth)?;
33054                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
33055                {
33056                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
33057                }
33058                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
33059                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
33060                }
33061            }
33062
33063            next_offset += envelope_size;
33064
33065            // Decode the remaining unknown envelopes.
33066            while next_offset < end_offset {
33067                _next_ordinal_to_read += 1;
33068                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
33069                next_offset += envelope_size;
33070            }
33071
33072            Ok(())
33073        }
33074    }
33075
33076    impl ThreadNetDataRouteInfoEntry {
33077        #[inline(always)]
33078        fn max_ordinal_present(&self) -> u64 {
33079            if let Some(_) = self.external_route {
33080                return 3;
33081            }
33082            if let Some(_) = self.event {
33083                return 2;
33084            }
33085            if let Some(_) = self.age {
33086                return 1;
33087            }
33088            0
33089        }
33090    }
33091
33092    impl fidl::encoding::ValueTypeMarker for ThreadNetDataRouteInfoEntry {
33093        type Borrowed<'a> = &'a Self;
33094        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
33095            value
33096        }
33097    }
33098
33099    unsafe impl fidl::encoding::TypeMarker for ThreadNetDataRouteInfoEntry {
33100        type Owned = Self;
33101
33102        #[inline(always)]
33103        fn inline_align(_context: fidl::encoding::Context) -> usize {
33104            8
33105        }
33106
33107        #[inline(always)]
33108        fn inline_size(_context: fidl::encoding::Context) -> usize {
33109            16
33110        }
33111    }
33112
33113    unsafe impl<D: fidl::encoding::ResourceDialect>
33114        fidl::encoding::Encode<ThreadNetDataRouteInfoEntry, D> for &ThreadNetDataRouteInfoEntry
33115    {
33116        unsafe fn encode(
33117            self,
33118            encoder: &mut fidl::encoding::Encoder<'_, D>,
33119            offset: usize,
33120            mut depth: fidl::encoding::Depth,
33121        ) -> fidl::Result<()> {
33122            encoder.debug_check_bounds::<ThreadNetDataRouteInfoEntry>(offset);
33123            // Vector header
33124            let max_ordinal: u64 = self.max_ordinal_present();
33125            encoder.write_num(max_ordinal, offset);
33126            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
33127            // Calling encoder.out_of_line_offset(0) is not allowed.
33128            if max_ordinal == 0 {
33129                return Ok(());
33130            }
33131            depth.increment()?;
33132            let envelope_size = 8;
33133            let bytes_len = max_ordinal as usize * envelope_size;
33134            #[allow(unused_variables)]
33135            let offset = encoder.out_of_line_offset(bytes_len);
33136            let mut _prev_end_offset: usize = 0;
33137            if 1 > max_ordinal {
33138                return Ok(());
33139            }
33140
33141            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
33142            // are envelope_size bytes.
33143            let cur_offset: usize = (1 - 1) * envelope_size;
33144
33145            // Zero reserved fields.
33146            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
33147
33148            // Safety:
33149            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
33150            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
33151            //   envelope_size bytes, there is always sufficient room.
33152            fidl::encoding::encode_in_envelope_optional::<i64, D>(
33153                self.age.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
33154                encoder,
33155                offset + cur_offset,
33156                depth,
33157            )?;
33158
33159            _prev_end_offset = cur_offset + envelope_size;
33160            if 2 > max_ordinal {
33161                return Ok(());
33162            }
33163
33164            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
33165            // are envelope_size bytes.
33166            let cur_offset: usize = (2 - 1) * envelope_size;
33167
33168            // Zero reserved fields.
33169            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
33170
33171            // Safety:
33172            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
33173            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
33174            //   envelope_size bytes, there is always sufficient room.
33175            fidl::encoding::encode_in_envelope_optional::<HistoryTrackerNetDataEvent, D>(
33176                self.event
33177                    .as_ref()
33178                    .map(<HistoryTrackerNetDataEvent as fidl::encoding::ValueTypeMarker>::borrow),
33179                encoder,
33180                offset + cur_offset,
33181                depth,
33182            )?;
33183
33184            _prev_end_offset = cur_offset + envelope_size;
33185            if 3 > max_ordinal {
33186                return Ok(());
33187            }
33188
33189            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
33190            // are envelope_size bytes.
33191            let cur_offset: usize = (3 - 1) * envelope_size;
33192
33193            // Zero reserved fields.
33194            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
33195
33196            // Safety:
33197            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
33198            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
33199            //   envelope_size bytes, there is always sufficient room.
33200            fidl::encoding::encode_in_envelope_optional::<ExternalRouteConfig, D>(
33201                self.external_route
33202                    .as_ref()
33203                    .map(<ExternalRouteConfig as fidl::encoding::ValueTypeMarker>::borrow),
33204                encoder,
33205                offset + cur_offset,
33206                depth,
33207            )?;
33208
33209            _prev_end_offset = cur_offset + envelope_size;
33210
33211            Ok(())
33212        }
33213    }
33214
33215    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
33216        for ThreadNetDataRouteInfoEntry
33217    {
33218        #[inline(always)]
33219        fn new_empty() -> Self {
33220            Self::default()
33221        }
33222
33223        unsafe fn decode(
33224            &mut self,
33225            decoder: &mut fidl::encoding::Decoder<'_, D>,
33226            offset: usize,
33227            mut depth: fidl::encoding::Depth,
33228        ) -> fidl::Result<()> {
33229            decoder.debug_check_bounds::<Self>(offset);
33230            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
33231                None => return Err(fidl::Error::NotNullable),
33232                Some(len) => len,
33233            };
33234            // Calling decoder.out_of_line_offset(0) is not allowed.
33235            if len == 0 {
33236                return Ok(());
33237            };
33238            depth.increment()?;
33239            let envelope_size = 8;
33240            let bytes_len = len * envelope_size;
33241            let offset = decoder.out_of_line_offset(bytes_len)?;
33242            // Decode the envelope for each type.
33243            let mut _next_ordinal_to_read = 0;
33244            let mut next_offset = offset;
33245            let end_offset = offset + bytes_len;
33246            _next_ordinal_to_read += 1;
33247            if next_offset >= end_offset {
33248                return Ok(());
33249            }
33250
33251            // Decode unknown envelopes for gaps in ordinals.
33252            while _next_ordinal_to_read < 1 {
33253                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
33254                _next_ordinal_to_read += 1;
33255                next_offset += envelope_size;
33256            }
33257
33258            let next_out_of_line = decoder.next_out_of_line();
33259            let handles_before = decoder.remaining_handles();
33260            if let Some((inlined, num_bytes, num_handles)) =
33261                fidl::encoding::decode_envelope_header(decoder, next_offset)?
33262            {
33263                let member_inline_size =
33264                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
33265                if inlined != (member_inline_size <= 4) {
33266                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
33267                }
33268                let inner_offset;
33269                let mut inner_depth = depth.clone();
33270                if inlined {
33271                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
33272                    inner_offset = next_offset;
33273                } else {
33274                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
33275                    inner_depth.increment()?;
33276                }
33277                let val_ref = self.age.get_or_insert_with(|| fidl::new_empty!(i64, D));
33278                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
33279                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
33280                {
33281                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
33282                }
33283                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
33284                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
33285                }
33286            }
33287
33288            next_offset += envelope_size;
33289            _next_ordinal_to_read += 1;
33290            if next_offset >= end_offset {
33291                return Ok(());
33292            }
33293
33294            // Decode unknown envelopes for gaps in ordinals.
33295            while _next_ordinal_to_read < 2 {
33296                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
33297                _next_ordinal_to_read += 1;
33298                next_offset += envelope_size;
33299            }
33300
33301            let next_out_of_line = decoder.next_out_of_line();
33302            let handles_before = decoder.remaining_handles();
33303            if let Some((inlined, num_bytes, num_handles)) =
33304                fidl::encoding::decode_envelope_header(decoder, next_offset)?
33305            {
33306                let member_inline_size =
33307                    <HistoryTrackerNetDataEvent as fidl::encoding::TypeMarker>::inline_size(
33308                        decoder.context,
33309                    );
33310                if inlined != (member_inline_size <= 4) {
33311                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
33312                }
33313                let inner_offset;
33314                let mut inner_depth = depth.clone();
33315                if inlined {
33316                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
33317                    inner_offset = next_offset;
33318                } else {
33319                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
33320                    inner_depth.increment()?;
33321                }
33322                let val_ref = self
33323                    .event
33324                    .get_or_insert_with(|| fidl::new_empty!(HistoryTrackerNetDataEvent, D));
33325                fidl::decode!(
33326                    HistoryTrackerNetDataEvent,
33327                    D,
33328                    val_ref,
33329                    decoder,
33330                    inner_offset,
33331                    inner_depth
33332                )?;
33333                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
33334                {
33335                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
33336                }
33337                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
33338                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
33339                }
33340            }
33341
33342            next_offset += envelope_size;
33343            _next_ordinal_to_read += 1;
33344            if next_offset >= end_offset {
33345                return Ok(());
33346            }
33347
33348            // Decode unknown envelopes for gaps in ordinals.
33349            while _next_ordinal_to_read < 3 {
33350                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
33351                _next_ordinal_to_read += 1;
33352                next_offset += envelope_size;
33353            }
33354
33355            let next_out_of_line = decoder.next_out_of_line();
33356            let handles_before = decoder.remaining_handles();
33357            if let Some((inlined, num_bytes, num_handles)) =
33358                fidl::encoding::decode_envelope_header(decoder, next_offset)?
33359            {
33360                let member_inline_size =
33361                    <ExternalRouteConfig as fidl::encoding::TypeMarker>::inline_size(
33362                        decoder.context,
33363                    );
33364                if inlined != (member_inline_size <= 4) {
33365                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
33366                }
33367                let inner_offset;
33368                let mut inner_depth = depth.clone();
33369                if inlined {
33370                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
33371                    inner_offset = next_offset;
33372                } else {
33373                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
33374                    inner_depth.increment()?;
33375                }
33376                let val_ref = self
33377                    .external_route
33378                    .get_or_insert_with(|| fidl::new_empty!(ExternalRouteConfig, D));
33379                fidl::decode!(ExternalRouteConfig, D, val_ref, decoder, inner_offset, inner_depth)?;
33380                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
33381                {
33382                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
33383                }
33384                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
33385                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
33386                }
33387            }
33388
33389            next_offset += envelope_size;
33390
33391            // Decode the remaining unknown envelopes.
33392            while next_offset < end_offset {
33393                _next_ordinal_to_read += 1;
33394                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
33395                next_offset += envelope_size;
33396            }
33397
33398            Ok(())
33399        }
33400    }
33401
33402    impl ThreadNetworkInfoEntry {
33403        #[inline(always)]
33404        fn max_ordinal_present(&self) -> u64 {
33405            if let Some(_) = self.partition_id {
33406                return 5;
33407            }
33408            if let Some(_) = self.rloc16 {
33409                return 4;
33410            }
33411            if let Some(_) = self.mode {
33412                return 3;
33413            }
33414            if let Some(_) = self.role {
33415                return 2;
33416            }
33417            if let Some(_) = self.age {
33418                return 1;
33419            }
33420            0
33421        }
33422    }
33423
33424    impl fidl::encoding::ValueTypeMarker for ThreadNetworkInfoEntry {
33425        type Borrowed<'a> = &'a Self;
33426        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
33427            value
33428        }
33429    }
33430
33431    unsafe impl fidl::encoding::TypeMarker for ThreadNetworkInfoEntry {
33432        type Owned = Self;
33433
33434        #[inline(always)]
33435        fn inline_align(_context: fidl::encoding::Context) -> usize {
33436            8
33437        }
33438
33439        #[inline(always)]
33440        fn inline_size(_context: fidl::encoding::Context) -> usize {
33441            16
33442        }
33443    }
33444
33445    unsafe impl<D: fidl::encoding::ResourceDialect>
33446        fidl::encoding::Encode<ThreadNetworkInfoEntry, D> for &ThreadNetworkInfoEntry
33447    {
33448        unsafe fn encode(
33449            self,
33450            encoder: &mut fidl::encoding::Encoder<'_, D>,
33451            offset: usize,
33452            mut depth: fidl::encoding::Depth,
33453        ) -> fidl::Result<()> {
33454            encoder.debug_check_bounds::<ThreadNetworkInfoEntry>(offset);
33455            // Vector header
33456            let max_ordinal: u64 = self.max_ordinal_present();
33457            encoder.write_num(max_ordinal, offset);
33458            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
33459            // Calling encoder.out_of_line_offset(0) is not allowed.
33460            if max_ordinal == 0 {
33461                return Ok(());
33462            }
33463            depth.increment()?;
33464            let envelope_size = 8;
33465            let bytes_len = max_ordinal as usize * envelope_size;
33466            #[allow(unused_variables)]
33467            let offset = encoder.out_of_line_offset(bytes_len);
33468            let mut _prev_end_offset: usize = 0;
33469            if 1 > max_ordinal {
33470                return Ok(());
33471            }
33472
33473            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
33474            // are envelope_size bytes.
33475            let cur_offset: usize = (1 - 1) * envelope_size;
33476
33477            // Zero reserved fields.
33478            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
33479
33480            // Safety:
33481            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
33482            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
33483            //   envelope_size bytes, there is always sufficient room.
33484            fidl::encoding::encode_in_envelope_optional::<i64, D>(
33485                self.age.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
33486                encoder,
33487                offset + cur_offset,
33488                depth,
33489            )?;
33490
33491            _prev_end_offset = cur_offset + envelope_size;
33492            if 2 > max_ordinal {
33493                return Ok(());
33494            }
33495
33496            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
33497            // are envelope_size bytes.
33498            let cur_offset: usize = (2 - 1) * envelope_size;
33499
33500            // Zero reserved fields.
33501            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
33502
33503            // Safety:
33504            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
33505            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
33506            //   envelope_size bytes, there is always sufficient room.
33507            fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_lowpan_device_common::Role, D>(
33508            self.role.as_ref().map(<fidl_fuchsia_lowpan_device_common::Role as fidl::encoding::ValueTypeMarker>::borrow),
33509            encoder, offset + cur_offset, depth
33510        )?;
33511
33512            _prev_end_offset = cur_offset + envelope_size;
33513            if 3 > max_ordinal {
33514                return Ok(());
33515            }
33516
33517            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
33518            // are envelope_size bytes.
33519            let cur_offset: usize = (3 - 1) * envelope_size;
33520
33521            // Zero reserved fields.
33522            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
33523
33524            // Safety:
33525            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
33526            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
33527            //   envelope_size bytes, there is always sufficient room.
33528            fidl::encoding::encode_in_envelope_optional::<ThreadLinkMode, D>(
33529                self.mode.as_ref().map(<ThreadLinkMode as fidl::encoding::ValueTypeMarker>::borrow),
33530                encoder,
33531                offset + cur_offset,
33532                depth,
33533            )?;
33534
33535            _prev_end_offset = cur_offset + envelope_size;
33536            if 4 > max_ordinal {
33537                return Ok(());
33538            }
33539
33540            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
33541            // are envelope_size bytes.
33542            let cur_offset: usize = (4 - 1) * envelope_size;
33543
33544            // Zero reserved fields.
33545            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
33546
33547            // Safety:
33548            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
33549            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
33550            //   envelope_size bytes, there is always sufficient room.
33551            fidl::encoding::encode_in_envelope_optional::<u16, D>(
33552                self.rloc16.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
33553                encoder,
33554                offset + cur_offset,
33555                depth,
33556            )?;
33557
33558            _prev_end_offset = cur_offset + envelope_size;
33559            if 5 > max_ordinal {
33560                return Ok(());
33561            }
33562
33563            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
33564            // are envelope_size bytes.
33565            let cur_offset: usize = (5 - 1) * envelope_size;
33566
33567            // Zero reserved fields.
33568            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
33569
33570            // Safety:
33571            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
33572            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
33573            //   envelope_size bytes, there is always sufficient room.
33574            fidl::encoding::encode_in_envelope_optional::<u32, D>(
33575                self.partition_id.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
33576                encoder,
33577                offset + cur_offset,
33578                depth,
33579            )?;
33580
33581            _prev_end_offset = cur_offset + envelope_size;
33582
33583            Ok(())
33584        }
33585    }
33586
33587    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
33588        for ThreadNetworkInfoEntry
33589    {
33590        #[inline(always)]
33591        fn new_empty() -> Self {
33592            Self::default()
33593        }
33594
33595        unsafe fn decode(
33596            &mut self,
33597            decoder: &mut fidl::encoding::Decoder<'_, D>,
33598            offset: usize,
33599            mut depth: fidl::encoding::Depth,
33600        ) -> fidl::Result<()> {
33601            decoder.debug_check_bounds::<Self>(offset);
33602            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
33603                None => return Err(fidl::Error::NotNullable),
33604                Some(len) => len,
33605            };
33606            // Calling decoder.out_of_line_offset(0) is not allowed.
33607            if len == 0 {
33608                return Ok(());
33609            };
33610            depth.increment()?;
33611            let envelope_size = 8;
33612            let bytes_len = len * envelope_size;
33613            let offset = decoder.out_of_line_offset(bytes_len)?;
33614            // Decode the envelope for each type.
33615            let mut _next_ordinal_to_read = 0;
33616            let mut next_offset = offset;
33617            let end_offset = offset + bytes_len;
33618            _next_ordinal_to_read += 1;
33619            if next_offset >= end_offset {
33620                return Ok(());
33621            }
33622
33623            // Decode unknown envelopes for gaps in ordinals.
33624            while _next_ordinal_to_read < 1 {
33625                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
33626                _next_ordinal_to_read += 1;
33627                next_offset += envelope_size;
33628            }
33629
33630            let next_out_of_line = decoder.next_out_of_line();
33631            let handles_before = decoder.remaining_handles();
33632            if let Some((inlined, num_bytes, num_handles)) =
33633                fidl::encoding::decode_envelope_header(decoder, next_offset)?
33634            {
33635                let member_inline_size =
33636                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
33637                if inlined != (member_inline_size <= 4) {
33638                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
33639                }
33640                let inner_offset;
33641                let mut inner_depth = depth.clone();
33642                if inlined {
33643                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
33644                    inner_offset = next_offset;
33645                } else {
33646                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
33647                    inner_depth.increment()?;
33648                }
33649                let val_ref = self.age.get_or_insert_with(|| fidl::new_empty!(i64, D));
33650                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
33651                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
33652                {
33653                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
33654                }
33655                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
33656                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
33657                }
33658            }
33659
33660            next_offset += envelope_size;
33661            _next_ordinal_to_read += 1;
33662            if next_offset >= end_offset {
33663                return Ok(());
33664            }
33665
33666            // Decode unknown envelopes for gaps in ordinals.
33667            while _next_ordinal_to_read < 2 {
33668                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
33669                _next_ordinal_to_read += 1;
33670                next_offset += envelope_size;
33671            }
33672
33673            let next_out_of_line = decoder.next_out_of_line();
33674            let handles_before = decoder.remaining_handles();
33675            if let Some((inlined, num_bytes, num_handles)) =
33676                fidl::encoding::decode_envelope_header(decoder, next_offset)?
33677            {
33678                let member_inline_size = <fidl_fuchsia_lowpan_device_common::Role as fidl::encoding::TypeMarker>::inline_size(decoder.context);
33679                if inlined != (member_inline_size <= 4) {
33680                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
33681                }
33682                let inner_offset;
33683                let mut inner_depth = depth.clone();
33684                if inlined {
33685                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
33686                    inner_offset = next_offset;
33687                } else {
33688                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
33689                    inner_depth.increment()?;
33690                }
33691                let val_ref = self.role.get_or_insert_with(|| {
33692                    fidl::new_empty!(fidl_fuchsia_lowpan_device_common::Role, D)
33693                });
33694                fidl::decode!(
33695                    fidl_fuchsia_lowpan_device_common::Role,
33696                    D,
33697                    val_ref,
33698                    decoder,
33699                    inner_offset,
33700                    inner_depth
33701                )?;
33702                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
33703                {
33704                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
33705                }
33706                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
33707                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
33708                }
33709            }
33710
33711            next_offset += envelope_size;
33712            _next_ordinal_to_read += 1;
33713            if next_offset >= end_offset {
33714                return Ok(());
33715            }
33716
33717            // Decode unknown envelopes for gaps in ordinals.
33718            while _next_ordinal_to_read < 3 {
33719                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
33720                _next_ordinal_to_read += 1;
33721                next_offset += envelope_size;
33722            }
33723
33724            let next_out_of_line = decoder.next_out_of_line();
33725            let handles_before = decoder.remaining_handles();
33726            if let Some((inlined, num_bytes, num_handles)) =
33727                fidl::encoding::decode_envelope_header(decoder, next_offset)?
33728            {
33729                let member_inline_size =
33730                    <ThreadLinkMode as fidl::encoding::TypeMarker>::inline_size(decoder.context);
33731                if inlined != (member_inline_size <= 4) {
33732                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
33733                }
33734                let inner_offset;
33735                let mut inner_depth = depth.clone();
33736                if inlined {
33737                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
33738                    inner_offset = next_offset;
33739                } else {
33740                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
33741                    inner_depth.increment()?;
33742                }
33743                let val_ref = self.mode.get_or_insert_with(|| fidl::new_empty!(ThreadLinkMode, D));
33744                fidl::decode!(ThreadLinkMode, D, val_ref, decoder, inner_offset, inner_depth)?;
33745                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
33746                {
33747                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
33748                }
33749                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
33750                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
33751                }
33752            }
33753
33754            next_offset += envelope_size;
33755            _next_ordinal_to_read += 1;
33756            if next_offset >= end_offset {
33757                return Ok(());
33758            }
33759
33760            // Decode unknown envelopes for gaps in ordinals.
33761            while _next_ordinal_to_read < 4 {
33762                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
33763                _next_ordinal_to_read += 1;
33764                next_offset += envelope_size;
33765            }
33766
33767            let next_out_of_line = decoder.next_out_of_line();
33768            let handles_before = decoder.remaining_handles();
33769            if let Some((inlined, num_bytes, num_handles)) =
33770                fidl::encoding::decode_envelope_header(decoder, next_offset)?
33771            {
33772                let member_inline_size =
33773                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
33774                if inlined != (member_inline_size <= 4) {
33775                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
33776                }
33777                let inner_offset;
33778                let mut inner_depth = depth.clone();
33779                if inlined {
33780                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
33781                    inner_offset = next_offset;
33782                } else {
33783                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
33784                    inner_depth.increment()?;
33785                }
33786                let val_ref = self.rloc16.get_or_insert_with(|| fidl::new_empty!(u16, D));
33787                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
33788                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
33789                {
33790                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
33791                }
33792                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
33793                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
33794                }
33795            }
33796
33797            next_offset += envelope_size;
33798            _next_ordinal_to_read += 1;
33799            if next_offset >= end_offset {
33800                return Ok(());
33801            }
33802
33803            // Decode unknown envelopes for gaps in ordinals.
33804            while _next_ordinal_to_read < 5 {
33805                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
33806                _next_ordinal_to_read += 1;
33807                next_offset += envelope_size;
33808            }
33809
33810            let next_out_of_line = decoder.next_out_of_line();
33811            let handles_before = decoder.remaining_handles();
33812            if let Some((inlined, num_bytes, num_handles)) =
33813                fidl::encoding::decode_envelope_header(decoder, next_offset)?
33814            {
33815                let member_inline_size =
33816                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
33817                if inlined != (member_inline_size <= 4) {
33818                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
33819                }
33820                let inner_offset;
33821                let mut inner_depth = depth.clone();
33822                if inlined {
33823                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
33824                    inner_offset = next_offset;
33825                } else {
33826                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
33827                    inner_depth.increment()?;
33828                }
33829                let val_ref = self.partition_id.get_or_insert_with(|| fidl::new_empty!(u32, D));
33830                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
33831                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
33832                {
33833                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
33834                }
33835                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
33836                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
33837                }
33838            }
33839
33840            next_offset += envelope_size;
33841
33842            // Decode the remaining unknown envelopes.
33843            while next_offset < end_offset {
33844                _next_ordinal_to_read += 1;
33845                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
33846                next_offset += envelope_size;
33847            }
33848
33849            Ok(())
33850        }
33851    }
33852
33853    impl ThreadRouterInfoEntry {
33854        #[inline(always)]
33855        fn max_ordinal_present(&self) -> u64 {
33856            if let Some(_) = self.new_path_cost {
33857                return 8;
33858            }
33859            if let Some(_) = self.old_path_cost {
33860                return 7;
33861            }
33862            if let Some(_) = self.next_hop_rloc16 {
33863                return 6;
33864            }
33865            if let Some(_) = self.next_hop_id {
33866                return 5;
33867            }
33868            if let Some(_) = self.router_rloc16 {
33869                return 4;
33870            }
33871            if let Some(_) = self.router_id {
33872                return 3;
33873            }
33874            if let Some(_) = self.event {
33875                return 2;
33876            }
33877            if let Some(_) = self.age {
33878                return 1;
33879            }
33880            0
33881        }
33882    }
33883
33884    impl fidl::encoding::ValueTypeMarker for ThreadRouterInfoEntry {
33885        type Borrowed<'a> = &'a Self;
33886        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
33887            value
33888        }
33889    }
33890
33891    unsafe impl fidl::encoding::TypeMarker for ThreadRouterInfoEntry {
33892        type Owned = Self;
33893
33894        #[inline(always)]
33895        fn inline_align(_context: fidl::encoding::Context) -> usize {
33896            8
33897        }
33898
33899        #[inline(always)]
33900        fn inline_size(_context: fidl::encoding::Context) -> usize {
33901            16
33902        }
33903    }
33904
33905    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<ThreadRouterInfoEntry, D>
33906        for &ThreadRouterInfoEntry
33907    {
33908        unsafe fn encode(
33909            self,
33910            encoder: &mut fidl::encoding::Encoder<'_, D>,
33911            offset: usize,
33912            mut depth: fidl::encoding::Depth,
33913        ) -> fidl::Result<()> {
33914            encoder.debug_check_bounds::<ThreadRouterInfoEntry>(offset);
33915            // Vector header
33916            let max_ordinal: u64 = self.max_ordinal_present();
33917            encoder.write_num(max_ordinal, offset);
33918            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
33919            // Calling encoder.out_of_line_offset(0) is not allowed.
33920            if max_ordinal == 0 {
33921                return Ok(());
33922            }
33923            depth.increment()?;
33924            let envelope_size = 8;
33925            let bytes_len = max_ordinal as usize * envelope_size;
33926            #[allow(unused_variables)]
33927            let offset = encoder.out_of_line_offset(bytes_len);
33928            let mut _prev_end_offset: usize = 0;
33929            if 1 > max_ordinal {
33930                return Ok(());
33931            }
33932
33933            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
33934            // are envelope_size bytes.
33935            let cur_offset: usize = (1 - 1) * envelope_size;
33936
33937            // Zero reserved fields.
33938            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
33939
33940            // Safety:
33941            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
33942            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
33943            //   envelope_size bytes, there is always sufficient room.
33944            fidl::encoding::encode_in_envelope_optional::<i64, D>(
33945                self.age.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
33946                encoder,
33947                offset + cur_offset,
33948                depth,
33949            )?;
33950
33951            _prev_end_offset = cur_offset + envelope_size;
33952            if 2 > max_ordinal {
33953                return Ok(());
33954            }
33955
33956            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
33957            // are envelope_size bytes.
33958            let cur_offset: usize = (2 - 1) * envelope_size;
33959
33960            // Zero reserved fields.
33961            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
33962
33963            // Safety:
33964            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
33965            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
33966            //   envelope_size bytes, there is always sufficient room.
33967            fidl::encoding::encode_in_envelope_optional::<HistoryTrackerRouterEvent, D>(
33968                self.event
33969                    .as_ref()
33970                    .map(<HistoryTrackerRouterEvent as fidl::encoding::ValueTypeMarker>::borrow),
33971                encoder,
33972                offset + cur_offset,
33973                depth,
33974            )?;
33975
33976            _prev_end_offset = cur_offset + envelope_size;
33977            if 3 > max_ordinal {
33978                return Ok(());
33979            }
33980
33981            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
33982            // are envelope_size bytes.
33983            let cur_offset: usize = (3 - 1) * envelope_size;
33984
33985            // Zero reserved fields.
33986            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
33987
33988            // Safety:
33989            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
33990            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
33991            //   envelope_size bytes, there is always sufficient room.
33992            fidl::encoding::encode_in_envelope_optional::<u8, D>(
33993                self.router_id.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
33994                encoder,
33995                offset + cur_offset,
33996                depth,
33997            )?;
33998
33999            _prev_end_offset = cur_offset + envelope_size;
34000            if 4 > max_ordinal {
34001                return Ok(());
34002            }
34003
34004            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
34005            // are envelope_size bytes.
34006            let cur_offset: usize = (4 - 1) * envelope_size;
34007
34008            // Zero reserved fields.
34009            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
34010
34011            // Safety:
34012            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
34013            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
34014            //   envelope_size bytes, there is always sufficient room.
34015            fidl::encoding::encode_in_envelope_optional::<u16, D>(
34016                self.router_rloc16.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
34017                encoder,
34018                offset + cur_offset,
34019                depth,
34020            )?;
34021
34022            _prev_end_offset = cur_offset + envelope_size;
34023            if 5 > max_ordinal {
34024                return Ok(());
34025            }
34026
34027            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
34028            // are envelope_size bytes.
34029            let cur_offset: usize = (5 - 1) * envelope_size;
34030
34031            // Zero reserved fields.
34032            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
34033
34034            // Safety:
34035            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
34036            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
34037            //   envelope_size bytes, there is always sufficient room.
34038            fidl::encoding::encode_in_envelope_optional::<u8, D>(
34039                self.next_hop_id.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
34040                encoder,
34041                offset + cur_offset,
34042                depth,
34043            )?;
34044
34045            _prev_end_offset = cur_offset + envelope_size;
34046            if 6 > max_ordinal {
34047                return Ok(());
34048            }
34049
34050            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
34051            // are envelope_size bytes.
34052            let cur_offset: usize = (6 - 1) * envelope_size;
34053
34054            // Zero reserved fields.
34055            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
34056
34057            // Safety:
34058            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
34059            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
34060            //   envelope_size bytes, there is always sufficient room.
34061            fidl::encoding::encode_in_envelope_optional::<u16, D>(
34062                self.next_hop_rloc16.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
34063                encoder,
34064                offset + cur_offset,
34065                depth,
34066            )?;
34067
34068            _prev_end_offset = cur_offset + envelope_size;
34069            if 7 > max_ordinal {
34070                return Ok(());
34071            }
34072
34073            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
34074            // are envelope_size bytes.
34075            let cur_offset: usize = (7 - 1) * envelope_size;
34076
34077            // Zero reserved fields.
34078            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
34079
34080            // Safety:
34081            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
34082            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
34083            //   envelope_size bytes, there is always sufficient room.
34084            fidl::encoding::encode_in_envelope_optional::<u8, D>(
34085                self.old_path_cost.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
34086                encoder,
34087                offset + cur_offset,
34088                depth,
34089            )?;
34090
34091            _prev_end_offset = cur_offset + envelope_size;
34092            if 8 > max_ordinal {
34093                return Ok(());
34094            }
34095
34096            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
34097            // are envelope_size bytes.
34098            let cur_offset: usize = (8 - 1) * envelope_size;
34099
34100            // Zero reserved fields.
34101            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
34102
34103            // Safety:
34104            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
34105            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
34106            //   envelope_size bytes, there is always sufficient room.
34107            fidl::encoding::encode_in_envelope_optional::<u8, D>(
34108                self.new_path_cost.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
34109                encoder,
34110                offset + cur_offset,
34111                depth,
34112            )?;
34113
34114            _prev_end_offset = cur_offset + envelope_size;
34115
34116            Ok(())
34117        }
34118    }
34119
34120    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ThreadRouterInfoEntry {
34121        #[inline(always)]
34122        fn new_empty() -> Self {
34123            Self::default()
34124        }
34125
34126        unsafe fn decode(
34127            &mut self,
34128            decoder: &mut fidl::encoding::Decoder<'_, D>,
34129            offset: usize,
34130            mut depth: fidl::encoding::Depth,
34131        ) -> fidl::Result<()> {
34132            decoder.debug_check_bounds::<Self>(offset);
34133            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
34134                None => return Err(fidl::Error::NotNullable),
34135                Some(len) => len,
34136            };
34137            // Calling decoder.out_of_line_offset(0) is not allowed.
34138            if len == 0 {
34139                return Ok(());
34140            };
34141            depth.increment()?;
34142            let envelope_size = 8;
34143            let bytes_len = len * envelope_size;
34144            let offset = decoder.out_of_line_offset(bytes_len)?;
34145            // Decode the envelope for each type.
34146            let mut _next_ordinal_to_read = 0;
34147            let mut next_offset = offset;
34148            let end_offset = offset + bytes_len;
34149            _next_ordinal_to_read += 1;
34150            if next_offset >= end_offset {
34151                return Ok(());
34152            }
34153
34154            // Decode unknown envelopes for gaps in ordinals.
34155            while _next_ordinal_to_read < 1 {
34156                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
34157                _next_ordinal_to_read += 1;
34158                next_offset += envelope_size;
34159            }
34160
34161            let next_out_of_line = decoder.next_out_of_line();
34162            let handles_before = decoder.remaining_handles();
34163            if let Some((inlined, num_bytes, num_handles)) =
34164                fidl::encoding::decode_envelope_header(decoder, next_offset)?
34165            {
34166                let member_inline_size =
34167                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
34168                if inlined != (member_inline_size <= 4) {
34169                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
34170                }
34171                let inner_offset;
34172                let mut inner_depth = depth.clone();
34173                if inlined {
34174                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
34175                    inner_offset = next_offset;
34176                } else {
34177                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
34178                    inner_depth.increment()?;
34179                }
34180                let val_ref = self.age.get_or_insert_with(|| fidl::new_empty!(i64, D));
34181                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
34182                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
34183                {
34184                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
34185                }
34186                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
34187                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
34188                }
34189            }
34190
34191            next_offset += envelope_size;
34192            _next_ordinal_to_read += 1;
34193            if next_offset >= end_offset {
34194                return Ok(());
34195            }
34196
34197            // Decode unknown envelopes for gaps in ordinals.
34198            while _next_ordinal_to_read < 2 {
34199                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
34200                _next_ordinal_to_read += 1;
34201                next_offset += envelope_size;
34202            }
34203
34204            let next_out_of_line = decoder.next_out_of_line();
34205            let handles_before = decoder.remaining_handles();
34206            if let Some((inlined, num_bytes, num_handles)) =
34207                fidl::encoding::decode_envelope_header(decoder, next_offset)?
34208            {
34209                let member_inline_size =
34210                    <HistoryTrackerRouterEvent as fidl::encoding::TypeMarker>::inline_size(
34211                        decoder.context,
34212                    );
34213                if inlined != (member_inline_size <= 4) {
34214                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
34215                }
34216                let inner_offset;
34217                let mut inner_depth = depth.clone();
34218                if inlined {
34219                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
34220                    inner_offset = next_offset;
34221                } else {
34222                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
34223                    inner_depth.increment()?;
34224                }
34225                let val_ref = self
34226                    .event
34227                    .get_or_insert_with(|| fidl::new_empty!(HistoryTrackerRouterEvent, D));
34228                fidl::decode!(
34229                    HistoryTrackerRouterEvent,
34230                    D,
34231                    val_ref,
34232                    decoder,
34233                    inner_offset,
34234                    inner_depth
34235                )?;
34236                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
34237                {
34238                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
34239                }
34240                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
34241                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
34242                }
34243            }
34244
34245            next_offset += envelope_size;
34246            _next_ordinal_to_read += 1;
34247            if next_offset >= end_offset {
34248                return Ok(());
34249            }
34250
34251            // Decode unknown envelopes for gaps in ordinals.
34252            while _next_ordinal_to_read < 3 {
34253                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
34254                _next_ordinal_to_read += 1;
34255                next_offset += envelope_size;
34256            }
34257
34258            let next_out_of_line = decoder.next_out_of_line();
34259            let handles_before = decoder.remaining_handles();
34260            if let Some((inlined, num_bytes, num_handles)) =
34261                fidl::encoding::decode_envelope_header(decoder, next_offset)?
34262            {
34263                let member_inline_size =
34264                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
34265                if inlined != (member_inline_size <= 4) {
34266                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
34267                }
34268                let inner_offset;
34269                let mut inner_depth = depth.clone();
34270                if inlined {
34271                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
34272                    inner_offset = next_offset;
34273                } else {
34274                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
34275                    inner_depth.increment()?;
34276                }
34277                let val_ref = self.router_id.get_or_insert_with(|| fidl::new_empty!(u8, D));
34278                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
34279                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
34280                {
34281                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
34282                }
34283                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
34284                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
34285                }
34286            }
34287
34288            next_offset += envelope_size;
34289            _next_ordinal_to_read += 1;
34290            if next_offset >= end_offset {
34291                return Ok(());
34292            }
34293
34294            // Decode unknown envelopes for gaps in ordinals.
34295            while _next_ordinal_to_read < 4 {
34296                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
34297                _next_ordinal_to_read += 1;
34298                next_offset += envelope_size;
34299            }
34300
34301            let next_out_of_line = decoder.next_out_of_line();
34302            let handles_before = decoder.remaining_handles();
34303            if let Some((inlined, num_bytes, num_handles)) =
34304                fidl::encoding::decode_envelope_header(decoder, next_offset)?
34305            {
34306                let member_inline_size =
34307                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
34308                if inlined != (member_inline_size <= 4) {
34309                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
34310                }
34311                let inner_offset;
34312                let mut inner_depth = depth.clone();
34313                if inlined {
34314                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
34315                    inner_offset = next_offset;
34316                } else {
34317                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
34318                    inner_depth.increment()?;
34319                }
34320                let val_ref = self.router_rloc16.get_or_insert_with(|| fidl::new_empty!(u16, D));
34321                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
34322                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
34323                {
34324                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
34325                }
34326                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
34327                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
34328                }
34329            }
34330
34331            next_offset += envelope_size;
34332            _next_ordinal_to_read += 1;
34333            if next_offset >= end_offset {
34334                return Ok(());
34335            }
34336
34337            // Decode unknown envelopes for gaps in ordinals.
34338            while _next_ordinal_to_read < 5 {
34339                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
34340                _next_ordinal_to_read += 1;
34341                next_offset += envelope_size;
34342            }
34343
34344            let next_out_of_line = decoder.next_out_of_line();
34345            let handles_before = decoder.remaining_handles();
34346            if let Some((inlined, num_bytes, num_handles)) =
34347                fidl::encoding::decode_envelope_header(decoder, next_offset)?
34348            {
34349                let member_inline_size =
34350                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
34351                if inlined != (member_inline_size <= 4) {
34352                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
34353                }
34354                let inner_offset;
34355                let mut inner_depth = depth.clone();
34356                if inlined {
34357                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
34358                    inner_offset = next_offset;
34359                } else {
34360                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
34361                    inner_depth.increment()?;
34362                }
34363                let val_ref = self.next_hop_id.get_or_insert_with(|| fidl::new_empty!(u8, D));
34364                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
34365                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
34366                {
34367                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
34368                }
34369                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
34370                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
34371                }
34372            }
34373
34374            next_offset += envelope_size;
34375            _next_ordinal_to_read += 1;
34376            if next_offset >= end_offset {
34377                return Ok(());
34378            }
34379
34380            // Decode unknown envelopes for gaps in ordinals.
34381            while _next_ordinal_to_read < 6 {
34382                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
34383                _next_ordinal_to_read += 1;
34384                next_offset += envelope_size;
34385            }
34386
34387            let next_out_of_line = decoder.next_out_of_line();
34388            let handles_before = decoder.remaining_handles();
34389            if let Some((inlined, num_bytes, num_handles)) =
34390                fidl::encoding::decode_envelope_header(decoder, next_offset)?
34391            {
34392                let member_inline_size =
34393                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
34394                if inlined != (member_inline_size <= 4) {
34395                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
34396                }
34397                let inner_offset;
34398                let mut inner_depth = depth.clone();
34399                if inlined {
34400                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
34401                    inner_offset = next_offset;
34402                } else {
34403                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
34404                    inner_depth.increment()?;
34405                }
34406                let val_ref = self.next_hop_rloc16.get_or_insert_with(|| fidl::new_empty!(u16, D));
34407                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
34408                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
34409                {
34410                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
34411                }
34412                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
34413                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
34414                }
34415            }
34416
34417            next_offset += envelope_size;
34418            _next_ordinal_to_read += 1;
34419            if next_offset >= end_offset {
34420                return Ok(());
34421            }
34422
34423            // Decode unknown envelopes for gaps in ordinals.
34424            while _next_ordinal_to_read < 7 {
34425                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
34426                _next_ordinal_to_read += 1;
34427                next_offset += envelope_size;
34428            }
34429
34430            let next_out_of_line = decoder.next_out_of_line();
34431            let handles_before = decoder.remaining_handles();
34432            if let Some((inlined, num_bytes, num_handles)) =
34433                fidl::encoding::decode_envelope_header(decoder, next_offset)?
34434            {
34435                let member_inline_size =
34436                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
34437                if inlined != (member_inline_size <= 4) {
34438                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
34439                }
34440                let inner_offset;
34441                let mut inner_depth = depth.clone();
34442                if inlined {
34443                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
34444                    inner_offset = next_offset;
34445                } else {
34446                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
34447                    inner_depth.increment()?;
34448                }
34449                let val_ref = self.old_path_cost.get_or_insert_with(|| fidl::new_empty!(u8, D));
34450                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
34451                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
34452                {
34453                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
34454                }
34455                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
34456                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
34457                }
34458            }
34459
34460            next_offset += envelope_size;
34461            _next_ordinal_to_read += 1;
34462            if next_offset >= end_offset {
34463                return Ok(());
34464            }
34465
34466            // Decode unknown envelopes for gaps in ordinals.
34467            while _next_ordinal_to_read < 8 {
34468                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
34469                _next_ordinal_to_read += 1;
34470                next_offset += envelope_size;
34471            }
34472
34473            let next_out_of_line = decoder.next_out_of_line();
34474            let handles_before = decoder.remaining_handles();
34475            if let Some((inlined, num_bytes, num_handles)) =
34476                fidl::encoding::decode_envelope_header(decoder, next_offset)?
34477            {
34478                let member_inline_size =
34479                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
34480                if inlined != (member_inline_size <= 4) {
34481                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
34482                }
34483                let inner_offset;
34484                let mut inner_depth = depth.clone();
34485                if inlined {
34486                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
34487                    inner_offset = next_offset;
34488                } else {
34489                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
34490                    inner_depth.increment()?;
34491                }
34492                let val_ref = self.new_path_cost.get_or_insert_with(|| fidl::new_empty!(u8, D));
34493                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
34494                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
34495                {
34496                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
34497                }
34498                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
34499                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
34500                }
34501            }
34502
34503            next_offset += envelope_size;
34504
34505            // Decode the remaining unknown envelopes.
34506            while next_offset < end_offset {
34507                _next_ordinal_to_read += 1;
34508                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
34509                next_offset += envelope_size;
34510            }
34511
34512            Ok(())
34513        }
34514    }
34515
34516    impl TrelCounters {
34517        #[inline(always)]
34518        fn max_ordinal_present(&self) -> u64 {
34519            if let Some(_) = self.tx_packets {
34520                return 5;
34521            }
34522            if let Some(_) = self.tx_failure {
34523                return 4;
34524            }
34525            if let Some(_) = self.tx_bytes {
34526                return 3;
34527            }
34528            if let Some(_) = self.rx_packets {
34529                return 2;
34530            }
34531            if let Some(_) = self.rx_bytes {
34532                return 1;
34533            }
34534            0
34535        }
34536    }
34537
34538    impl fidl::encoding::ValueTypeMarker for TrelCounters {
34539        type Borrowed<'a> = &'a Self;
34540        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
34541            value
34542        }
34543    }
34544
34545    unsafe impl fidl::encoding::TypeMarker for TrelCounters {
34546        type Owned = Self;
34547
34548        #[inline(always)]
34549        fn inline_align(_context: fidl::encoding::Context) -> usize {
34550            8
34551        }
34552
34553        #[inline(always)]
34554        fn inline_size(_context: fidl::encoding::Context) -> usize {
34555            16
34556        }
34557    }
34558
34559    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<TrelCounters, D>
34560        for &TrelCounters
34561    {
34562        unsafe fn encode(
34563            self,
34564            encoder: &mut fidl::encoding::Encoder<'_, D>,
34565            offset: usize,
34566            mut depth: fidl::encoding::Depth,
34567        ) -> fidl::Result<()> {
34568            encoder.debug_check_bounds::<TrelCounters>(offset);
34569            // Vector header
34570            let max_ordinal: u64 = self.max_ordinal_present();
34571            encoder.write_num(max_ordinal, offset);
34572            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
34573            // Calling encoder.out_of_line_offset(0) is not allowed.
34574            if max_ordinal == 0 {
34575                return Ok(());
34576            }
34577            depth.increment()?;
34578            let envelope_size = 8;
34579            let bytes_len = max_ordinal as usize * envelope_size;
34580            #[allow(unused_variables)]
34581            let offset = encoder.out_of_line_offset(bytes_len);
34582            let mut _prev_end_offset: usize = 0;
34583            if 1 > max_ordinal {
34584                return Ok(());
34585            }
34586
34587            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
34588            // are envelope_size bytes.
34589            let cur_offset: usize = (1 - 1) * envelope_size;
34590
34591            // Zero reserved fields.
34592            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
34593
34594            // Safety:
34595            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
34596            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
34597            //   envelope_size bytes, there is always sufficient room.
34598            fidl::encoding::encode_in_envelope_optional::<u64, D>(
34599                self.rx_bytes.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
34600                encoder,
34601                offset + cur_offset,
34602                depth,
34603            )?;
34604
34605            _prev_end_offset = cur_offset + envelope_size;
34606            if 2 > max_ordinal {
34607                return Ok(());
34608            }
34609
34610            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
34611            // are envelope_size bytes.
34612            let cur_offset: usize = (2 - 1) * envelope_size;
34613
34614            // Zero reserved fields.
34615            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
34616
34617            // Safety:
34618            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
34619            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
34620            //   envelope_size bytes, there is always sufficient room.
34621            fidl::encoding::encode_in_envelope_optional::<u64, D>(
34622                self.rx_packets.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
34623                encoder,
34624                offset + cur_offset,
34625                depth,
34626            )?;
34627
34628            _prev_end_offset = cur_offset + envelope_size;
34629            if 3 > max_ordinal {
34630                return Ok(());
34631            }
34632
34633            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
34634            // are envelope_size bytes.
34635            let cur_offset: usize = (3 - 1) * envelope_size;
34636
34637            // Zero reserved fields.
34638            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
34639
34640            // Safety:
34641            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
34642            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
34643            //   envelope_size bytes, there is always sufficient room.
34644            fidl::encoding::encode_in_envelope_optional::<u64, D>(
34645                self.tx_bytes.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
34646                encoder,
34647                offset + cur_offset,
34648                depth,
34649            )?;
34650
34651            _prev_end_offset = cur_offset + envelope_size;
34652            if 4 > max_ordinal {
34653                return Ok(());
34654            }
34655
34656            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
34657            // are envelope_size bytes.
34658            let cur_offset: usize = (4 - 1) * envelope_size;
34659
34660            // Zero reserved fields.
34661            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
34662
34663            // Safety:
34664            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
34665            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
34666            //   envelope_size bytes, there is always sufficient room.
34667            fidl::encoding::encode_in_envelope_optional::<u64, D>(
34668                self.tx_failure.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
34669                encoder,
34670                offset + cur_offset,
34671                depth,
34672            )?;
34673
34674            _prev_end_offset = cur_offset + envelope_size;
34675            if 5 > max_ordinal {
34676                return Ok(());
34677            }
34678
34679            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
34680            // are envelope_size bytes.
34681            let cur_offset: usize = (5 - 1) * envelope_size;
34682
34683            // Zero reserved fields.
34684            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
34685
34686            // Safety:
34687            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
34688            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
34689            //   envelope_size bytes, there is always sufficient room.
34690            fidl::encoding::encode_in_envelope_optional::<u64, D>(
34691                self.tx_packets.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
34692                encoder,
34693                offset + cur_offset,
34694                depth,
34695            )?;
34696
34697            _prev_end_offset = cur_offset + envelope_size;
34698
34699            Ok(())
34700        }
34701    }
34702
34703    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for TrelCounters {
34704        #[inline(always)]
34705        fn new_empty() -> Self {
34706            Self::default()
34707        }
34708
34709        unsafe fn decode(
34710            &mut self,
34711            decoder: &mut fidl::encoding::Decoder<'_, D>,
34712            offset: usize,
34713            mut depth: fidl::encoding::Depth,
34714        ) -> fidl::Result<()> {
34715            decoder.debug_check_bounds::<Self>(offset);
34716            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
34717                None => return Err(fidl::Error::NotNullable),
34718                Some(len) => len,
34719            };
34720            // Calling decoder.out_of_line_offset(0) is not allowed.
34721            if len == 0 {
34722                return Ok(());
34723            };
34724            depth.increment()?;
34725            let envelope_size = 8;
34726            let bytes_len = len * envelope_size;
34727            let offset = decoder.out_of_line_offset(bytes_len)?;
34728            // Decode the envelope for each type.
34729            let mut _next_ordinal_to_read = 0;
34730            let mut next_offset = offset;
34731            let end_offset = offset + bytes_len;
34732            _next_ordinal_to_read += 1;
34733            if next_offset >= end_offset {
34734                return Ok(());
34735            }
34736
34737            // Decode unknown envelopes for gaps in ordinals.
34738            while _next_ordinal_to_read < 1 {
34739                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
34740                _next_ordinal_to_read += 1;
34741                next_offset += envelope_size;
34742            }
34743
34744            let next_out_of_line = decoder.next_out_of_line();
34745            let handles_before = decoder.remaining_handles();
34746            if let Some((inlined, num_bytes, num_handles)) =
34747                fidl::encoding::decode_envelope_header(decoder, next_offset)?
34748            {
34749                let member_inline_size =
34750                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
34751                if inlined != (member_inline_size <= 4) {
34752                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
34753                }
34754                let inner_offset;
34755                let mut inner_depth = depth.clone();
34756                if inlined {
34757                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
34758                    inner_offset = next_offset;
34759                } else {
34760                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
34761                    inner_depth.increment()?;
34762                }
34763                let val_ref = self.rx_bytes.get_or_insert_with(|| fidl::new_empty!(u64, D));
34764                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
34765                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
34766                {
34767                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
34768                }
34769                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
34770                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
34771                }
34772            }
34773
34774            next_offset += envelope_size;
34775            _next_ordinal_to_read += 1;
34776            if next_offset >= end_offset {
34777                return Ok(());
34778            }
34779
34780            // Decode unknown envelopes for gaps in ordinals.
34781            while _next_ordinal_to_read < 2 {
34782                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
34783                _next_ordinal_to_read += 1;
34784                next_offset += envelope_size;
34785            }
34786
34787            let next_out_of_line = decoder.next_out_of_line();
34788            let handles_before = decoder.remaining_handles();
34789            if let Some((inlined, num_bytes, num_handles)) =
34790                fidl::encoding::decode_envelope_header(decoder, next_offset)?
34791            {
34792                let member_inline_size =
34793                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
34794                if inlined != (member_inline_size <= 4) {
34795                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
34796                }
34797                let inner_offset;
34798                let mut inner_depth = depth.clone();
34799                if inlined {
34800                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
34801                    inner_offset = next_offset;
34802                } else {
34803                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
34804                    inner_depth.increment()?;
34805                }
34806                let val_ref = self.rx_packets.get_or_insert_with(|| fidl::new_empty!(u64, D));
34807                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
34808                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
34809                {
34810                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
34811                }
34812                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
34813                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
34814                }
34815            }
34816
34817            next_offset += envelope_size;
34818            _next_ordinal_to_read += 1;
34819            if next_offset >= end_offset {
34820                return Ok(());
34821            }
34822
34823            // Decode unknown envelopes for gaps in ordinals.
34824            while _next_ordinal_to_read < 3 {
34825                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
34826                _next_ordinal_to_read += 1;
34827                next_offset += envelope_size;
34828            }
34829
34830            let next_out_of_line = decoder.next_out_of_line();
34831            let handles_before = decoder.remaining_handles();
34832            if let Some((inlined, num_bytes, num_handles)) =
34833                fidl::encoding::decode_envelope_header(decoder, next_offset)?
34834            {
34835                let member_inline_size =
34836                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
34837                if inlined != (member_inline_size <= 4) {
34838                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
34839                }
34840                let inner_offset;
34841                let mut inner_depth = depth.clone();
34842                if inlined {
34843                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
34844                    inner_offset = next_offset;
34845                } else {
34846                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
34847                    inner_depth.increment()?;
34848                }
34849                let val_ref = self.tx_bytes.get_or_insert_with(|| fidl::new_empty!(u64, D));
34850                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
34851                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
34852                {
34853                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
34854                }
34855                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
34856                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
34857                }
34858            }
34859
34860            next_offset += envelope_size;
34861            _next_ordinal_to_read += 1;
34862            if next_offset >= end_offset {
34863                return Ok(());
34864            }
34865
34866            // Decode unknown envelopes for gaps in ordinals.
34867            while _next_ordinal_to_read < 4 {
34868                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
34869                _next_ordinal_to_read += 1;
34870                next_offset += envelope_size;
34871            }
34872
34873            let next_out_of_line = decoder.next_out_of_line();
34874            let handles_before = decoder.remaining_handles();
34875            if let Some((inlined, num_bytes, num_handles)) =
34876                fidl::encoding::decode_envelope_header(decoder, next_offset)?
34877            {
34878                let member_inline_size =
34879                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
34880                if inlined != (member_inline_size <= 4) {
34881                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
34882                }
34883                let inner_offset;
34884                let mut inner_depth = depth.clone();
34885                if inlined {
34886                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
34887                    inner_offset = next_offset;
34888                } else {
34889                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
34890                    inner_depth.increment()?;
34891                }
34892                let val_ref = self.tx_failure.get_or_insert_with(|| fidl::new_empty!(u64, D));
34893                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
34894                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
34895                {
34896                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
34897                }
34898                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
34899                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
34900                }
34901            }
34902
34903            next_offset += envelope_size;
34904            _next_ordinal_to_read += 1;
34905            if next_offset >= end_offset {
34906                return Ok(());
34907            }
34908
34909            // Decode unknown envelopes for gaps in ordinals.
34910            while _next_ordinal_to_read < 5 {
34911                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
34912                _next_ordinal_to_read += 1;
34913                next_offset += envelope_size;
34914            }
34915
34916            let next_out_of_line = decoder.next_out_of_line();
34917            let handles_before = decoder.remaining_handles();
34918            if let Some((inlined, num_bytes, num_handles)) =
34919                fidl::encoding::decode_envelope_header(decoder, next_offset)?
34920            {
34921                let member_inline_size =
34922                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
34923                if inlined != (member_inline_size <= 4) {
34924                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
34925                }
34926                let inner_offset;
34927                let mut inner_depth = depth.clone();
34928                if inlined {
34929                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
34930                    inner_offset = next_offset;
34931                } else {
34932                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
34933                    inner_depth.increment()?;
34934                }
34935                let val_ref = self.tx_packets.get_or_insert_with(|| fidl::new_empty!(u64, D));
34936                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
34937                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
34938                {
34939                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
34940                }
34941                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
34942                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
34943                }
34944            }
34945
34946            next_offset += envelope_size;
34947
34948            // Decode the remaining unknown envelopes.
34949            while next_offset < end_offset {
34950                _next_ordinal_to_read += 1;
34951                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
34952                next_offset += envelope_size;
34953            }
34954
34955            Ok(())
34956        }
34957    }
34958
34959    impl TrelPeer {
34960        #[inline(always)]
34961        fn max_ordinal_present(&self) -> u64 {
34962            if let Some(_) = self.sock_address {
34963                return 3;
34964            }
34965            if let Some(_) = self.extended_pan_id {
34966                return 2;
34967            }
34968            if let Some(_) = self.extended_address {
34969                return 1;
34970            }
34971            0
34972        }
34973    }
34974
34975    impl fidl::encoding::ValueTypeMarker for TrelPeer {
34976        type Borrowed<'a> = &'a Self;
34977        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
34978            value
34979        }
34980    }
34981
34982    unsafe impl fidl::encoding::TypeMarker for TrelPeer {
34983        type Owned = Self;
34984
34985        #[inline(always)]
34986        fn inline_align(_context: fidl::encoding::Context) -> usize {
34987            8
34988        }
34989
34990        #[inline(always)]
34991        fn inline_size(_context: fidl::encoding::Context) -> usize {
34992            16
34993        }
34994    }
34995
34996    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<TrelPeer, D> for &TrelPeer {
34997        unsafe fn encode(
34998            self,
34999            encoder: &mut fidl::encoding::Encoder<'_, D>,
35000            offset: usize,
35001            mut depth: fidl::encoding::Depth,
35002        ) -> fidl::Result<()> {
35003            encoder.debug_check_bounds::<TrelPeer>(offset);
35004            // Vector header
35005            let max_ordinal: u64 = self.max_ordinal_present();
35006            encoder.write_num(max_ordinal, offset);
35007            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
35008            // Calling encoder.out_of_line_offset(0) is not allowed.
35009            if max_ordinal == 0 {
35010                return Ok(());
35011            }
35012            depth.increment()?;
35013            let envelope_size = 8;
35014            let bytes_len = max_ordinal as usize * envelope_size;
35015            #[allow(unused_variables)]
35016            let offset = encoder.out_of_line_offset(bytes_len);
35017            let mut _prev_end_offset: usize = 0;
35018            if 1 > max_ordinal {
35019                return Ok(());
35020            }
35021
35022            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
35023            // are envelope_size bytes.
35024            let cur_offset: usize = (1 - 1) * envelope_size;
35025
35026            // Zero reserved fields.
35027            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
35028
35029            // Safety:
35030            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
35031            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
35032            //   envelope_size bytes, there is always sufficient room.
35033            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u8, 8>, D>(
35034                self.extended_address.as_ref().map(
35035                    <fidl::encoding::Vector<u8, 8> as fidl::encoding::ValueTypeMarker>::borrow,
35036                ),
35037                encoder,
35038                offset + cur_offset,
35039                depth,
35040            )?;
35041
35042            _prev_end_offset = cur_offset + envelope_size;
35043            if 2 > max_ordinal {
35044                return Ok(());
35045            }
35046
35047            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
35048            // are envelope_size bytes.
35049            let cur_offset: usize = (2 - 1) * envelope_size;
35050
35051            // Zero reserved fields.
35052            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
35053
35054            // Safety:
35055            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
35056            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
35057            //   envelope_size bytes, there is always sufficient room.
35058            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u8, 8>, D>(
35059                self.extended_pan_id.as_ref().map(
35060                    <fidl::encoding::Vector<u8, 8> as fidl::encoding::ValueTypeMarker>::borrow,
35061                ),
35062                encoder,
35063                offset + cur_offset,
35064                depth,
35065            )?;
35066
35067            _prev_end_offset = cur_offset + envelope_size;
35068            if 3 > max_ordinal {
35069                return Ok(());
35070            }
35071
35072            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
35073            // are envelope_size bytes.
35074            let cur_offset: usize = (3 - 1) * envelope_size;
35075
35076            // Zero reserved fields.
35077            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
35078
35079            // Safety:
35080            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
35081            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
35082            //   envelope_size bytes, there is always sufficient room.
35083            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<48>, D>(
35084                self.sock_address.as_ref().map(
35085                    <fidl::encoding::BoundedString<48> as fidl::encoding::ValueTypeMarker>::borrow,
35086                ),
35087                encoder,
35088                offset + cur_offset,
35089                depth,
35090            )?;
35091
35092            _prev_end_offset = cur_offset + envelope_size;
35093
35094            Ok(())
35095        }
35096    }
35097
35098    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for TrelPeer {
35099        #[inline(always)]
35100        fn new_empty() -> Self {
35101            Self::default()
35102        }
35103
35104        unsafe fn decode(
35105            &mut self,
35106            decoder: &mut fidl::encoding::Decoder<'_, D>,
35107            offset: usize,
35108            mut depth: fidl::encoding::Depth,
35109        ) -> fidl::Result<()> {
35110            decoder.debug_check_bounds::<Self>(offset);
35111            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
35112                None => return Err(fidl::Error::NotNullable),
35113                Some(len) => len,
35114            };
35115            // Calling decoder.out_of_line_offset(0) is not allowed.
35116            if len == 0 {
35117                return Ok(());
35118            };
35119            depth.increment()?;
35120            let envelope_size = 8;
35121            let bytes_len = len * envelope_size;
35122            let offset = decoder.out_of_line_offset(bytes_len)?;
35123            // Decode the envelope for each type.
35124            let mut _next_ordinal_to_read = 0;
35125            let mut next_offset = offset;
35126            let end_offset = offset + bytes_len;
35127            _next_ordinal_to_read += 1;
35128            if next_offset >= end_offset {
35129                return Ok(());
35130            }
35131
35132            // Decode unknown envelopes for gaps in ordinals.
35133            while _next_ordinal_to_read < 1 {
35134                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
35135                _next_ordinal_to_read += 1;
35136                next_offset += envelope_size;
35137            }
35138
35139            let next_out_of_line = decoder.next_out_of_line();
35140            let handles_before = decoder.remaining_handles();
35141            if let Some((inlined, num_bytes, num_handles)) =
35142                fidl::encoding::decode_envelope_header(decoder, next_offset)?
35143            {
35144                let member_inline_size =
35145                    <fidl::encoding::Vector<u8, 8> as fidl::encoding::TypeMarker>::inline_size(
35146                        decoder.context,
35147                    );
35148                if inlined != (member_inline_size <= 4) {
35149                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
35150                }
35151                let inner_offset;
35152                let mut inner_depth = depth.clone();
35153                if inlined {
35154                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
35155                    inner_offset = next_offset;
35156                } else {
35157                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
35158                    inner_depth.increment()?;
35159                }
35160                let val_ref = self
35161                    .extended_address
35162                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u8, 8>, D));
35163                fidl::decode!(fidl::encoding::Vector<u8, 8>, D, val_ref, decoder, inner_offset, inner_depth)?;
35164                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
35165                {
35166                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
35167                }
35168                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
35169                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
35170                }
35171            }
35172
35173            next_offset += envelope_size;
35174            _next_ordinal_to_read += 1;
35175            if next_offset >= end_offset {
35176                return Ok(());
35177            }
35178
35179            // Decode unknown envelopes for gaps in ordinals.
35180            while _next_ordinal_to_read < 2 {
35181                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
35182                _next_ordinal_to_read += 1;
35183                next_offset += envelope_size;
35184            }
35185
35186            let next_out_of_line = decoder.next_out_of_line();
35187            let handles_before = decoder.remaining_handles();
35188            if let Some((inlined, num_bytes, num_handles)) =
35189                fidl::encoding::decode_envelope_header(decoder, next_offset)?
35190            {
35191                let member_inline_size =
35192                    <fidl::encoding::Vector<u8, 8> as fidl::encoding::TypeMarker>::inline_size(
35193                        decoder.context,
35194                    );
35195                if inlined != (member_inline_size <= 4) {
35196                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
35197                }
35198                let inner_offset;
35199                let mut inner_depth = depth.clone();
35200                if inlined {
35201                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
35202                    inner_offset = next_offset;
35203                } else {
35204                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
35205                    inner_depth.increment()?;
35206                }
35207                let val_ref = self
35208                    .extended_pan_id
35209                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u8, 8>, D));
35210                fidl::decode!(fidl::encoding::Vector<u8, 8>, D, val_ref, decoder, inner_offset, inner_depth)?;
35211                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
35212                {
35213                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
35214                }
35215                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
35216                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
35217                }
35218            }
35219
35220            next_offset += envelope_size;
35221            _next_ordinal_to_read += 1;
35222            if next_offset >= end_offset {
35223                return Ok(());
35224            }
35225
35226            // Decode unknown envelopes for gaps in ordinals.
35227            while _next_ordinal_to_read < 3 {
35228                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
35229                _next_ordinal_to_read += 1;
35230                next_offset += envelope_size;
35231            }
35232
35233            let next_out_of_line = decoder.next_out_of_line();
35234            let handles_before = decoder.remaining_handles();
35235            if let Some((inlined, num_bytes, num_handles)) =
35236                fidl::encoding::decode_envelope_header(decoder, next_offset)?
35237            {
35238                let member_inline_size =
35239                    <fidl::encoding::BoundedString<48> as fidl::encoding::TypeMarker>::inline_size(
35240                        decoder.context,
35241                    );
35242                if inlined != (member_inline_size <= 4) {
35243                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
35244                }
35245                let inner_offset;
35246                let mut inner_depth = depth.clone();
35247                if inlined {
35248                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
35249                    inner_offset = next_offset;
35250                } else {
35251                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
35252                    inner_depth.increment()?;
35253                }
35254                let val_ref = self
35255                    .sock_address
35256                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<48>, D));
35257                fidl::decode!(
35258                    fidl::encoding::BoundedString<48>,
35259                    D,
35260                    val_ref,
35261                    decoder,
35262                    inner_offset,
35263                    inner_depth
35264                )?;
35265                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
35266                {
35267                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
35268                }
35269                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
35270                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
35271                }
35272            }
35273
35274            next_offset += envelope_size;
35275
35276            // Decode the remaining unknown envelopes.
35277            while next_offset < end_offset {
35278                _next_ordinal_to_read += 1;
35279                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
35280                next_offset += envelope_size;
35281            }
35282
35283            Ok(())
35284        }
35285    }
35286
35287    impl TrelPeersInfo {
35288        #[inline(always)]
35289        fn max_ordinal_present(&self) -> u64 {
35290            if let Some(_) = self.trel_peers {
35291                return 2;
35292            }
35293            if let Some(_) = self.num_trel_peers {
35294                return 1;
35295            }
35296            0
35297        }
35298    }
35299
35300    impl fidl::encoding::ValueTypeMarker for TrelPeersInfo {
35301        type Borrowed<'a> = &'a Self;
35302        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
35303            value
35304        }
35305    }
35306
35307    unsafe impl fidl::encoding::TypeMarker for TrelPeersInfo {
35308        type Owned = Self;
35309
35310        #[inline(always)]
35311        fn inline_align(_context: fidl::encoding::Context) -> usize {
35312            8
35313        }
35314
35315        #[inline(always)]
35316        fn inline_size(_context: fidl::encoding::Context) -> usize {
35317            16
35318        }
35319    }
35320
35321    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<TrelPeersInfo, D>
35322        for &TrelPeersInfo
35323    {
35324        unsafe fn encode(
35325            self,
35326            encoder: &mut fidl::encoding::Encoder<'_, D>,
35327            offset: usize,
35328            mut depth: fidl::encoding::Depth,
35329        ) -> fidl::Result<()> {
35330            encoder.debug_check_bounds::<TrelPeersInfo>(offset);
35331            // Vector header
35332            let max_ordinal: u64 = self.max_ordinal_present();
35333            encoder.write_num(max_ordinal, offset);
35334            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
35335            // Calling encoder.out_of_line_offset(0) is not allowed.
35336            if max_ordinal == 0 {
35337                return Ok(());
35338            }
35339            depth.increment()?;
35340            let envelope_size = 8;
35341            let bytes_len = max_ordinal as usize * envelope_size;
35342            #[allow(unused_variables)]
35343            let offset = encoder.out_of_line_offset(bytes_len);
35344            let mut _prev_end_offset: usize = 0;
35345            if 1 > max_ordinal {
35346                return Ok(());
35347            }
35348
35349            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
35350            // are envelope_size bytes.
35351            let cur_offset: usize = (1 - 1) * envelope_size;
35352
35353            // Zero reserved fields.
35354            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
35355
35356            // Safety:
35357            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
35358            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
35359            //   envelope_size bytes, there is always sufficient room.
35360            fidl::encoding::encode_in_envelope_optional::<u16, D>(
35361                self.num_trel_peers.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
35362                encoder,
35363                offset + cur_offset,
35364                depth,
35365            )?;
35366
35367            _prev_end_offset = cur_offset + envelope_size;
35368            if 2 > max_ordinal {
35369                return Ok(());
35370            }
35371
35372            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
35373            // are envelope_size bytes.
35374            let cur_offset: usize = (2 - 1) * envelope_size;
35375
35376            // Zero reserved fields.
35377            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
35378
35379            // Safety:
35380            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
35381            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
35382            //   envelope_size bytes, there is always sufficient room.
35383            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<TrelPeer, 64>, D>(
35384            self.trel_peers.as_ref().map(<fidl::encoding::Vector<TrelPeer, 64> as fidl::encoding::ValueTypeMarker>::borrow),
35385            encoder, offset + cur_offset, depth
35386        )?;
35387
35388            _prev_end_offset = cur_offset + envelope_size;
35389
35390            Ok(())
35391        }
35392    }
35393
35394    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for TrelPeersInfo {
35395        #[inline(always)]
35396        fn new_empty() -> Self {
35397            Self::default()
35398        }
35399
35400        unsafe fn decode(
35401            &mut self,
35402            decoder: &mut fidl::encoding::Decoder<'_, D>,
35403            offset: usize,
35404            mut depth: fidl::encoding::Depth,
35405        ) -> fidl::Result<()> {
35406            decoder.debug_check_bounds::<Self>(offset);
35407            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
35408                None => return Err(fidl::Error::NotNullable),
35409                Some(len) => len,
35410            };
35411            // Calling decoder.out_of_line_offset(0) is not allowed.
35412            if len == 0 {
35413                return Ok(());
35414            };
35415            depth.increment()?;
35416            let envelope_size = 8;
35417            let bytes_len = len * envelope_size;
35418            let offset = decoder.out_of_line_offset(bytes_len)?;
35419            // Decode the envelope for each type.
35420            let mut _next_ordinal_to_read = 0;
35421            let mut next_offset = offset;
35422            let end_offset = offset + bytes_len;
35423            _next_ordinal_to_read += 1;
35424            if next_offset >= end_offset {
35425                return Ok(());
35426            }
35427
35428            // Decode unknown envelopes for gaps in ordinals.
35429            while _next_ordinal_to_read < 1 {
35430                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
35431                _next_ordinal_to_read += 1;
35432                next_offset += envelope_size;
35433            }
35434
35435            let next_out_of_line = decoder.next_out_of_line();
35436            let handles_before = decoder.remaining_handles();
35437            if let Some((inlined, num_bytes, num_handles)) =
35438                fidl::encoding::decode_envelope_header(decoder, next_offset)?
35439            {
35440                let member_inline_size =
35441                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
35442                if inlined != (member_inline_size <= 4) {
35443                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
35444                }
35445                let inner_offset;
35446                let mut inner_depth = depth.clone();
35447                if inlined {
35448                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
35449                    inner_offset = next_offset;
35450                } else {
35451                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
35452                    inner_depth.increment()?;
35453                }
35454                let val_ref = self.num_trel_peers.get_or_insert_with(|| fidl::new_empty!(u16, D));
35455                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
35456                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
35457                {
35458                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
35459                }
35460                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
35461                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
35462                }
35463            }
35464
35465            next_offset += envelope_size;
35466            _next_ordinal_to_read += 1;
35467            if next_offset >= end_offset {
35468                return Ok(());
35469            }
35470
35471            // Decode unknown envelopes for gaps in ordinals.
35472            while _next_ordinal_to_read < 2 {
35473                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
35474                _next_ordinal_to_read += 1;
35475                next_offset += envelope_size;
35476            }
35477
35478            let next_out_of_line = decoder.next_out_of_line();
35479            let handles_before = decoder.remaining_handles();
35480            if let Some((inlined, num_bytes, num_handles)) =
35481                fidl::encoding::decode_envelope_header(decoder, next_offset)?
35482            {
35483                let member_inline_size = <fidl::encoding::Vector<TrelPeer, 64> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
35484                if inlined != (member_inline_size <= 4) {
35485                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
35486                }
35487                let inner_offset;
35488                let mut inner_depth = depth.clone();
35489                if inlined {
35490                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
35491                    inner_offset = next_offset;
35492                } else {
35493                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
35494                    inner_depth.increment()?;
35495                }
35496                let val_ref = self.trel_peers.get_or_insert_with(
35497                    || fidl::new_empty!(fidl::encoding::Vector<TrelPeer, 64>, D),
35498                );
35499                fidl::decode!(fidl::encoding::Vector<TrelPeer, 64>, D, val_ref, decoder, inner_offset, inner_depth)?;
35500                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
35501                {
35502                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
35503                }
35504                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
35505                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
35506                }
35507            }
35508
35509            next_offset += envelope_size;
35510
35511            // Decode the remaining unknown envelopes.
35512            while next_offset < end_offset {
35513                _next_ordinal_to_read += 1;
35514                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
35515                next_offset += envelope_size;
35516            }
35517
35518            Ok(())
35519        }
35520    }
35521
35522    impl UdpSocket {
35523        #[inline(always)]
35524        fn max_ordinal_present(&self) -> u64 {
35525            if let Some(_) = self.peer_name {
35526                return 2;
35527            }
35528            if let Some(_) = self.sock_name {
35529                return 1;
35530            }
35531            0
35532        }
35533    }
35534
35535    impl fidl::encoding::ValueTypeMarker for UdpSocket {
35536        type Borrowed<'a> = &'a Self;
35537        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
35538            value
35539        }
35540    }
35541
35542    unsafe impl fidl::encoding::TypeMarker for UdpSocket {
35543        type Owned = Self;
35544
35545        #[inline(always)]
35546        fn inline_align(_context: fidl::encoding::Context) -> usize {
35547            8
35548        }
35549
35550        #[inline(always)]
35551        fn inline_size(_context: fidl::encoding::Context) -> usize {
35552            16
35553        }
35554    }
35555
35556    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<UdpSocket, D>
35557        for &UdpSocket
35558    {
35559        unsafe fn encode(
35560            self,
35561            encoder: &mut fidl::encoding::Encoder<'_, D>,
35562            offset: usize,
35563            mut depth: fidl::encoding::Depth,
35564        ) -> fidl::Result<()> {
35565            encoder.debug_check_bounds::<UdpSocket>(offset);
35566            // Vector header
35567            let max_ordinal: u64 = self.max_ordinal_present();
35568            encoder.write_num(max_ordinal, offset);
35569            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
35570            // Calling encoder.out_of_line_offset(0) is not allowed.
35571            if max_ordinal == 0 {
35572                return Ok(());
35573            }
35574            depth.increment()?;
35575            let envelope_size = 8;
35576            let bytes_len = max_ordinal as usize * envelope_size;
35577            #[allow(unused_variables)]
35578            let offset = encoder.out_of_line_offset(bytes_len);
35579            let mut _prev_end_offset: usize = 0;
35580            if 1 > max_ordinal {
35581                return Ok(());
35582            }
35583
35584            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
35585            // are envelope_size bytes.
35586            let cur_offset: usize = (1 - 1) * envelope_size;
35587
35588            // Zero reserved fields.
35589            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
35590
35591            // Safety:
35592            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
35593            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
35594            //   envelope_size bytes, there is always sufficient room.
35595            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<48>, D>(
35596                self.sock_name.as_ref().map(
35597                    <fidl::encoding::BoundedString<48> as fidl::encoding::ValueTypeMarker>::borrow,
35598                ),
35599                encoder,
35600                offset + cur_offset,
35601                depth,
35602            )?;
35603
35604            _prev_end_offset = cur_offset + envelope_size;
35605            if 2 > max_ordinal {
35606                return Ok(());
35607            }
35608
35609            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
35610            // are envelope_size bytes.
35611            let cur_offset: usize = (2 - 1) * envelope_size;
35612
35613            // Zero reserved fields.
35614            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
35615
35616            // Safety:
35617            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
35618            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
35619            //   envelope_size bytes, there is always sufficient room.
35620            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<48>, D>(
35621                self.peer_name.as_ref().map(
35622                    <fidl::encoding::BoundedString<48> as fidl::encoding::ValueTypeMarker>::borrow,
35623                ),
35624                encoder,
35625                offset + cur_offset,
35626                depth,
35627            )?;
35628
35629            _prev_end_offset = cur_offset + envelope_size;
35630
35631            Ok(())
35632        }
35633    }
35634
35635    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for UdpSocket {
35636        #[inline(always)]
35637        fn new_empty() -> Self {
35638            Self::default()
35639        }
35640
35641        unsafe fn decode(
35642            &mut self,
35643            decoder: &mut fidl::encoding::Decoder<'_, D>,
35644            offset: usize,
35645            mut depth: fidl::encoding::Depth,
35646        ) -> fidl::Result<()> {
35647            decoder.debug_check_bounds::<Self>(offset);
35648            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
35649                None => return Err(fidl::Error::NotNullable),
35650                Some(len) => len,
35651            };
35652            // Calling decoder.out_of_line_offset(0) is not allowed.
35653            if len == 0 {
35654                return Ok(());
35655            };
35656            depth.increment()?;
35657            let envelope_size = 8;
35658            let bytes_len = len * envelope_size;
35659            let offset = decoder.out_of_line_offset(bytes_len)?;
35660            // Decode the envelope for each type.
35661            let mut _next_ordinal_to_read = 0;
35662            let mut next_offset = offset;
35663            let end_offset = offset + bytes_len;
35664            _next_ordinal_to_read += 1;
35665            if next_offset >= end_offset {
35666                return Ok(());
35667            }
35668
35669            // Decode unknown envelopes for gaps in ordinals.
35670            while _next_ordinal_to_read < 1 {
35671                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
35672                _next_ordinal_to_read += 1;
35673                next_offset += envelope_size;
35674            }
35675
35676            let next_out_of_line = decoder.next_out_of_line();
35677            let handles_before = decoder.remaining_handles();
35678            if let Some((inlined, num_bytes, num_handles)) =
35679                fidl::encoding::decode_envelope_header(decoder, next_offset)?
35680            {
35681                let member_inline_size =
35682                    <fidl::encoding::BoundedString<48> as fidl::encoding::TypeMarker>::inline_size(
35683                        decoder.context,
35684                    );
35685                if inlined != (member_inline_size <= 4) {
35686                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
35687                }
35688                let inner_offset;
35689                let mut inner_depth = depth.clone();
35690                if inlined {
35691                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
35692                    inner_offset = next_offset;
35693                } else {
35694                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
35695                    inner_depth.increment()?;
35696                }
35697                let val_ref = self
35698                    .sock_name
35699                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<48>, D));
35700                fidl::decode!(
35701                    fidl::encoding::BoundedString<48>,
35702                    D,
35703                    val_ref,
35704                    decoder,
35705                    inner_offset,
35706                    inner_depth
35707                )?;
35708                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
35709                {
35710                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
35711                }
35712                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
35713                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
35714                }
35715            }
35716
35717            next_offset += envelope_size;
35718            _next_ordinal_to_read += 1;
35719            if next_offset >= end_offset {
35720                return Ok(());
35721            }
35722
35723            // Decode unknown envelopes for gaps in ordinals.
35724            while _next_ordinal_to_read < 2 {
35725                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
35726                _next_ordinal_to_read += 1;
35727                next_offset += envelope_size;
35728            }
35729
35730            let next_out_of_line = decoder.next_out_of_line();
35731            let handles_before = decoder.remaining_handles();
35732            if let Some((inlined, num_bytes, num_handles)) =
35733                fidl::encoding::decode_envelope_header(decoder, next_offset)?
35734            {
35735                let member_inline_size =
35736                    <fidl::encoding::BoundedString<48> as fidl::encoding::TypeMarker>::inline_size(
35737                        decoder.context,
35738                    );
35739                if inlined != (member_inline_size <= 4) {
35740                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
35741                }
35742                let inner_offset;
35743                let mut inner_depth = depth.clone();
35744                if inlined {
35745                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
35746                    inner_offset = next_offset;
35747                } else {
35748                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
35749                    inner_depth.increment()?;
35750                }
35751                let val_ref = self
35752                    .peer_name
35753                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<48>, D));
35754                fidl::decode!(
35755                    fidl::encoding::BoundedString<48>,
35756                    D,
35757                    val_ref,
35758                    decoder,
35759                    inner_offset,
35760                    inner_depth
35761                )?;
35762                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
35763                {
35764                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
35765                }
35766                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
35767                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
35768                }
35769            }
35770
35771            next_offset += envelope_size;
35772
35773            // Decode the remaining unknown envelopes.
35774            while next_offset < end_offset {
35775                _next_ordinal_to_read += 1;
35776                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
35777                next_offset += envelope_size;
35778            }
35779
35780            Ok(())
35781        }
35782    }
35783
35784    impl UpstreamDnsCounters {
35785        #[inline(always)]
35786        fn max_ordinal_present(&self) -> u64 {
35787            if let Some(_) = self.failures {
35788                return 3;
35789            }
35790            if let Some(_) = self.responses {
35791                return 2;
35792            }
35793            if let Some(_) = self.queries {
35794                return 1;
35795            }
35796            0
35797        }
35798    }
35799
35800    impl fidl::encoding::ValueTypeMarker for UpstreamDnsCounters {
35801        type Borrowed<'a> = &'a Self;
35802        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
35803            value
35804        }
35805    }
35806
35807    unsafe impl fidl::encoding::TypeMarker for UpstreamDnsCounters {
35808        type Owned = Self;
35809
35810        #[inline(always)]
35811        fn inline_align(_context: fidl::encoding::Context) -> usize {
35812            8
35813        }
35814
35815        #[inline(always)]
35816        fn inline_size(_context: fidl::encoding::Context) -> usize {
35817            16
35818        }
35819    }
35820
35821    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<UpstreamDnsCounters, D>
35822        for &UpstreamDnsCounters
35823    {
35824        unsafe fn encode(
35825            self,
35826            encoder: &mut fidl::encoding::Encoder<'_, D>,
35827            offset: usize,
35828            mut depth: fidl::encoding::Depth,
35829        ) -> fidl::Result<()> {
35830            encoder.debug_check_bounds::<UpstreamDnsCounters>(offset);
35831            // Vector header
35832            let max_ordinal: u64 = self.max_ordinal_present();
35833            encoder.write_num(max_ordinal, offset);
35834            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
35835            // Calling encoder.out_of_line_offset(0) is not allowed.
35836            if max_ordinal == 0 {
35837                return Ok(());
35838            }
35839            depth.increment()?;
35840            let envelope_size = 8;
35841            let bytes_len = max_ordinal as usize * envelope_size;
35842            #[allow(unused_variables)]
35843            let offset = encoder.out_of_line_offset(bytes_len);
35844            let mut _prev_end_offset: usize = 0;
35845            if 1 > max_ordinal {
35846                return Ok(());
35847            }
35848
35849            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
35850            // are envelope_size bytes.
35851            let cur_offset: usize = (1 - 1) * envelope_size;
35852
35853            // Zero reserved fields.
35854            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
35855
35856            // Safety:
35857            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
35858            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
35859            //   envelope_size bytes, there is always sufficient room.
35860            fidl::encoding::encode_in_envelope_optional::<u32, D>(
35861                self.queries.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
35862                encoder,
35863                offset + cur_offset,
35864                depth,
35865            )?;
35866
35867            _prev_end_offset = cur_offset + envelope_size;
35868            if 2 > max_ordinal {
35869                return Ok(());
35870            }
35871
35872            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
35873            // are envelope_size bytes.
35874            let cur_offset: usize = (2 - 1) * envelope_size;
35875
35876            // Zero reserved fields.
35877            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
35878
35879            // Safety:
35880            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
35881            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
35882            //   envelope_size bytes, there is always sufficient room.
35883            fidl::encoding::encode_in_envelope_optional::<u32, D>(
35884                self.responses.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
35885                encoder,
35886                offset + cur_offset,
35887                depth,
35888            )?;
35889
35890            _prev_end_offset = cur_offset + envelope_size;
35891            if 3 > max_ordinal {
35892                return Ok(());
35893            }
35894
35895            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
35896            // are envelope_size bytes.
35897            let cur_offset: usize = (3 - 1) * envelope_size;
35898
35899            // Zero reserved fields.
35900            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
35901
35902            // Safety:
35903            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
35904            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
35905            //   envelope_size bytes, there is always sufficient room.
35906            fidl::encoding::encode_in_envelope_optional::<u32, D>(
35907                self.failures.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
35908                encoder,
35909                offset + cur_offset,
35910                depth,
35911            )?;
35912
35913            _prev_end_offset = cur_offset + envelope_size;
35914
35915            Ok(())
35916        }
35917    }
35918
35919    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for UpstreamDnsCounters {
35920        #[inline(always)]
35921        fn new_empty() -> Self {
35922            Self::default()
35923        }
35924
35925        unsafe fn decode(
35926            &mut self,
35927            decoder: &mut fidl::encoding::Decoder<'_, D>,
35928            offset: usize,
35929            mut depth: fidl::encoding::Depth,
35930        ) -> fidl::Result<()> {
35931            decoder.debug_check_bounds::<Self>(offset);
35932            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
35933                None => return Err(fidl::Error::NotNullable),
35934                Some(len) => len,
35935            };
35936            // Calling decoder.out_of_line_offset(0) is not allowed.
35937            if len == 0 {
35938                return Ok(());
35939            };
35940            depth.increment()?;
35941            let envelope_size = 8;
35942            let bytes_len = len * envelope_size;
35943            let offset = decoder.out_of_line_offset(bytes_len)?;
35944            // Decode the envelope for each type.
35945            let mut _next_ordinal_to_read = 0;
35946            let mut next_offset = offset;
35947            let end_offset = offset + bytes_len;
35948            _next_ordinal_to_read += 1;
35949            if next_offset >= end_offset {
35950                return Ok(());
35951            }
35952
35953            // Decode unknown envelopes for gaps in ordinals.
35954            while _next_ordinal_to_read < 1 {
35955                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
35956                _next_ordinal_to_read += 1;
35957                next_offset += envelope_size;
35958            }
35959
35960            let next_out_of_line = decoder.next_out_of_line();
35961            let handles_before = decoder.remaining_handles();
35962            if let Some((inlined, num_bytes, num_handles)) =
35963                fidl::encoding::decode_envelope_header(decoder, next_offset)?
35964            {
35965                let member_inline_size =
35966                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
35967                if inlined != (member_inline_size <= 4) {
35968                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
35969                }
35970                let inner_offset;
35971                let mut inner_depth = depth.clone();
35972                if inlined {
35973                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
35974                    inner_offset = next_offset;
35975                } else {
35976                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
35977                    inner_depth.increment()?;
35978                }
35979                let val_ref = self.queries.get_or_insert_with(|| fidl::new_empty!(u32, D));
35980                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
35981                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
35982                {
35983                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
35984                }
35985                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
35986                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
35987                }
35988            }
35989
35990            next_offset += envelope_size;
35991            _next_ordinal_to_read += 1;
35992            if next_offset >= end_offset {
35993                return Ok(());
35994            }
35995
35996            // Decode unknown envelopes for gaps in ordinals.
35997            while _next_ordinal_to_read < 2 {
35998                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
35999                _next_ordinal_to_read += 1;
36000                next_offset += envelope_size;
36001            }
36002
36003            let next_out_of_line = decoder.next_out_of_line();
36004            let handles_before = decoder.remaining_handles();
36005            if let Some((inlined, num_bytes, num_handles)) =
36006                fidl::encoding::decode_envelope_header(decoder, next_offset)?
36007            {
36008                let member_inline_size =
36009                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
36010                if inlined != (member_inline_size <= 4) {
36011                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
36012                }
36013                let inner_offset;
36014                let mut inner_depth = depth.clone();
36015                if inlined {
36016                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
36017                    inner_offset = next_offset;
36018                } else {
36019                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
36020                    inner_depth.increment()?;
36021                }
36022                let val_ref = self.responses.get_or_insert_with(|| fidl::new_empty!(u32, D));
36023                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
36024                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
36025                {
36026                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
36027                }
36028                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
36029                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
36030                }
36031            }
36032
36033            next_offset += envelope_size;
36034            _next_ordinal_to_read += 1;
36035            if next_offset >= end_offset {
36036                return Ok(());
36037            }
36038
36039            // Decode unknown envelopes for gaps in ordinals.
36040            while _next_ordinal_to_read < 3 {
36041                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
36042                _next_ordinal_to_read += 1;
36043                next_offset += envelope_size;
36044            }
36045
36046            let next_out_of_line = decoder.next_out_of_line();
36047            let handles_before = decoder.remaining_handles();
36048            if let Some((inlined, num_bytes, num_handles)) =
36049                fidl::encoding::decode_envelope_header(decoder, next_offset)?
36050            {
36051                let member_inline_size =
36052                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
36053                if inlined != (member_inline_size <= 4) {
36054                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
36055                }
36056                let inner_offset;
36057                let mut inner_depth = depth.clone();
36058                if inlined {
36059                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
36060                    inner_offset = next_offset;
36061                } else {
36062                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
36063                    inner_depth.increment()?;
36064                }
36065                let val_ref = self.failures.get_or_insert_with(|| fidl::new_empty!(u32, D));
36066                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
36067                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
36068                {
36069                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
36070                }
36071                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
36072                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
36073                }
36074            }
36075
36076            next_offset += envelope_size;
36077
36078            // Decode the remaining unknown envelopes.
36079            while next_offset < end_offset {
36080                _next_ordinal_to_read += 1;
36081                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
36082                next_offset += envelope_size;
36083            }
36084
36085            Ok(())
36086        }
36087    }
36088
36089    impl UpstreamDnsInfo {
36090        #[inline(always)]
36091        fn max_ordinal_present(&self) -> u64 {
36092            if let Some(_) = self.upstream_dns_query_state {
36093                return 1;
36094            }
36095            0
36096        }
36097    }
36098
36099    impl fidl::encoding::ValueTypeMarker for UpstreamDnsInfo {
36100        type Borrowed<'a> = &'a Self;
36101        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
36102            value
36103        }
36104    }
36105
36106    unsafe impl fidl::encoding::TypeMarker for UpstreamDnsInfo {
36107        type Owned = Self;
36108
36109        #[inline(always)]
36110        fn inline_align(_context: fidl::encoding::Context) -> usize {
36111            8
36112        }
36113
36114        #[inline(always)]
36115        fn inline_size(_context: fidl::encoding::Context) -> usize {
36116            16
36117        }
36118    }
36119
36120    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<UpstreamDnsInfo, D>
36121        for &UpstreamDnsInfo
36122    {
36123        unsafe fn encode(
36124            self,
36125            encoder: &mut fidl::encoding::Encoder<'_, D>,
36126            offset: usize,
36127            mut depth: fidl::encoding::Depth,
36128        ) -> fidl::Result<()> {
36129            encoder.debug_check_bounds::<UpstreamDnsInfo>(offset);
36130            // Vector header
36131            let max_ordinal: u64 = self.max_ordinal_present();
36132            encoder.write_num(max_ordinal, offset);
36133            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
36134            // Calling encoder.out_of_line_offset(0) is not allowed.
36135            if max_ordinal == 0 {
36136                return Ok(());
36137            }
36138            depth.increment()?;
36139            let envelope_size = 8;
36140            let bytes_len = max_ordinal as usize * envelope_size;
36141            #[allow(unused_variables)]
36142            let offset = encoder.out_of_line_offset(bytes_len);
36143            let mut _prev_end_offset: usize = 0;
36144            if 1 > max_ordinal {
36145                return Ok(());
36146            }
36147
36148            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
36149            // are envelope_size bytes.
36150            let cur_offset: usize = (1 - 1) * envelope_size;
36151
36152            // Zero reserved fields.
36153            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
36154
36155            // Safety:
36156            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
36157            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
36158            //   envelope_size bytes, there is always sufficient room.
36159            fidl::encoding::encode_in_envelope_optional::<UpstreamDnsQueryState, D>(
36160                self.upstream_dns_query_state
36161                    .as_ref()
36162                    .map(<UpstreamDnsQueryState as fidl::encoding::ValueTypeMarker>::borrow),
36163                encoder,
36164                offset + cur_offset,
36165                depth,
36166            )?;
36167
36168            _prev_end_offset = cur_offset + envelope_size;
36169
36170            Ok(())
36171        }
36172    }
36173
36174    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for UpstreamDnsInfo {
36175        #[inline(always)]
36176        fn new_empty() -> Self {
36177            Self::default()
36178        }
36179
36180        unsafe fn decode(
36181            &mut self,
36182            decoder: &mut fidl::encoding::Decoder<'_, D>,
36183            offset: usize,
36184            mut depth: fidl::encoding::Depth,
36185        ) -> fidl::Result<()> {
36186            decoder.debug_check_bounds::<Self>(offset);
36187            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
36188                None => return Err(fidl::Error::NotNullable),
36189                Some(len) => len,
36190            };
36191            // Calling decoder.out_of_line_offset(0) is not allowed.
36192            if len == 0 {
36193                return Ok(());
36194            };
36195            depth.increment()?;
36196            let envelope_size = 8;
36197            let bytes_len = len * envelope_size;
36198            let offset = decoder.out_of_line_offset(bytes_len)?;
36199            // Decode the envelope for each type.
36200            let mut _next_ordinal_to_read = 0;
36201            let mut next_offset = offset;
36202            let end_offset = offset + bytes_len;
36203            _next_ordinal_to_read += 1;
36204            if next_offset >= end_offset {
36205                return Ok(());
36206            }
36207
36208            // Decode unknown envelopes for gaps in ordinals.
36209            while _next_ordinal_to_read < 1 {
36210                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
36211                _next_ordinal_to_read += 1;
36212                next_offset += envelope_size;
36213            }
36214
36215            let next_out_of_line = decoder.next_out_of_line();
36216            let handles_before = decoder.remaining_handles();
36217            if let Some((inlined, num_bytes, num_handles)) =
36218                fidl::encoding::decode_envelope_header(decoder, next_offset)?
36219            {
36220                let member_inline_size =
36221                    <UpstreamDnsQueryState as fidl::encoding::TypeMarker>::inline_size(
36222                        decoder.context,
36223                    );
36224                if inlined != (member_inline_size <= 4) {
36225                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
36226                }
36227                let inner_offset;
36228                let mut inner_depth = depth.clone();
36229                if inlined {
36230                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
36231                    inner_offset = next_offset;
36232                } else {
36233                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
36234                    inner_depth.increment()?;
36235                }
36236                let val_ref = self
36237                    .upstream_dns_query_state
36238                    .get_or_insert_with(|| fidl::new_empty!(UpstreamDnsQueryState, D));
36239                fidl::decode!(
36240                    UpstreamDnsQueryState,
36241                    D,
36242                    val_ref,
36243                    decoder,
36244                    inner_offset,
36245                    inner_depth
36246                )?;
36247                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
36248                {
36249                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
36250                }
36251                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
36252                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
36253                }
36254            }
36255
36256            next_offset += envelope_size;
36257
36258            // Decode the remaining unknown envelopes.
36259            while next_offset < end_offset {
36260                _next_ordinal_to_read += 1;
36261                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
36262                next_offset += envelope_size;
36263            }
36264
36265            Ok(())
36266        }
36267    }
36268
36269    impl fidl::encoding::ValueTypeMarker for JoinParams {
36270        type Borrowed<'a> = &'a Self;
36271        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
36272            value
36273        }
36274    }
36275
36276    unsafe impl fidl::encoding::TypeMarker for JoinParams {
36277        type Owned = Self;
36278
36279        #[inline(always)]
36280        fn inline_align(_context: fidl::encoding::Context) -> usize {
36281            8
36282        }
36283
36284        #[inline(always)]
36285        fn inline_size(_context: fidl::encoding::Context) -> usize {
36286            16
36287        }
36288    }
36289
36290    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<JoinParams, D>
36291        for &JoinParams
36292    {
36293        #[inline]
36294        unsafe fn encode(
36295            self,
36296            encoder: &mut fidl::encoding::Encoder<'_, D>,
36297            offset: usize,
36298            _depth: fidl::encoding::Depth,
36299        ) -> fidl::Result<()> {
36300            encoder.debug_check_bounds::<JoinParams>(offset);
36301            encoder.write_num::<u64>(self.ordinal(), offset);
36302            match self {
36303            JoinParams::ProvisioningParameter(ref val) => {
36304                fidl::encoding::encode_in_envelope::<fidl_fuchsia_lowpan_device_common::ProvisioningParams, D>(
36305                    <fidl_fuchsia_lowpan_device_common::ProvisioningParams as fidl::encoding::ValueTypeMarker>::borrow(val),
36306                    encoder, offset + 8, _depth
36307                )
36308            }
36309            JoinParams::JoinerParameter(ref val) => {
36310                fidl::encoding::encode_in_envelope::<JoinerCommissioningParams, D>(
36311                    <JoinerCommissioningParams as fidl::encoding::ValueTypeMarker>::borrow(val),
36312                    encoder, offset + 8, _depth
36313                )
36314            }
36315            JoinParams::__SourceBreaking { .. } => Err(fidl::Error::UnknownUnionTag),
36316        }
36317        }
36318    }
36319
36320    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for JoinParams {
36321        #[inline(always)]
36322        fn new_empty() -> Self {
36323            Self::__SourceBreaking { unknown_ordinal: 0 }
36324        }
36325
36326        #[inline]
36327        unsafe fn decode(
36328            &mut self,
36329            decoder: &mut fidl::encoding::Decoder<'_, D>,
36330            offset: usize,
36331            mut depth: fidl::encoding::Depth,
36332        ) -> fidl::Result<()> {
36333            decoder.debug_check_bounds::<Self>(offset);
36334            #[allow(unused_variables)]
36335            let next_out_of_line = decoder.next_out_of_line();
36336            let handles_before = decoder.remaining_handles();
36337            let (ordinal, inlined, num_bytes, num_handles) =
36338                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
36339
36340            let member_inline_size = match ordinal {
36341            1 => <fidl_fuchsia_lowpan_device_common::ProvisioningParams as fidl::encoding::TypeMarker>::inline_size(decoder.context),
36342            2 => <JoinerCommissioningParams as fidl::encoding::TypeMarker>::inline_size(decoder.context),
36343            0 => return Err(fidl::Error::UnknownUnionTag),
36344            _ => num_bytes as usize,
36345        };
36346
36347            if inlined != (member_inline_size <= 4) {
36348                return Err(fidl::Error::InvalidInlineBitInEnvelope);
36349            }
36350            let _inner_offset;
36351            if inlined {
36352                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
36353                _inner_offset = offset + 8;
36354            } else {
36355                depth.increment()?;
36356                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
36357            }
36358            match ordinal {
36359                1 => {
36360                    #[allow(irrefutable_let_patterns)]
36361                    if let JoinParams::ProvisioningParameter(_) = self {
36362                        // Do nothing, read the value into the object
36363                    } else {
36364                        // Initialize `self` to the right variant
36365                        *self = JoinParams::ProvisioningParameter(fidl::new_empty!(
36366                            fidl_fuchsia_lowpan_device_common::ProvisioningParams,
36367                            D
36368                        ));
36369                    }
36370                    #[allow(irrefutable_let_patterns)]
36371                    if let JoinParams::ProvisioningParameter(ref mut val) = self {
36372                        fidl::decode!(
36373                            fidl_fuchsia_lowpan_device_common::ProvisioningParams,
36374                            D,
36375                            val,
36376                            decoder,
36377                            _inner_offset,
36378                            depth
36379                        )?;
36380                    } else {
36381                        unreachable!()
36382                    }
36383                }
36384                2 => {
36385                    #[allow(irrefutable_let_patterns)]
36386                    if let JoinParams::JoinerParameter(_) = self {
36387                        // Do nothing, read the value into the object
36388                    } else {
36389                        // Initialize `self` to the right variant
36390                        *self = JoinParams::JoinerParameter(fidl::new_empty!(
36391                            JoinerCommissioningParams,
36392                            D
36393                        ));
36394                    }
36395                    #[allow(irrefutable_let_patterns)]
36396                    if let JoinParams::JoinerParameter(ref mut val) = self {
36397                        fidl::decode!(
36398                            JoinerCommissioningParams,
36399                            D,
36400                            val,
36401                            decoder,
36402                            _inner_offset,
36403                            depth
36404                        )?;
36405                    } else {
36406                        unreachable!()
36407                    }
36408                }
36409                #[allow(deprecated)]
36410                ordinal => {
36411                    for _ in 0..num_handles {
36412                        decoder.drop_next_handle()?;
36413                    }
36414                    *self = JoinParams::__SourceBreaking { unknown_ordinal: ordinal };
36415                }
36416            }
36417            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
36418                return Err(fidl::Error::InvalidNumBytesInEnvelope);
36419            }
36420            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
36421                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
36422            }
36423            Ok(())
36424        }
36425    }
36426
36427    impl fidl::encoding::ValueTypeMarker for ProvisioningProgress {
36428        type Borrowed<'a> = &'a Self;
36429        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
36430            value
36431        }
36432    }
36433
36434    unsafe impl fidl::encoding::TypeMarker for ProvisioningProgress {
36435        type Owned = Self;
36436
36437        #[inline(always)]
36438        fn inline_align(_context: fidl::encoding::Context) -> usize {
36439            8
36440        }
36441
36442        #[inline(always)]
36443        fn inline_size(_context: fidl::encoding::Context) -> usize {
36444            16
36445        }
36446    }
36447
36448    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<ProvisioningProgress, D>
36449        for &ProvisioningProgress
36450    {
36451        #[inline]
36452        unsafe fn encode(
36453            self,
36454            encoder: &mut fidl::encoding::Encoder<'_, D>,
36455            offset: usize,
36456            _depth: fidl::encoding::Depth,
36457        ) -> fidl::Result<()> {
36458            encoder.debug_check_bounds::<ProvisioningProgress>(offset);
36459            encoder.write_num::<u64>(self.ordinal(), offset);
36460            match self {
36461            ProvisioningProgress::Progress(ref val) => {
36462                fidl::encoding::encode_in_envelope::<f32, D>(
36463                    <f32 as fidl::encoding::ValueTypeMarker>::borrow(val),
36464                    encoder, offset + 8, _depth
36465                )
36466            }
36467            ProvisioningProgress::Identity(ref val) => {
36468                fidl::encoding::encode_in_envelope::<fidl_fuchsia_lowpan_device_common::Identity, D>(
36469                    <fidl_fuchsia_lowpan_device_common::Identity as fidl::encoding::ValueTypeMarker>::borrow(val),
36470                    encoder, offset + 8, _depth
36471                )
36472            }
36473            ProvisioningProgress::__SourceBreaking { .. } => Err(fidl::Error::UnknownUnionTag),
36474        }
36475        }
36476    }
36477
36478    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ProvisioningProgress {
36479        #[inline(always)]
36480        fn new_empty() -> Self {
36481            Self::__SourceBreaking { unknown_ordinal: 0 }
36482        }
36483
36484        #[inline]
36485        unsafe fn decode(
36486            &mut self,
36487            decoder: &mut fidl::encoding::Decoder<'_, D>,
36488            offset: usize,
36489            mut depth: fidl::encoding::Depth,
36490        ) -> fidl::Result<()> {
36491            decoder.debug_check_bounds::<Self>(offset);
36492            #[allow(unused_variables)]
36493            let next_out_of_line = decoder.next_out_of_line();
36494            let handles_before = decoder.remaining_handles();
36495            let (ordinal, inlined, num_bytes, num_handles) =
36496                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
36497
36498            let member_inline_size = match ordinal {
36499            1 => <f32 as fidl::encoding::TypeMarker>::inline_size(decoder.context),
36500            2 => <fidl_fuchsia_lowpan_device_common::Identity as fidl::encoding::TypeMarker>::inline_size(decoder.context),
36501            0 => return Err(fidl::Error::UnknownUnionTag),
36502            _ => num_bytes as usize,
36503        };
36504
36505            if inlined != (member_inline_size <= 4) {
36506                return Err(fidl::Error::InvalidInlineBitInEnvelope);
36507            }
36508            let _inner_offset;
36509            if inlined {
36510                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
36511                _inner_offset = offset + 8;
36512            } else {
36513                depth.increment()?;
36514                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
36515            }
36516            match ordinal {
36517                1 => {
36518                    #[allow(irrefutable_let_patterns)]
36519                    if let ProvisioningProgress::Progress(_) = self {
36520                        // Do nothing, read the value into the object
36521                    } else {
36522                        // Initialize `self` to the right variant
36523                        *self = ProvisioningProgress::Progress(fidl::new_empty!(f32, D));
36524                    }
36525                    #[allow(irrefutable_let_patterns)]
36526                    if let ProvisioningProgress::Progress(ref mut val) = self {
36527                        fidl::decode!(f32, D, val, decoder, _inner_offset, depth)?;
36528                    } else {
36529                        unreachable!()
36530                    }
36531                }
36532                2 => {
36533                    #[allow(irrefutable_let_patterns)]
36534                    if let ProvisioningProgress::Identity(_) = self {
36535                        // Do nothing, read the value into the object
36536                    } else {
36537                        // Initialize `self` to the right variant
36538                        *self = ProvisioningProgress::Identity(fidl::new_empty!(
36539                            fidl_fuchsia_lowpan_device_common::Identity,
36540                            D
36541                        ));
36542                    }
36543                    #[allow(irrefutable_let_patterns)]
36544                    if let ProvisioningProgress::Identity(ref mut val) = self {
36545                        fidl::decode!(
36546                            fidl_fuchsia_lowpan_device_common::Identity,
36547                            D,
36548                            val,
36549                            decoder,
36550                            _inner_offset,
36551                            depth
36552                        )?;
36553                    } else {
36554                        unreachable!()
36555                    }
36556                }
36557                #[allow(deprecated)]
36558                ordinal => {
36559                    for _ in 0..num_handles {
36560                        decoder.drop_next_handle()?;
36561                    }
36562                    *self = ProvisioningProgress::__SourceBreaking { unknown_ordinal: ordinal };
36563                }
36564            }
36565            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
36566                return Err(fidl::Error::InvalidNumBytesInEnvelope);
36567            }
36568            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
36569                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
36570            }
36571            Ok(())
36572        }
36573    }
36574}