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_ON_MESH_PREFIXES: u32 = 32;
14
15pub const MAX_PROVISION_URL_LEN: u16 = 64;
16
17pub const MAX_VENDOR_DATA_LEN: u16 = 64;
18
19pub const MAX_VENDOR_MODEL_LEN: u16 = 32;
20
21pub const MAX_VENDOR_NAME_LEN: u16 = 32;
22
23pub const MAX_VENDOR_SW_VER_LEN: u16 = 16;
24
25pub const PSKD_LEN: u16 = 32;
26
27/// Represents the DHCPv6 PD state.
28#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
29pub enum Dhcp6PdState {
30    Dhcp6PdStateUnspecified,
31    /// DHCPv6 PD is disabled on the border router.
32    Dhcp6PdStateDisabled,
33    /// DHCPv6 PD is enabled but won't try to request and publish a prefix.
34    Dhcp6PdStateStopped,
35    /// DHCPv6 PD is enabled and will try to request and publish a prefix.
36    Dhcp6PdStateRunning,
37    /// DHCPv6 PD is idle; Higher-prf prefix published by other BRs.
38    Dhcp6PdStateIdle,
39    #[doc(hidden)]
40    __SourceBreaking {
41        unknown_ordinal: u32,
42    },
43}
44
45/// Pattern that matches an unknown `Dhcp6PdState` member.
46#[macro_export]
47macro_rules! Dhcp6PdStateUnknown {
48    () => {
49        _
50    };
51}
52
53impl Dhcp6PdState {
54    #[inline]
55    pub fn from_primitive(prim: u32) -> Option<Self> {
56        match prim {
57            0 => Some(Self::Dhcp6PdStateUnspecified),
58            1 => Some(Self::Dhcp6PdStateDisabled),
59            2 => Some(Self::Dhcp6PdStateStopped),
60            3 => Some(Self::Dhcp6PdStateRunning),
61            4 => Some(Self::Dhcp6PdStateIdle),
62            _ => None,
63        }
64    }
65
66    #[inline]
67    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
68        match prim {
69            0 => Self::Dhcp6PdStateUnspecified,
70            1 => Self::Dhcp6PdStateDisabled,
71            2 => Self::Dhcp6PdStateStopped,
72            3 => Self::Dhcp6PdStateRunning,
73            4 => Self::Dhcp6PdStateIdle,
74            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
75        }
76    }
77
78    #[inline]
79    pub fn unknown() -> Self {
80        Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
81    }
82
83    #[inline]
84    pub const fn into_primitive(self) -> u32 {
85        match self {
86            Self::Dhcp6PdStateUnspecified => 0,
87            Self::Dhcp6PdStateDisabled => 1,
88            Self::Dhcp6PdStateStopped => 2,
89            Self::Dhcp6PdStateRunning => 3,
90            Self::Dhcp6PdStateIdle => 4,
91            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
92        }
93    }
94
95    #[inline]
96    pub fn is_unknown(&self) -> bool {
97        match self {
98            Self::__SourceBreaking { unknown_ordinal: _ } => true,
99            _ => false,
100        }
101    }
102}
103
104#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
105pub enum Nat64State {
106    Nat64StateUnspecified,
107    Nat64StateDisabled,
108    Nat64StateNotRunning,
109    Nat64StateIdle,
110    Nat64StateActive,
111    #[doc(hidden)]
112    __SourceBreaking {
113        unknown_ordinal: u32,
114    },
115}
116
117/// Pattern that matches an unknown `Nat64State` member.
118#[macro_export]
119macro_rules! Nat64StateUnknown {
120    () => {
121        _
122    };
123}
124
125impl Nat64State {
126    #[inline]
127    pub fn from_primitive(prim: u32) -> Option<Self> {
128        match prim {
129            0 => Some(Self::Nat64StateUnspecified),
130            1 => Some(Self::Nat64StateDisabled),
131            2 => Some(Self::Nat64StateNotRunning),
132            3 => Some(Self::Nat64StateIdle),
133            4 => Some(Self::Nat64StateActive),
134            _ => None,
135        }
136    }
137
138    #[inline]
139    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
140        match prim {
141            0 => Self::Nat64StateUnspecified,
142            1 => Self::Nat64StateDisabled,
143            2 => Self::Nat64StateNotRunning,
144            3 => Self::Nat64StateIdle,
145            4 => Self::Nat64StateActive,
146            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
147        }
148    }
149
150    #[inline]
151    pub fn unknown() -> Self {
152        Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
153    }
154
155    #[inline]
156    pub const fn into_primitive(self) -> u32 {
157        match self {
158            Self::Nat64StateUnspecified => 0,
159            Self::Nat64StateDisabled => 1,
160            Self::Nat64StateNotRunning => 2,
161            Self::Nat64StateIdle => 3,
162            Self::Nat64StateActive => 4,
163            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
164        }
165    }
166
167    #[inline]
168    pub fn is_unknown(&self) -> bool {
169        match self {
170            Self::__SourceBreaking { unknown_ordinal: _ } => true,
171            _ => false,
172        }
173    }
174}
175
176/// LoWPAN Provisioning Error
177///
178/// Returned by [`ProvisioningMonitor.WatchProgress`].
179#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
180pub enum ProvisionError {
181    /// Provisioning did not successfully complete because the
182    /// credential was rejected. For example, the key was incorrect.
183    ///
184    /// This may be interpreted as an argument error.
185    CredentialRejected,
186    /// Provisioning did not successfully complete because the
187    /// no peers on the requested network are in range.
188    NetworkNotFound,
189    /// Forming a new network did not successfully complete because the
190    /// a peer with the requested network identity is in range.
191    NetworkAlreadyExists,
192    /// This operation was canceled due to an incompatible operation
193    /// being started before this one was finished.
194    Canceled,
195    #[doc(hidden)]
196    __SourceBreaking { unknown_ordinal: i32 },
197}
198
199/// Pattern that matches an unknown `ProvisionError` member.
200#[macro_export]
201macro_rules! ProvisionErrorUnknown {
202    () => {
203        _
204    };
205}
206
207impl ProvisionError {
208    #[inline]
209    pub fn from_primitive(prim: i32) -> Option<Self> {
210        match prim {
211            1 => Some(Self::CredentialRejected),
212            2 => Some(Self::NetworkNotFound),
213            3 => Some(Self::NetworkAlreadyExists),
214            4 => Some(Self::Canceled),
215            _ => None,
216        }
217    }
218
219    #[inline]
220    pub fn from_primitive_allow_unknown(prim: i32) -> Self {
221        match prim {
222            1 => Self::CredentialRejected,
223            2 => Self::NetworkNotFound,
224            3 => Self::NetworkAlreadyExists,
225            4 => Self::Canceled,
226            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
227        }
228    }
229
230    #[inline]
231    pub fn unknown() -> Self {
232        Self::__SourceBreaking { unknown_ordinal: 0x7fffffff }
233    }
234
235    #[inline]
236    pub const fn into_primitive(self) -> i32 {
237        match self {
238            Self::CredentialRejected => 1,
239            Self::NetworkNotFound => 2,
240            Self::NetworkAlreadyExists => 3,
241            Self::Canceled => 4,
242            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
243        }
244    }
245
246    #[inline]
247    pub fn is_unknown(&self) -> bool {
248        match self {
249            Self::__SourceBreaking { unknown_ordinal: _ } => true,
250            _ => false,
251        }
252    }
253}
254
255/// Route preference, as described in RFC4191.
256#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
257#[repr(i8)]
258pub enum RoutePreference {
259    /// Low route preference.
260    Low = -1,
261    /// Medium route preference.
262    Medium = 0,
263    /// High route preference.
264    High = 1,
265}
266
267impl RoutePreference {
268    #[inline]
269    pub fn from_primitive(prim: i8) -> Option<Self> {
270        match prim {
271            -1 => Some(Self::Low),
272            0 => Some(Self::Medium),
273            1 => Some(Self::High),
274            _ => None,
275        }
276    }
277
278    #[inline]
279    pub const fn into_primitive(self) -> i8 {
280        self as i8
281    }
282}
283
284#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
285#[repr(u32)]
286pub enum SrpServerAddressMode {
287    /// Thread network data is published as unicast addresses.
288    Unicast = 1,
289    /// Thread network data is published as anycast addresses.
290    Anycast = 2,
291}
292
293impl SrpServerAddressMode {
294    #[inline]
295    pub fn from_primitive(prim: u32) -> Option<Self> {
296        match prim {
297            1 => Some(Self::Unicast),
298            2 => Some(Self::Anycast),
299            _ => None,
300        }
301    }
302
303    #[inline]
304    pub const fn into_primitive(self) -> u32 {
305        self as u32
306    }
307}
308
309#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
310#[repr(u32)]
311pub enum SrpServerState {
312    /// The server is disabled.
313    Disabled = 1,
314    /// The server is enabled and running.
315    Running = 2,
316    /// The server is enabled, but stopped.
317    Stopped = 3,
318}
319
320impl SrpServerState {
321    #[inline]
322    pub fn from_primitive(prim: u32) -> Option<Self> {
323        match prim {
324            1 => Some(Self::Disabled),
325            2 => Some(Self::Running),
326            3 => Some(Self::Stopped),
327            _ => None,
328        }
329    }
330
331    #[inline]
332    pub const fn into_primitive(self) -> u32 {
333        self as u32
334    }
335}
336
337/// Represents the Upstream DNS state
338#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
339pub enum UpstreamDnsQueryState {
340    UpstreamdnsQueryStateUnspecified,
341    UpstreamdnsQueryStateEnabled,
342    UpstreamdnsQueryStateDisabled,
343    #[doc(hidden)]
344    __SourceBreaking {
345        unknown_ordinal: u32,
346    },
347}
348
349/// Pattern that matches an unknown `UpstreamDnsQueryState` member.
350#[macro_export]
351macro_rules! UpstreamDnsQueryStateUnknown {
352    () => {
353        _
354    };
355}
356
357impl UpstreamDnsQueryState {
358    #[inline]
359    pub fn from_primitive(prim: u32) -> Option<Self> {
360        match prim {
361            0 => Some(Self::UpstreamdnsQueryStateUnspecified),
362            1 => Some(Self::UpstreamdnsQueryStateEnabled),
363            2 => Some(Self::UpstreamdnsQueryStateDisabled),
364            _ => None,
365        }
366    }
367
368    #[inline]
369    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
370        match prim {
371            0 => Self::UpstreamdnsQueryStateUnspecified,
372            1 => Self::UpstreamdnsQueryStateEnabled,
373            2 => Self::UpstreamdnsQueryStateDisabled,
374            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
375        }
376    }
377
378    #[inline]
379    pub fn unknown() -> Self {
380        Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
381    }
382
383    #[inline]
384    pub const fn into_primitive(self) -> u32 {
385        match self {
386            Self::UpstreamdnsQueryStateUnspecified => 0,
387            Self::UpstreamdnsQueryStateEnabled => 1,
388            Self::UpstreamdnsQueryStateDisabled => 2,
389            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
390        }
391    }
392
393    #[inline]
394    pub fn is_unknown(&self) -> bool {
395        match self {
396            Self::__SourceBreaking { unknown_ordinal: _ } => true,
397            _ => false,
398        }
399    }
400}
401
402#[derive(Clone, Debug, PartialEq)]
403pub struct BeaconInfoStreamNextResponse {
404    pub beacons: Vec<BeaconInfo>,
405}
406
407impl fidl::Persistable for BeaconInfoStreamNextResponse {}
408
409#[derive(Clone, Debug, PartialEq)]
410pub struct DeviceGetSupportedChannelsResponse {
411    pub channels_info: Vec<ChannelInfo>,
412}
413
414impl fidl::Persistable for DeviceGetSupportedChannelsResponse {}
415
416#[derive(Clone, Debug, PartialEq)]
417pub struct DeviceRouteExtraGetLocalExternalRoutesResponse {
418    pub external_routes: Vec<ExternalRoute>,
419}
420
421impl fidl::Persistable for DeviceRouteExtraGetLocalExternalRoutesResponse {}
422
423#[derive(Clone, Debug, PartialEq)]
424pub struct DeviceRouteExtraGetLocalOnMeshPrefixesResponse {
425    pub prefixes: Vec<OnMeshPrefix>,
426}
427
428impl fidl::Persistable for DeviceRouteExtraGetLocalOnMeshPrefixesResponse {}
429
430#[derive(Clone, Debug, PartialEq)]
431pub struct DeviceRouteRegisterExternalRouteRequest {
432    pub external_route: ExternalRoute,
433}
434
435impl fidl::Persistable for DeviceRouteRegisterExternalRouteRequest {}
436
437#[derive(Clone, Debug, PartialEq)]
438pub struct DeviceRouteRegisterOnMeshPrefixRequest {
439    pub prefix: OnMeshPrefix,
440}
441
442impl fidl::Persistable for DeviceRouteRegisterOnMeshPrefixRequest {}
443
444#[derive(Clone, Debug, PartialEq)]
445pub struct DeviceRouteUnregisterExternalRouteRequest {
446    pub subnet: fidl_fuchsia_net__common::Ipv6AddressWithPrefix,
447}
448
449impl fidl::Persistable for DeviceRouteUnregisterExternalRouteRequest {}
450
451#[derive(Clone, Debug, PartialEq)]
452pub struct DeviceRouteUnregisterOnMeshPrefixRequest {
453    pub subnet: fidl_fuchsia_net__common::Ipv6AddressWithPrefix,
454}
455
456impl fidl::Persistable for DeviceRouteUnregisterOnMeshPrefixRequest {}
457
458#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
459#[repr(C)]
460pub struct LegacyJoiningMakeJoinableRequest {
461    pub duration: i64,
462    pub port: u16,
463}
464
465impl fidl::Persistable for LegacyJoiningMakeJoinableRequest {}
466
467#[derive(Clone, Debug, PartialEq)]
468pub struct ProvisioningMonitorWatchProgressResponse {
469    pub progress: ProvisioningProgress,
470}
471
472impl fidl::Persistable for ProvisioningMonitorWatchProgressResponse {}
473
474#[derive(Clone, Debug, PartialEq)]
475pub struct TelemetryProviderGetTelemetryResponse {
476    pub telemetry: Telemetry,
477}
478
479impl fidl::Persistable for TelemetryProviderGetTelemetryResponse {}
480
481#[derive(Clone, Debug, Default, PartialEq)]
482pub struct BeaconInfo {
483    /// The MAC address associated with this beacon.
484    pub address: Option<fidl_fuchsia_lowpan__common::MacAddress>,
485    /// The identity of the network being advertised by
486    /// this beacon.
487    pub identity: Option<fidl_fuchsia_lowpan_device__common::Identity>,
488    /// RSSI of the beacon, measured in dBm.
489    ///
490    /// A value of -128 should be treated as if this
491    /// field was absent.
492    pub rssi: Option<i8>,
493    /// Link Quality Index (LQI) of the beacon.
494    ///
495    /// * A value of 0 should be treated as if this
496    ///   field was absent.
497    /// * A value of 1 indicates the worst possible
498    ///   quality where the decoded beacon is still valid.
499    /// * A value of 255 indicates the best possible
500    ///   quality that can be recognized by the radio
501    ///   hardware.
502    /// * Values 2-254 are intended to represent relative
503    ///   quality levels evenly distributed between the
504    ///   worst and best, with lower values always
505    ///   indicating a worse quality than higher values.
506    pub lqi: Option<u8>,
507    #[doc(hidden)]
508    pub __source_breaking: fidl::marker::SourceBreaking,
509}
510
511impl fidl::Persistable for BeaconInfo {}
512
513/// Counters associated with border routing.
514#[derive(Clone, Debug, Default, PartialEq)]
515pub struct BorderRoutingCounters {
516    /// The number of packets associated with inbound unicast messages.
517    ///
518    /// Required.
519    pub inbound_unicast_packets: Option<u64>,
520    /// The number of bytes associated with inbound unicast messages.
521    ///
522    /// Required.
523    pub inbound_unicast_bytes: Option<u64>,
524    /// The number of packets associated with inbound multicast messages.
525    ///
526    /// Required.
527    pub inbound_multicast_packets: Option<u64>,
528    /// The number of bytes associated with inbound multicast messages.
529    ///
530    /// Required.
531    pub inbound_multicast_bytes: Option<u64>,
532    /// The number of packets associated with outbound unicast messages.
533    ///
534    /// Required.
535    pub outbound_unicast_packets: Option<u64>,
536    /// The number of bytes associated with outbound unicast messages.
537    ///
538    /// Required.
539    pub outbound_unicast_bytes: Option<u64>,
540    /// The number of packets associated with outbound multicast messages.
541    ///
542    /// Required.
543    pub outbound_multicast_packets: Option<u64>,
544    /// The number of bytes associated with outbound multicast messages.
545    ///
546    /// Required.
547    pub outbound_multicast_bytes: Option<u64>,
548    /// The number of received RA packets.
549    ///
550    /// Required.
551    pub ra_rx: Option<u32>,
552    /// The number of RA packets successfully transmitted.
553    ///
554    /// Required.
555    pub ra_tx_success: Option<u32>,
556    /// The number of RA packets failed to transmit.
557    ///
558    /// Required.
559    pub ra_tx_failure: Option<u32>,
560    /// The number of received RS packets.
561    ///
562    /// Required.
563    pub rs_rx: Option<u32>,
564    /// The number of RS packets successfully transmitted.
565    ///
566    /// Required.
567    pub rs_tx_success: Option<u32>,
568    /// The number of RS packets failed to transmit.
569    ///
570    /// Required.
571    pub rs_tx_failure: Option<u32>,
572    /// Inbound Internet packets when DHCPv6 PD enabled.
573    ///
574    /// Optional.
575    pub inbound_internet_packets: Option<u64>,
576    /// Inbound Internet bytes when DHCPv6 PD enabled.
577    ///
578    /// Optional.
579    pub inbound_internet_bytes: Option<u64>,
580    /// Outbound Internet packets when DHCPv6 PD enabled.
581    ///
582    /// Optional.
583    pub outbound_internet_packets: Option<u64>,
584    /// Outbound Internet bytes when DHCPv6 PD enabled.
585    ///
586    /// Optional.
587    pub outbound_internet_bytes: Option<u64>,
588    #[doc(hidden)]
589    pub __source_breaking: fidl::marker::SourceBreaking,
590}
591
592impl fidl::Persistable for BorderRoutingCounters {}
593
594/// Information about the state of components of NAT64
595#[derive(Clone, Debug, Default, PartialEq)]
596pub struct BorderRoutingNat64State {
597    /// prefix manager state
598    pub prefix_manager_state: Option<Nat64State>,
599    /// translator state
600    pub translator_state: Option<Nat64State>,
601    #[doc(hidden)]
602    pub __source_breaking: fidl::marker::SourceBreaking,
603}
604
605impl fidl::Persistable for BorderRoutingNat64State {}
606
607#[derive(Clone, Debug, Default, PartialEq)]
608pub struct ChannelInfo {
609    /// The index used by the interface to identify
610    /// this channel.
611    pub index: Option<u16>,
612    /// Human-readable identifier for channel.
613    ///
614    /// For most network types, this is just
615    /// the string representation of the index.
616    /// However, some network types might have
617    /// non-integer ways of identifying specific
618    /// channels. This field allows the application
619    /// to display the name of the channel correctly
620    /// under such circumstances.
621    ///
622    /// The allowed characters include:
623    ///
624    ///  * Dash (`-`), Underscore (`_`), Plus(`+`), Semicolon(`:`)
625    ///  * Numbers (`0`-`9`)
626    ///  * Letters (`a`-`z`, `A`-`Z`)
627    pub id: Option<String>,
628    /// The maximum transmit power allowed on
629    /// this channel, in dBm.
630    pub max_transmit_power_dbm: Option<i8>,
631    /// The center RF frequency of this channel, in Hz.
632    ///
633    /// For example, 802.15.4 has the following values:
634    ///
635    /// Channel | Center Frequency (Hz)
636    /// --------|----------------------
637    /// 11      | 2,405,000,000
638    /// 12      | 2,410,000,000
639    /// 13      | 2,415,000,000
640    /// 14      | 2,420,000,000
641    /// 15      | 2,425,000,000
642    /// 16      | 2,430,000,000
643    /// 17      | 2,435,000,000
644    /// 18      | 2,440,000,000
645    /// 19      | 2,445,000,000
646    /// 20      | 2,450,000,000
647    /// 21      | 2,455,000,000
648    /// 22      | 2,460,000,000
649    /// 23      | 2,465,000,000
650    /// 24      | 2,470,000,000
651    /// 25      | 2,475,000,000
652    /// 26      | 2,480,000,000
653    pub spectrum_center_frequency_hz: Option<u64>,
654    /// The RF spectrum bandwidth used by this
655    /// channel where the power level is expected to
656    /// be higher than -20dBr, in Hz.
657    ///
658    /// For example, 802.15.4 channels 11 thru 26 would
659    /// have the value 2,000,000 (2 MHz).
660    pub spectrum_bandwidth_hz: Option<u64>,
661    /// Indicates if this channel is masked by the
662    /// current regulatory domain and is thus unable
663    /// to be used.
664    pub masked_by_regulatory_domain: Option<bool>,
665    #[doc(hidden)]
666    pub __source_breaking: fidl::marker::SourceBreaking,
667}
668
669impl fidl::Persistable for ChannelInfo {}
670
671/// DHCPv6 PD related info.
672#[derive(Clone, Debug, Default, PartialEq)]
673pub struct Dhcp6PdInfo {
674    /// DHCPv6 PD state.
675    ///
676    /// Required.
677    pub dhcp6pd_state: Option<Dhcp6PdState>,
678    /// DHCPv6 PD processed RA Info.
679    ///
680    /// Optional.
681    pub pd_processed_ra_info: Option<PdProcessedRaInfo>,
682    /// DHCPv6 PD prefix.
683    ///
684    /// Optional.
685    pub hashed_pd_prefix: Option<Vec<u8>>,
686    #[doc(hidden)]
687    pub __source_breaking: fidl::marker::SourceBreaking,
688}
689
690impl fidl::Persistable for Dhcp6PdInfo {}
691
692/// Counters associated with the DNS-SD server.
693#[derive(Clone, Debug, Default, PartialEq)]
694pub struct DnssdCounters {
695    /// The number of successful responses.
696    ///
697    /// Required.
698    pub success_response: Option<u32>,
699    /// The number of 'server failure' responses.
700    ///
701    /// Required.
702    pub server_failure_response: Option<u32>,
703    /// The number of 'format error' responses.
704    ///
705    /// Required.
706    pub format_error_response: Option<u32>,
707    /// The number of 'name error' responses.
708    ///
709    /// Required.
710    pub name_error_response: Option<u32>,
711    /// The number of 'not implemented' responses.
712    ///
713    /// Required.
714    pub not_implemented_response: Option<u32>,
715    /// The number of 'other' responses.
716    ///
717    /// Required.
718    pub other_response: Option<u32>,
719    /// The number of queries completely resolved by the local SRP server.
720    ///
721    /// Required.
722    pub resolved_by_srp: Option<u32>,
723    /// The counters of upstream DNS feature.
724    ///
725    /// Optional.
726    pub upstream_dns_counters: Option<UpstreamDnsCounters>,
727    #[doc(hidden)]
728    pub __source_breaking: fidl::marker::SourceBreaking,
729}
730
731impl fidl::Persistable for DnssdCounters {}
732
733/// LoWPAN External Route.
734///
735/// Informed by the Thread 1.1.1 Specification, section 5.13.3.
736#[derive(Clone, Debug, Default, PartialEq)]
737pub struct ExternalRoute {
738    /// Subnet for route. Required.
739    pub subnet: Option<fidl_fuchsia_net__common::Ipv6AddressWithPrefix>,
740    /// Indicates the what preference this route should be given relative
741    /// to other devices offering the same external route. If not present,
742    /// `MEDIUM` preference is assumed.
743    ///
744    /// Based on `R_preference` from Section 5.13.3 of the Thread 1.1.1
745    /// Specification.
746    pub route_preference: Option<RoutePreference>,
747    /// True if the route is expected to be available for at least Thread's
748    /// `MIN_STABLE_LIFETIME`; otherwise, `false`. If not present, assumed to
749    /// be `false`.
750    ///
751    /// The Thread specification defines `MIN_STABLE_LIFETIME` as 168 hours.
752    ///
753    /// Based on `R_stable` from Section 5.13.3 of the Thread 1.1.1
754    /// Specification.
755    pub stable: Option<bool>,
756    #[doc(hidden)]
757    pub __source_breaking: fidl::marker::SourceBreaking,
758}
759
760impl fidl::Persistable for ExternalRoute {}
761
762/// Parameters for joiner commissioning.
763///
764/// More information:
765/// https://www.threadgroup.org/Portals/0/documents/support/CommissioningWhitePaper_658_2.pdf
766#[derive(Clone, Debug, Default, PartialEq)]
767pub struct JoinerCommissioningParams {
768    /// Commissioning PSKd. Required.
769    pub pskd: Option<String>,
770    /// Provisioning URL. Optional.
771    pub provisioning_url: Option<String>,
772    /// Vendor name. Optional.
773    pub vendor_name: Option<String>,
774    /// Vendor model. Optional.
775    pub vendor_model: Option<String>,
776    /// Vendor Software Version. Optional.
777    pub vendor_sw_version: Option<String>,
778    /// Vendor data string. Optional.
779    pub vendor_data_string: Option<String>,
780    #[doc(hidden)]
781    pub __source_breaking: fidl::marker::SourceBreaking,
782}
783
784impl fidl::Persistable for JoinerCommissioningParams {}
785
786/// Node information for Thread network leaders.
787#[derive(Clone, Debug, Default, PartialEq)]
788pub struct LeaderData {
789    /// The network partition ID of the leader.
790    ///
791    /// Required.
792    pub partition_id: Option<u32>,
793    /// The weight of this leader on the network.
794    ///
795    /// Required.
796    pub weight: Option<u8>,
797    /// The full network data version.
798    ///
799    /// Required.
800    pub network_data_version: Option<u8>,
801    /// The stable network data version.
802    ///
803    /// Required.
804    pub stable_network_data_version: Option<u8>,
805    /// The router ID of the leader.
806    ///
807    /// Required.
808    pub router_id: Option<u8>,
809    #[doc(hidden)]
810    pub __source_breaking: fidl::marker::SourceBreaking,
811}
812
813impl fidl::Persistable for LeaderData {}
814
815/// Link Metrics info of the neighbors.
816#[derive(Clone, Debug, Default, PartialEq)]
817pub struct LinkMetricsEntry {
818    /// Link Margin value of the neighbor
819    pub link_margin: Option<u8>,
820    /// RSSI value of the neighbor
821    pub rssi: Option<i8>,
822    #[doc(hidden)]
823    pub __source_breaking: fidl::marker::SourceBreaking,
824}
825
826impl fidl::Persistable for LinkMetricsEntry {}
827
828#[derive(Clone, Debug, Default, PartialEq)]
829pub struct Nat64ErrorCounters {
830    /// Packet drop for unknown reasons
831    pub unknown: Option<Nat64PacketCounters>,
832    /// Packet drop due to failed to parse the datagram
833    pub illegal_packet: Option<Nat64PacketCounters>,
834    /// Packet drop due to unsupported IP protocol
835    pub unsupported_protocol: Option<Nat64PacketCounters>,
836    /// Packet drop due to no mappings found or mapping pool exhausted
837    pub no_mapping: Option<Nat64PacketCounters>,
838    #[doc(hidden)]
839    pub __source_breaking: fidl::marker::SourceBreaking,
840}
841
842impl fidl::Persistable for Nat64ErrorCounters {}
843
844#[derive(Clone, Debug, Default, PartialEq)]
845pub struct Nat64Info {
846    /// NAT64 border routing state
847    pub nat64_state: Option<BorderRoutingNat64State>,
848    /// NAT64 mapping
849    pub nat64_mappings: Option<Vec<Nat64Mapping>>,
850    /// NAT64 error counters
851    pub nat64_error_counters: Option<Nat64ErrorCounters>,
852    /// NAT64 protocol counters
853    pub nat64_protocol_counters: Option<Nat64ProtocolCounters>,
854    #[doc(hidden)]
855    pub __source_breaking: fidl::marker::SourceBreaking,
856}
857
858impl fidl::Persistable for Nat64Info {}
859
860/// Information about the mappings of NAT64 translator
861#[derive(Clone, Debug, Default, PartialEq)]
862pub struct Nat64Mapping {
863    /// The unique id for a mapping session
864    pub mapping_id: Option<u64>,
865    /// The IPv4 address of the mapping
866    pub ip4_addr: Option<Vec<u8>>,
867    /// The IPv6 address of the mapping
868    pub ip6_addr: Option<Vec<u8>>,
869    /// Remaining time before expiry in milliseconds
870    pub remaining_time_ms: Option<u32>,
871    /// Nat64 Counters
872    pub counters: Option<Nat64ProtocolCounters>,
873    #[doc(hidden)]
874    pub __source_breaking: fidl::marker::SourceBreaking,
875}
876
877impl fidl::Persistable for Nat64Mapping {}
878
879#[derive(Clone, Debug, Default, PartialEq)]
880pub struct Nat64PacketCounters {
881    /// Number of packets translated from IPv4 to IPv6
882    pub ipv4_to_ipv6_packets: Option<u64>,
883    /// Number of packets translated from IPv6 to IPv4
884    pub ipv6_to_ipv4_packets: Option<u64>,
885    #[doc(hidden)]
886    pub __source_breaking: fidl::marker::SourceBreaking,
887}
888
889impl fidl::Persistable for Nat64PacketCounters {}
890
891#[derive(Clone, Debug, Default, PartialEq)]
892pub struct Nat64ProtocolCounters {
893    /// TCP counters
894    pub tcp: Option<Nat64TrafficCounters>,
895    /// UDP counters
896    pub udp: Option<Nat64TrafficCounters>,
897    /// ICMP counters
898    pub icmp: Option<Nat64TrafficCounters>,
899    /// Total counters
900    pub total: Option<Nat64TrafficCounters>,
901    #[doc(hidden)]
902    pub __source_breaking: fidl::marker::SourceBreaking,
903}
904
905impl fidl::Persistable for Nat64ProtocolCounters {}
906
907#[derive(Clone, Debug, Default, PartialEq)]
908pub struct Nat64TrafficCounters {
909    /// Number of packets translated from IPv4 to IPv6
910    pub ipv4_to_ipv6_packets: Option<u64>,
911    /// Sum of size of packets translated from IPv4 to IPv6
912    pub ipv4_to_ipv6_bytes: Option<u64>,
913    /// Number of packets translated from IPv6 to IPv4
914    pub ipv6_to_ipv4_packets: Option<u64>,
915    /// Sum of size of packets translated from IPv6 to IPv4
916    pub ipv6_to_ipv4_bytes: Option<u64>,
917    #[doc(hidden)]
918    pub __source_breaking: fidl::marker::SourceBreaking,
919}
920
921impl fidl::Persistable for Nat64TrafficCounters {}
922
923/// Describes the parameters of a network scan.
924#[derive(Clone, Debug, Default, PartialEq)]
925pub struct NetworkScanParameters {
926    /// Subset of channels to scan.
927    ///
928    /// If unspecified, all channels will be scanned.
929    pub channels: Option<Vec<u16>>,
930    /// Transmit power (in dBm to the antenna) for transmitting
931    /// beacon requests.
932    ///
933    /// Note that hardware limitations may cause the actual
934    /// used transmit power to differ from what is specified.
935    /// In that case the used transmit power will always be
936    /// the highest available transmit power that is less than
937    /// the specified transmit power. If the desired transmit
938    /// power is lower than the lowest transmit power supported
939    /// by the hardware, then that will be used instead.
940    pub tx_power_dbm: Option<i8>,
941    #[doc(hidden)]
942    pub __source_breaking: fidl::marker::SourceBreaking,
943}
944
945impl fidl::Persistable for NetworkScanParameters {}
946
947/// LoWPAN On-Mesh Prefix.
948///
949/// Informed by the Thread 1.1.1 Specification, section 5.13.2.
950#[derive(Clone, Debug, Default, PartialEq)]
951pub struct OnMeshPrefix {
952    /// Subnet to advertise for devices to use on the network. Required.
953    pub subnet: Option<fidl_fuchsia_net__common::Ipv6AddressWithPrefix>,
954    /// If present, indicates that this device is offering a default route
955    /// as well as indicating the what preference this default
956    /// route should be given relative to other devices offering default
957    /// routes. If not present, no default route is advertised.
958    ///
959    /// Based on `P_default` and `P_preference` from Section 5.13.2 of the
960    /// Thread 1.1.1 Specification.
961    pub default_route_preference: Option<RoutePreference>,
962    /// True if the route is expected to be available for at least Thread's
963    /// `MIN_STABLE_LIFETIME`; otherwise `false`. If not present, assumed to
964    /// be `false`.
965    ///
966    /// The Thread specification defines `MIN_STABLE_LIFETIME` as 168 hours.
967    ///
968    /// Based on `P_stable` from Section 5.13.2 of the
969    /// Thread 1.1.1 Specification.
970    pub stable: Option<bool>,
971    /// True if network devices are allowed to use previously configured
972    /// addresses using this prefix. If not present, assumed to be `false`.
973    ///
974    /// "SLAAC" referrs to StateLess Address Auto Configuration, described in
975    /// [RFC4862](https://tools.ietf.org/html/rfc4862).
976    ///
977    /// Based on `P_slaac_preferred` from Section 5.13.2 of the
978    /// Thread 1.1.1 Specification.
979    pub slaac_preferred: Option<bool>,
980    /// True if network devices are allowed to autoconfigure addresses using
981    /// this prefix. If not present, assumed to be `false`.
982    ///
983    /// "SLAAC" referrs to StateLess Address Auto Configuration, described in
984    /// [RFC4862](https://tools.ietf.org/html/rfc4862).
985    ///
986    /// Based on `P_slaac_valid` from Section 5.13.2 of the
987    /// Thread 1.1.1 Specification.
988    pub slaac_valid: Option<bool>,
989    #[doc(hidden)]
990    pub __source_breaking: fidl::marker::SourceBreaking,
991}
992
993impl fidl::Persistable for OnMeshPrefix {}
994
995/// Platform counters related to processed RA info when DHCPv6 PD is enabled.
996#[derive(Clone, Debug, Default, PartialEq)]
997pub struct PdProcessedRaInfo {
998    /// The number of platform generated RA handled by ApplyPlatformGeneratedRa.
999    ///
1000    /// Required.
1001    pub num_platform_ra_received: Option<u32>,
1002    /// The number of PIO processed for adding OMR prefixes.
1003    ///
1004    /// Required.
1005    pub num_platform_pio_processed: Option<u32>,
1006    /// The duration since the last processed RA message.
1007    ///
1008    /// Required.
1009    pub last_platform_ra_msec: Option<u32>,
1010    #[doc(hidden)]
1011    pub __source_breaking: fidl::marker::SourceBreaking,
1012}
1013
1014impl fidl::Persistable for PdProcessedRaInfo {}
1015
1016/// State information about the SRP server.
1017#[derive(Clone, Debug, Default, PartialEq)]
1018pub struct SrpServerInfo {
1019    /// The operational state of the SRP server.
1020    ///
1021    /// Required.
1022    pub state: Option<SrpServerState>,
1023    /// The port the SRP server is listening to.
1024    ///
1025    /// Optional. The port may be omitted when `state` is `DISABLED`.
1026    pub port: Option<u16>,
1027    /// The address mode of the SRP server.
1028    ///
1029    /// Required.
1030    pub address_mode: Option<SrpServerAddressMode>,
1031    /// The response counters of the SRP server.
1032    ///
1033    /// Required.
1034    pub response_counters: Option<SrpServerResponseCounters>,
1035    /// The registration information of SRP hosts.
1036    ///
1037    /// Required.
1038    pub hosts_registration: Option<SrpServerRegistration>,
1039    /// The registration information of SRP services.
1040    ///
1041    /// Required.
1042    pub services_registration: Option<SrpServerRegistration>,
1043    #[doc(hidden)]
1044    pub __source_breaking: fidl::marker::SourceBreaking,
1045}
1046
1047impl fidl::Persistable for SrpServerInfo {}
1048
1049/// Registration information about the SRP server.
1050#[derive(Clone, Debug, Default, PartialEq)]
1051pub struct SrpServerRegistration {
1052    /// Number of hosts/services that have not been deleted.
1053    ///
1054    /// Required.
1055    pub fresh_count: Option<u32>,
1056    /// Number of hosts/services that have been deleted.
1057    ///
1058    /// Required.
1059    pub deleted_count: Option<u32>,
1060    /// Total lease time.
1061    ///
1062    /// Required.
1063    pub lease_time_total: Option<i64>,
1064    /// Total key lease time.
1065    ///
1066    /// Required.
1067    pub key_lease_time_total: Option<i64>,
1068    /// Total remaining lease time.
1069    ///
1070    /// Required.
1071    pub remaining_lease_time_total: Option<i64>,
1072    /// Total remaining key lease time.
1073    ///
1074    /// Required.
1075    pub remaining_key_lease_time_total: Option<i64>,
1076    #[doc(hidden)]
1077    pub __source_breaking: fidl::marker::SourceBreaking,
1078}
1079
1080impl fidl::Persistable for SrpServerRegistration {}
1081
1082#[derive(Clone, Debug, Default, PartialEq)]
1083pub struct SrpServerResponseCounters {
1084    /// The number of successful responses.
1085    ///
1086    /// Required.
1087    pub success_response: Option<u32>,
1088    /// The number of 'server failure' responses.
1089    ///
1090    /// Required.
1091    pub server_failure_response: Option<u32>,
1092    /// The number of 'format error' responses.
1093    ///
1094    /// Required.
1095    pub format_error_response: Option<u32>,
1096    /// The number of 'name exists' responses.
1097    ///
1098    /// Required.
1099    pub name_exists_response: Option<u32>,
1100    /// The number of 'refused' responses.
1101    ///
1102    /// Required.
1103    pub refused_response: Option<u32>,
1104    /// The number of 'other' responses.
1105    ///
1106    /// Required.
1107    pub other_response: Option<u32>,
1108    #[doc(hidden)]
1109    pub __source_breaking: fidl::marker::SourceBreaking,
1110}
1111
1112impl fidl::Persistable for SrpServerResponseCounters {}
1113
1114/// LoWPAN Interface Telemetry Information.
1115///
1116/// The fields in this table are used for providing low-level telemetry and information about the
1117/// LoWPAN interface for debugging and statistics purposes.
1118///
1119/// All fields are optional.
1120#[derive(Clone, Debug, Default, PartialEq)]
1121pub struct Telemetry {
1122    /// The current RSSI of the radio.
1123    pub rssi: Option<i8>,
1124    /// The configured transmit power of the radio.
1125    pub tx_power: Option<i8>,
1126    /// The current channel index of the radio.
1127    pub channel_index: Option<u16>,
1128    /// The partition ID of the currently associated network partition.
1129    pub partition_id: Option<u32>,
1130    /// The version string describing the underlying mesh stack.
1131    pub stack_version: Option<String>,
1132    /// The version string describing the underlying radio control firmware.
1133    pub rcp_version: Option<String>,
1134    /// Thread link mode byte.
1135    ///
1136    /// Only present on Thread networks.
1137    ///
1138    /// Defined by section 4.5.2 of the Thread 1.1.1 specification ("Mode TLV").
1139    pub thread_link_mode: Option<u8>,
1140    /// The router ID of this device in the currently associated network.
1141    ///
1142    /// Only present on Thread networks.
1143    pub thread_router_id: Option<u8>,
1144    /// The current RLOC16 address of this node.
1145    ///
1146    /// Only present on Thread networks.
1147    pub thread_rloc: Option<u16>,
1148    /// The full network data version.
1149    ///
1150    /// Only present on Thread networks.
1151    pub thread_network_data_version: Option<u8>,
1152    /// The stable network data version.
1153    ///
1154    /// Only present on Thread networks.
1155    pub thread_stable_network_data_version: Option<u8>,
1156    /// The current Thread network data, in raw binary form, as defined in section 5.13 of
1157    /// the Thread 1.1.1 specification.
1158    ///
1159    /// Only present on Thread networks.
1160    pub thread_network_data: Option<Vec<u8>>,
1161    /// The current Thread stable network data, in raw binary form, as defined in section 5.13 of
1162    /// the Thread 1.1.1 specification.
1163    ///
1164    /// Only present on Thread networks.
1165    pub thread_stable_network_data: Option<Vec<u8>>,
1166    /// The counters associated with border routing messages.
1167    ///
1168    /// Only present on Thread networks.
1169    pub thread_border_routing_counters: Option<BorderRoutingCounters>,
1170    /// The SRP server information.
1171    ///
1172    /// Only present on Thread networks.
1173    pub srp_server_info: Option<SrpServerInfo>,
1174    /// The DNS-SD server counters.
1175    ///
1176    /// Only present on Thread networks.
1177    pub dnssd_counters: Option<DnssdCounters>,
1178    /// The data associated with the leader of the currently associated Thread network.
1179    ///
1180    /// Only present on Thread networks.
1181    pub leader_data: Option<LeaderData>,
1182    /// The uptime of the current instance.
1183    ///
1184    /// Required.
1185    pub uptime: Option<i64>,
1186    /// Information about the NAT64
1187    ///
1188    /// Only present on Thread networks.
1189    pub nat64_info: Option<Nat64Info>,
1190    /// Information about the TREL interface, if available.
1191    ///
1192    /// Only present on Thread networks.
1193    pub trel_counters: Option<TrelCounters>,
1194    /// Information about the TREL peers, if available.
1195    ///
1196    /// Only present on Thread networks.
1197    pub trel_peers_info: Option<TrelPeersInfo>,
1198    /// Information about the Upstream DNS feature, if available.
1199    ///
1200    /// Only present on Thread networks.
1201    pub upstream_dns_info: Option<UpstreamDnsInfo>,
1202    /// Information about the DHCPv6 PD feature, if available.
1203    ///
1204    /// Only present on Thread networks.
1205    pub dhcp6pd_info: Option<Dhcp6PdInfo>,
1206    /// Link Metrics Manager related info, if available.
1207    ///
1208    /// Only present on Thread networks.
1209    pub link_metrics_entries: Option<Vec<LinkMetricsEntry>>,
1210    /// Counters related to border agent functionality.
1211    ///
1212    /// Only present on Thread networks.
1213    pub border_agent_counters: Option<fidl_fuchsia_lowpan_device__common::BorderAgentCounters>,
1214    /// Whether multi-AIL (Adjacent Infrastructure Link) scenario is detected.
1215    ///
1216    /// Only present on Thread networks.
1217    pub multi_ail_detected: Option<bool>,
1218    #[doc(hidden)]
1219    pub __source_breaking: fidl::marker::SourceBreaking,
1220}
1221
1222impl fidl::Persistable for Telemetry {}
1223
1224/// Represents a group of TREL related counters in the platform layer.
1225///
1226/// Derived from [`otPlatTrelCounters`](https://openthread.io/reference/struct/ot-plat-trel-counters).
1227#[derive(Clone, Debug, Default, PartialEq)]
1228pub struct TrelCounters {
1229    /// Sum of size of packets received through TREL.
1230    pub rx_bytes: Option<u64>,
1231    /// Number of packets received through TREL.
1232    pub rx_packets: Option<u64>,
1233    /// Sum of size of packets successfully transmitted through TREL.
1234    pub tx_bytes: Option<u64>,
1235    /// Number of packet transmission failures through TREL.
1236    pub tx_failure: Option<u64>,
1237    /// Number of packets successfully transmitted through TREL.
1238    pub tx_packets: Option<u64>,
1239    #[doc(hidden)]
1240    pub __source_breaking: fidl::marker::SourceBreaking,
1241}
1242
1243impl fidl::Persistable for TrelCounters {}
1244
1245/// Represents the TREL peer related info.
1246///
1247/// The info is available in OpenThread via https://openthread.io/reference/group/api-trel
1248/// More fields may be added per request.
1249#[derive(Clone, Debug, Default, PartialEq)]
1250pub struct TrelPeersInfo {
1251    /// Number of TREL peers for this Thread Border Router.
1252    ///
1253    /// Required.
1254    pub num_trel_peers: Option<u16>,
1255    #[doc(hidden)]
1256    pub __source_breaking: fidl::marker::SourceBreaking,
1257}
1258
1259impl fidl::Persistable for TrelPeersInfo {}
1260
1261/// Represents the count of queries, responses, failures handled by upstream DNS server
1262///
1263/// Derived from `otUpstreamDnsCounters`(https://openthread.io/reference/group/api-dnssd-server)
1264#[derive(Clone, Debug, Default, PartialEq)]
1265pub struct UpstreamDnsCounters {
1266    /// The number of queries forwarded
1267    ///
1268    /// Required.
1269    pub queries: Option<u32>,
1270    /// The number of responses forwarded
1271    ///
1272    /// Required.
1273    pub responses: Option<u32>,
1274    /// The number of upstream DNS failures
1275    ///
1276    /// Required.
1277    pub failures: Option<u32>,
1278    #[doc(hidden)]
1279    pub __source_breaking: fidl::marker::SourceBreaking,
1280}
1281
1282impl fidl::Persistable for UpstreamDnsCounters {}
1283
1284/// Represents the Upstream DNS related info.
1285///
1286/// The info is available in OpenThread via https://openthread.io/reference/group/api-dnssd-server
1287/// More fields may be added per request.
1288#[derive(Clone, Debug, Default, PartialEq)]
1289pub struct UpstreamDnsInfo {
1290    /// State of upstream DNS query.
1291    ///
1292    /// Required.
1293    pub upstream_dns_query_state: Option<UpstreamDnsQueryState>,
1294    #[doc(hidden)]
1295    pub __source_breaking: fidl::marker::SourceBreaking,
1296}
1297
1298impl fidl::Persistable for UpstreamDnsInfo {}
1299
1300/// Parameters for DeviceExtra::JoinNetwork command.
1301#[derive(Clone, Debug)]
1302pub enum JoinParams {
1303    /// Attempts to find and join a known pre-existing network.
1304    ProvisioningParameter(fidl_fuchsia_lowpan_device__common::ProvisioningParams),
1305    /// Attempts to find and join an unknown pre-existing network
1306    /// that is configured to accept and provision devices with
1307    /// the given shared secret, or PSKd. This allows new devices to
1308    /// join existing networks without knowing the credentials for
1309    /// the specific network.
1310    JoinerParameter(JoinerCommissioningParams),
1311    #[doc(hidden)]
1312    __SourceBreaking { unknown_ordinal: u64 },
1313}
1314
1315/// Pattern that matches an unknown `JoinParams` member.
1316#[macro_export]
1317macro_rules! JoinParamsUnknown {
1318    () => {
1319        _
1320    };
1321}
1322
1323// Custom PartialEq so that unknown variants are not equal to themselves.
1324impl PartialEq for JoinParams {
1325    fn eq(&self, other: &Self) -> bool {
1326        match (self, other) {
1327            (Self::ProvisioningParameter(x), Self::ProvisioningParameter(y)) => *x == *y,
1328            (Self::JoinerParameter(x), Self::JoinerParameter(y)) => *x == *y,
1329            _ => false,
1330        }
1331    }
1332}
1333
1334impl JoinParams {
1335    #[inline]
1336    pub fn ordinal(&self) -> u64 {
1337        match *self {
1338            Self::ProvisioningParameter(_) => 1,
1339            Self::JoinerParameter(_) => 2,
1340            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
1341        }
1342    }
1343
1344    #[inline]
1345    pub fn unknown_variant_for_testing() -> Self {
1346        Self::__SourceBreaking { unknown_ordinal: 0 }
1347    }
1348
1349    #[inline]
1350    pub fn is_unknown(&self) -> bool {
1351        match self {
1352            Self::__SourceBreaking { .. } => true,
1353            _ => false,
1354        }
1355    }
1356}
1357
1358impl fidl::Persistable for JoinParams {}
1359
1360/// Indicates the current status of the form/join operation.
1361///
1362/// Returned by [`ProvisioningMonitor.WatchProgress`].
1363#[derive(Clone, Debug)]
1364pub enum ProvisioningProgress {
1365    /// Approximate percent complete indication for a user interface.
1366    Progress(f32),
1367    /// The final Identity when the operation has completed successfully.
1368    Identity(fidl_fuchsia_lowpan_device__common::Identity),
1369    #[doc(hidden)]
1370    __SourceBreaking { unknown_ordinal: u64 },
1371}
1372
1373/// Pattern that matches an unknown `ProvisioningProgress` member.
1374#[macro_export]
1375macro_rules! ProvisioningProgressUnknown {
1376    () => {
1377        _
1378    };
1379}
1380
1381// Custom PartialEq so that unknown variants are not equal to themselves.
1382impl PartialEq for ProvisioningProgress {
1383    fn eq(&self, other: &Self) -> bool {
1384        match (self, other) {
1385            (Self::Progress(x), Self::Progress(y)) => *x == *y,
1386            (Self::Identity(x), Self::Identity(y)) => *x == *y,
1387            _ => false,
1388        }
1389    }
1390}
1391
1392impl ProvisioningProgress {
1393    #[inline]
1394    pub fn ordinal(&self) -> u64 {
1395        match *self {
1396            Self::Progress(_) => 1,
1397            Self::Identity(_) => 2,
1398            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
1399        }
1400    }
1401
1402    #[inline]
1403    pub fn unknown_variant_for_testing() -> Self {
1404        Self::__SourceBreaking { unknown_ordinal: 0 }
1405    }
1406
1407    #[inline]
1408    pub fn is_unknown(&self) -> bool {
1409        match self {
1410            Self::__SourceBreaking { .. } => true,
1411            _ => false,
1412        }
1413    }
1414}
1415
1416impl fidl::Persistable for ProvisioningProgress {}
1417
1418pub mod beacon_info_stream_ordinals {
1419    pub const NEXT: u64 = 0x367a557363a340b6;
1420}
1421
1422pub mod device_ordinals {
1423    pub const GET_SUPPORTED_CHANNELS: u64 = 0x2d8b969a9bd70f23;
1424}
1425
1426pub mod device_connector_ordinals {
1427    pub const CONNECT: u64 = 0x296896c9304836cd;
1428}
1429
1430pub mod device_extra_ordinals {
1431    pub const FORM_NETWORK: u64 = 0x6a8135f84bfc90e;
1432    pub const JOIN_NETWORK: u64 = 0x3ea583bab79f81c0;
1433    pub const START_NETWORK_SCAN: u64 = 0x6288c73b79188b40;
1434}
1435
1436pub mod device_extra_connector_ordinals {
1437    pub const CONNECT: u64 = 0x3fcb37e4226c81e9;
1438}
1439
1440pub mod device_route_ordinals {
1441    pub const REGISTER_ON_MESH_PREFIX: u64 = 0x2c4135231eb97f61;
1442    pub const UNREGISTER_ON_MESH_PREFIX: u64 = 0x82d5184028b797f;
1443    pub const REGISTER_EXTERNAL_ROUTE: u64 = 0x75f70f0fc34a5a73;
1444    pub const UNREGISTER_EXTERNAL_ROUTE: u64 = 0x3769be353b1d7088;
1445}
1446
1447pub mod device_route_connector_ordinals {
1448    pub const CONNECT: u64 = 0x19cd5fdcb971f4ac;
1449}
1450
1451pub mod device_route_extra_ordinals {
1452    pub const GET_LOCAL_ON_MESH_PREFIXES: u64 = 0xf192c43311c811;
1453    pub const GET_LOCAL_EXTERNAL_ROUTES: u64 = 0x5a688c2e62c766a6;
1454}
1455
1456pub mod device_route_extra_connector_ordinals {
1457    pub const CONNECT: u64 = 0x12f72df7b1348fe2;
1458}
1459
1460pub mod legacy_joining_ordinals {
1461    pub const MAKE_JOINABLE: u64 = 0x1739a6ae36d5c5aa;
1462}
1463
1464pub mod legacy_joining_connector_ordinals {
1465    pub const CONNECT: u64 = 0x3c8dfeb943bb8d06;
1466}
1467
1468pub mod provisioning_monitor_ordinals {
1469    pub const WATCH_PROGRESS: u64 = 0xc35336fc43ac0c;
1470}
1471
1472pub mod telemetry_provider_ordinals {
1473    pub const GET_TELEMETRY: u64 = 0xc34f2fff7dacc41;
1474}
1475
1476pub mod telemetry_provider_connector_ordinals {
1477    pub const CONNECT: u64 = 0x24a5bf1be73e2fad;
1478}
1479
1480mod internal {
1481    use super::*;
1482    unsafe impl fidl::encoding::TypeMarker for Dhcp6PdState {
1483        type Owned = Self;
1484
1485        #[inline(always)]
1486        fn inline_align(_context: fidl::encoding::Context) -> usize {
1487            std::mem::align_of::<u32>()
1488        }
1489
1490        #[inline(always)]
1491        fn inline_size(_context: fidl::encoding::Context) -> usize {
1492            std::mem::size_of::<u32>()
1493        }
1494
1495        #[inline(always)]
1496        fn encode_is_copy() -> bool {
1497            false
1498        }
1499
1500        #[inline(always)]
1501        fn decode_is_copy() -> bool {
1502            false
1503        }
1504    }
1505
1506    impl fidl::encoding::ValueTypeMarker for Dhcp6PdState {
1507        type Borrowed<'a> = Self;
1508        #[inline(always)]
1509        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1510            *value
1511        }
1512    }
1513
1514    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for Dhcp6PdState {
1515        #[inline]
1516        unsafe fn encode(
1517            self,
1518            encoder: &mut fidl::encoding::Encoder<'_, D>,
1519            offset: usize,
1520            _depth: fidl::encoding::Depth,
1521        ) -> fidl::Result<()> {
1522            encoder.debug_check_bounds::<Self>(offset);
1523            encoder.write_num(self.into_primitive(), offset);
1524            Ok(())
1525        }
1526    }
1527
1528    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Dhcp6PdState {
1529        #[inline(always)]
1530        fn new_empty() -> Self {
1531            Self::unknown()
1532        }
1533
1534        #[inline]
1535        unsafe fn decode(
1536            &mut self,
1537            decoder: &mut fidl::encoding::Decoder<'_, D>,
1538            offset: usize,
1539            _depth: fidl::encoding::Depth,
1540        ) -> fidl::Result<()> {
1541            decoder.debug_check_bounds::<Self>(offset);
1542            let prim = decoder.read_num::<u32>(offset);
1543
1544            *self = Self::from_primitive_allow_unknown(prim);
1545            Ok(())
1546        }
1547    }
1548    unsafe impl fidl::encoding::TypeMarker for Nat64State {
1549        type Owned = Self;
1550
1551        #[inline(always)]
1552        fn inline_align(_context: fidl::encoding::Context) -> usize {
1553            std::mem::align_of::<u32>()
1554        }
1555
1556        #[inline(always)]
1557        fn inline_size(_context: fidl::encoding::Context) -> usize {
1558            std::mem::size_of::<u32>()
1559        }
1560
1561        #[inline(always)]
1562        fn encode_is_copy() -> bool {
1563            false
1564        }
1565
1566        #[inline(always)]
1567        fn decode_is_copy() -> bool {
1568            false
1569        }
1570    }
1571
1572    impl fidl::encoding::ValueTypeMarker for Nat64State {
1573        type Borrowed<'a> = Self;
1574        #[inline(always)]
1575        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1576            *value
1577        }
1578    }
1579
1580    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for Nat64State {
1581        #[inline]
1582        unsafe fn encode(
1583            self,
1584            encoder: &mut fidl::encoding::Encoder<'_, D>,
1585            offset: usize,
1586            _depth: fidl::encoding::Depth,
1587        ) -> fidl::Result<()> {
1588            encoder.debug_check_bounds::<Self>(offset);
1589            encoder.write_num(self.into_primitive(), offset);
1590            Ok(())
1591        }
1592    }
1593
1594    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Nat64State {
1595        #[inline(always)]
1596        fn new_empty() -> Self {
1597            Self::unknown()
1598        }
1599
1600        #[inline]
1601        unsafe fn decode(
1602            &mut self,
1603            decoder: &mut fidl::encoding::Decoder<'_, D>,
1604            offset: usize,
1605            _depth: fidl::encoding::Depth,
1606        ) -> fidl::Result<()> {
1607            decoder.debug_check_bounds::<Self>(offset);
1608            let prim = decoder.read_num::<u32>(offset);
1609
1610            *self = Self::from_primitive_allow_unknown(prim);
1611            Ok(())
1612        }
1613    }
1614    unsafe impl fidl::encoding::TypeMarker for ProvisionError {
1615        type Owned = Self;
1616
1617        #[inline(always)]
1618        fn inline_align(_context: fidl::encoding::Context) -> usize {
1619            std::mem::align_of::<i32>()
1620        }
1621
1622        #[inline(always)]
1623        fn inline_size(_context: fidl::encoding::Context) -> usize {
1624            std::mem::size_of::<i32>()
1625        }
1626
1627        #[inline(always)]
1628        fn encode_is_copy() -> bool {
1629            false
1630        }
1631
1632        #[inline(always)]
1633        fn decode_is_copy() -> bool {
1634            false
1635        }
1636    }
1637
1638    impl fidl::encoding::ValueTypeMarker for ProvisionError {
1639        type Borrowed<'a> = Self;
1640        #[inline(always)]
1641        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1642            *value
1643        }
1644    }
1645
1646    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for ProvisionError {
1647        #[inline]
1648        unsafe fn encode(
1649            self,
1650            encoder: &mut fidl::encoding::Encoder<'_, D>,
1651            offset: usize,
1652            _depth: fidl::encoding::Depth,
1653        ) -> fidl::Result<()> {
1654            encoder.debug_check_bounds::<Self>(offset);
1655            encoder.write_num(self.into_primitive(), offset);
1656            Ok(())
1657        }
1658    }
1659
1660    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ProvisionError {
1661        #[inline(always)]
1662        fn new_empty() -> Self {
1663            Self::unknown()
1664        }
1665
1666        #[inline]
1667        unsafe fn decode(
1668            &mut self,
1669            decoder: &mut fidl::encoding::Decoder<'_, D>,
1670            offset: usize,
1671            _depth: fidl::encoding::Depth,
1672        ) -> fidl::Result<()> {
1673            decoder.debug_check_bounds::<Self>(offset);
1674            let prim = decoder.read_num::<i32>(offset);
1675
1676            *self = Self::from_primitive_allow_unknown(prim);
1677            Ok(())
1678        }
1679    }
1680    unsafe impl fidl::encoding::TypeMarker for RoutePreference {
1681        type Owned = Self;
1682
1683        #[inline(always)]
1684        fn inline_align(_context: fidl::encoding::Context) -> usize {
1685            std::mem::align_of::<i8>()
1686        }
1687
1688        #[inline(always)]
1689        fn inline_size(_context: fidl::encoding::Context) -> usize {
1690            std::mem::size_of::<i8>()
1691        }
1692
1693        #[inline(always)]
1694        fn encode_is_copy() -> bool {
1695            true
1696        }
1697
1698        #[inline(always)]
1699        fn decode_is_copy() -> bool {
1700            false
1701        }
1702    }
1703
1704    impl fidl::encoding::ValueTypeMarker for RoutePreference {
1705        type Borrowed<'a> = Self;
1706        #[inline(always)]
1707        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1708            *value
1709        }
1710    }
1711
1712    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
1713        for RoutePreference
1714    {
1715        #[inline]
1716        unsafe fn encode(
1717            self,
1718            encoder: &mut fidl::encoding::Encoder<'_, D>,
1719            offset: usize,
1720            _depth: fidl::encoding::Depth,
1721        ) -> fidl::Result<()> {
1722            encoder.debug_check_bounds::<Self>(offset);
1723            encoder.write_num(self.into_primitive(), offset);
1724            Ok(())
1725        }
1726    }
1727
1728    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for RoutePreference {
1729        #[inline(always)]
1730        fn new_empty() -> Self {
1731            Self::Low
1732        }
1733
1734        #[inline]
1735        unsafe fn decode(
1736            &mut self,
1737            decoder: &mut fidl::encoding::Decoder<'_, D>,
1738            offset: usize,
1739            _depth: fidl::encoding::Depth,
1740        ) -> fidl::Result<()> {
1741            decoder.debug_check_bounds::<Self>(offset);
1742            let prim = decoder.read_num::<i8>(offset);
1743
1744            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
1745            Ok(())
1746        }
1747    }
1748    unsafe impl fidl::encoding::TypeMarker for SrpServerAddressMode {
1749        type Owned = Self;
1750
1751        #[inline(always)]
1752        fn inline_align(_context: fidl::encoding::Context) -> usize {
1753            std::mem::align_of::<u32>()
1754        }
1755
1756        #[inline(always)]
1757        fn inline_size(_context: fidl::encoding::Context) -> usize {
1758            std::mem::size_of::<u32>()
1759        }
1760
1761        #[inline(always)]
1762        fn encode_is_copy() -> bool {
1763            true
1764        }
1765
1766        #[inline(always)]
1767        fn decode_is_copy() -> bool {
1768            false
1769        }
1770    }
1771
1772    impl fidl::encoding::ValueTypeMarker for SrpServerAddressMode {
1773        type Borrowed<'a> = Self;
1774        #[inline(always)]
1775        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1776            *value
1777        }
1778    }
1779
1780    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
1781        for SrpServerAddressMode
1782    {
1783        #[inline]
1784        unsafe fn encode(
1785            self,
1786            encoder: &mut fidl::encoding::Encoder<'_, D>,
1787            offset: usize,
1788            _depth: fidl::encoding::Depth,
1789        ) -> fidl::Result<()> {
1790            encoder.debug_check_bounds::<Self>(offset);
1791            encoder.write_num(self.into_primitive(), offset);
1792            Ok(())
1793        }
1794    }
1795
1796    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SrpServerAddressMode {
1797        #[inline(always)]
1798        fn new_empty() -> Self {
1799            Self::Unicast
1800        }
1801
1802        #[inline]
1803        unsafe fn decode(
1804            &mut self,
1805            decoder: &mut fidl::encoding::Decoder<'_, D>,
1806            offset: usize,
1807            _depth: fidl::encoding::Depth,
1808        ) -> fidl::Result<()> {
1809            decoder.debug_check_bounds::<Self>(offset);
1810            let prim = decoder.read_num::<u32>(offset);
1811
1812            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
1813            Ok(())
1814        }
1815    }
1816    unsafe impl fidl::encoding::TypeMarker for SrpServerState {
1817        type Owned = Self;
1818
1819        #[inline(always)]
1820        fn inline_align(_context: fidl::encoding::Context) -> usize {
1821            std::mem::align_of::<u32>()
1822        }
1823
1824        #[inline(always)]
1825        fn inline_size(_context: fidl::encoding::Context) -> usize {
1826            std::mem::size_of::<u32>()
1827        }
1828
1829        #[inline(always)]
1830        fn encode_is_copy() -> bool {
1831            true
1832        }
1833
1834        #[inline(always)]
1835        fn decode_is_copy() -> bool {
1836            false
1837        }
1838    }
1839
1840    impl fidl::encoding::ValueTypeMarker for SrpServerState {
1841        type Borrowed<'a> = Self;
1842        #[inline(always)]
1843        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1844            *value
1845        }
1846    }
1847
1848    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for SrpServerState {
1849        #[inline]
1850        unsafe fn encode(
1851            self,
1852            encoder: &mut fidl::encoding::Encoder<'_, D>,
1853            offset: usize,
1854            _depth: fidl::encoding::Depth,
1855        ) -> fidl::Result<()> {
1856            encoder.debug_check_bounds::<Self>(offset);
1857            encoder.write_num(self.into_primitive(), offset);
1858            Ok(())
1859        }
1860    }
1861
1862    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SrpServerState {
1863        #[inline(always)]
1864        fn new_empty() -> Self {
1865            Self::Disabled
1866        }
1867
1868        #[inline]
1869        unsafe fn decode(
1870            &mut self,
1871            decoder: &mut fidl::encoding::Decoder<'_, D>,
1872            offset: usize,
1873            _depth: fidl::encoding::Depth,
1874        ) -> fidl::Result<()> {
1875            decoder.debug_check_bounds::<Self>(offset);
1876            let prim = decoder.read_num::<u32>(offset);
1877
1878            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
1879            Ok(())
1880        }
1881    }
1882    unsafe impl fidl::encoding::TypeMarker for UpstreamDnsQueryState {
1883        type Owned = Self;
1884
1885        #[inline(always)]
1886        fn inline_align(_context: fidl::encoding::Context) -> usize {
1887            std::mem::align_of::<u32>()
1888        }
1889
1890        #[inline(always)]
1891        fn inline_size(_context: fidl::encoding::Context) -> usize {
1892            std::mem::size_of::<u32>()
1893        }
1894
1895        #[inline(always)]
1896        fn encode_is_copy() -> bool {
1897            false
1898        }
1899
1900        #[inline(always)]
1901        fn decode_is_copy() -> bool {
1902            false
1903        }
1904    }
1905
1906    impl fidl::encoding::ValueTypeMarker for UpstreamDnsQueryState {
1907        type Borrowed<'a> = Self;
1908        #[inline(always)]
1909        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1910            *value
1911        }
1912    }
1913
1914    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
1915        for UpstreamDnsQueryState
1916    {
1917        #[inline]
1918        unsafe fn encode(
1919            self,
1920            encoder: &mut fidl::encoding::Encoder<'_, D>,
1921            offset: usize,
1922            _depth: fidl::encoding::Depth,
1923        ) -> fidl::Result<()> {
1924            encoder.debug_check_bounds::<Self>(offset);
1925            encoder.write_num(self.into_primitive(), offset);
1926            Ok(())
1927        }
1928    }
1929
1930    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for UpstreamDnsQueryState {
1931        #[inline(always)]
1932        fn new_empty() -> Self {
1933            Self::unknown()
1934        }
1935
1936        #[inline]
1937        unsafe fn decode(
1938            &mut self,
1939            decoder: &mut fidl::encoding::Decoder<'_, D>,
1940            offset: usize,
1941            _depth: fidl::encoding::Depth,
1942        ) -> fidl::Result<()> {
1943            decoder.debug_check_bounds::<Self>(offset);
1944            let prim = decoder.read_num::<u32>(offset);
1945
1946            *self = Self::from_primitive_allow_unknown(prim);
1947            Ok(())
1948        }
1949    }
1950
1951    impl fidl::encoding::ValueTypeMarker for BeaconInfoStreamNextResponse {
1952        type Borrowed<'a> = &'a Self;
1953        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1954            value
1955        }
1956    }
1957
1958    unsafe impl fidl::encoding::TypeMarker for BeaconInfoStreamNextResponse {
1959        type Owned = Self;
1960
1961        #[inline(always)]
1962        fn inline_align(_context: fidl::encoding::Context) -> usize {
1963            8
1964        }
1965
1966        #[inline(always)]
1967        fn inline_size(_context: fidl::encoding::Context) -> usize {
1968            16
1969        }
1970    }
1971
1972    unsafe impl<D: fidl::encoding::ResourceDialect>
1973        fidl::encoding::Encode<BeaconInfoStreamNextResponse, D> for &BeaconInfoStreamNextResponse
1974    {
1975        #[inline]
1976        unsafe fn encode(
1977            self,
1978            encoder: &mut fidl::encoding::Encoder<'_, D>,
1979            offset: usize,
1980            _depth: fidl::encoding::Depth,
1981        ) -> fidl::Result<()> {
1982            encoder.debug_check_bounds::<BeaconInfoStreamNextResponse>(offset);
1983            // Delegate to tuple encoding.
1984            fidl::encoding::Encode::<BeaconInfoStreamNextResponse, D>::encode(
1985                (
1986                    <fidl::encoding::Vector<BeaconInfo, 32> as fidl::encoding::ValueTypeMarker>::borrow(&self.beacons),
1987                ),
1988                encoder, offset, _depth
1989            )
1990        }
1991    }
1992    unsafe impl<
1993        D: fidl::encoding::ResourceDialect,
1994        T0: fidl::encoding::Encode<fidl::encoding::Vector<BeaconInfo, 32>, D>,
1995    > fidl::encoding::Encode<BeaconInfoStreamNextResponse, D> for (T0,)
1996    {
1997        #[inline]
1998        unsafe fn encode(
1999            self,
2000            encoder: &mut fidl::encoding::Encoder<'_, D>,
2001            offset: usize,
2002            depth: fidl::encoding::Depth,
2003        ) -> fidl::Result<()> {
2004            encoder.debug_check_bounds::<BeaconInfoStreamNextResponse>(offset);
2005            // Zero out padding regions. There's no need to apply masks
2006            // because the unmasked parts will be overwritten by fields.
2007            // Write the fields.
2008            self.0.encode(encoder, offset + 0, depth)?;
2009            Ok(())
2010        }
2011    }
2012
2013    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2014        for BeaconInfoStreamNextResponse
2015    {
2016        #[inline(always)]
2017        fn new_empty() -> Self {
2018            Self { beacons: fidl::new_empty!(fidl::encoding::Vector<BeaconInfo, 32>, D) }
2019        }
2020
2021        #[inline]
2022        unsafe fn decode(
2023            &mut self,
2024            decoder: &mut fidl::encoding::Decoder<'_, D>,
2025            offset: usize,
2026            _depth: fidl::encoding::Depth,
2027        ) -> fidl::Result<()> {
2028            decoder.debug_check_bounds::<Self>(offset);
2029            // Verify that padding bytes are zero.
2030            fidl::decode!(fidl::encoding::Vector<BeaconInfo, 32>, D, &mut self.beacons, decoder, offset + 0, _depth)?;
2031            Ok(())
2032        }
2033    }
2034
2035    impl fidl::encoding::ValueTypeMarker for DeviceGetSupportedChannelsResponse {
2036        type Borrowed<'a> = &'a Self;
2037        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2038            value
2039        }
2040    }
2041
2042    unsafe impl fidl::encoding::TypeMarker for DeviceGetSupportedChannelsResponse {
2043        type Owned = Self;
2044
2045        #[inline(always)]
2046        fn inline_align(_context: fidl::encoding::Context) -> usize {
2047            8
2048        }
2049
2050        #[inline(always)]
2051        fn inline_size(_context: fidl::encoding::Context) -> usize {
2052            16
2053        }
2054    }
2055
2056    unsafe impl<D: fidl::encoding::ResourceDialect>
2057        fidl::encoding::Encode<DeviceGetSupportedChannelsResponse, D>
2058        for &DeviceGetSupportedChannelsResponse
2059    {
2060        #[inline]
2061        unsafe fn encode(
2062            self,
2063            encoder: &mut fidl::encoding::Encoder<'_, D>,
2064            offset: usize,
2065            _depth: fidl::encoding::Depth,
2066        ) -> fidl::Result<()> {
2067            encoder.debug_check_bounds::<DeviceGetSupportedChannelsResponse>(offset);
2068            // Delegate to tuple encoding.
2069            fidl::encoding::Encode::<DeviceGetSupportedChannelsResponse, D>::encode(
2070                (
2071                    <fidl::encoding::Vector<ChannelInfo, 200> as fidl::encoding::ValueTypeMarker>::borrow(&self.channels_info),
2072                ),
2073                encoder, offset, _depth
2074            )
2075        }
2076    }
2077    unsafe impl<
2078        D: fidl::encoding::ResourceDialect,
2079        T0: fidl::encoding::Encode<fidl::encoding::Vector<ChannelInfo, 200>, D>,
2080    > fidl::encoding::Encode<DeviceGetSupportedChannelsResponse, D> for (T0,)
2081    {
2082        #[inline]
2083        unsafe fn encode(
2084            self,
2085            encoder: &mut fidl::encoding::Encoder<'_, D>,
2086            offset: usize,
2087            depth: fidl::encoding::Depth,
2088        ) -> fidl::Result<()> {
2089            encoder.debug_check_bounds::<DeviceGetSupportedChannelsResponse>(offset);
2090            // Zero out padding regions. There's no need to apply masks
2091            // because the unmasked parts will be overwritten by fields.
2092            // Write the fields.
2093            self.0.encode(encoder, offset + 0, depth)?;
2094            Ok(())
2095        }
2096    }
2097
2098    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2099        for DeviceGetSupportedChannelsResponse
2100    {
2101        #[inline(always)]
2102        fn new_empty() -> Self {
2103            Self { channels_info: fidl::new_empty!(fidl::encoding::Vector<ChannelInfo, 200>, D) }
2104        }
2105
2106        #[inline]
2107        unsafe fn decode(
2108            &mut self,
2109            decoder: &mut fidl::encoding::Decoder<'_, D>,
2110            offset: usize,
2111            _depth: fidl::encoding::Depth,
2112        ) -> fidl::Result<()> {
2113            decoder.debug_check_bounds::<Self>(offset);
2114            // Verify that padding bytes are zero.
2115            fidl::decode!(fidl::encoding::Vector<ChannelInfo, 200>, D, &mut self.channels_info, decoder, offset + 0, _depth)?;
2116            Ok(())
2117        }
2118    }
2119
2120    impl fidl::encoding::ValueTypeMarker for DeviceRouteExtraGetLocalExternalRoutesResponse {
2121        type Borrowed<'a> = &'a Self;
2122        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2123            value
2124        }
2125    }
2126
2127    unsafe impl fidl::encoding::TypeMarker for DeviceRouteExtraGetLocalExternalRoutesResponse {
2128        type Owned = Self;
2129
2130        #[inline(always)]
2131        fn inline_align(_context: fidl::encoding::Context) -> usize {
2132            8
2133        }
2134
2135        #[inline(always)]
2136        fn inline_size(_context: fidl::encoding::Context) -> usize {
2137            16
2138        }
2139    }
2140
2141    unsafe impl<D: fidl::encoding::ResourceDialect>
2142        fidl::encoding::Encode<DeviceRouteExtraGetLocalExternalRoutesResponse, D>
2143        for &DeviceRouteExtraGetLocalExternalRoutesResponse
2144    {
2145        #[inline]
2146        unsafe fn encode(
2147            self,
2148            encoder: &mut fidl::encoding::Encoder<'_, D>,
2149            offset: usize,
2150            _depth: fidl::encoding::Depth,
2151        ) -> fidl::Result<()> {
2152            encoder.debug_check_bounds::<DeviceRouteExtraGetLocalExternalRoutesResponse>(offset);
2153            // Delegate to tuple encoding.
2154            fidl::encoding::Encode::<DeviceRouteExtraGetLocalExternalRoutesResponse, D>::encode(
2155                (
2156                    <fidl::encoding::Vector<ExternalRoute, 32> as fidl::encoding::ValueTypeMarker>::borrow(&self.external_routes),
2157                ),
2158                encoder, offset, _depth
2159            )
2160        }
2161    }
2162    unsafe impl<
2163        D: fidl::encoding::ResourceDialect,
2164        T0: fidl::encoding::Encode<fidl::encoding::Vector<ExternalRoute, 32>, D>,
2165    > fidl::encoding::Encode<DeviceRouteExtraGetLocalExternalRoutesResponse, D> for (T0,)
2166    {
2167        #[inline]
2168        unsafe fn encode(
2169            self,
2170            encoder: &mut fidl::encoding::Encoder<'_, D>,
2171            offset: usize,
2172            depth: fidl::encoding::Depth,
2173        ) -> fidl::Result<()> {
2174            encoder.debug_check_bounds::<DeviceRouteExtraGetLocalExternalRoutesResponse>(offset);
2175            // Zero out padding regions. There's no need to apply masks
2176            // because the unmasked parts will be overwritten by fields.
2177            // Write the fields.
2178            self.0.encode(encoder, offset + 0, depth)?;
2179            Ok(())
2180        }
2181    }
2182
2183    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2184        for DeviceRouteExtraGetLocalExternalRoutesResponse
2185    {
2186        #[inline(always)]
2187        fn new_empty() -> Self {
2188            Self { external_routes: fidl::new_empty!(fidl::encoding::Vector<ExternalRoute, 32>, D) }
2189        }
2190
2191        #[inline]
2192        unsafe fn decode(
2193            &mut self,
2194            decoder: &mut fidl::encoding::Decoder<'_, D>,
2195            offset: usize,
2196            _depth: fidl::encoding::Depth,
2197        ) -> fidl::Result<()> {
2198            decoder.debug_check_bounds::<Self>(offset);
2199            // Verify that padding bytes are zero.
2200            fidl::decode!(fidl::encoding::Vector<ExternalRoute, 32>, D, &mut self.external_routes, decoder, offset + 0, _depth)?;
2201            Ok(())
2202        }
2203    }
2204
2205    impl fidl::encoding::ValueTypeMarker for DeviceRouteExtraGetLocalOnMeshPrefixesResponse {
2206        type Borrowed<'a> = &'a Self;
2207        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2208            value
2209        }
2210    }
2211
2212    unsafe impl fidl::encoding::TypeMarker for DeviceRouteExtraGetLocalOnMeshPrefixesResponse {
2213        type Owned = Self;
2214
2215        #[inline(always)]
2216        fn inline_align(_context: fidl::encoding::Context) -> usize {
2217            8
2218        }
2219
2220        #[inline(always)]
2221        fn inline_size(_context: fidl::encoding::Context) -> usize {
2222            16
2223        }
2224    }
2225
2226    unsafe impl<D: fidl::encoding::ResourceDialect>
2227        fidl::encoding::Encode<DeviceRouteExtraGetLocalOnMeshPrefixesResponse, D>
2228        for &DeviceRouteExtraGetLocalOnMeshPrefixesResponse
2229    {
2230        #[inline]
2231        unsafe fn encode(
2232            self,
2233            encoder: &mut fidl::encoding::Encoder<'_, D>,
2234            offset: usize,
2235            _depth: fidl::encoding::Depth,
2236        ) -> fidl::Result<()> {
2237            encoder.debug_check_bounds::<DeviceRouteExtraGetLocalOnMeshPrefixesResponse>(offset);
2238            // Delegate to tuple encoding.
2239            fidl::encoding::Encode::<DeviceRouteExtraGetLocalOnMeshPrefixesResponse, D>::encode(
2240                (
2241                    <fidl::encoding::Vector<OnMeshPrefix, 32> as fidl::encoding::ValueTypeMarker>::borrow(&self.prefixes),
2242                ),
2243                encoder, offset, _depth
2244            )
2245        }
2246    }
2247    unsafe impl<
2248        D: fidl::encoding::ResourceDialect,
2249        T0: fidl::encoding::Encode<fidl::encoding::Vector<OnMeshPrefix, 32>, D>,
2250    > fidl::encoding::Encode<DeviceRouteExtraGetLocalOnMeshPrefixesResponse, D> for (T0,)
2251    {
2252        #[inline]
2253        unsafe fn encode(
2254            self,
2255            encoder: &mut fidl::encoding::Encoder<'_, D>,
2256            offset: usize,
2257            depth: fidl::encoding::Depth,
2258        ) -> fidl::Result<()> {
2259            encoder.debug_check_bounds::<DeviceRouteExtraGetLocalOnMeshPrefixesResponse>(offset);
2260            // Zero out padding regions. There's no need to apply masks
2261            // because the unmasked parts will be overwritten by fields.
2262            // Write the fields.
2263            self.0.encode(encoder, offset + 0, depth)?;
2264            Ok(())
2265        }
2266    }
2267
2268    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2269        for DeviceRouteExtraGetLocalOnMeshPrefixesResponse
2270    {
2271        #[inline(always)]
2272        fn new_empty() -> Self {
2273            Self { prefixes: fidl::new_empty!(fidl::encoding::Vector<OnMeshPrefix, 32>, D) }
2274        }
2275
2276        #[inline]
2277        unsafe fn decode(
2278            &mut self,
2279            decoder: &mut fidl::encoding::Decoder<'_, D>,
2280            offset: usize,
2281            _depth: fidl::encoding::Depth,
2282        ) -> fidl::Result<()> {
2283            decoder.debug_check_bounds::<Self>(offset);
2284            // Verify that padding bytes are zero.
2285            fidl::decode!(fidl::encoding::Vector<OnMeshPrefix, 32>, D, &mut self.prefixes, decoder, offset + 0, _depth)?;
2286            Ok(())
2287        }
2288    }
2289
2290    impl fidl::encoding::ValueTypeMarker for DeviceRouteRegisterExternalRouteRequest {
2291        type Borrowed<'a> = &'a Self;
2292        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2293            value
2294        }
2295    }
2296
2297    unsafe impl fidl::encoding::TypeMarker for DeviceRouteRegisterExternalRouteRequest {
2298        type Owned = Self;
2299
2300        #[inline(always)]
2301        fn inline_align(_context: fidl::encoding::Context) -> usize {
2302            8
2303        }
2304
2305        #[inline(always)]
2306        fn inline_size(_context: fidl::encoding::Context) -> usize {
2307            16
2308        }
2309    }
2310
2311    unsafe impl<D: fidl::encoding::ResourceDialect>
2312        fidl::encoding::Encode<DeviceRouteRegisterExternalRouteRequest, D>
2313        for &DeviceRouteRegisterExternalRouteRequest
2314    {
2315        #[inline]
2316        unsafe fn encode(
2317            self,
2318            encoder: &mut fidl::encoding::Encoder<'_, D>,
2319            offset: usize,
2320            _depth: fidl::encoding::Depth,
2321        ) -> fidl::Result<()> {
2322            encoder.debug_check_bounds::<DeviceRouteRegisterExternalRouteRequest>(offset);
2323            // Delegate to tuple encoding.
2324            fidl::encoding::Encode::<DeviceRouteRegisterExternalRouteRequest, D>::encode(
2325                (<ExternalRoute as fidl::encoding::ValueTypeMarker>::borrow(&self.external_route),),
2326                encoder,
2327                offset,
2328                _depth,
2329            )
2330        }
2331    }
2332    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<ExternalRoute, D>>
2333        fidl::encoding::Encode<DeviceRouteRegisterExternalRouteRequest, D> for (T0,)
2334    {
2335        #[inline]
2336        unsafe fn encode(
2337            self,
2338            encoder: &mut fidl::encoding::Encoder<'_, D>,
2339            offset: usize,
2340            depth: fidl::encoding::Depth,
2341        ) -> fidl::Result<()> {
2342            encoder.debug_check_bounds::<DeviceRouteRegisterExternalRouteRequest>(offset);
2343            // Zero out padding regions. There's no need to apply masks
2344            // because the unmasked parts will be overwritten by fields.
2345            // Write the fields.
2346            self.0.encode(encoder, offset + 0, depth)?;
2347            Ok(())
2348        }
2349    }
2350
2351    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2352        for DeviceRouteRegisterExternalRouteRequest
2353    {
2354        #[inline(always)]
2355        fn new_empty() -> Self {
2356            Self { external_route: fidl::new_empty!(ExternalRoute, D) }
2357        }
2358
2359        #[inline]
2360        unsafe fn decode(
2361            &mut self,
2362            decoder: &mut fidl::encoding::Decoder<'_, D>,
2363            offset: usize,
2364            _depth: fidl::encoding::Depth,
2365        ) -> fidl::Result<()> {
2366            decoder.debug_check_bounds::<Self>(offset);
2367            // Verify that padding bytes are zero.
2368            fidl::decode!(ExternalRoute, D, &mut self.external_route, decoder, offset + 0, _depth)?;
2369            Ok(())
2370        }
2371    }
2372
2373    impl fidl::encoding::ValueTypeMarker for DeviceRouteRegisterOnMeshPrefixRequest {
2374        type Borrowed<'a> = &'a Self;
2375        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2376            value
2377        }
2378    }
2379
2380    unsafe impl fidl::encoding::TypeMarker for DeviceRouteRegisterOnMeshPrefixRequest {
2381        type Owned = Self;
2382
2383        #[inline(always)]
2384        fn inline_align(_context: fidl::encoding::Context) -> usize {
2385            8
2386        }
2387
2388        #[inline(always)]
2389        fn inline_size(_context: fidl::encoding::Context) -> usize {
2390            16
2391        }
2392    }
2393
2394    unsafe impl<D: fidl::encoding::ResourceDialect>
2395        fidl::encoding::Encode<DeviceRouteRegisterOnMeshPrefixRequest, D>
2396        for &DeviceRouteRegisterOnMeshPrefixRequest
2397    {
2398        #[inline]
2399        unsafe fn encode(
2400            self,
2401            encoder: &mut fidl::encoding::Encoder<'_, D>,
2402            offset: usize,
2403            _depth: fidl::encoding::Depth,
2404        ) -> fidl::Result<()> {
2405            encoder.debug_check_bounds::<DeviceRouteRegisterOnMeshPrefixRequest>(offset);
2406            // Delegate to tuple encoding.
2407            fidl::encoding::Encode::<DeviceRouteRegisterOnMeshPrefixRequest, D>::encode(
2408                (<OnMeshPrefix as fidl::encoding::ValueTypeMarker>::borrow(&self.prefix),),
2409                encoder,
2410                offset,
2411                _depth,
2412            )
2413        }
2414    }
2415    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<OnMeshPrefix, D>>
2416        fidl::encoding::Encode<DeviceRouteRegisterOnMeshPrefixRequest, D> for (T0,)
2417    {
2418        #[inline]
2419        unsafe fn encode(
2420            self,
2421            encoder: &mut fidl::encoding::Encoder<'_, D>,
2422            offset: usize,
2423            depth: fidl::encoding::Depth,
2424        ) -> fidl::Result<()> {
2425            encoder.debug_check_bounds::<DeviceRouteRegisterOnMeshPrefixRequest>(offset);
2426            // Zero out padding regions. There's no need to apply masks
2427            // because the unmasked parts will be overwritten by fields.
2428            // Write the fields.
2429            self.0.encode(encoder, offset + 0, depth)?;
2430            Ok(())
2431        }
2432    }
2433
2434    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2435        for DeviceRouteRegisterOnMeshPrefixRequest
2436    {
2437        #[inline(always)]
2438        fn new_empty() -> Self {
2439            Self { prefix: fidl::new_empty!(OnMeshPrefix, D) }
2440        }
2441
2442        #[inline]
2443        unsafe fn decode(
2444            &mut self,
2445            decoder: &mut fidl::encoding::Decoder<'_, D>,
2446            offset: usize,
2447            _depth: fidl::encoding::Depth,
2448        ) -> fidl::Result<()> {
2449            decoder.debug_check_bounds::<Self>(offset);
2450            // Verify that padding bytes are zero.
2451            fidl::decode!(OnMeshPrefix, D, &mut self.prefix, decoder, offset + 0, _depth)?;
2452            Ok(())
2453        }
2454    }
2455
2456    impl fidl::encoding::ValueTypeMarker for DeviceRouteUnregisterExternalRouteRequest {
2457        type Borrowed<'a> = &'a Self;
2458        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2459            value
2460        }
2461    }
2462
2463    unsafe impl fidl::encoding::TypeMarker for DeviceRouteUnregisterExternalRouteRequest {
2464        type Owned = Self;
2465
2466        #[inline(always)]
2467        fn inline_align(_context: fidl::encoding::Context) -> usize {
2468            1
2469        }
2470
2471        #[inline(always)]
2472        fn inline_size(_context: fidl::encoding::Context) -> usize {
2473            17
2474        }
2475    }
2476
2477    unsafe impl<D: fidl::encoding::ResourceDialect>
2478        fidl::encoding::Encode<DeviceRouteUnregisterExternalRouteRequest, D>
2479        for &DeviceRouteUnregisterExternalRouteRequest
2480    {
2481        #[inline]
2482        unsafe fn encode(
2483            self,
2484            encoder: &mut fidl::encoding::Encoder<'_, D>,
2485            offset: usize,
2486            _depth: fidl::encoding::Depth,
2487        ) -> fidl::Result<()> {
2488            encoder.debug_check_bounds::<DeviceRouteUnregisterExternalRouteRequest>(offset);
2489            // Delegate to tuple encoding.
2490            fidl::encoding::Encode::<DeviceRouteUnregisterExternalRouteRequest, D>::encode(
2491                (
2492                    <fidl_fuchsia_net__common::Ipv6AddressWithPrefix as fidl::encoding::ValueTypeMarker>::borrow(&self.subnet),
2493                ),
2494                encoder, offset, _depth
2495            )
2496        }
2497    }
2498    unsafe impl<
2499        D: fidl::encoding::ResourceDialect,
2500        T0: fidl::encoding::Encode<fidl_fuchsia_net__common::Ipv6AddressWithPrefix, D>,
2501    > fidl::encoding::Encode<DeviceRouteUnregisterExternalRouteRequest, D> for (T0,)
2502    {
2503        #[inline]
2504        unsafe fn encode(
2505            self,
2506            encoder: &mut fidl::encoding::Encoder<'_, D>,
2507            offset: usize,
2508            depth: fidl::encoding::Depth,
2509        ) -> fidl::Result<()> {
2510            encoder.debug_check_bounds::<DeviceRouteUnregisterExternalRouteRequest>(offset);
2511            // Zero out padding regions. There's no need to apply masks
2512            // because the unmasked parts will be overwritten by fields.
2513            // Write the fields.
2514            self.0.encode(encoder, offset + 0, depth)?;
2515            Ok(())
2516        }
2517    }
2518
2519    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2520        for DeviceRouteUnregisterExternalRouteRequest
2521    {
2522        #[inline(always)]
2523        fn new_empty() -> Self {
2524            Self { subnet: fidl::new_empty!(fidl_fuchsia_net__common::Ipv6AddressWithPrefix, D) }
2525        }
2526
2527        #[inline]
2528        unsafe fn decode(
2529            &mut self,
2530            decoder: &mut fidl::encoding::Decoder<'_, D>,
2531            offset: usize,
2532            _depth: fidl::encoding::Depth,
2533        ) -> fidl::Result<()> {
2534            decoder.debug_check_bounds::<Self>(offset);
2535            // Verify that padding bytes are zero.
2536            fidl::decode!(
2537                fidl_fuchsia_net__common::Ipv6AddressWithPrefix,
2538                D,
2539                &mut self.subnet,
2540                decoder,
2541                offset + 0,
2542                _depth
2543            )?;
2544            Ok(())
2545        }
2546    }
2547
2548    impl fidl::encoding::ValueTypeMarker for DeviceRouteUnregisterOnMeshPrefixRequest {
2549        type Borrowed<'a> = &'a Self;
2550        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2551            value
2552        }
2553    }
2554
2555    unsafe impl fidl::encoding::TypeMarker for DeviceRouteUnregisterOnMeshPrefixRequest {
2556        type Owned = Self;
2557
2558        #[inline(always)]
2559        fn inline_align(_context: fidl::encoding::Context) -> usize {
2560            1
2561        }
2562
2563        #[inline(always)]
2564        fn inline_size(_context: fidl::encoding::Context) -> usize {
2565            17
2566        }
2567    }
2568
2569    unsafe impl<D: fidl::encoding::ResourceDialect>
2570        fidl::encoding::Encode<DeviceRouteUnregisterOnMeshPrefixRequest, D>
2571        for &DeviceRouteUnregisterOnMeshPrefixRequest
2572    {
2573        #[inline]
2574        unsafe fn encode(
2575            self,
2576            encoder: &mut fidl::encoding::Encoder<'_, D>,
2577            offset: usize,
2578            _depth: fidl::encoding::Depth,
2579        ) -> fidl::Result<()> {
2580            encoder.debug_check_bounds::<DeviceRouteUnregisterOnMeshPrefixRequest>(offset);
2581            // Delegate to tuple encoding.
2582            fidl::encoding::Encode::<DeviceRouteUnregisterOnMeshPrefixRequest, D>::encode(
2583                (
2584                    <fidl_fuchsia_net__common::Ipv6AddressWithPrefix as fidl::encoding::ValueTypeMarker>::borrow(&self.subnet),
2585                ),
2586                encoder, offset, _depth
2587            )
2588        }
2589    }
2590    unsafe impl<
2591        D: fidl::encoding::ResourceDialect,
2592        T0: fidl::encoding::Encode<fidl_fuchsia_net__common::Ipv6AddressWithPrefix, D>,
2593    > fidl::encoding::Encode<DeviceRouteUnregisterOnMeshPrefixRequest, D> for (T0,)
2594    {
2595        #[inline]
2596        unsafe fn encode(
2597            self,
2598            encoder: &mut fidl::encoding::Encoder<'_, D>,
2599            offset: usize,
2600            depth: fidl::encoding::Depth,
2601        ) -> fidl::Result<()> {
2602            encoder.debug_check_bounds::<DeviceRouteUnregisterOnMeshPrefixRequest>(offset);
2603            // Zero out padding regions. There's no need to apply masks
2604            // because the unmasked parts will be overwritten by fields.
2605            // Write the fields.
2606            self.0.encode(encoder, offset + 0, depth)?;
2607            Ok(())
2608        }
2609    }
2610
2611    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2612        for DeviceRouteUnregisterOnMeshPrefixRequest
2613    {
2614        #[inline(always)]
2615        fn new_empty() -> Self {
2616            Self { subnet: fidl::new_empty!(fidl_fuchsia_net__common::Ipv6AddressWithPrefix, D) }
2617        }
2618
2619        #[inline]
2620        unsafe fn decode(
2621            &mut self,
2622            decoder: &mut fidl::encoding::Decoder<'_, D>,
2623            offset: usize,
2624            _depth: fidl::encoding::Depth,
2625        ) -> fidl::Result<()> {
2626            decoder.debug_check_bounds::<Self>(offset);
2627            // Verify that padding bytes are zero.
2628            fidl::decode!(
2629                fidl_fuchsia_net__common::Ipv6AddressWithPrefix,
2630                D,
2631                &mut self.subnet,
2632                decoder,
2633                offset + 0,
2634                _depth
2635            )?;
2636            Ok(())
2637        }
2638    }
2639
2640    impl fidl::encoding::ValueTypeMarker for LegacyJoiningMakeJoinableRequest {
2641        type Borrowed<'a> = &'a Self;
2642        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2643            value
2644        }
2645    }
2646
2647    unsafe impl fidl::encoding::TypeMarker for LegacyJoiningMakeJoinableRequest {
2648        type Owned = Self;
2649
2650        #[inline(always)]
2651        fn inline_align(_context: fidl::encoding::Context) -> usize {
2652            8
2653        }
2654
2655        #[inline(always)]
2656        fn inline_size(_context: fidl::encoding::Context) -> usize {
2657            16
2658        }
2659    }
2660
2661    unsafe impl<D: fidl::encoding::ResourceDialect>
2662        fidl::encoding::Encode<LegacyJoiningMakeJoinableRequest, D>
2663        for &LegacyJoiningMakeJoinableRequest
2664    {
2665        #[inline]
2666        unsafe fn encode(
2667            self,
2668            encoder: &mut fidl::encoding::Encoder<'_, D>,
2669            offset: usize,
2670            _depth: fidl::encoding::Depth,
2671        ) -> fidl::Result<()> {
2672            encoder.debug_check_bounds::<LegacyJoiningMakeJoinableRequest>(offset);
2673            unsafe {
2674                // Copy the object into the buffer.
2675                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
2676                (buf_ptr as *mut LegacyJoiningMakeJoinableRequest)
2677                    .write_unaligned((self as *const LegacyJoiningMakeJoinableRequest).read());
2678                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
2679                // done second because the memcpy will write garbage to these bytes.
2680                let padding_ptr = buf_ptr.offset(8) as *mut u64;
2681                let padding_mask = 0xffffffffffff0000u64;
2682                padding_ptr.write_unaligned(padding_ptr.read_unaligned() & !padding_mask);
2683            }
2684            Ok(())
2685        }
2686    }
2687    unsafe impl<
2688        D: fidl::encoding::ResourceDialect,
2689        T0: fidl::encoding::Encode<i64, D>,
2690        T1: fidl::encoding::Encode<u16, D>,
2691    > fidl::encoding::Encode<LegacyJoiningMakeJoinableRequest, D> for (T0, T1)
2692    {
2693        #[inline]
2694        unsafe fn encode(
2695            self,
2696            encoder: &mut fidl::encoding::Encoder<'_, D>,
2697            offset: usize,
2698            depth: fidl::encoding::Depth,
2699        ) -> fidl::Result<()> {
2700            encoder.debug_check_bounds::<LegacyJoiningMakeJoinableRequest>(offset);
2701            // Zero out padding regions. There's no need to apply masks
2702            // because the unmasked parts will be overwritten by fields.
2703            unsafe {
2704                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(8);
2705                (ptr as *mut u64).write_unaligned(0);
2706            }
2707            // Write the fields.
2708            self.0.encode(encoder, offset + 0, depth)?;
2709            self.1.encode(encoder, offset + 8, depth)?;
2710            Ok(())
2711        }
2712    }
2713
2714    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2715        for LegacyJoiningMakeJoinableRequest
2716    {
2717        #[inline(always)]
2718        fn new_empty() -> Self {
2719            Self { duration: fidl::new_empty!(i64, D), port: fidl::new_empty!(u16, D) }
2720        }
2721
2722        #[inline]
2723        unsafe fn decode(
2724            &mut self,
2725            decoder: &mut fidl::encoding::Decoder<'_, D>,
2726            offset: usize,
2727            _depth: fidl::encoding::Depth,
2728        ) -> fidl::Result<()> {
2729            decoder.debug_check_bounds::<Self>(offset);
2730            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
2731            // Verify that padding bytes are zero.
2732            let ptr = unsafe { buf_ptr.offset(8) };
2733            let padval = unsafe { (ptr as *const u64).read_unaligned() };
2734            let mask = 0xffffffffffff0000u64;
2735            let maskedval = padval & mask;
2736            if maskedval != 0 {
2737                return Err(fidl::Error::NonZeroPadding {
2738                    padding_start: offset + 8 + ((mask as u64).trailing_zeros() / 8) as usize,
2739                });
2740            }
2741            // Copy from the buffer into the object.
2742            unsafe {
2743                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 16);
2744            }
2745            Ok(())
2746        }
2747    }
2748
2749    impl fidl::encoding::ValueTypeMarker for ProvisioningMonitorWatchProgressResponse {
2750        type Borrowed<'a> = &'a Self;
2751        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2752            value
2753        }
2754    }
2755
2756    unsafe impl fidl::encoding::TypeMarker for ProvisioningMonitorWatchProgressResponse {
2757        type Owned = Self;
2758
2759        #[inline(always)]
2760        fn inline_align(_context: fidl::encoding::Context) -> usize {
2761            8
2762        }
2763
2764        #[inline(always)]
2765        fn inline_size(_context: fidl::encoding::Context) -> usize {
2766            16
2767        }
2768    }
2769
2770    unsafe impl<D: fidl::encoding::ResourceDialect>
2771        fidl::encoding::Encode<ProvisioningMonitorWatchProgressResponse, D>
2772        for &ProvisioningMonitorWatchProgressResponse
2773    {
2774        #[inline]
2775        unsafe fn encode(
2776            self,
2777            encoder: &mut fidl::encoding::Encoder<'_, D>,
2778            offset: usize,
2779            _depth: fidl::encoding::Depth,
2780        ) -> fidl::Result<()> {
2781            encoder.debug_check_bounds::<ProvisioningMonitorWatchProgressResponse>(offset);
2782            // Delegate to tuple encoding.
2783            fidl::encoding::Encode::<ProvisioningMonitorWatchProgressResponse, D>::encode(
2784                (<ProvisioningProgress as fidl::encoding::ValueTypeMarker>::borrow(&self.progress),),
2785                encoder,
2786                offset,
2787                _depth,
2788            )
2789        }
2790    }
2791    unsafe impl<
2792        D: fidl::encoding::ResourceDialect,
2793        T0: fidl::encoding::Encode<ProvisioningProgress, D>,
2794    > fidl::encoding::Encode<ProvisioningMonitorWatchProgressResponse, D> for (T0,)
2795    {
2796        #[inline]
2797        unsafe fn encode(
2798            self,
2799            encoder: &mut fidl::encoding::Encoder<'_, D>,
2800            offset: usize,
2801            depth: fidl::encoding::Depth,
2802        ) -> fidl::Result<()> {
2803            encoder.debug_check_bounds::<ProvisioningMonitorWatchProgressResponse>(offset);
2804            // Zero out padding regions. There's no need to apply masks
2805            // because the unmasked parts will be overwritten by fields.
2806            // Write the fields.
2807            self.0.encode(encoder, offset + 0, depth)?;
2808            Ok(())
2809        }
2810    }
2811
2812    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2813        for ProvisioningMonitorWatchProgressResponse
2814    {
2815        #[inline(always)]
2816        fn new_empty() -> Self {
2817            Self { progress: fidl::new_empty!(ProvisioningProgress, D) }
2818        }
2819
2820        #[inline]
2821        unsafe fn decode(
2822            &mut self,
2823            decoder: &mut fidl::encoding::Decoder<'_, D>,
2824            offset: usize,
2825            _depth: fidl::encoding::Depth,
2826        ) -> fidl::Result<()> {
2827            decoder.debug_check_bounds::<Self>(offset);
2828            // Verify that padding bytes are zero.
2829            fidl::decode!(
2830                ProvisioningProgress,
2831                D,
2832                &mut self.progress,
2833                decoder,
2834                offset + 0,
2835                _depth
2836            )?;
2837            Ok(())
2838        }
2839    }
2840
2841    impl fidl::encoding::ValueTypeMarker for TelemetryProviderGetTelemetryResponse {
2842        type Borrowed<'a> = &'a Self;
2843        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2844            value
2845        }
2846    }
2847
2848    unsafe impl fidl::encoding::TypeMarker for TelemetryProviderGetTelemetryResponse {
2849        type Owned = Self;
2850
2851        #[inline(always)]
2852        fn inline_align(_context: fidl::encoding::Context) -> usize {
2853            8
2854        }
2855
2856        #[inline(always)]
2857        fn inline_size(_context: fidl::encoding::Context) -> usize {
2858            16
2859        }
2860    }
2861
2862    unsafe impl<D: fidl::encoding::ResourceDialect>
2863        fidl::encoding::Encode<TelemetryProviderGetTelemetryResponse, D>
2864        for &TelemetryProviderGetTelemetryResponse
2865    {
2866        #[inline]
2867        unsafe fn encode(
2868            self,
2869            encoder: &mut fidl::encoding::Encoder<'_, D>,
2870            offset: usize,
2871            _depth: fidl::encoding::Depth,
2872        ) -> fidl::Result<()> {
2873            encoder.debug_check_bounds::<TelemetryProviderGetTelemetryResponse>(offset);
2874            // Delegate to tuple encoding.
2875            fidl::encoding::Encode::<TelemetryProviderGetTelemetryResponse, D>::encode(
2876                (<Telemetry as fidl::encoding::ValueTypeMarker>::borrow(&self.telemetry),),
2877                encoder,
2878                offset,
2879                _depth,
2880            )
2881        }
2882    }
2883    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<Telemetry, D>>
2884        fidl::encoding::Encode<TelemetryProviderGetTelemetryResponse, D> for (T0,)
2885    {
2886        #[inline]
2887        unsafe fn encode(
2888            self,
2889            encoder: &mut fidl::encoding::Encoder<'_, D>,
2890            offset: usize,
2891            depth: fidl::encoding::Depth,
2892        ) -> fidl::Result<()> {
2893            encoder.debug_check_bounds::<TelemetryProviderGetTelemetryResponse>(offset);
2894            // Zero out padding regions. There's no need to apply masks
2895            // because the unmasked parts will be overwritten by fields.
2896            // Write the fields.
2897            self.0.encode(encoder, offset + 0, depth)?;
2898            Ok(())
2899        }
2900    }
2901
2902    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2903        for TelemetryProviderGetTelemetryResponse
2904    {
2905        #[inline(always)]
2906        fn new_empty() -> Self {
2907            Self { telemetry: fidl::new_empty!(Telemetry, D) }
2908        }
2909
2910        #[inline]
2911        unsafe fn decode(
2912            &mut self,
2913            decoder: &mut fidl::encoding::Decoder<'_, D>,
2914            offset: usize,
2915            _depth: fidl::encoding::Depth,
2916        ) -> fidl::Result<()> {
2917            decoder.debug_check_bounds::<Self>(offset);
2918            // Verify that padding bytes are zero.
2919            fidl::decode!(Telemetry, D, &mut self.telemetry, decoder, offset + 0, _depth)?;
2920            Ok(())
2921        }
2922    }
2923
2924    impl BeaconInfo {
2925        #[inline(always)]
2926        fn max_ordinal_present(&self) -> u64 {
2927            if let Some(_) = self.lqi {
2928                return 4;
2929            }
2930            if let Some(_) = self.rssi {
2931                return 3;
2932            }
2933            if let Some(_) = self.identity {
2934                return 2;
2935            }
2936            if let Some(_) = self.address {
2937                return 1;
2938            }
2939            0
2940        }
2941    }
2942
2943    impl fidl::encoding::ValueTypeMarker for BeaconInfo {
2944        type Borrowed<'a> = &'a Self;
2945        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2946            value
2947        }
2948    }
2949
2950    unsafe impl fidl::encoding::TypeMarker for BeaconInfo {
2951        type Owned = Self;
2952
2953        #[inline(always)]
2954        fn inline_align(_context: fidl::encoding::Context) -> usize {
2955            8
2956        }
2957
2958        #[inline(always)]
2959        fn inline_size(_context: fidl::encoding::Context) -> usize {
2960            16
2961        }
2962    }
2963
2964    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<BeaconInfo, D>
2965        for &BeaconInfo
2966    {
2967        unsafe fn encode(
2968            self,
2969            encoder: &mut fidl::encoding::Encoder<'_, D>,
2970            offset: usize,
2971            mut depth: fidl::encoding::Depth,
2972        ) -> fidl::Result<()> {
2973            encoder.debug_check_bounds::<BeaconInfo>(offset);
2974            // Vector header
2975            let max_ordinal: u64 = self.max_ordinal_present();
2976            encoder.write_num(max_ordinal, offset);
2977            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
2978            // Calling encoder.out_of_line_offset(0) is not allowed.
2979            if max_ordinal == 0 {
2980                return Ok(());
2981            }
2982            depth.increment()?;
2983            let envelope_size = 8;
2984            let bytes_len = max_ordinal as usize * envelope_size;
2985            #[allow(unused_variables)]
2986            let offset = encoder.out_of_line_offset(bytes_len);
2987            let mut _prev_end_offset: usize = 0;
2988            if 1 > max_ordinal {
2989                return Ok(());
2990            }
2991
2992            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2993            // are envelope_size bytes.
2994            let cur_offset: usize = (1 - 1) * envelope_size;
2995
2996            // Zero reserved fields.
2997            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2998
2999            // Safety:
3000            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3001            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3002            //   envelope_size bytes, there is always sufficient room.
3003            fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_lowpan__common::MacAddress, D>(
3004            self.address.as_ref().map(<fidl_fuchsia_lowpan__common::MacAddress as fidl::encoding::ValueTypeMarker>::borrow),
3005            encoder, offset + cur_offset, depth
3006        )?;
3007
3008            _prev_end_offset = cur_offset + envelope_size;
3009            if 2 > max_ordinal {
3010                return Ok(());
3011            }
3012
3013            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3014            // are envelope_size bytes.
3015            let cur_offset: usize = (2 - 1) * envelope_size;
3016
3017            // Zero reserved fields.
3018            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3019
3020            // Safety:
3021            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3022            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3023            //   envelope_size bytes, there is always sufficient room.
3024            fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_lowpan_device__common::Identity, D>(
3025            self.identity.as_ref().map(<fidl_fuchsia_lowpan_device__common::Identity as fidl::encoding::ValueTypeMarker>::borrow),
3026            encoder, offset + cur_offset, depth
3027        )?;
3028
3029            _prev_end_offset = cur_offset + envelope_size;
3030            if 3 > max_ordinal {
3031                return Ok(());
3032            }
3033
3034            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3035            // are envelope_size bytes.
3036            let cur_offset: usize = (3 - 1) * envelope_size;
3037
3038            // Zero reserved fields.
3039            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3040
3041            // Safety:
3042            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3043            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3044            //   envelope_size bytes, there is always sufficient room.
3045            fidl::encoding::encode_in_envelope_optional::<i8, D>(
3046                self.rssi.as_ref().map(<i8 as fidl::encoding::ValueTypeMarker>::borrow),
3047                encoder,
3048                offset + cur_offset,
3049                depth,
3050            )?;
3051
3052            _prev_end_offset = cur_offset + envelope_size;
3053            if 4 > max_ordinal {
3054                return Ok(());
3055            }
3056
3057            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3058            // are envelope_size bytes.
3059            let cur_offset: usize = (4 - 1) * envelope_size;
3060
3061            // Zero reserved fields.
3062            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3063
3064            // Safety:
3065            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3066            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3067            //   envelope_size bytes, there is always sufficient room.
3068            fidl::encoding::encode_in_envelope_optional::<u8, D>(
3069                self.lqi.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
3070                encoder,
3071                offset + cur_offset,
3072                depth,
3073            )?;
3074
3075            _prev_end_offset = cur_offset + envelope_size;
3076
3077            Ok(())
3078        }
3079    }
3080
3081    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for BeaconInfo {
3082        #[inline(always)]
3083        fn new_empty() -> Self {
3084            Self::default()
3085        }
3086
3087        unsafe fn decode(
3088            &mut self,
3089            decoder: &mut fidl::encoding::Decoder<'_, D>,
3090            offset: usize,
3091            mut depth: fidl::encoding::Depth,
3092        ) -> fidl::Result<()> {
3093            decoder.debug_check_bounds::<Self>(offset);
3094            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
3095                None => return Err(fidl::Error::NotNullable),
3096                Some(len) => len,
3097            };
3098            // Calling decoder.out_of_line_offset(0) is not allowed.
3099            if len == 0 {
3100                return Ok(());
3101            };
3102            depth.increment()?;
3103            let envelope_size = 8;
3104            let bytes_len = len * envelope_size;
3105            let offset = decoder.out_of_line_offset(bytes_len)?;
3106            // Decode the envelope for each type.
3107            let mut _next_ordinal_to_read = 0;
3108            let mut next_offset = offset;
3109            let end_offset = offset + bytes_len;
3110            _next_ordinal_to_read += 1;
3111            if next_offset >= end_offset {
3112                return Ok(());
3113            }
3114
3115            // Decode unknown envelopes for gaps in ordinals.
3116            while _next_ordinal_to_read < 1 {
3117                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3118                _next_ordinal_to_read += 1;
3119                next_offset += envelope_size;
3120            }
3121
3122            let next_out_of_line = decoder.next_out_of_line();
3123            let handles_before = decoder.remaining_handles();
3124            if let Some((inlined, num_bytes, num_handles)) =
3125                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3126            {
3127                let member_inline_size = <fidl_fuchsia_lowpan__common::MacAddress as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3128                if inlined != (member_inline_size <= 4) {
3129                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3130                }
3131                let inner_offset;
3132                let mut inner_depth = depth.clone();
3133                if inlined {
3134                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3135                    inner_offset = next_offset;
3136                } else {
3137                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3138                    inner_depth.increment()?;
3139                }
3140                let val_ref = self.address.get_or_insert_with(|| {
3141                    fidl::new_empty!(fidl_fuchsia_lowpan__common::MacAddress, D)
3142                });
3143                fidl::decode!(
3144                    fidl_fuchsia_lowpan__common::MacAddress,
3145                    D,
3146                    val_ref,
3147                    decoder,
3148                    inner_offset,
3149                    inner_depth
3150                )?;
3151                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3152                {
3153                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3154                }
3155                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3156                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3157                }
3158            }
3159
3160            next_offset += envelope_size;
3161            _next_ordinal_to_read += 1;
3162            if next_offset >= end_offset {
3163                return Ok(());
3164            }
3165
3166            // Decode unknown envelopes for gaps in ordinals.
3167            while _next_ordinal_to_read < 2 {
3168                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3169                _next_ordinal_to_read += 1;
3170                next_offset += envelope_size;
3171            }
3172
3173            let next_out_of_line = decoder.next_out_of_line();
3174            let handles_before = decoder.remaining_handles();
3175            if let Some((inlined, num_bytes, num_handles)) =
3176                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3177            {
3178                let member_inline_size = <fidl_fuchsia_lowpan_device__common::Identity as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3179                if inlined != (member_inline_size <= 4) {
3180                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3181                }
3182                let inner_offset;
3183                let mut inner_depth = depth.clone();
3184                if inlined {
3185                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3186                    inner_offset = next_offset;
3187                } else {
3188                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3189                    inner_depth.increment()?;
3190                }
3191                let val_ref = self.identity.get_or_insert_with(|| {
3192                    fidl::new_empty!(fidl_fuchsia_lowpan_device__common::Identity, D)
3193                });
3194                fidl::decode!(
3195                    fidl_fuchsia_lowpan_device__common::Identity,
3196                    D,
3197                    val_ref,
3198                    decoder,
3199                    inner_offset,
3200                    inner_depth
3201                )?;
3202                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3203                {
3204                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3205                }
3206                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3207                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3208                }
3209            }
3210
3211            next_offset += envelope_size;
3212            _next_ordinal_to_read += 1;
3213            if next_offset >= end_offset {
3214                return Ok(());
3215            }
3216
3217            // Decode unknown envelopes for gaps in ordinals.
3218            while _next_ordinal_to_read < 3 {
3219                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3220                _next_ordinal_to_read += 1;
3221                next_offset += envelope_size;
3222            }
3223
3224            let next_out_of_line = decoder.next_out_of_line();
3225            let handles_before = decoder.remaining_handles();
3226            if let Some((inlined, num_bytes, num_handles)) =
3227                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3228            {
3229                let member_inline_size =
3230                    <i8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3231                if inlined != (member_inline_size <= 4) {
3232                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3233                }
3234                let inner_offset;
3235                let mut inner_depth = depth.clone();
3236                if inlined {
3237                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3238                    inner_offset = next_offset;
3239                } else {
3240                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3241                    inner_depth.increment()?;
3242                }
3243                let val_ref = self.rssi.get_or_insert_with(|| fidl::new_empty!(i8, D));
3244                fidl::decode!(i8, D, val_ref, decoder, inner_offset, inner_depth)?;
3245                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3246                {
3247                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3248                }
3249                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3250                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3251                }
3252            }
3253
3254            next_offset += envelope_size;
3255            _next_ordinal_to_read += 1;
3256            if next_offset >= end_offset {
3257                return Ok(());
3258            }
3259
3260            // Decode unknown envelopes for gaps in ordinals.
3261            while _next_ordinal_to_read < 4 {
3262                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3263                _next_ordinal_to_read += 1;
3264                next_offset += envelope_size;
3265            }
3266
3267            let next_out_of_line = decoder.next_out_of_line();
3268            let handles_before = decoder.remaining_handles();
3269            if let Some((inlined, num_bytes, num_handles)) =
3270                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3271            {
3272                let member_inline_size =
3273                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3274                if inlined != (member_inline_size <= 4) {
3275                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3276                }
3277                let inner_offset;
3278                let mut inner_depth = depth.clone();
3279                if inlined {
3280                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3281                    inner_offset = next_offset;
3282                } else {
3283                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3284                    inner_depth.increment()?;
3285                }
3286                let val_ref = self.lqi.get_or_insert_with(|| fidl::new_empty!(u8, D));
3287                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
3288                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3289                {
3290                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3291                }
3292                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3293                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3294                }
3295            }
3296
3297            next_offset += envelope_size;
3298
3299            // Decode the remaining unknown envelopes.
3300            while next_offset < end_offset {
3301                _next_ordinal_to_read += 1;
3302                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3303                next_offset += envelope_size;
3304            }
3305
3306            Ok(())
3307        }
3308    }
3309
3310    impl BorderRoutingCounters {
3311        #[inline(always)]
3312        fn max_ordinal_present(&self) -> u64 {
3313            if let Some(_) = self.outbound_internet_bytes {
3314                return 18;
3315            }
3316            if let Some(_) = self.outbound_internet_packets {
3317                return 17;
3318            }
3319            if let Some(_) = self.inbound_internet_bytes {
3320                return 16;
3321            }
3322            if let Some(_) = self.inbound_internet_packets {
3323                return 15;
3324            }
3325            if let Some(_) = self.rs_tx_failure {
3326                return 14;
3327            }
3328            if let Some(_) = self.rs_tx_success {
3329                return 13;
3330            }
3331            if let Some(_) = self.rs_rx {
3332                return 12;
3333            }
3334            if let Some(_) = self.ra_tx_failure {
3335                return 11;
3336            }
3337            if let Some(_) = self.ra_tx_success {
3338                return 10;
3339            }
3340            if let Some(_) = self.ra_rx {
3341                return 9;
3342            }
3343            if let Some(_) = self.outbound_multicast_bytes {
3344                return 8;
3345            }
3346            if let Some(_) = self.outbound_multicast_packets {
3347                return 7;
3348            }
3349            if let Some(_) = self.outbound_unicast_bytes {
3350                return 6;
3351            }
3352            if let Some(_) = self.outbound_unicast_packets {
3353                return 5;
3354            }
3355            if let Some(_) = self.inbound_multicast_bytes {
3356                return 4;
3357            }
3358            if let Some(_) = self.inbound_multicast_packets {
3359                return 3;
3360            }
3361            if let Some(_) = self.inbound_unicast_bytes {
3362                return 2;
3363            }
3364            if let Some(_) = self.inbound_unicast_packets {
3365                return 1;
3366            }
3367            0
3368        }
3369    }
3370
3371    impl fidl::encoding::ValueTypeMarker for BorderRoutingCounters {
3372        type Borrowed<'a> = &'a Self;
3373        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3374            value
3375        }
3376    }
3377
3378    unsafe impl fidl::encoding::TypeMarker for BorderRoutingCounters {
3379        type Owned = Self;
3380
3381        #[inline(always)]
3382        fn inline_align(_context: fidl::encoding::Context) -> usize {
3383            8
3384        }
3385
3386        #[inline(always)]
3387        fn inline_size(_context: fidl::encoding::Context) -> usize {
3388            16
3389        }
3390    }
3391
3392    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<BorderRoutingCounters, D>
3393        for &BorderRoutingCounters
3394    {
3395        unsafe fn encode(
3396            self,
3397            encoder: &mut fidl::encoding::Encoder<'_, D>,
3398            offset: usize,
3399            mut depth: fidl::encoding::Depth,
3400        ) -> fidl::Result<()> {
3401            encoder.debug_check_bounds::<BorderRoutingCounters>(offset);
3402            // Vector header
3403            let max_ordinal: u64 = self.max_ordinal_present();
3404            encoder.write_num(max_ordinal, offset);
3405            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
3406            // Calling encoder.out_of_line_offset(0) is not allowed.
3407            if max_ordinal == 0 {
3408                return Ok(());
3409            }
3410            depth.increment()?;
3411            let envelope_size = 8;
3412            let bytes_len = max_ordinal as usize * envelope_size;
3413            #[allow(unused_variables)]
3414            let offset = encoder.out_of_line_offset(bytes_len);
3415            let mut _prev_end_offset: usize = 0;
3416            if 1 > max_ordinal {
3417                return Ok(());
3418            }
3419
3420            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3421            // are envelope_size bytes.
3422            let cur_offset: usize = (1 - 1) * envelope_size;
3423
3424            // Zero reserved fields.
3425            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3426
3427            // Safety:
3428            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3429            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3430            //   envelope_size bytes, there is always sufficient room.
3431            fidl::encoding::encode_in_envelope_optional::<u64, D>(
3432                self.inbound_unicast_packets
3433                    .as_ref()
3434                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
3435                encoder,
3436                offset + cur_offset,
3437                depth,
3438            )?;
3439
3440            _prev_end_offset = cur_offset + envelope_size;
3441            if 2 > max_ordinal {
3442                return Ok(());
3443            }
3444
3445            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3446            // are envelope_size bytes.
3447            let cur_offset: usize = (2 - 1) * envelope_size;
3448
3449            // Zero reserved fields.
3450            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3451
3452            // Safety:
3453            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3454            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3455            //   envelope_size bytes, there is always sufficient room.
3456            fidl::encoding::encode_in_envelope_optional::<u64, D>(
3457                self.inbound_unicast_bytes
3458                    .as_ref()
3459                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
3460                encoder,
3461                offset + cur_offset,
3462                depth,
3463            )?;
3464
3465            _prev_end_offset = cur_offset + envelope_size;
3466            if 3 > max_ordinal {
3467                return Ok(());
3468            }
3469
3470            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3471            // are envelope_size bytes.
3472            let cur_offset: usize = (3 - 1) * envelope_size;
3473
3474            // Zero reserved fields.
3475            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3476
3477            // Safety:
3478            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3479            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3480            //   envelope_size bytes, there is always sufficient room.
3481            fidl::encoding::encode_in_envelope_optional::<u64, D>(
3482                self.inbound_multicast_packets
3483                    .as_ref()
3484                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
3485                encoder,
3486                offset + cur_offset,
3487                depth,
3488            )?;
3489
3490            _prev_end_offset = cur_offset + envelope_size;
3491            if 4 > max_ordinal {
3492                return Ok(());
3493            }
3494
3495            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3496            // are envelope_size bytes.
3497            let cur_offset: usize = (4 - 1) * envelope_size;
3498
3499            // Zero reserved fields.
3500            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3501
3502            // Safety:
3503            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3504            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3505            //   envelope_size bytes, there is always sufficient room.
3506            fidl::encoding::encode_in_envelope_optional::<u64, D>(
3507                self.inbound_multicast_bytes
3508                    .as_ref()
3509                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
3510                encoder,
3511                offset + cur_offset,
3512                depth,
3513            )?;
3514
3515            _prev_end_offset = cur_offset + envelope_size;
3516            if 5 > max_ordinal {
3517                return Ok(());
3518            }
3519
3520            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3521            // are envelope_size bytes.
3522            let cur_offset: usize = (5 - 1) * envelope_size;
3523
3524            // Zero reserved fields.
3525            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3526
3527            // Safety:
3528            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3529            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3530            //   envelope_size bytes, there is always sufficient room.
3531            fidl::encoding::encode_in_envelope_optional::<u64, D>(
3532                self.outbound_unicast_packets
3533                    .as_ref()
3534                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
3535                encoder,
3536                offset + cur_offset,
3537                depth,
3538            )?;
3539
3540            _prev_end_offset = cur_offset + envelope_size;
3541            if 6 > max_ordinal {
3542                return Ok(());
3543            }
3544
3545            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3546            // are envelope_size bytes.
3547            let cur_offset: usize = (6 - 1) * envelope_size;
3548
3549            // Zero reserved fields.
3550            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3551
3552            // Safety:
3553            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3554            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3555            //   envelope_size bytes, there is always sufficient room.
3556            fidl::encoding::encode_in_envelope_optional::<u64, D>(
3557                self.outbound_unicast_bytes
3558                    .as_ref()
3559                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
3560                encoder,
3561                offset + cur_offset,
3562                depth,
3563            )?;
3564
3565            _prev_end_offset = cur_offset + envelope_size;
3566            if 7 > max_ordinal {
3567                return Ok(());
3568            }
3569
3570            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3571            // are envelope_size bytes.
3572            let cur_offset: usize = (7 - 1) * envelope_size;
3573
3574            // Zero reserved fields.
3575            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3576
3577            // Safety:
3578            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3579            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3580            //   envelope_size bytes, there is always sufficient room.
3581            fidl::encoding::encode_in_envelope_optional::<u64, D>(
3582                self.outbound_multicast_packets
3583                    .as_ref()
3584                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
3585                encoder,
3586                offset + cur_offset,
3587                depth,
3588            )?;
3589
3590            _prev_end_offset = cur_offset + envelope_size;
3591            if 8 > max_ordinal {
3592                return Ok(());
3593            }
3594
3595            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3596            // are envelope_size bytes.
3597            let cur_offset: usize = (8 - 1) * envelope_size;
3598
3599            // Zero reserved fields.
3600            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3601
3602            // Safety:
3603            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3604            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3605            //   envelope_size bytes, there is always sufficient room.
3606            fidl::encoding::encode_in_envelope_optional::<u64, D>(
3607                self.outbound_multicast_bytes
3608                    .as_ref()
3609                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
3610                encoder,
3611                offset + cur_offset,
3612                depth,
3613            )?;
3614
3615            _prev_end_offset = cur_offset + envelope_size;
3616            if 9 > max_ordinal {
3617                return Ok(());
3618            }
3619
3620            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3621            // are envelope_size bytes.
3622            let cur_offset: usize = (9 - 1) * envelope_size;
3623
3624            // Zero reserved fields.
3625            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3626
3627            // Safety:
3628            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3629            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3630            //   envelope_size bytes, there is always sufficient room.
3631            fidl::encoding::encode_in_envelope_optional::<u32, D>(
3632                self.ra_rx.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
3633                encoder,
3634                offset + cur_offset,
3635                depth,
3636            )?;
3637
3638            _prev_end_offset = cur_offset + envelope_size;
3639            if 10 > max_ordinal {
3640                return Ok(());
3641            }
3642
3643            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3644            // are envelope_size bytes.
3645            let cur_offset: usize = (10 - 1) * envelope_size;
3646
3647            // Zero reserved fields.
3648            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3649
3650            // Safety:
3651            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3652            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3653            //   envelope_size bytes, there is always sufficient room.
3654            fidl::encoding::encode_in_envelope_optional::<u32, D>(
3655                self.ra_tx_success.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
3656                encoder,
3657                offset + cur_offset,
3658                depth,
3659            )?;
3660
3661            _prev_end_offset = cur_offset + envelope_size;
3662            if 11 > max_ordinal {
3663                return Ok(());
3664            }
3665
3666            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3667            // are envelope_size bytes.
3668            let cur_offset: usize = (11 - 1) * envelope_size;
3669
3670            // Zero reserved fields.
3671            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3672
3673            // Safety:
3674            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3675            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3676            //   envelope_size bytes, there is always sufficient room.
3677            fidl::encoding::encode_in_envelope_optional::<u32, D>(
3678                self.ra_tx_failure.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
3679                encoder,
3680                offset + cur_offset,
3681                depth,
3682            )?;
3683
3684            _prev_end_offset = cur_offset + envelope_size;
3685            if 12 > max_ordinal {
3686                return Ok(());
3687            }
3688
3689            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3690            // are envelope_size bytes.
3691            let cur_offset: usize = (12 - 1) * envelope_size;
3692
3693            // Zero reserved fields.
3694            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3695
3696            // Safety:
3697            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3698            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3699            //   envelope_size bytes, there is always sufficient room.
3700            fidl::encoding::encode_in_envelope_optional::<u32, D>(
3701                self.rs_rx.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
3702                encoder,
3703                offset + cur_offset,
3704                depth,
3705            )?;
3706
3707            _prev_end_offset = cur_offset + envelope_size;
3708            if 13 > max_ordinal {
3709                return Ok(());
3710            }
3711
3712            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3713            // are envelope_size bytes.
3714            let cur_offset: usize = (13 - 1) * envelope_size;
3715
3716            // Zero reserved fields.
3717            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3718
3719            // Safety:
3720            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3721            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3722            //   envelope_size bytes, there is always sufficient room.
3723            fidl::encoding::encode_in_envelope_optional::<u32, D>(
3724                self.rs_tx_success.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
3725                encoder,
3726                offset + cur_offset,
3727                depth,
3728            )?;
3729
3730            _prev_end_offset = cur_offset + envelope_size;
3731            if 14 > max_ordinal {
3732                return Ok(());
3733            }
3734
3735            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3736            // are envelope_size bytes.
3737            let cur_offset: usize = (14 - 1) * envelope_size;
3738
3739            // Zero reserved fields.
3740            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3741
3742            // Safety:
3743            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3744            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3745            //   envelope_size bytes, there is always sufficient room.
3746            fidl::encoding::encode_in_envelope_optional::<u32, D>(
3747                self.rs_tx_failure.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
3748                encoder,
3749                offset + cur_offset,
3750                depth,
3751            )?;
3752
3753            _prev_end_offset = cur_offset + envelope_size;
3754            if 15 > max_ordinal {
3755                return Ok(());
3756            }
3757
3758            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3759            // are envelope_size bytes.
3760            let cur_offset: usize = (15 - 1) * envelope_size;
3761
3762            // Zero reserved fields.
3763            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3764
3765            // Safety:
3766            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3767            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3768            //   envelope_size bytes, there is always sufficient room.
3769            fidl::encoding::encode_in_envelope_optional::<u64, D>(
3770                self.inbound_internet_packets
3771                    .as_ref()
3772                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
3773                encoder,
3774                offset + cur_offset,
3775                depth,
3776            )?;
3777
3778            _prev_end_offset = cur_offset + envelope_size;
3779            if 16 > max_ordinal {
3780                return Ok(());
3781            }
3782
3783            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3784            // are envelope_size bytes.
3785            let cur_offset: usize = (16 - 1) * envelope_size;
3786
3787            // Zero reserved fields.
3788            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3789
3790            // Safety:
3791            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3792            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3793            //   envelope_size bytes, there is always sufficient room.
3794            fidl::encoding::encode_in_envelope_optional::<u64, D>(
3795                self.inbound_internet_bytes
3796                    .as_ref()
3797                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
3798                encoder,
3799                offset + cur_offset,
3800                depth,
3801            )?;
3802
3803            _prev_end_offset = cur_offset + envelope_size;
3804            if 17 > max_ordinal {
3805                return Ok(());
3806            }
3807
3808            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3809            // are envelope_size bytes.
3810            let cur_offset: usize = (17 - 1) * envelope_size;
3811
3812            // Zero reserved fields.
3813            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3814
3815            // Safety:
3816            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3817            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3818            //   envelope_size bytes, there is always sufficient room.
3819            fidl::encoding::encode_in_envelope_optional::<u64, D>(
3820                self.outbound_internet_packets
3821                    .as_ref()
3822                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
3823                encoder,
3824                offset + cur_offset,
3825                depth,
3826            )?;
3827
3828            _prev_end_offset = cur_offset + envelope_size;
3829            if 18 > max_ordinal {
3830                return Ok(());
3831            }
3832
3833            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3834            // are envelope_size bytes.
3835            let cur_offset: usize = (18 - 1) * envelope_size;
3836
3837            // Zero reserved fields.
3838            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3839
3840            // Safety:
3841            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3842            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3843            //   envelope_size bytes, there is always sufficient room.
3844            fidl::encoding::encode_in_envelope_optional::<u64, D>(
3845                self.outbound_internet_bytes
3846                    .as_ref()
3847                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
3848                encoder,
3849                offset + cur_offset,
3850                depth,
3851            )?;
3852
3853            _prev_end_offset = cur_offset + envelope_size;
3854
3855            Ok(())
3856        }
3857    }
3858
3859    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for BorderRoutingCounters {
3860        #[inline(always)]
3861        fn new_empty() -> Self {
3862            Self::default()
3863        }
3864
3865        unsafe fn decode(
3866            &mut self,
3867            decoder: &mut fidl::encoding::Decoder<'_, D>,
3868            offset: usize,
3869            mut depth: fidl::encoding::Depth,
3870        ) -> fidl::Result<()> {
3871            decoder.debug_check_bounds::<Self>(offset);
3872            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
3873                None => return Err(fidl::Error::NotNullable),
3874                Some(len) => len,
3875            };
3876            // Calling decoder.out_of_line_offset(0) is not allowed.
3877            if len == 0 {
3878                return Ok(());
3879            };
3880            depth.increment()?;
3881            let envelope_size = 8;
3882            let bytes_len = len * envelope_size;
3883            let offset = decoder.out_of_line_offset(bytes_len)?;
3884            // Decode the envelope for each type.
3885            let mut _next_ordinal_to_read = 0;
3886            let mut next_offset = offset;
3887            let end_offset = offset + bytes_len;
3888            _next_ordinal_to_read += 1;
3889            if next_offset >= end_offset {
3890                return Ok(());
3891            }
3892
3893            // Decode unknown envelopes for gaps in ordinals.
3894            while _next_ordinal_to_read < 1 {
3895                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3896                _next_ordinal_to_read += 1;
3897                next_offset += envelope_size;
3898            }
3899
3900            let next_out_of_line = decoder.next_out_of_line();
3901            let handles_before = decoder.remaining_handles();
3902            if let Some((inlined, num_bytes, num_handles)) =
3903                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3904            {
3905                let member_inline_size =
3906                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3907                if inlined != (member_inline_size <= 4) {
3908                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3909                }
3910                let inner_offset;
3911                let mut inner_depth = depth.clone();
3912                if inlined {
3913                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3914                    inner_offset = next_offset;
3915                } else {
3916                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3917                    inner_depth.increment()?;
3918                }
3919                let val_ref =
3920                    self.inbound_unicast_packets.get_or_insert_with(|| fidl::new_empty!(u64, D));
3921                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
3922                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3923                {
3924                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3925                }
3926                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3927                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3928                }
3929            }
3930
3931            next_offset += envelope_size;
3932            _next_ordinal_to_read += 1;
3933            if next_offset >= end_offset {
3934                return Ok(());
3935            }
3936
3937            // Decode unknown envelopes for gaps in ordinals.
3938            while _next_ordinal_to_read < 2 {
3939                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3940                _next_ordinal_to_read += 1;
3941                next_offset += envelope_size;
3942            }
3943
3944            let next_out_of_line = decoder.next_out_of_line();
3945            let handles_before = decoder.remaining_handles();
3946            if let Some((inlined, num_bytes, num_handles)) =
3947                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3948            {
3949                let member_inline_size =
3950                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3951                if inlined != (member_inline_size <= 4) {
3952                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3953                }
3954                let inner_offset;
3955                let mut inner_depth = depth.clone();
3956                if inlined {
3957                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3958                    inner_offset = next_offset;
3959                } else {
3960                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3961                    inner_depth.increment()?;
3962                }
3963                let val_ref =
3964                    self.inbound_unicast_bytes.get_or_insert_with(|| fidl::new_empty!(u64, D));
3965                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
3966                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3967                {
3968                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3969                }
3970                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3971                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3972                }
3973            }
3974
3975            next_offset += envelope_size;
3976            _next_ordinal_to_read += 1;
3977            if next_offset >= end_offset {
3978                return Ok(());
3979            }
3980
3981            // Decode unknown envelopes for gaps in ordinals.
3982            while _next_ordinal_to_read < 3 {
3983                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3984                _next_ordinal_to_read += 1;
3985                next_offset += envelope_size;
3986            }
3987
3988            let next_out_of_line = decoder.next_out_of_line();
3989            let handles_before = decoder.remaining_handles();
3990            if let Some((inlined, num_bytes, num_handles)) =
3991                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3992            {
3993                let member_inline_size =
3994                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3995                if inlined != (member_inline_size <= 4) {
3996                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3997                }
3998                let inner_offset;
3999                let mut inner_depth = depth.clone();
4000                if inlined {
4001                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4002                    inner_offset = next_offset;
4003                } else {
4004                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4005                    inner_depth.increment()?;
4006                }
4007                let val_ref =
4008                    self.inbound_multicast_packets.get_or_insert_with(|| fidl::new_empty!(u64, D));
4009                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
4010                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4011                {
4012                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4013                }
4014                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4015                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4016                }
4017            }
4018
4019            next_offset += envelope_size;
4020            _next_ordinal_to_read += 1;
4021            if next_offset >= end_offset {
4022                return Ok(());
4023            }
4024
4025            // Decode unknown envelopes for gaps in ordinals.
4026            while _next_ordinal_to_read < 4 {
4027                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4028                _next_ordinal_to_read += 1;
4029                next_offset += envelope_size;
4030            }
4031
4032            let next_out_of_line = decoder.next_out_of_line();
4033            let handles_before = decoder.remaining_handles();
4034            if let Some((inlined, num_bytes, num_handles)) =
4035                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4036            {
4037                let member_inline_size =
4038                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4039                if inlined != (member_inline_size <= 4) {
4040                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4041                }
4042                let inner_offset;
4043                let mut inner_depth = depth.clone();
4044                if inlined {
4045                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4046                    inner_offset = next_offset;
4047                } else {
4048                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4049                    inner_depth.increment()?;
4050                }
4051                let val_ref =
4052                    self.inbound_multicast_bytes.get_or_insert_with(|| fidl::new_empty!(u64, D));
4053                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
4054                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4055                {
4056                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4057                }
4058                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4059                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4060                }
4061            }
4062
4063            next_offset += envelope_size;
4064            _next_ordinal_to_read += 1;
4065            if next_offset >= end_offset {
4066                return Ok(());
4067            }
4068
4069            // Decode unknown envelopes for gaps in ordinals.
4070            while _next_ordinal_to_read < 5 {
4071                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4072                _next_ordinal_to_read += 1;
4073                next_offset += envelope_size;
4074            }
4075
4076            let next_out_of_line = decoder.next_out_of_line();
4077            let handles_before = decoder.remaining_handles();
4078            if let Some((inlined, num_bytes, num_handles)) =
4079                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4080            {
4081                let member_inline_size =
4082                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4083                if inlined != (member_inline_size <= 4) {
4084                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4085                }
4086                let inner_offset;
4087                let mut inner_depth = depth.clone();
4088                if inlined {
4089                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4090                    inner_offset = next_offset;
4091                } else {
4092                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4093                    inner_depth.increment()?;
4094                }
4095                let val_ref =
4096                    self.outbound_unicast_packets.get_or_insert_with(|| fidl::new_empty!(u64, D));
4097                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
4098                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4099                {
4100                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4101                }
4102                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4103                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4104                }
4105            }
4106
4107            next_offset += envelope_size;
4108            _next_ordinal_to_read += 1;
4109            if next_offset >= end_offset {
4110                return Ok(());
4111            }
4112
4113            // Decode unknown envelopes for gaps in ordinals.
4114            while _next_ordinal_to_read < 6 {
4115                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4116                _next_ordinal_to_read += 1;
4117                next_offset += envelope_size;
4118            }
4119
4120            let next_out_of_line = decoder.next_out_of_line();
4121            let handles_before = decoder.remaining_handles();
4122            if let Some((inlined, num_bytes, num_handles)) =
4123                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4124            {
4125                let member_inline_size =
4126                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4127                if inlined != (member_inline_size <= 4) {
4128                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4129                }
4130                let inner_offset;
4131                let mut inner_depth = depth.clone();
4132                if inlined {
4133                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4134                    inner_offset = next_offset;
4135                } else {
4136                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4137                    inner_depth.increment()?;
4138                }
4139                let val_ref =
4140                    self.outbound_unicast_bytes.get_or_insert_with(|| fidl::new_empty!(u64, D));
4141                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
4142                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4143                {
4144                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4145                }
4146                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4147                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4148                }
4149            }
4150
4151            next_offset += envelope_size;
4152            _next_ordinal_to_read += 1;
4153            if next_offset >= end_offset {
4154                return Ok(());
4155            }
4156
4157            // Decode unknown envelopes for gaps in ordinals.
4158            while _next_ordinal_to_read < 7 {
4159                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4160                _next_ordinal_to_read += 1;
4161                next_offset += envelope_size;
4162            }
4163
4164            let next_out_of_line = decoder.next_out_of_line();
4165            let handles_before = decoder.remaining_handles();
4166            if let Some((inlined, num_bytes, num_handles)) =
4167                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4168            {
4169                let member_inline_size =
4170                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4171                if inlined != (member_inline_size <= 4) {
4172                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4173                }
4174                let inner_offset;
4175                let mut inner_depth = depth.clone();
4176                if inlined {
4177                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4178                    inner_offset = next_offset;
4179                } else {
4180                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4181                    inner_depth.increment()?;
4182                }
4183                let val_ref =
4184                    self.outbound_multicast_packets.get_or_insert_with(|| fidl::new_empty!(u64, D));
4185                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
4186                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4187                {
4188                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4189                }
4190                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4191                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4192                }
4193            }
4194
4195            next_offset += envelope_size;
4196            _next_ordinal_to_read += 1;
4197            if next_offset >= end_offset {
4198                return Ok(());
4199            }
4200
4201            // Decode unknown envelopes for gaps in ordinals.
4202            while _next_ordinal_to_read < 8 {
4203                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4204                _next_ordinal_to_read += 1;
4205                next_offset += envelope_size;
4206            }
4207
4208            let next_out_of_line = decoder.next_out_of_line();
4209            let handles_before = decoder.remaining_handles();
4210            if let Some((inlined, num_bytes, num_handles)) =
4211                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4212            {
4213                let member_inline_size =
4214                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4215                if inlined != (member_inline_size <= 4) {
4216                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4217                }
4218                let inner_offset;
4219                let mut inner_depth = depth.clone();
4220                if inlined {
4221                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4222                    inner_offset = next_offset;
4223                } else {
4224                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4225                    inner_depth.increment()?;
4226                }
4227                let val_ref =
4228                    self.outbound_multicast_bytes.get_or_insert_with(|| fidl::new_empty!(u64, D));
4229                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
4230                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4231                {
4232                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4233                }
4234                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4235                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4236                }
4237            }
4238
4239            next_offset += envelope_size;
4240            _next_ordinal_to_read += 1;
4241            if next_offset >= end_offset {
4242                return Ok(());
4243            }
4244
4245            // Decode unknown envelopes for gaps in ordinals.
4246            while _next_ordinal_to_read < 9 {
4247                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4248                _next_ordinal_to_read += 1;
4249                next_offset += envelope_size;
4250            }
4251
4252            let next_out_of_line = decoder.next_out_of_line();
4253            let handles_before = decoder.remaining_handles();
4254            if let Some((inlined, num_bytes, num_handles)) =
4255                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4256            {
4257                let member_inline_size =
4258                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4259                if inlined != (member_inline_size <= 4) {
4260                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4261                }
4262                let inner_offset;
4263                let mut inner_depth = depth.clone();
4264                if inlined {
4265                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4266                    inner_offset = next_offset;
4267                } else {
4268                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4269                    inner_depth.increment()?;
4270                }
4271                let val_ref = self.ra_rx.get_or_insert_with(|| fidl::new_empty!(u32, D));
4272                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
4273                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4274                {
4275                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4276                }
4277                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4278                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4279                }
4280            }
4281
4282            next_offset += envelope_size;
4283            _next_ordinal_to_read += 1;
4284            if next_offset >= end_offset {
4285                return Ok(());
4286            }
4287
4288            // Decode unknown envelopes for gaps in ordinals.
4289            while _next_ordinal_to_read < 10 {
4290                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4291                _next_ordinal_to_read += 1;
4292                next_offset += envelope_size;
4293            }
4294
4295            let next_out_of_line = decoder.next_out_of_line();
4296            let handles_before = decoder.remaining_handles();
4297            if let Some((inlined, num_bytes, num_handles)) =
4298                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4299            {
4300                let member_inline_size =
4301                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4302                if inlined != (member_inline_size <= 4) {
4303                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4304                }
4305                let inner_offset;
4306                let mut inner_depth = depth.clone();
4307                if inlined {
4308                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4309                    inner_offset = next_offset;
4310                } else {
4311                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4312                    inner_depth.increment()?;
4313                }
4314                let val_ref = self.ra_tx_success.get_or_insert_with(|| fidl::new_empty!(u32, D));
4315                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
4316                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4317                {
4318                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4319                }
4320                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4321                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4322                }
4323            }
4324
4325            next_offset += envelope_size;
4326            _next_ordinal_to_read += 1;
4327            if next_offset >= end_offset {
4328                return Ok(());
4329            }
4330
4331            // Decode unknown envelopes for gaps in ordinals.
4332            while _next_ordinal_to_read < 11 {
4333                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4334                _next_ordinal_to_read += 1;
4335                next_offset += envelope_size;
4336            }
4337
4338            let next_out_of_line = decoder.next_out_of_line();
4339            let handles_before = decoder.remaining_handles();
4340            if let Some((inlined, num_bytes, num_handles)) =
4341                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4342            {
4343                let member_inline_size =
4344                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4345                if inlined != (member_inline_size <= 4) {
4346                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4347                }
4348                let inner_offset;
4349                let mut inner_depth = depth.clone();
4350                if inlined {
4351                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4352                    inner_offset = next_offset;
4353                } else {
4354                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4355                    inner_depth.increment()?;
4356                }
4357                let val_ref = self.ra_tx_failure.get_or_insert_with(|| fidl::new_empty!(u32, D));
4358                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
4359                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4360                {
4361                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4362                }
4363                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4364                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4365                }
4366            }
4367
4368            next_offset += envelope_size;
4369            _next_ordinal_to_read += 1;
4370            if next_offset >= end_offset {
4371                return Ok(());
4372            }
4373
4374            // Decode unknown envelopes for gaps in ordinals.
4375            while _next_ordinal_to_read < 12 {
4376                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4377                _next_ordinal_to_read += 1;
4378                next_offset += envelope_size;
4379            }
4380
4381            let next_out_of_line = decoder.next_out_of_line();
4382            let handles_before = decoder.remaining_handles();
4383            if let Some((inlined, num_bytes, num_handles)) =
4384                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4385            {
4386                let member_inline_size =
4387                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4388                if inlined != (member_inline_size <= 4) {
4389                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4390                }
4391                let inner_offset;
4392                let mut inner_depth = depth.clone();
4393                if inlined {
4394                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4395                    inner_offset = next_offset;
4396                } else {
4397                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4398                    inner_depth.increment()?;
4399                }
4400                let val_ref = self.rs_rx.get_or_insert_with(|| fidl::new_empty!(u32, D));
4401                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
4402                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4403                {
4404                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4405                }
4406                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4407                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4408                }
4409            }
4410
4411            next_offset += envelope_size;
4412            _next_ordinal_to_read += 1;
4413            if next_offset >= end_offset {
4414                return Ok(());
4415            }
4416
4417            // Decode unknown envelopes for gaps in ordinals.
4418            while _next_ordinal_to_read < 13 {
4419                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4420                _next_ordinal_to_read += 1;
4421                next_offset += envelope_size;
4422            }
4423
4424            let next_out_of_line = decoder.next_out_of_line();
4425            let handles_before = decoder.remaining_handles();
4426            if let Some((inlined, num_bytes, num_handles)) =
4427                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4428            {
4429                let member_inline_size =
4430                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4431                if inlined != (member_inline_size <= 4) {
4432                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4433                }
4434                let inner_offset;
4435                let mut inner_depth = depth.clone();
4436                if inlined {
4437                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4438                    inner_offset = next_offset;
4439                } else {
4440                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4441                    inner_depth.increment()?;
4442                }
4443                let val_ref = self.rs_tx_success.get_or_insert_with(|| fidl::new_empty!(u32, D));
4444                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
4445                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4446                {
4447                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4448                }
4449                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4450                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4451                }
4452            }
4453
4454            next_offset += envelope_size;
4455            _next_ordinal_to_read += 1;
4456            if next_offset >= end_offset {
4457                return Ok(());
4458            }
4459
4460            // Decode unknown envelopes for gaps in ordinals.
4461            while _next_ordinal_to_read < 14 {
4462                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4463                _next_ordinal_to_read += 1;
4464                next_offset += envelope_size;
4465            }
4466
4467            let next_out_of_line = decoder.next_out_of_line();
4468            let handles_before = decoder.remaining_handles();
4469            if let Some((inlined, num_bytes, num_handles)) =
4470                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4471            {
4472                let member_inline_size =
4473                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4474                if inlined != (member_inline_size <= 4) {
4475                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4476                }
4477                let inner_offset;
4478                let mut inner_depth = depth.clone();
4479                if inlined {
4480                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4481                    inner_offset = next_offset;
4482                } else {
4483                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4484                    inner_depth.increment()?;
4485                }
4486                let val_ref = self.rs_tx_failure.get_or_insert_with(|| fidl::new_empty!(u32, D));
4487                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
4488                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4489                {
4490                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4491                }
4492                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4493                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4494                }
4495            }
4496
4497            next_offset += envelope_size;
4498            _next_ordinal_to_read += 1;
4499            if next_offset >= end_offset {
4500                return Ok(());
4501            }
4502
4503            // Decode unknown envelopes for gaps in ordinals.
4504            while _next_ordinal_to_read < 15 {
4505                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4506                _next_ordinal_to_read += 1;
4507                next_offset += envelope_size;
4508            }
4509
4510            let next_out_of_line = decoder.next_out_of_line();
4511            let handles_before = decoder.remaining_handles();
4512            if let Some((inlined, num_bytes, num_handles)) =
4513                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4514            {
4515                let member_inline_size =
4516                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4517                if inlined != (member_inline_size <= 4) {
4518                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4519                }
4520                let inner_offset;
4521                let mut inner_depth = depth.clone();
4522                if inlined {
4523                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4524                    inner_offset = next_offset;
4525                } else {
4526                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4527                    inner_depth.increment()?;
4528                }
4529                let val_ref =
4530                    self.inbound_internet_packets.get_or_insert_with(|| fidl::new_empty!(u64, D));
4531                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
4532                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4533                {
4534                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4535                }
4536                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4537                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4538                }
4539            }
4540
4541            next_offset += envelope_size;
4542            _next_ordinal_to_read += 1;
4543            if next_offset >= end_offset {
4544                return Ok(());
4545            }
4546
4547            // Decode unknown envelopes for gaps in ordinals.
4548            while _next_ordinal_to_read < 16 {
4549                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4550                _next_ordinal_to_read += 1;
4551                next_offset += envelope_size;
4552            }
4553
4554            let next_out_of_line = decoder.next_out_of_line();
4555            let handles_before = decoder.remaining_handles();
4556            if let Some((inlined, num_bytes, num_handles)) =
4557                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4558            {
4559                let member_inline_size =
4560                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4561                if inlined != (member_inline_size <= 4) {
4562                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4563                }
4564                let inner_offset;
4565                let mut inner_depth = depth.clone();
4566                if inlined {
4567                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4568                    inner_offset = next_offset;
4569                } else {
4570                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4571                    inner_depth.increment()?;
4572                }
4573                let val_ref =
4574                    self.inbound_internet_bytes.get_or_insert_with(|| fidl::new_empty!(u64, D));
4575                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
4576                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4577                {
4578                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4579                }
4580                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4581                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4582                }
4583            }
4584
4585            next_offset += envelope_size;
4586            _next_ordinal_to_read += 1;
4587            if next_offset >= end_offset {
4588                return Ok(());
4589            }
4590
4591            // Decode unknown envelopes for gaps in ordinals.
4592            while _next_ordinal_to_read < 17 {
4593                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4594                _next_ordinal_to_read += 1;
4595                next_offset += envelope_size;
4596            }
4597
4598            let next_out_of_line = decoder.next_out_of_line();
4599            let handles_before = decoder.remaining_handles();
4600            if let Some((inlined, num_bytes, num_handles)) =
4601                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4602            {
4603                let member_inline_size =
4604                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4605                if inlined != (member_inline_size <= 4) {
4606                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4607                }
4608                let inner_offset;
4609                let mut inner_depth = depth.clone();
4610                if inlined {
4611                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4612                    inner_offset = next_offset;
4613                } else {
4614                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4615                    inner_depth.increment()?;
4616                }
4617                let val_ref =
4618                    self.outbound_internet_packets.get_or_insert_with(|| fidl::new_empty!(u64, D));
4619                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
4620                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4621                {
4622                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4623                }
4624                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4625                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4626                }
4627            }
4628
4629            next_offset += envelope_size;
4630            _next_ordinal_to_read += 1;
4631            if next_offset >= end_offset {
4632                return Ok(());
4633            }
4634
4635            // Decode unknown envelopes for gaps in ordinals.
4636            while _next_ordinal_to_read < 18 {
4637                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4638                _next_ordinal_to_read += 1;
4639                next_offset += envelope_size;
4640            }
4641
4642            let next_out_of_line = decoder.next_out_of_line();
4643            let handles_before = decoder.remaining_handles();
4644            if let Some((inlined, num_bytes, num_handles)) =
4645                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4646            {
4647                let member_inline_size =
4648                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4649                if inlined != (member_inline_size <= 4) {
4650                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4651                }
4652                let inner_offset;
4653                let mut inner_depth = depth.clone();
4654                if inlined {
4655                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4656                    inner_offset = next_offset;
4657                } else {
4658                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4659                    inner_depth.increment()?;
4660                }
4661                let val_ref =
4662                    self.outbound_internet_bytes.get_or_insert_with(|| fidl::new_empty!(u64, D));
4663                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
4664                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4665                {
4666                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4667                }
4668                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4669                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4670                }
4671            }
4672
4673            next_offset += envelope_size;
4674
4675            // Decode the remaining unknown envelopes.
4676            while next_offset < end_offset {
4677                _next_ordinal_to_read += 1;
4678                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4679                next_offset += envelope_size;
4680            }
4681
4682            Ok(())
4683        }
4684    }
4685
4686    impl BorderRoutingNat64State {
4687        #[inline(always)]
4688        fn max_ordinal_present(&self) -> u64 {
4689            if let Some(_) = self.translator_state {
4690                return 2;
4691            }
4692            if let Some(_) = self.prefix_manager_state {
4693                return 1;
4694            }
4695            0
4696        }
4697    }
4698
4699    impl fidl::encoding::ValueTypeMarker for BorderRoutingNat64State {
4700        type Borrowed<'a> = &'a Self;
4701        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4702            value
4703        }
4704    }
4705
4706    unsafe impl fidl::encoding::TypeMarker for BorderRoutingNat64State {
4707        type Owned = Self;
4708
4709        #[inline(always)]
4710        fn inline_align(_context: fidl::encoding::Context) -> usize {
4711            8
4712        }
4713
4714        #[inline(always)]
4715        fn inline_size(_context: fidl::encoding::Context) -> usize {
4716            16
4717        }
4718    }
4719
4720    unsafe impl<D: fidl::encoding::ResourceDialect>
4721        fidl::encoding::Encode<BorderRoutingNat64State, D> for &BorderRoutingNat64State
4722    {
4723        unsafe fn encode(
4724            self,
4725            encoder: &mut fidl::encoding::Encoder<'_, D>,
4726            offset: usize,
4727            mut depth: fidl::encoding::Depth,
4728        ) -> fidl::Result<()> {
4729            encoder.debug_check_bounds::<BorderRoutingNat64State>(offset);
4730            // Vector header
4731            let max_ordinal: u64 = self.max_ordinal_present();
4732            encoder.write_num(max_ordinal, offset);
4733            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
4734            // Calling encoder.out_of_line_offset(0) is not allowed.
4735            if max_ordinal == 0 {
4736                return Ok(());
4737            }
4738            depth.increment()?;
4739            let envelope_size = 8;
4740            let bytes_len = max_ordinal as usize * envelope_size;
4741            #[allow(unused_variables)]
4742            let offset = encoder.out_of_line_offset(bytes_len);
4743            let mut _prev_end_offset: usize = 0;
4744            if 1 > max_ordinal {
4745                return Ok(());
4746            }
4747
4748            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4749            // are envelope_size bytes.
4750            let cur_offset: usize = (1 - 1) * envelope_size;
4751
4752            // Zero reserved fields.
4753            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4754
4755            // Safety:
4756            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4757            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4758            //   envelope_size bytes, there is always sufficient room.
4759            fidl::encoding::encode_in_envelope_optional::<Nat64State, D>(
4760                self.prefix_manager_state
4761                    .as_ref()
4762                    .map(<Nat64State as fidl::encoding::ValueTypeMarker>::borrow),
4763                encoder,
4764                offset + cur_offset,
4765                depth,
4766            )?;
4767
4768            _prev_end_offset = cur_offset + envelope_size;
4769            if 2 > max_ordinal {
4770                return Ok(());
4771            }
4772
4773            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4774            // are envelope_size bytes.
4775            let cur_offset: usize = (2 - 1) * envelope_size;
4776
4777            // Zero reserved fields.
4778            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4779
4780            // Safety:
4781            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4782            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4783            //   envelope_size bytes, there is always sufficient room.
4784            fidl::encoding::encode_in_envelope_optional::<Nat64State, D>(
4785                self.translator_state
4786                    .as_ref()
4787                    .map(<Nat64State as fidl::encoding::ValueTypeMarker>::borrow),
4788                encoder,
4789                offset + cur_offset,
4790                depth,
4791            )?;
4792
4793            _prev_end_offset = cur_offset + envelope_size;
4794
4795            Ok(())
4796        }
4797    }
4798
4799    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
4800        for BorderRoutingNat64State
4801    {
4802        #[inline(always)]
4803        fn new_empty() -> Self {
4804            Self::default()
4805        }
4806
4807        unsafe fn decode(
4808            &mut self,
4809            decoder: &mut fidl::encoding::Decoder<'_, D>,
4810            offset: usize,
4811            mut depth: fidl::encoding::Depth,
4812        ) -> fidl::Result<()> {
4813            decoder.debug_check_bounds::<Self>(offset);
4814            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
4815                None => return Err(fidl::Error::NotNullable),
4816                Some(len) => len,
4817            };
4818            // Calling decoder.out_of_line_offset(0) is not allowed.
4819            if len == 0 {
4820                return Ok(());
4821            };
4822            depth.increment()?;
4823            let envelope_size = 8;
4824            let bytes_len = len * envelope_size;
4825            let offset = decoder.out_of_line_offset(bytes_len)?;
4826            // Decode the envelope for each type.
4827            let mut _next_ordinal_to_read = 0;
4828            let mut next_offset = offset;
4829            let end_offset = offset + bytes_len;
4830            _next_ordinal_to_read += 1;
4831            if next_offset >= end_offset {
4832                return Ok(());
4833            }
4834
4835            // Decode unknown envelopes for gaps in ordinals.
4836            while _next_ordinal_to_read < 1 {
4837                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4838                _next_ordinal_to_read += 1;
4839                next_offset += envelope_size;
4840            }
4841
4842            let next_out_of_line = decoder.next_out_of_line();
4843            let handles_before = decoder.remaining_handles();
4844            if let Some((inlined, num_bytes, num_handles)) =
4845                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4846            {
4847                let member_inline_size =
4848                    <Nat64State as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4849                if inlined != (member_inline_size <= 4) {
4850                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4851                }
4852                let inner_offset;
4853                let mut inner_depth = depth.clone();
4854                if inlined {
4855                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4856                    inner_offset = next_offset;
4857                } else {
4858                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4859                    inner_depth.increment()?;
4860                }
4861                let val_ref = self
4862                    .prefix_manager_state
4863                    .get_or_insert_with(|| fidl::new_empty!(Nat64State, D));
4864                fidl::decode!(Nat64State, D, val_ref, decoder, inner_offset, inner_depth)?;
4865                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4866                {
4867                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4868                }
4869                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4870                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4871                }
4872            }
4873
4874            next_offset += envelope_size;
4875            _next_ordinal_to_read += 1;
4876            if next_offset >= end_offset {
4877                return Ok(());
4878            }
4879
4880            // Decode unknown envelopes for gaps in ordinals.
4881            while _next_ordinal_to_read < 2 {
4882                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4883                _next_ordinal_to_read += 1;
4884                next_offset += envelope_size;
4885            }
4886
4887            let next_out_of_line = decoder.next_out_of_line();
4888            let handles_before = decoder.remaining_handles();
4889            if let Some((inlined, num_bytes, num_handles)) =
4890                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4891            {
4892                let member_inline_size =
4893                    <Nat64State as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4894                if inlined != (member_inline_size <= 4) {
4895                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4896                }
4897                let inner_offset;
4898                let mut inner_depth = depth.clone();
4899                if inlined {
4900                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4901                    inner_offset = next_offset;
4902                } else {
4903                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4904                    inner_depth.increment()?;
4905                }
4906                let val_ref =
4907                    self.translator_state.get_or_insert_with(|| fidl::new_empty!(Nat64State, D));
4908                fidl::decode!(Nat64State, D, val_ref, decoder, inner_offset, inner_depth)?;
4909                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4910                {
4911                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4912                }
4913                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4914                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4915                }
4916            }
4917
4918            next_offset += envelope_size;
4919
4920            // Decode the remaining unknown envelopes.
4921            while next_offset < end_offset {
4922                _next_ordinal_to_read += 1;
4923                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4924                next_offset += envelope_size;
4925            }
4926
4927            Ok(())
4928        }
4929    }
4930
4931    impl ChannelInfo {
4932        #[inline(always)]
4933        fn max_ordinal_present(&self) -> u64 {
4934            if let Some(_) = self.masked_by_regulatory_domain {
4935                return 6;
4936            }
4937            if let Some(_) = self.spectrum_bandwidth_hz {
4938                return 5;
4939            }
4940            if let Some(_) = self.spectrum_center_frequency_hz {
4941                return 4;
4942            }
4943            if let Some(_) = self.max_transmit_power_dbm {
4944                return 3;
4945            }
4946            if let Some(_) = self.id {
4947                return 2;
4948            }
4949            if let Some(_) = self.index {
4950                return 1;
4951            }
4952            0
4953        }
4954    }
4955
4956    impl fidl::encoding::ValueTypeMarker for ChannelInfo {
4957        type Borrowed<'a> = &'a Self;
4958        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4959            value
4960        }
4961    }
4962
4963    unsafe impl fidl::encoding::TypeMarker for ChannelInfo {
4964        type Owned = Self;
4965
4966        #[inline(always)]
4967        fn inline_align(_context: fidl::encoding::Context) -> usize {
4968            8
4969        }
4970
4971        #[inline(always)]
4972        fn inline_size(_context: fidl::encoding::Context) -> usize {
4973            16
4974        }
4975    }
4976
4977    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<ChannelInfo, D>
4978        for &ChannelInfo
4979    {
4980        unsafe fn encode(
4981            self,
4982            encoder: &mut fidl::encoding::Encoder<'_, D>,
4983            offset: usize,
4984            mut depth: fidl::encoding::Depth,
4985        ) -> fidl::Result<()> {
4986            encoder.debug_check_bounds::<ChannelInfo>(offset);
4987            // Vector header
4988            let max_ordinal: u64 = self.max_ordinal_present();
4989            encoder.write_num(max_ordinal, offset);
4990            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
4991            // Calling encoder.out_of_line_offset(0) is not allowed.
4992            if max_ordinal == 0 {
4993                return Ok(());
4994            }
4995            depth.increment()?;
4996            let envelope_size = 8;
4997            let bytes_len = max_ordinal as usize * envelope_size;
4998            #[allow(unused_variables)]
4999            let offset = encoder.out_of_line_offset(bytes_len);
5000            let mut _prev_end_offset: usize = 0;
5001            if 1 > max_ordinal {
5002                return Ok(());
5003            }
5004
5005            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5006            // are envelope_size bytes.
5007            let cur_offset: usize = (1 - 1) * envelope_size;
5008
5009            // Zero reserved fields.
5010            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5011
5012            // Safety:
5013            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5014            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5015            //   envelope_size bytes, there is always sufficient room.
5016            fidl::encoding::encode_in_envelope_optional::<u16, D>(
5017                self.index.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
5018                encoder,
5019                offset + cur_offset,
5020                depth,
5021            )?;
5022
5023            _prev_end_offset = cur_offset + envelope_size;
5024            if 2 > max_ordinal {
5025                return Ok(());
5026            }
5027
5028            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5029            // are envelope_size bytes.
5030            let cur_offset: usize = (2 - 1) * envelope_size;
5031
5032            // Zero reserved fields.
5033            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5034
5035            // Safety:
5036            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5037            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5038            //   envelope_size bytes, there is always sufficient room.
5039            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<16>, D>(
5040                self.id.as_ref().map(
5041                    <fidl::encoding::BoundedString<16> as fidl::encoding::ValueTypeMarker>::borrow,
5042                ),
5043                encoder,
5044                offset + cur_offset,
5045                depth,
5046            )?;
5047
5048            _prev_end_offset = cur_offset + envelope_size;
5049            if 3 > max_ordinal {
5050                return Ok(());
5051            }
5052
5053            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5054            // are envelope_size bytes.
5055            let cur_offset: usize = (3 - 1) * envelope_size;
5056
5057            // Zero reserved fields.
5058            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5059
5060            // Safety:
5061            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5062            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5063            //   envelope_size bytes, there is always sufficient room.
5064            fidl::encoding::encode_in_envelope_optional::<i8, D>(
5065                self.max_transmit_power_dbm
5066                    .as_ref()
5067                    .map(<i8 as fidl::encoding::ValueTypeMarker>::borrow),
5068                encoder,
5069                offset + cur_offset,
5070                depth,
5071            )?;
5072
5073            _prev_end_offset = cur_offset + envelope_size;
5074            if 4 > max_ordinal {
5075                return Ok(());
5076            }
5077
5078            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5079            // are envelope_size bytes.
5080            let cur_offset: usize = (4 - 1) * envelope_size;
5081
5082            // Zero reserved fields.
5083            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5084
5085            // Safety:
5086            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5087            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5088            //   envelope_size bytes, there is always sufficient room.
5089            fidl::encoding::encode_in_envelope_optional::<u64, D>(
5090                self.spectrum_center_frequency_hz
5091                    .as_ref()
5092                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
5093                encoder,
5094                offset + cur_offset,
5095                depth,
5096            )?;
5097
5098            _prev_end_offset = cur_offset + envelope_size;
5099            if 5 > max_ordinal {
5100                return Ok(());
5101            }
5102
5103            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5104            // are envelope_size bytes.
5105            let cur_offset: usize = (5 - 1) * envelope_size;
5106
5107            // Zero reserved fields.
5108            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5109
5110            // Safety:
5111            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5112            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5113            //   envelope_size bytes, there is always sufficient room.
5114            fidl::encoding::encode_in_envelope_optional::<u64, D>(
5115                self.spectrum_bandwidth_hz
5116                    .as_ref()
5117                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
5118                encoder,
5119                offset + cur_offset,
5120                depth,
5121            )?;
5122
5123            _prev_end_offset = cur_offset + envelope_size;
5124            if 6 > max_ordinal {
5125                return Ok(());
5126            }
5127
5128            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5129            // are envelope_size bytes.
5130            let cur_offset: usize = (6 - 1) * envelope_size;
5131
5132            // Zero reserved fields.
5133            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5134
5135            // Safety:
5136            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5137            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5138            //   envelope_size bytes, there is always sufficient room.
5139            fidl::encoding::encode_in_envelope_optional::<bool, D>(
5140                self.masked_by_regulatory_domain
5141                    .as_ref()
5142                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
5143                encoder,
5144                offset + cur_offset,
5145                depth,
5146            )?;
5147
5148            _prev_end_offset = cur_offset + envelope_size;
5149
5150            Ok(())
5151        }
5152    }
5153
5154    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ChannelInfo {
5155        #[inline(always)]
5156        fn new_empty() -> Self {
5157            Self::default()
5158        }
5159
5160        unsafe fn decode(
5161            &mut self,
5162            decoder: &mut fidl::encoding::Decoder<'_, D>,
5163            offset: usize,
5164            mut depth: fidl::encoding::Depth,
5165        ) -> fidl::Result<()> {
5166            decoder.debug_check_bounds::<Self>(offset);
5167            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
5168                None => return Err(fidl::Error::NotNullable),
5169                Some(len) => len,
5170            };
5171            // Calling decoder.out_of_line_offset(0) is not allowed.
5172            if len == 0 {
5173                return Ok(());
5174            };
5175            depth.increment()?;
5176            let envelope_size = 8;
5177            let bytes_len = len * envelope_size;
5178            let offset = decoder.out_of_line_offset(bytes_len)?;
5179            // Decode the envelope for each type.
5180            let mut _next_ordinal_to_read = 0;
5181            let mut next_offset = offset;
5182            let end_offset = offset + bytes_len;
5183            _next_ordinal_to_read += 1;
5184            if next_offset >= end_offset {
5185                return Ok(());
5186            }
5187
5188            // Decode unknown envelopes for gaps in ordinals.
5189            while _next_ordinal_to_read < 1 {
5190                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5191                _next_ordinal_to_read += 1;
5192                next_offset += envelope_size;
5193            }
5194
5195            let next_out_of_line = decoder.next_out_of_line();
5196            let handles_before = decoder.remaining_handles();
5197            if let Some((inlined, num_bytes, num_handles)) =
5198                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5199            {
5200                let member_inline_size =
5201                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5202                if inlined != (member_inline_size <= 4) {
5203                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5204                }
5205                let inner_offset;
5206                let mut inner_depth = depth.clone();
5207                if inlined {
5208                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5209                    inner_offset = next_offset;
5210                } else {
5211                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5212                    inner_depth.increment()?;
5213                }
5214                let val_ref = self.index.get_or_insert_with(|| fidl::new_empty!(u16, D));
5215                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
5216                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5217                {
5218                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5219                }
5220                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5221                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5222                }
5223            }
5224
5225            next_offset += envelope_size;
5226            _next_ordinal_to_read += 1;
5227            if next_offset >= end_offset {
5228                return Ok(());
5229            }
5230
5231            // Decode unknown envelopes for gaps in ordinals.
5232            while _next_ordinal_to_read < 2 {
5233                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5234                _next_ordinal_to_read += 1;
5235                next_offset += envelope_size;
5236            }
5237
5238            let next_out_of_line = decoder.next_out_of_line();
5239            let handles_before = decoder.remaining_handles();
5240            if let Some((inlined, num_bytes, num_handles)) =
5241                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5242            {
5243                let member_inline_size =
5244                    <fidl::encoding::BoundedString<16> as fidl::encoding::TypeMarker>::inline_size(
5245                        decoder.context,
5246                    );
5247                if inlined != (member_inline_size <= 4) {
5248                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5249                }
5250                let inner_offset;
5251                let mut inner_depth = depth.clone();
5252                if inlined {
5253                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5254                    inner_offset = next_offset;
5255                } else {
5256                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5257                    inner_depth.increment()?;
5258                }
5259                let val_ref = self
5260                    .id
5261                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<16>, D));
5262                fidl::decode!(
5263                    fidl::encoding::BoundedString<16>,
5264                    D,
5265                    val_ref,
5266                    decoder,
5267                    inner_offset,
5268                    inner_depth
5269                )?;
5270                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5271                {
5272                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5273                }
5274                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5275                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5276                }
5277            }
5278
5279            next_offset += envelope_size;
5280            _next_ordinal_to_read += 1;
5281            if next_offset >= end_offset {
5282                return Ok(());
5283            }
5284
5285            // Decode unknown envelopes for gaps in ordinals.
5286            while _next_ordinal_to_read < 3 {
5287                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5288                _next_ordinal_to_read += 1;
5289                next_offset += envelope_size;
5290            }
5291
5292            let next_out_of_line = decoder.next_out_of_line();
5293            let handles_before = decoder.remaining_handles();
5294            if let Some((inlined, num_bytes, num_handles)) =
5295                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5296            {
5297                let member_inline_size =
5298                    <i8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5299                if inlined != (member_inline_size <= 4) {
5300                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5301                }
5302                let inner_offset;
5303                let mut inner_depth = depth.clone();
5304                if inlined {
5305                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5306                    inner_offset = next_offset;
5307                } else {
5308                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5309                    inner_depth.increment()?;
5310                }
5311                let val_ref =
5312                    self.max_transmit_power_dbm.get_or_insert_with(|| fidl::new_empty!(i8, D));
5313                fidl::decode!(i8, D, val_ref, decoder, inner_offset, inner_depth)?;
5314                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5315                {
5316                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5317                }
5318                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5319                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5320                }
5321            }
5322
5323            next_offset += envelope_size;
5324            _next_ordinal_to_read += 1;
5325            if next_offset >= end_offset {
5326                return Ok(());
5327            }
5328
5329            // Decode unknown envelopes for gaps in ordinals.
5330            while _next_ordinal_to_read < 4 {
5331                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5332                _next_ordinal_to_read += 1;
5333                next_offset += envelope_size;
5334            }
5335
5336            let next_out_of_line = decoder.next_out_of_line();
5337            let handles_before = decoder.remaining_handles();
5338            if let Some((inlined, num_bytes, num_handles)) =
5339                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5340            {
5341                let member_inline_size =
5342                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5343                if inlined != (member_inline_size <= 4) {
5344                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5345                }
5346                let inner_offset;
5347                let mut inner_depth = depth.clone();
5348                if inlined {
5349                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5350                    inner_offset = next_offset;
5351                } else {
5352                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5353                    inner_depth.increment()?;
5354                }
5355                let val_ref = self
5356                    .spectrum_center_frequency_hz
5357                    .get_or_insert_with(|| fidl::new_empty!(u64, D));
5358                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
5359                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5360                {
5361                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5362                }
5363                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5364                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5365                }
5366            }
5367
5368            next_offset += envelope_size;
5369            _next_ordinal_to_read += 1;
5370            if next_offset >= end_offset {
5371                return Ok(());
5372            }
5373
5374            // Decode unknown envelopes for gaps in ordinals.
5375            while _next_ordinal_to_read < 5 {
5376                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5377                _next_ordinal_to_read += 1;
5378                next_offset += envelope_size;
5379            }
5380
5381            let next_out_of_line = decoder.next_out_of_line();
5382            let handles_before = decoder.remaining_handles();
5383            if let Some((inlined, num_bytes, num_handles)) =
5384                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5385            {
5386                let member_inline_size =
5387                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5388                if inlined != (member_inline_size <= 4) {
5389                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5390                }
5391                let inner_offset;
5392                let mut inner_depth = depth.clone();
5393                if inlined {
5394                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5395                    inner_offset = next_offset;
5396                } else {
5397                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5398                    inner_depth.increment()?;
5399                }
5400                let val_ref =
5401                    self.spectrum_bandwidth_hz.get_or_insert_with(|| fidl::new_empty!(u64, D));
5402                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
5403                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5404                {
5405                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5406                }
5407                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5408                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5409                }
5410            }
5411
5412            next_offset += envelope_size;
5413            _next_ordinal_to_read += 1;
5414            if next_offset >= end_offset {
5415                return Ok(());
5416            }
5417
5418            // Decode unknown envelopes for gaps in ordinals.
5419            while _next_ordinal_to_read < 6 {
5420                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5421                _next_ordinal_to_read += 1;
5422                next_offset += envelope_size;
5423            }
5424
5425            let next_out_of_line = decoder.next_out_of_line();
5426            let handles_before = decoder.remaining_handles();
5427            if let Some((inlined, num_bytes, num_handles)) =
5428                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5429            {
5430                let member_inline_size =
5431                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5432                if inlined != (member_inline_size <= 4) {
5433                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5434                }
5435                let inner_offset;
5436                let mut inner_depth = depth.clone();
5437                if inlined {
5438                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5439                    inner_offset = next_offset;
5440                } else {
5441                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5442                    inner_depth.increment()?;
5443                }
5444                let val_ref = self
5445                    .masked_by_regulatory_domain
5446                    .get_or_insert_with(|| fidl::new_empty!(bool, D));
5447                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
5448                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5449                {
5450                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5451                }
5452                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5453                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5454                }
5455            }
5456
5457            next_offset += envelope_size;
5458
5459            // Decode the remaining unknown envelopes.
5460            while next_offset < end_offset {
5461                _next_ordinal_to_read += 1;
5462                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5463                next_offset += envelope_size;
5464            }
5465
5466            Ok(())
5467        }
5468    }
5469
5470    impl Dhcp6PdInfo {
5471        #[inline(always)]
5472        fn max_ordinal_present(&self) -> u64 {
5473            if let Some(_) = self.hashed_pd_prefix {
5474                return 3;
5475            }
5476            if let Some(_) = self.pd_processed_ra_info {
5477                return 2;
5478            }
5479            if let Some(_) = self.dhcp6pd_state {
5480                return 1;
5481            }
5482            0
5483        }
5484    }
5485
5486    impl fidl::encoding::ValueTypeMarker for Dhcp6PdInfo {
5487        type Borrowed<'a> = &'a Self;
5488        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5489            value
5490        }
5491    }
5492
5493    unsafe impl fidl::encoding::TypeMarker for Dhcp6PdInfo {
5494        type Owned = Self;
5495
5496        #[inline(always)]
5497        fn inline_align(_context: fidl::encoding::Context) -> usize {
5498            8
5499        }
5500
5501        #[inline(always)]
5502        fn inline_size(_context: fidl::encoding::Context) -> usize {
5503            16
5504        }
5505    }
5506
5507    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Dhcp6PdInfo, D>
5508        for &Dhcp6PdInfo
5509    {
5510        unsafe fn encode(
5511            self,
5512            encoder: &mut fidl::encoding::Encoder<'_, D>,
5513            offset: usize,
5514            mut depth: fidl::encoding::Depth,
5515        ) -> fidl::Result<()> {
5516            encoder.debug_check_bounds::<Dhcp6PdInfo>(offset);
5517            // Vector header
5518            let max_ordinal: u64 = self.max_ordinal_present();
5519            encoder.write_num(max_ordinal, offset);
5520            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
5521            // Calling encoder.out_of_line_offset(0) is not allowed.
5522            if max_ordinal == 0 {
5523                return Ok(());
5524            }
5525            depth.increment()?;
5526            let envelope_size = 8;
5527            let bytes_len = max_ordinal as usize * envelope_size;
5528            #[allow(unused_variables)]
5529            let offset = encoder.out_of_line_offset(bytes_len);
5530            let mut _prev_end_offset: usize = 0;
5531            if 1 > max_ordinal {
5532                return Ok(());
5533            }
5534
5535            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5536            // are envelope_size bytes.
5537            let cur_offset: usize = (1 - 1) * envelope_size;
5538
5539            // Zero reserved fields.
5540            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5541
5542            // Safety:
5543            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5544            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5545            //   envelope_size bytes, there is always sufficient room.
5546            fidl::encoding::encode_in_envelope_optional::<Dhcp6PdState, D>(
5547                self.dhcp6pd_state
5548                    .as_ref()
5549                    .map(<Dhcp6PdState as fidl::encoding::ValueTypeMarker>::borrow),
5550                encoder,
5551                offset + cur_offset,
5552                depth,
5553            )?;
5554
5555            _prev_end_offset = cur_offset + envelope_size;
5556            if 2 > max_ordinal {
5557                return Ok(());
5558            }
5559
5560            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5561            // are envelope_size bytes.
5562            let cur_offset: usize = (2 - 1) * envelope_size;
5563
5564            // Zero reserved fields.
5565            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5566
5567            // Safety:
5568            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5569            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5570            //   envelope_size bytes, there is always sufficient room.
5571            fidl::encoding::encode_in_envelope_optional::<PdProcessedRaInfo, D>(
5572                self.pd_processed_ra_info
5573                    .as_ref()
5574                    .map(<PdProcessedRaInfo as fidl::encoding::ValueTypeMarker>::borrow),
5575                encoder,
5576                offset + cur_offset,
5577                depth,
5578            )?;
5579
5580            _prev_end_offset = cur_offset + envelope_size;
5581            if 3 > max_ordinal {
5582                return Ok(());
5583            }
5584
5585            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5586            // are envelope_size bytes.
5587            let cur_offset: usize = (3 - 1) * envelope_size;
5588
5589            // Zero reserved fields.
5590            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5591
5592            // Safety:
5593            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5594            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5595            //   envelope_size bytes, there is always sufficient room.
5596            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u8, 32>, D>(
5597                self.hashed_pd_prefix.as_ref().map(
5598                    <fidl::encoding::Vector<u8, 32> as fidl::encoding::ValueTypeMarker>::borrow,
5599                ),
5600                encoder,
5601                offset + cur_offset,
5602                depth,
5603            )?;
5604
5605            _prev_end_offset = cur_offset + envelope_size;
5606
5607            Ok(())
5608        }
5609    }
5610
5611    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Dhcp6PdInfo {
5612        #[inline(always)]
5613        fn new_empty() -> Self {
5614            Self::default()
5615        }
5616
5617        unsafe fn decode(
5618            &mut self,
5619            decoder: &mut fidl::encoding::Decoder<'_, D>,
5620            offset: usize,
5621            mut depth: fidl::encoding::Depth,
5622        ) -> fidl::Result<()> {
5623            decoder.debug_check_bounds::<Self>(offset);
5624            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
5625                None => return Err(fidl::Error::NotNullable),
5626                Some(len) => len,
5627            };
5628            // Calling decoder.out_of_line_offset(0) is not allowed.
5629            if len == 0 {
5630                return Ok(());
5631            };
5632            depth.increment()?;
5633            let envelope_size = 8;
5634            let bytes_len = len * envelope_size;
5635            let offset = decoder.out_of_line_offset(bytes_len)?;
5636            // Decode the envelope for each type.
5637            let mut _next_ordinal_to_read = 0;
5638            let mut next_offset = offset;
5639            let end_offset = offset + bytes_len;
5640            _next_ordinal_to_read += 1;
5641            if next_offset >= end_offset {
5642                return Ok(());
5643            }
5644
5645            // Decode unknown envelopes for gaps in ordinals.
5646            while _next_ordinal_to_read < 1 {
5647                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5648                _next_ordinal_to_read += 1;
5649                next_offset += envelope_size;
5650            }
5651
5652            let next_out_of_line = decoder.next_out_of_line();
5653            let handles_before = decoder.remaining_handles();
5654            if let Some((inlined, num_bytes, num_handles)) =
5655                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5656            {
5657                let member_inline_size =
5658                    <Dhcp6PdState as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5659                if inlined != (member_inline_size <= 4) {
5660                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5661                }
5662                let inner_offset;
5663                let mut inner_depth = depth.clone();
5664                if inlined {
5665                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5666                    inner_offset = next_offset;
5667                } else {
5668                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5669                    inner_depth.increment()?;
5670                }
5671                let val_ref =
5672                    self.dhcp6pd_state.get_or_insert_with(|| fidl::new_empty!(Dhcp6PdState, D));
5673                fidl::decode!(Dhcp6PdState, D, val_ref, decoder, inner_offset, inner_depth)?;
5674                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5675                {
5676                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5677                }
5678                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5679                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5680                }
5681            }
5682
5683            next_offset += envelope_size;
5684            _next_ordinal_to_read += 1;
5685            if next_offset >= end_offset {
5686                return Ok(());
5687            }
5688
5689            // Decode unknown envelopes for gaps in ordinals.
5690            while _next_ordinal_to_read < 2 {
5691                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5692                _next_ordinal_to_read += 1;
5693                next_offset += envelope_size;
5694            }
5695
5696            let next_out_of_line = decoder.next_out_of_line();
5697            let handles_before = decoder.remaining_handles();
5698            if let Some((inlined, num_bytes, num_handles)) =
5699                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5700            {
5701                let member_inline_size =
5702                    <PdProcessedRaInfo as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5703                if inlined != (member_inline_size <= 4) {
5704                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5705                }
5706                let inner_offset;
5707                let mut inner_depth = depth.clone();
5708                if inlined {
5709                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5710                    inner_offset = next_offset;
5711                } else {
5712                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5713                    inner_depth.increment()?;
5714                }
5715                let val_ref = self
5716                    .pd_processed_ra_info
5717                    .get_or_insert_with(|| fidl::new_empty!(PdProcessedRaInfo, D));
5718                fidl::decode!(PdProcessedRaInfo, D, val_ref, decoder, inner_offset, inner_depth)?;
5719                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5720                {
5721                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5722                }
5723                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5724                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5725                }
5726            }
5727
5728            next_offset += envelope_size;
5729            _next_ordinal_to_read += 1;
5730            if next_offset >= end_offset {
5731                return Ok(());
5732            }
5733
5734            // Decode unknown envelopes for gaps in ordinals.
5735            while _next_ordinal_to_read < 3 {
5736                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5737                _next_ordinal_to_read += 1;
5738                next_offset += envelope_size;
5739            }
5740
5741            let next_out_of_line = decoder.next_out_of_line();
5742            let handles_before = decoder.remaining_handles();
5743            if let Some((inlined, num_bytes, num_handles)) =
5744                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5745            {
5746                let member_inline_size =
5747                    <fidl::encoding::Vector<u8, 32> as fidl::encoding::TypeMarker>::inline_size(
5748                        decoder.context,
5749                    );
5750                if inlined != (member_inline_size <= 4) {
5751                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5752                }
5753                let inner_offset;
5754                let mut inner_depth = depth.clone();
5755                if inlined {
5756                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5757                    inner_offset = next_offset;
5758                } else {
5759                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5760                    inner_depth.increment()?;
5761                }
5762                let val_ref = self
5763                    .hashed_pd_prefix
5764                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u8, 32>, D));
5765                fidl::decode!(fidl::encoding::Vector<u8, 32>, D, val_ref, decoder, inner_offset, inner_depth)?;
5766                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5767                {
5768                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5769                }
5770                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5771                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5772                }
5773            }
5774
5775            next_offset += envelope_size;
5776
5777            // Decode the remaining unknown envelopes.
5778            while next_offset < end_offset {
5779                _next_ordinal_to_read += 1;
5780                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5781                next_offset += envelope_size;
5782            }
5783
5784            Ok(())
5785        }
5786    }
5787
5788    impl DnssdCounters {
5789        #[inline(always)]
5790        fn max_ordinal_present(&self) -> u64 {
5791            if let Some(_) = self.upstream_dns_counters {
5792                return 8;
5793            }
5794            if let Some(_) = self.resolved_by_srp {
5795                return 7;
5796            }
5797            if let Some(_) = self.other_response {
5798                return 6;
5799            }
5800            if let Some(_) = self.not_implemented_response {
5801                return 5;
5802            }
5803            if let Some(_) = self.name_error_response {
5804                return 4;
5805            }
5806            if let Some(_) = self.format_error_response {
5807                return 3;
5808            }
5809            if let Some(_) = self.server_failure_response {
5810                return 2;
5811            }
5812            if let Some(_) = self.success_response {
5813                return 1;
5814            }
5815            0
5816        }
5817    }
5818
5819    impl fidl::encoding::ValueTypeMarker for DnssdCounters {
5820        type Borrowed<'a> = &'a Self;
5821        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5822            value
5823        }
5824    }
5825
5826    unsafe impl fidl::encoding::TypeMarker for DnssdCounters {
5827        type Owned = Self;
5828
5829        #[inline(always)]
5830        fn inline_align(_context: fidl::encoding::Context) -> usize {
5831            8
5832        }
5833
5834        #[inline(always)]
5835        fn inline_size(_context: fidl::encoding::Context) -> usize {
5836            16
5837        }
5838    }
5839
5840    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<DnssdCounters, D>
5841        for &DnssdCounters
5842    {
5843        unsafe fn encode(
5844            self,
5845            encoder: &mut fidl::encoding::Encoder<'_, D>,
5846            offset: usize,
5847            mut depth: fidl::encoding::Depth,
5848        ) -> fidl::Result<()> {
5849            encoder.debug_check_bounds::<DnssdCounters>(offset);
5850            // Vector header
5851            let max_ordinal: u64 = self.max_ordinal_present();
5852            encoder.write_num(max_ordinal, offset);
5853            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
5854            // Calling encoder.out_of_line_offset(0) is not allowed.
5855            if max_ordinal == 0 {
5856                return Ok(());
5857            }
5858            depth.increment()?;
5859            let envelope_size = 8;
5860            let bytes_len = max_ordinal as usize * envelope_size;
5861            #[allow(unused_variables)]
5862            let offset = encoder.out_of_line_offset(bytes_len);
5863            let mut _prev_end_offset: usize = 0;
5864            if 1 > max_ordinal {
5865                return Ok(());
5866            }
5867
5868            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5869            // are envelope_size bytes.
5870            let cur_offset: usize = (1 - 1) * envelope_size;
5871
5872            // Zero reserved fields.
5873            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5874
5875            // Safety:
5876            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5877            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5878            //   envelope_size bytes, there is always sufficient room.
5879            fidl::encoding::encode_in_envelope_optional::<u32, D>(
5880                self.success_response
5881                    .as_ref()
5882                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
5883                encoder,
5884                offset + cur_offset,
5885                depth,
5886            )?;
5887
5888            _prev_end_offset = cur_offset + envelope_size;
5889            if 2 > max_ordinal {
5890                return Ok(());
5891            }
5892
5893            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5894            // are envelope_size bytes.
5895            let cur_offset: usize = (2 - 1) * envelope_size;
5896
5897            // Zero reserved fields.
5898            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5899
5900            // Safety:
5901            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5902            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5903            //   envelope_size bytes, there is always sufficient room.
5904            fidl::encoding::encode_in_envelope_optional::<u32, D>(
5905                self.server_failure_response
5906                    .as_ref()
5907                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
5908                encoder,
5909                offset + cur_offset,
5910                depth,
5911            )?;
5912
5913            _prev_end_offset = cur_offset + envelope_size;
5914            if 3 > max_ordinal {
5915                return Ok(());
5916            }
5917
5918            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5919            // are envelope_size bytes.
5920            let cur_offset: usize = (3 - 1) * envelope_size;
5921
5922            // Zero reserved fields.
5923            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5924
5925            // Safety:
5926            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5927            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5928            //   envelope_size bytes, there is always sufficient room.
5929            fidl::encoding::encode_in_envelope_optional::<u32, D>(
5930                self.format_error_response
5931                    .as_ref()
5932                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
5933                encoder,
5934                offset + cur_offset,
5935                depth,
5936            )?;
5937
5938            _prev_end_offset = cur_offset + envelope_size;
5939            if 4 > max_ordinal {
5940                return Ok(());
5941            }
5942
5943            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5944            // are envelope_size bytes.
5945            let cur_offset: usize = (4 - 1) * envelope_size;
5946
5947            // Zero reserved fields.
5948            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5949
5950            // Safety:
5951            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5952            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5953            //   envelope_size bytes, there is always sufficient room.
5954            fidl::encoding::encode_in_envelope_optional::<u32, D>(
5955                self.name_error_response
5956                    .as_ref()
5957                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
5958                encoder,
5959                offset + cur_offset,
5960                depth,
5961            )?;
5962
5963            _prev_end_offset = cur_offset + envelope_size;
5964            if 5 > max_ordinal {
5965                return Ok(());
5966            }
5967
5968            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5969            // are envelope_size bytes.
5970            let cur_offset: usize = (5 - 1) * envelope_size;
5971
5972            // Zero reserved fields.
5973            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5974
5975            // Safety:
5976            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5977            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5978            //   envelope_size bytes, there is always sufficient room.
5979            fidl::encoding::encode_in_envelope_optional::<u32, D>(
5980                self.not_implemented_response
5981                    .as_ref()
5982                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
5983                encoder,
5984                offset + cur_offset,
5985                depth,
5986            )?;
5987
5988            _prev_end_offset = cur_offset + envelope_size;
5989            if 6 > max_ordinal {
5990                return Ok(());
5991            }
5992
5993            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5994            // are envelope_size bytes.
5995            let cur_offset: usize = (6 - 1) * envelope_size;
5996
5997            // Zero reserved fields.
5998            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5999
6000            // Safety:
6001            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6002            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6003            //   envelope_size bytes, there is always sufficient room.
6004            fidl::encoding::encode_in_envelope_optional::<u32, D>(
6005                self.other_response.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
6006                encoder,
6007                offset + cur_offset,
6008                depth,
6009            )?;
6010
6011            _prev_end_offset = cur_offset + envelope_size;
6012            if 7 > max_ordinal {
6013                return Ok(());
6014            }
6015
6016            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6017            // are envelope_size bytes.
6018            let cur_offset: usize = (7 - 1) * envelope_size;
6019
6020            // Zero reserved fields.
6021            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6022
6023            // Safety:
6024            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6025            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6026            //   envelope_size bytes, there is always sufficient room.
6027            fidl::encoding::encode_in_envelope_optional::<u32, D>(
6028                self.resolved_by_srp.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
6029                encoder,
6030                offset + cur_offset,
6031                depth,
6032            )?;
6033
6034            _prev_end_offset = cur_offset + envelope_size;
6035            if 8 > max_ordinal {
6036                return Ok(());
6037            }
6038
6039            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6040            // are envelope_size bytes.
6041            let cur_offset: usize = (8 - 1) * envelope_size;
6042
6043            // Zero reserved fields.
6044            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6045
6046            // Safety:
6047            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6048            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6049            //   envelope_size bytes, there is always sufficient room.
6050            fidl::encoding::encode_in_envelope_optional::<UpstreamDnsCounters, D>(
6051                self.upstream_dns_counters
6052                    .as_ref()
6053                    .map(<UpstreamDnsCounters as fidl::encoding::ValueTypeMarker>::borrow),
6054                encoder,
6055                offset + cur_offset,
6056                depth,
6057            )?;
6058
6059            _prev_end_offset = cur_offset + envelope_size;
6060
6061            Ok(())
6062        }
6063    }
6064
6065    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DnssdCounters {
6066        #[inline(always)]
6067        fn new_empty() -> Self {
6068            Self::default()
6069        }
6070
6071        unsafe fn decode(
6072            &mut self,
6073            decoder: &mut fidl::encoding::Decoder<'_, D>,
6074            offset: usize,
6075            mut depth: fidl::encoding::Depth,
6076        ) -> fidl::Result<()> {
6077            decoder.debug_check_bounds::<Self>(offset);
6078            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
6079                None => return Err(fidl::Error::NotNullable),
6080                Some(len) => len,
6081            };
6082            // Calling decoder.out_of_line_offset(0) is not allowed.
6083            if len == 0 {
6084                return Ok(());
6085            };
6086            depth.increment()?;
6087            let envelope_size = 8;
6088            let bytes_len = len * envelope_size;
6089            let offset = decoder.out_of_line_offset(bytes_len)?;
6090            // Decode the envelope for each type.
6091            let mut _next_ordinal_to_read = 0;
6092            let mut next_offset = offset;
6093            let end_offset = offset + bytes_len;
6094            _next_ordinal_to_read += 1;
6095            if next_offset >= end_offset {
6096                return Ok(());
6097            }
6098
6099            // Decode unknown envelopes for gaps in ordinals.
6100            while _next_ordinal_to_read < 1 {
6101                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6102                _next_ordinal_to_read += 1;
6103                next_offset += envelope_size;
6104            }
6105
6106            let next_out_of_line = decoder.next_out_of_line();
6107            let handles_before = decoder.remaining_handles();
6108            if let Some((inlined, num_bytes, num_handles)) =
6109                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6110            {
6111                let member_inline_size =
6112                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6113                if inlined != (member_inline_size <= 4) {
6114                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6115                }
6116                let inner_offset;
6117                let mut inner_depth = depth.clone();
6118                if inlined {
6119                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6120                    inner_offset = next_offset;
6121                } else {
6122                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6123                    inner_depth.increment()?;
6124                }
6125                let val_ref = self.success_response.get_or_insert_with(|| fidl::new_empty!(u32, D));
6126                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
6127                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6128                {
6129                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6130                }
6131                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6132                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6133                }
6134            }
6135
6136            next_offset += envelope_size;
6137            _next_ordinal_to_read += 1;
6138            if next_offset >= end_offset {
6139                return Ok(());
6140            }
6141
6142            // Decode unknown envelopes for gaps in ordinals.
6143            while _next_ordinal_to_read < 2 {
6144                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6145                _next_ordinal_to_read += 1;
6146                next_offset += envelope_size;
6147            }
6148
6149            let next_out_of_line = decoder.next_out_of_line();
6150            let handles_before = decoder.remaining_handles();
6151            if let Some((inlined, num_bytes, num_handles)) =
6152                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6153            {
6154                let member_inline_size =
6155                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6156                if inlined != (member_inline_size <= 4) {
6157                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6158                }
6159                let inner_offset;
6160                let mut inner_depth = depth.clone();
6161                if inlined {
6162                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6163                    inner_offset = next_offset;
6164                } else {
6165                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6166                    inner_depth.increment()?;
6167                }
6168                let val_ref =
6169                    self.server_failure_response.get_or_insert_with(|| fidl::new_empty!(u32, D));
6170                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
6171                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6172                {
6173                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6174                }
6175                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6176                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6177                }
6178            }
6179
6180            next_offset += envelope_size;
6181            _next_ordinal_to_read += 1;
6182            if next_offset >= end_offset {
6183                return Ok(());
6184            }
6185
6186            // Decode unknown envelopes for gaps in ordinals.
6187            while _next_ordinal_to_read < 3 {
6188                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6189                _next_ordinal_to_read += 1;
6190                next_offset += envelope_size;
6191            }
6192
6193            let next_out_of_line = decoder.next_out_of_line();
6194            let handles_before = decoder.remaining_handles();
6195            if let Some((inlined, num_bytes, num_handles)) =
6196                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6197            {
6198                let member_inline_size =
6199                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6200                if inlined != (member_inline_size <= 4) {
6201                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6202                }
6203                let inner_offset;
6204                let mut inner_depth = depth.clone();
6205                if inlined {
6206                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6207                    inner_offset = next_offset;
6208                } else {
6209                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6210                    inner_depth.increment()?;
6211                }
6212                let val_ref =
6213                    self.format_error_response.get_or_insert_with(|| fidl::new_empty!(u32, D));
6214                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
6215                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6216                {
6217                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6218                }
6219                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6220                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6221                }
6222            }
6223
6224            next_offset += envelope_size;
6225            _next_ordinal_to_read += 1;
6226            if next_offset >= end_offset {
6227                return Ok(());
6228            }
6229
6230            // Decode unknown envelopes for gaps in ordinals.
6231            while _next_ordinal_to_read < 4 {
6232                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6233                _next_ordinal_to_read += 1;
6234                next_offset += envelope_size;
6235            }
6236
6237            let next_out_of_line = decoder.next_out_of_line();
6238            let handles_before = decoder.remaining_handles();
6239            if let Some((inlined, num_bytes, num_handles)) =
6240                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6241            {
6242                let member_inline_size =
6243                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6244                if inlined != (member_inline_size <= 4) {
6245                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6246                }
6247                let inner_offset;
6248                let mut inner_depth = depth.clone();
6249                if inlined {
6250                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6251                    inner_offset = next_offset;
6252                } else {
6253                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6254                    inner_depth.increment()?;
6255                }
6256                let val_ref =
6257                    self.name_error_response.get_or_insert_with(|| fidl::new_empty!(u32, D));
6258                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
6259                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6260                {
6261                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6262                }
6263                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6264                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6265                }
6266            }
6267
6268            next_offset += envelope_size;
6269            _next_ordinal_to_read += 1;
6270            if next_offset >= end_offset {
6271                return Ok(());
6272            }
6273
6274            // Decode unknown envelopes for gaps in ordinals.
6275            while _next_ordinal_to_read < 5 {
6276                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6277                _next_ordinal_to_read += 1;
6278                next_offset += envelope_size;
6279            }
6280
6281            let next_out_of_line = decoder.next_out_of_line();
6282            let handles_before = decoder.remaining_handles();
6283            if let Some((inlined, num_bytes, num_handles)) =
6284                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6285            {
6286                let member_inline_size =
6287                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6288                if inlined != (member_inline_size <= 4) {
6289                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6290                }
6291                let inner_offset;
6292                let mut inner_depth = depth.clone();
6293                if inlined {
6294                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6295                    inner_offset = next_offset;
6296                } else {
6297                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6298                    inner_depth.increment()?;
6299                }
6300                let val_ref =
6301                    self.not_implemented_response.get_or_insert_with(|| fidl::new_empty!(u32, D));
6302                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
6303                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6304                {
6305                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6306                }
6307                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6308                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6309                }
6310            }
6311
6312            next_offset += envelope_size;
6313            _next_ordinal_to_read += 1;
6314            if next_offset >= end_offset {
6315                return Ok(());
6316            }
6317
6318            // Decode unknown envelopes for gaps in ordinals.
6319            while _next_ordinal_to_read < 6 {
6320                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6321                _next_ordinal_to_read += 1;
6322                next_offset += envelope_size;
6323            }
6324
6325            let next_out_of_line = decoder.next_out_of_line();
6326            let handles_before = decoder.remaining_handles();
6327            if let Some((inlined, num_bytes, num_handles)) =
6328                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6329            {
6330                let member_inline_size =
6331                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6332                if inlined != (member_inline_size <= 4) {
6333                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6334                }
6335                let inner_offset;
6336                let mut inner_depth = depth.clone();
6337                if inlined {
6338                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6339                    inner_offset = next_offset;
6340                } else {
6341                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6342                    inner_depth.increment()?;
6343                }
6344                let val_ref = self.other_response.get_or_insert_with(|| fidl::new_empty!(u32, D));
6345                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
6346                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6347                {
6348                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6349                }
6350                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6351                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6352                }
6353            }
6354
6355            next_offset += envelope_size;
6356            _next_ordinal_to_read += 1;
6357            if next_offset >= end_offset {
6358                return Ok(());
6359            }
6360
6361            // Decode unknown envelopes for gaps in ordinals.
6362            while _next_ordinal_to_read < 7 {
6363                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6364                _next_ordinal_to_read += 1;
6365                next_offset += envelope_size;
6366            }
6367
6368            let next_out_of_line = decoder.next_out_of_line();
6369            let handles_before = decoder.remaining_handles();
6370            if let Some((inlined, num_bytes, num_handles)) =
6371                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6372            {
6373                let member_inline_size =
6374                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6375                if inlined != (member_inline_size <= 4) {
6376                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6377                }
6378                let inner_offset;
6379                let mut inner_depth = depth.clone();
6380                if inlined {
6381                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6382                    inner_offset = next_offset;
6383                } else {
6384                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6385                    inner_depth.increment()?;
6386                }
6387                let val_ref = self.resolved_by_srp.get_or_insert_with(|| fidl::new_empty!(u32, D));
6388                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
6389                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6390                {
6391                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6392                }
6393                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6394                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6395                }
6396            }
6397
6398            next_offset += envelope_size;
6399            _next_ordinal_to_read += 1;
6400            if next_offset >= end_offset {
6401                return Ok(());
6402            }
6403
6404            // Decode unknown envelopes for gaps in ordinals.
6405            while _next_ordinal_to_read < 8 {
6406                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6407                _next_ordinal_to_read += 1;
6408                next_offset += envelope_size;
6409            }
6410
6411            let next_out_of_line = decoder.next_out_of_line();
6412            let handles_before = decoder.remaining_handles();
6413            if let Some((inlined, num_bytes, num_handles)) =
6414                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6415            {
6416                let member_inline_size =
6417                    <UpstreamDnsCounters as fidl::encoding::TypeMarker>::inline_size(
6418                        decoder.context,
6419                    );
6420                if inlined != (member_inline_size <= 4) {
6421                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6422                }
6423                let inner_offset;
6424                let mut inner_depth = depth.clone();
6425                if inlined {
6426                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6427                    inner_offset = next_offset;
6428                } else {
6429                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6430                    inner_depth.increment()?;
6431                }
6432                let val_ref = self
6433                    .upstream_dns_counters
6434                    .get_or_insert_with(|| fidl::new_empty!(UpstreamDnsCounters, D));
6435                fidl::decode!(UpstreamDnsCounters, D, val_ref, decoder, inner_offset, inner_depth)?;
6436                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6437                {
6438                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6439                }
6440                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6441                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6442                }
6443            }
6444
6445            next_offset += envelope_size;
6446
6447            // Decode the remaining unknown envelopes.
6448            while next_offset < end_offset {
6449                _next_ordinal_to_read += 1;
6450                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6451                next_offset += envelope_size;
6452            }
6453
6454            Ok(())
6455        }
6456    }
6457
6458    impl ExternalRoute {
6459        #[inline(always)]
6460        fn max_ordinal_present(&self) -> u64 {
6461            if let Some(_) = self.stable {
6462                return 3;
6463            }
6464            if let Some(_) = self.route_preference {
6465                return 2;
6466            }
6467            if let Some(_) = self.subnet {
6468                return 1;
6469            }
6470            0
6471        }
6472    }
6473
6474    impl fidl::encoding::ValueTypeMarker for ExternalRoute {
6475        type Borrowed<'a> = &'a Self;
6476        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
6477            value
6478        }
6479    }
6480
6481    unsafe impl fidl::encoding::TypeMarker for ExternalRoute {
6482        type Owned = Self;
6483
6484        #[inline(always)]
6485        fn inline_align(_context: fidl::encoding::Context) -> usize {
6486            8
6487        }
6488
6489        #[inline(always)]
6490        fn inline_size(_context: fidl::encoding::Context) -> usize {
6491            16
6492        }
6493    }
6494
6495    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<ExternalRoute, D>
6496        for &ExternalRoute
6497    {
6498        unsafe fn encode(
6499            self,
6500            encoder: &mut fidl::encoding::Encoder<'_, D>,
6501            offset: usize,
6502            mut depth: fidl::encoding::Depth,
6503        ) -> fidl::Result<()> {
6504            encoder.debug_check_bounds::<ExternalRoute>(offset);
6505            // Vector header
6506            let max_ordinal: u64 = self.max_ordinal_present();
6507            encoder.write_num(max_ordinal, offset);
6508            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
6509            // Calling encoder.out_of_line_offset(0) is not allowed.
6510            if max_ordinal == 0 {
6511                return Ok(());
6512            }
6513            depth.increment()?;
6514            let envelope_size = 8;
6515            let bytes_len = max_ordinal as usize * envelope_size;
6516            #[allow(unused_variables)]
6517            let offset = encoder.out_of_line_offset(bytes_len);
6518            let mut _prev_end_offset: usize = 0;
6519            if 1 > max_ordinal {
6520                return Ok(());
6521            }
6522
6523            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6524            // are envelope_size bytes.
6525            let cur_offset: usize = (1 - 1) * envelope_size;
6526
6527            // Zero reserved fields.
6528            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6529
6530            // Safety:
6531            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6532            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6533            //   envelope_size bytes, there is always sufficient room.
6534            fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_net__common::Ipv6AddressWithPrefix, D>(
6535            self.subnet.as_ref().map(<fidl_fuchsia_net__common::Ipv6AddressWithPrefix as fidl::encoding::ValueTypeMarker>::borrow),
6536            encoder, offset + cur_offset, depth
6537        )?;
6538
6539            _prev_end_offset = cur_offset + envelope_size;
6540            if 2 > max_ordinal {
6541                return Ok(());
6542            }
6543
6544            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6545            // are envelope_size bytes.
6546            let cur_offset: usize = (2 - 1) * envelope_size;
6547
6548            // Zero reserved fields.
6549            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6550
6551            // Safety:
6552            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6553            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6554            //   envelope_size bytes, there is always sufficient room.
6555            fidl::encoding::encode_in_envelope_optional::<RoutePreference, D>(
6556                self.route_preference
6557                    .as_ref()
6558                    .map(<RoutePreference as fidl::encoding::ValueTypeMarker>::borrow),
6559                encoder,
6560                offset + cur_offset,
6561                depth,
6562            )?;
6563
6564            _prev_end_offset = cur_offset + envelope_size;
6565            if 3 > max_ordinal {
6566                return Ok(());
6567            }
6568
6569            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6570            // are envelope_size bytes.
6571            let cur_offset: usize = (3 - 1) * envelope_size;
6572
6573            // Zero reserved fields.
6574            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6575
6576            // Safety:
6577            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6578            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6579            //   envelope_size bytes, there is always sufficient room.
6580            fidl::encoding::encode_in_envelope_optional::<bool, D>(
6581                self.stable.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
6582                encoder,
6583                offset + cur_offset,
6584                depth,
6585            )?;
6586
6587            _prev_end_offset = cur_offset + envelope_size;
6588
6589            Ok(())
6590        }
6591    }
6592
6593    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ExternalRoute {
6594        #[inline(always)]
6595        fn new_empty() -> Self {
6596            Self::default()
6597        }
6598
6599        unsafe fn decode(
6600            &mut self,
6601            decoder: &mut fidl::encoding::Decoder<'_, D>,
6602            offset: usize,
6603            mut depth: fidl::encoding::Depth,
6604        ) -> fidl::Result<()> {
6605            decoder.debug_check_bounds::<Self>(offset);
6606            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
6607                None => return Err(fidl::Error::NotNullable),
6608                Some(len) => len,
6609            };
6610            // Calling decoder.out_of_line_offset(0) is not allowed.
6611            if len == 0 {
6612                return Ok(());
6613            };
6614            depth.increment()?;
6615            let envelope_size = 8;
6616            let bytes_len = len * envelope_size;
6617            let offset = decoder.out_of_line_offset(bytes_len)?;
6618            // Decode the envelope for each type.
6619            let mut _next_ordinal_to_read = 0;
6620            let mut next_offset = offset;
6621            let end_offset = offset + bytes_len;
6622            _next_ordinal_to_read += 1;
6623            if next_offset >= end_offset {
6624                return Ok(());
6625            }
6626
6627            // Decode unknown envelopes for gaps in ordinals.
6628            while _next_ordinal_to_read < 1 {
6629                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6630                _next_ordinal_to_read += 1;
6631                next_offset += envelope_size;
6632            }
6633
6634            let next_out_of_line = decoder.next_out_of_line();
6635            let handles_before = decoder.remaining_handles();
6636            if let Some((inlined, num_bytes, num_handles)) =
6637                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6638            {
6639                let member_inline_size = <fidl_fuchsia_net__common::Ipv6AddressWithPrefix as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6640                if inlined != (member_inline_size <= 4) {
6641                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6642                }
6643                let inner_offset;
6644                let mut inner_depth = depth.clone();
6645                if inlined {
6646                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6647                    inner_offset = next_offset;
6648                } else {
6649                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6650                    inner_depth.increment()?;
6651                }
6652                let val_ref = self.subnet.get_or_insert_with(|| {
6653                    fidl::new_empty!(fidl_fuchsia_net__common::Ipv6AddressWithPrefix, D)
6654                });
6655                fidl::decode!(
6656                    fidl_fuchsia_net__common::Ipv6AddressWithPrefix,
6657                    D,
6658                    val_ref,
6659                    decoder,
6660                    inner_offset,
6661                    inner_depth
6662                )?;
6663                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6664                {
6665                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6666                }
6667                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6668                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6669                }
6670            }
6671
6672            next_offset += envelope_size;
6673            _next_ordinal_to_read += 1;
6674            if next_offset >= end_offset {
6675                return Ok(());
6676            }
6677
6678            // Decode unknown envelopes for gaps in ordinals.
6679            while _next_ordinal_to_read < 2 {
6680                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6681                _next_ordinal_to_read += 1;
6682                next_offset += envelope_size;
6683            }
6684
6685            let next_out_of_line = decoder.next_out_of_line();
6686            let handles_before = decoder.remaining_handles();
6687            if let Some((inlined, num_bytes, num_handles)) =
6688                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6689            {
6690                let member_inline_size =
6691                    <RoutePreference as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6692                if inlined != (member_inline_size <= 4) {
6693                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6694                }
6695                let inner_offset;
6696                let mut inner_depth = depth.clone();
6697                if inlined {
6698                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6699                    inner_offset = next_offset;
6700                } else {
6701                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6702                    inner_depth.increment()?;
6703                }
6704                let val_ref = self
6705                    .route_preference
6706                    .get_or_insert_with(|| fidl::new_empty!(RoutePreference, D));
6707                fidl::decode!(RoutePreference, D, val_ref, decoder, inner_offset, inner_depth)?;
6708                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6709                {
6710                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6711                }
6712                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6713                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6714                }
6715            }
6716
6717            next_offset += envelope_size;
6718            _next_ordinal_to_read += 1;
6719            if next_offset >= end_offset {
6720                return Ok(());
6721            }
6722
6723            // Decode unknown envelopes for gaps in ordinals.
6724            while _next_ordinal_to_read < 3 {
6725                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6726                _next_ordinal_to_read += 1;
6727                next_offset += envelope_size;
6728            }
6729
6730            let next_out_of_line = decoder.next_out_of_line();
6731            let handles_before = decoder.remaining_handles();
6732            if let Some((inlined, num_bytes, num_handles)) =
6733                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6734            {
6735                let member_inline_size =
6736                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6737                if inlined != (member_inline_size <= 4) {
6738                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6739                }
6740                let inner_offset;
6741                let mut inner_depth = depth.clone();
6742                if inlined {
6743                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6744                    inner_offset = next_offset;
6745                } else {
6746                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6747                    inner_depth.increment()?;
6748                }
6749                let val_ref = self.stable.get_or_insert_with(|| fidl::new_empty!(bool, D));
6750                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
6751                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6752                {
6753                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6754                }
6755                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6756                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6757                }
6758            }
6759
6760            next_offset += envelope_size;
6761
6762            // Decode the remaining unknown envelopes.
6763            while next_offset < end_offset {
6764                _next_ordinal_to_read += 1;
6765                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6766                next_offset += envelope_size;
6767            }
6768
6769            Ok(())
6770        }
6771    }
6772
6773    impl JoinerCommissioningParams {
6774        #[inline(always)]
6775        fn max_ordinal_present(&self) -> u64 {
6776            if let Some(_) = self.vendor_data_string {
6777                return 6;
6778            }
6779            if let Some(_) = self.vendor_sw_version {
6780                return 5;
6781            }
6782            if let Some(_) = self.vendor_model {
6783                return 4;
6784            }
6785            if let Some(_) = self.vendor_name {
6786                return 3;
6787            }
6788            if let Some(_) = self.provisioning_url {
6789                return 2;
6790            }
6791            if let Some(_) = self.pskd {
6792                return 1;
6793            }
6794            0
6795        }
6796    }
6797
6798    impl fidl::encoding::ValueTypeMarker for JoinerCommissioningParams {
6799        type Borrowed<'a> = &'a Self;
6800        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
6801            value
6802        }
6803    }
6804
6805    unsafe impl fidl::encoding::TypeMarker for JoinerCommissioningParams {
6806        type Owned = Self;
6807
6808        #[inline(always)]
6809        fn inline_align(_context: fidl::encoding::Context) -> usize {
6810            8
6811        }
6812
6813        #[inline(always)]
6814        fn inline_size(_context: fidl::encoding::Context) -> usize {
6815            16
6816        }
6817    }
6818
6819    unsafe impl<D: fidl::encoding::ResourceDialect>
6820        fidl::encoding::Encode<JoinerCommissioningParams, D> for &JoinerCommissioningParams
6821    {
6822        unsafe fn encode(
6823            self,
6824            encoder: &mut fidl::encoding::Encoder<'_, D>,
6825            offset: usize,
6826            mut depth: fidl::encoding::Depth,
6827        ) -> fidl::Result<()> {
6828            encoder.debug_check_bounds::<JoinerCommissioningParams>(offset);
6829            // Vector header
6830            let max_ordinal: u64 = self.max_ordinal_present();
6831            encoder.write_num(max_ordinal, offset);
6832            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
6833            // Calling encoder.out_of_line_offset(0) is not allowed.
6834            if max_ordinal == 0 {
6835                return Ok(());
6836            }
6837            depth.increment()?;
6838            let envelope_size = 8;
6839            let bytes_len = max_ordinal as usize * envelope_size;
6840            #[allow(unused_variables)]
6841            let offset = encoder.out_of_line_offset(bytes_len);
6842            let mut _prev_end_offset: usize = 0;
6843            if 1 > max_ordinal {
6844                return Ok(());
6845            }
6846
6847            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6848            // are envelope_size bytes.
6849            let cur_offset: usize = (1 - 1) * envelope_size;
6850
6851            // Zero reserved fields.
6852            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6853
6854            // Safety:
6855            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6856            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6857            //   envelope_size bytes, there is always sufficient room.
6858            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<32>, D>(
6859                self.pskd.as_ref().map(
6860                    <fidl::encoding::BoundedString<32> as fidl::encoding::ValueTypeMarker>::borrow,
6861                ),
6862                encoder,
6863                offset + cur_offset,
6864                depth,
6865            )?;
6866
6867            _prev_end_offset = cur_offset + envelope_size;
6868            if 2 > max_ordinal {
6869                return Ok(());
6870            }
6871
6872            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6873            // are envelope_size bytes.
6874            let cur_offset: usize = (2 - 1) * envelope_size;
6875
6876            // Zero reserved fields.
6877            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6878
6879            // Safety:
6880            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6881            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6882            //   envelope_size bytes, there is always sufficient room.
6883            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<64>, D>(
6884                self.provisioning_url.as_ref().map(
6885                    <fidl::encoding::BoundedString<64> as fidl::encoding::ValueTypeMarker>::borrow,
6886                ),
6887                encoder,
6888                offset + cur_offset,
6889                depth,
6890            )?;
6891
6892            _prev_end_offset = cur_offset + envelope_size;
6893            if 3 > max_ordinal {
6894                return Ok(());
6895            }
6896
6897            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6898            // are envelope_size bytes.
6899            let cur_offset: usize = (3 - 1) * envelope_size;
6900
6901            // Zero reserved fields.
6902            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6903
6904            // Safety:
6905            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6906            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6907            //   envelope_size bytes, there is always sufficient room.
6908            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<32>, D>(
6909                self.vendor_name.as_ref().map(
6910                    <fidl::encoding::BoundedString<32> as fidl::encoding::ValueTypeMarker>::borrow,
6911                ),
6912                encoder,
6913                offset + cur_offset,
6914                depth,
6915            )?;
6916
6917            _prev_end_offset = cur_offset + envelope_size;
6918            if 4 > max_ordinal {
6919                return Ok(());
6920            }
6921
6922            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6923            // are envelope_size bytes.
6924            let cur_offset: usize = (4 - 1) * envelope_size;
6925
6926            // Zero reserved fields.
6927            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6928
6929            // Safety:
6930            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6931            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6932            //   envelope_size bytes, there is always sufficient room.
6933            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<32>, D>(
6934                self.vendor_model.as_ref().map(
6935                    <fidl::encoding::BoundedString<32> as fidl::encoding::ValueTypeMarker>::borrow,
6936                ),
6937                encoder,
6938                offset + cur_offset,
6939                depth,
6940            )?;
6941
6942            _prev_end_offset = cur_offset + envelope_size;
6943            if 5 > max_ordinal {
6944                return Ok(());
6945            }
6946
6947            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6948            // are envelope_size bytes.
6949            let cur_offset: usize = (5 - 1) * envelope_size;
6950
6951            // Zero reserved fields.
6952            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6953
6954            // Safety:
6955            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6956            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6957            //   envelope_size bytes, there is always sufficient room.
6958            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<16>, D>(
6959                self.vendor_sw_version.as_ref().map(
6960                    <fidl::encoding::BoundedString<16> as fidl::encoding::ValueTypeMarker>::borrow,
6961                ),
6962                encoder,
6963                offset + cur_offset,
6964                depth,
6965            )?;
6966
6967            _prev_end_offset = cur_offset + envelope_size;
6968            if 6 > max_ordinal {
6969                return Ok(());
6970            }
6971
6972            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6973            // are envelope_size bytes.
6974            let cur_offset: usize = (6 - 1) * envelope_size;
6975
6976            // Zero reserved fields.
6977            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6978
6979            // Safety:
6980            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6981            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6982            //   envelope_size bytes, there is always sufficient room.
6983            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<64>, D>(
6984                self.vendor_data_string.as_ref().map(
6985                    <fidl::encoding::BoundedString<64> as fidl::encoding::ValueTypeMarker>::borrow,
6986                ),
6987                encoder,
6988                offset + cur_offset,
6989                depth,
6990            )?;
6991
6992            _prev_end_offset = cur_offset + envelope_size;
6993
6994            Ok(())
6995        }
6996    }
6997
6998    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
6999        for JoinerCommissioningParams
7000    {
7001        #[inline(always)]
7002        fn new_empty() -> Self {
7003            Self::default()
7004        }
7005
7006        unsafe fn decode(
7007            &mut self,
7008            decoder: &mut fidl::encoding::Decoder<'_, D>,
7009            offset: usize,
7010            mut depth: fidl::encoding::Depth,
7011        ) -> fidl::Result<()> {
7012            decoder.debug_check_bounds::<Self>(offset);
7013            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
7014                None => return Err(fidl::Error::NotNullable),
7015                Some(len) => len,
7016            };
7017            // Calling decoder.out_of_line_offset(0) is not allowed.
7018            if len == 0 {
7019                return Ok(());
7020            };
7021            depth.increment()?;
7022            let envelope_size = 8;
7023            let bytes_len = len * envelope_size;
7024            let offset = decoder.out_of_line_offset(bytes_len)?;
7025            // Decode the envelope for each type.
7026            let mut _next_ordinal_to_read = 0;
7027            let mut next_offset = offset;
7028            let end_offset = offset + bytes_len;
7029            _next_ordinal_to_read += 1;
7030            if next_offset >= end_offset {
7031                return Ok(());
7032            }
7033
7034            // Decode unknown envelopes for gaps in ordinals.
7035            while _next_ordinal_to_read < 1 {
7036                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7037                _next_ordinal_to_read += 1;
7038                next_offset += envelope_size;
7039            }
7040
7041            let next_out_of_line = decoder.next_out_of_line();
7042            let handles_before = decoder.remaining_handles();
7043            if let Some((inlined, num_bytes, num_handles)) =
7044                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7045            {
7046                let member_inline_size =
7047                    <fidl::encoding::BoundedString<32> as fidl::encoding::TypeMarker>::inline_size(
7048                        decoder.context,
7049                    );
7050                if inlined != (member_inline_size <= 4) {
7051                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7052                }
7053                let inner_offset;
7054                let mut inner_depth = depth.clone();
7055                if inlined {
7056                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7057                    inner_offset = next_offset;
7058                } else {
7059                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7060                    inner_depth.increment()?;
7061                }
7062                let val_ref = self
7063                    .pskd
7064                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<32>, D));
7065                fidl::decode!(
7066                    fidl::encoding::BoundedString<32>,
7067                    D,
7068                    val_ref,
7069                    decoder,
7070                    inner_offset,
7071                    inner_depth
7072                )?;
7073                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7074                {
7075                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7076                }
7077                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7078                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7079                }
7080            }
7081
7082            next_offset += envelope_size;
7083            _next_ordinal_to_read += 1;
7084            if next_offset >= end_offset {
7085                return Ok(());
7086            }
7087
7088            // Decode unknown envelopes for gaps in ordinals.
7089            while _next_ordinal_to_read < 2 {
7090                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7091                _next_ordinal_to_read += 1;
7092                next_offset += envelope_size;
7093            }
7094
7095            let next_out_of_line = decoder.next_out_of_line();
7096            let handles_before = decoder.remaining_handles();
7097            if let Some((inlined, num_bytes, num_handles)) =
7098                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7099            {
7100                let member_inline_size =
7101                    <fidl::encoding::BoundedString<64> as fidl::encoding::TypeMarker>::inline_size(
7102                        decoder.context,
7103                    );
7104                if inlined != (member_inline_size <= 4) {
7105                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7106                }
7107                let inner_offset;
7108                let mut inner_depth = depth.clone();
7109                if inlined {
7110                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7111                    inner_offset = next_offset;
7112                } else {
7113                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7114                    inner_depth.increment()?;
7115                }
7116                let val_ref = self
7117                    .provisioning_url
7118                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<64>, D));
7119                fidl::decode!(
7120                    fidl::encoding::BoundedString<64>,
7121                    D,
7122                    val_ref,
7123                    decoder,
7124                    inner_offset,
7125                    inner_depth
7126                )?;
7127                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7128                {
7129                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7130                }
7131                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7132                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7133                }
7134            }
7135
7136            next_offset += envelope_size;
7137            _next_ordinal_to_read += 1;
7138            if next_offset >= end_offset {
7139                return Ok(());
7140            }
7141
7142            // Decode unknown envelopes for gaps in ordinals.
7143            while _next_ordinal_to_read < 3 {
7144                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7145                _next_ordinal_to_read += 1;
7146                next_offset += envelope_size;
7147            }
7148
7149            let next_out_of_line = decoder.next_out_of_line();
7150            let handles_before = decoder.remaining_handles();
7151            if let Some((inlined, num_bytes, num_handles)) =
7152                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7153            {
7154                let member_inline_size =
7155                    <fidl::encoding::BoundedString<32> as fidl::encoding::TypeMarker>::inline_size(
7156                        decoder.context,
7157                    );
7158                if inlined != (member_inline_size <= 4) {
7159                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7160                }
7161                let inner_offset;
7162                let mut inner_depth = depth.clone();
7163                if inlined {
7164                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7165                    inner_offset = next_offset;
7166                } else {
7167                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7168                    inner_depth.increment()?;
7169                }
7170                let val_ref = self
7171                    .vendor_name
7172                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<32>, D));
7173                fidl::decode!(
7174                    fidl::encoding::BoundedString<32>,
7175                    D,
7176                    val_ref,
7177                    decoder,
7178                    inner_offset,
7179                    inner_depth
7180                )?;
7181                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7182                {
7183                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7184                }
7185                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7186                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7187                }
7188            }
7189
7190            next_offset += envelope_size;
7191            _next_ordinal_to_read += 1;
7192            if next_offset >= end_offset {
7193                return Ok(());
7194            }
7195
7196            // Decode unknown envelopes for gaps in ordinals.
7197            while _next_ordinal_to_read < 4 {
7198                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7199                _next_ordinal_to_read += 1;
7200                next_offset += envelope_size;
7201            }
7202
7203            let next_out_of_line = decoder.next_out_of_line();
7204            let handles_before = decoder.remaining_handles();
7205            if let Some((inlined, num_bytes, num_handles)) =
7206                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7207            {
7208                let member_inline_size =
7209                    <fidl::encoding::BoundedString<32> as fidl::encoding::TypeMarker>::inline_size(
7210                        decoder.context,
7211                    );
7212                if inlined != (member_inline_size <= 4) {
7213                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7214                }
7215                let inner_offset;
7216                let mut inner_depth = depth.clone();
7217                if inlined {
7218                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7219                    inner_offset = next_offset;
7220                } else {
7221                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7222                    inner_depth.increment()?;
7223                }
7224                let val_ref = self
7225                    .vendor_model
7226                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<32>, D));
7227                fidl::decode!(
7228                    fidl::encoding::BoundedString<32>,
7229                    D,
7230                    val_ref,
7231                    decoder,
7232                    inner_offset,
7233                    inner_depth
7234                )?;
7235                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7236                {
7237                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7238                }
7239                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7240                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7241                }
7242            }
7243
7244            next_offset += envelope_size;
7245            _next_ordinal_to_read += 1;
7246            if next_offset >= end_offset {
7247                return Ok(());
7248            }
7249
7250            // Decode unknown envelopes for gaps in ordinals.
7251            while _next_ordinal_to_read < 5 {
7252                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7253                _next_ordinal_to_read += 1;
7254                next_offset += envelope_size;
7255            }
7256
7257            let next_out_of_line = decoder.next_out_of_line();
7258            let handles_before = decoder.remaining_handles();
7259            if let Some((inlined, num_bytes, num_handles)) =
7260                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7261            {
7262                let member_inline_size =
7263                    <fidl::encoding::BoundedString<16> as fidl::encoding::TypeMarker>::inline_size(
7264                        decoder.context,
7265                    );
7266                if inlined != (member_inline_size <= 4) {
7267                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7268                }
7269                let inner_offset;
7270                let mut inner_depth = depth.clone();
7271                if inlined {
7272                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7273                    inner_offset = next_offset;
7274                } else {
7275                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7276                    inner_depth.increment()?;
7277                }
7278                let val_ref = self
7279                    .vendor_sw_version
7280                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<16>, D));
7281                fidl::decode!(
7282                    fidl::encoding::BoundedString<16>,
7283                    D,
7284                    val_ref,
7285                    decoder,
7286                    inner_offset,
7287                    inner_depth
7288                )?;
7289                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7290                {
7291                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7292                }
7293                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7294                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7295                }
7296            }
7297
7298            next_offset += envelope_size;
7299            _next_ordinal_to_read += 1;
7300            if next_offset >= end_offset {
7301                return Ok(());
7302            }
7303
7304            // Decode unknown envelopes for gaps in ordinals.
7305            while _next_ordinal_to_read < 6 {
7306                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7307                _next_ordinal_to_read += 1;
7308                next_offset += envelope_size;
7309            }
7310
7311            let next_out_of_line = decoder.next_out_of_line();
7312            let handles_before = decoder.remaining_handles();
7313            if let Some((inlined, num_bytes, num_handles)) =
7314                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7315            {
7316                let member_inline_size =
7317                    <fidl::encoding::BoundedString<64> as fidl::encoding::TypeMarker>::inline_size(
7318                        decoder.context,
7319                    );
7320                if inlined != (member_inline_size <= 4) {
7321                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7322                }
7323                let inner_offset;
7324                let mut inner_depth = depth.clone();
7325                if inlined {
7326                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7327                    inner_offset = next_offset;
7328                } else {
7329                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7330                    inner_depth.increment()?;
7331                }
7332                let val_ref = self
7333                    .vendor_data_string
7334                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<64>, D));
7335                fidl::decode!(
7336                    fidl::encoding::BoundedString<64>,
7337                    D,
7338                    val_ref,
7339                    decoder,
7340                    inner_offset,
7341                    inner_depth
7342                )?;
7343                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7344                {
7345                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7346                }
7347                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7348                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7349                }
7350            }
7351
7352            next_offset += envelope_size;
7353
7354            // Decode the remaining unknown envelopes.
7355            while next_offset < end_offset {
7356                _next_ordinal_to_read += 1;
7357                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7358                next_offset += envelope_size;
7359            }
7360
7361            Ok(())
7362        }
7363    }
7364
7365    impl LeaderData {
7366        #[inline(always)]
7367        fn max_ordinal_present(&self) -> u64 {
7368            if let Some(_) = self.router_id {
7369                return 5;
7370            }
7371            if let Some(_) = self.stable_network_data_version {
7372                return 4;
7373            }
7374            if let Some(_) = self.network_data_version {
7375                return 3;
7376            }
7377            if let Some(_) = self.weight {
7378                return 2;
7379            }
7380            if let Some(_) = self.partition_id {
7381                return 1;
7382            }
7383            0
7384        }
7385    }
7386
7387    impl fidl::encoding::ValueTypeMarker for LeaderData {
7388        type Borrowed<'a> = &'a Self;
7389        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
7390            value
7391        }
7392    }
7393
7394    unsafe impl fidl::encoding::TypeMarker for LeaderData {
7395        type Owned = Self;
7396
7397        #[inline(always)]
7398        fn inline_align(_context: fidl::encoding::Context) -> usize {
7399            8
7400        }
7401
7402        #[inline(always)]
7403        fn inline_size(_context: fidl::encoding::Context) -> usize {
7404            16
7405        }
7406    }
7407
7408    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<LeaderData, D>
7409        for &LeaderData
7410    {
7411        unsafe fn encode(
7412            self,
7413            encoder: &mut fidl::encoding::Encoder<'_, D>,
7414            offset: usize,
7415            mut depth: fidl::encoding::Depth,
7416        ) -> fidl::Result<()> {
7417            encoder.debug_check_bounds::<LeaderData>(offset);
7418            // Vector header
7419            let max_ordinal: u64 = self.max_ordinal_present();
7420            encoder.write_num(max_ordinal, offset);
7421            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
7422            // Calling encoder.out_of_line_offset(0) is not allowed.
7423            if max_ordinal == 0 {
7424                return Ok(());
7425            }
7426            depth.increment()?;
7427            let envelope_size = 8;
7428            let bytes_len = max_ordinal as usize * envelope_size;
7429            #[allow(unused_variables)]
7430            let offset = encoder.out_of_line_offset(bytes_len);
7431            let mut _prev_end_offset: usize = 0;
7432            if 1 > max_ordinal {
7433                return Ok(());
7434            }
7435
7436            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7437            // are envelope_size bytes.
7438            let cur_offset: usize = (1 - 1) * envelope_size;
7439
7440            // Zero reserved fields.
7441            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7442
7443            // Safety:
7444            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7445            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7446            //   envelope_size bytes, there is always sufficient room.
7447            fidl::encoding::encode_in_envelope_optional::<u32, D>(
7448                self.partition_id.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
7449                encoder,
7450                offset + cur_offset,
7451                depth,
7452            )?;
7453
7454            _prev_end_offset = cur_offset + envelope_size;
7455            if 2 > max_ordinal {
7456                return Ok(());
7457            }
7458
7459            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7460            // are envelope_size bytes.
7461            let cur_offset: usize = (2 - 1) * envelope_size;
7462
7463            // Zero reserved fields.
7464            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7465
7466            // Safety:
7467            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7468            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7469            //   envelope_size bytes, there is always sufficient room.
7470            fidl::encoding::encode_in_envelope_optional::<u8, D>(
7471                self.weight.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
7472                encoder,
7473                offset + cur_offset,
7474                depth,
7475            )?;
7476
7477            _prev_end_offset = cur_offset + envelope_size;
7478            if 3 > max_ordinal {
7479                return Ok(());
7480            }
7481
7482            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7483            // are envelope_size bytes.
7484            let cur_offset: usize = (3 - 1) * envelope_size;
7485
7486            // Zero reserved fields.
7487            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7488
7489            // Safety:
7490            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7491            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7492            //   envelope_size bytes, there is always sufficient room.
7493            fidl::encoding::encode_in_envelope_optional::<u8, D>(
7494                self.network_data_version
7495                    .as_ref()
7496                    .map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
7497                encoder,
7498                offset + cur_offset,
7499                depth,
7500            )?;
7501
7502            _prev_end_offset = cur_offset + envelope_size;
7503            if 4 > max_ordinal {
7504                return Ok(());
7505            }
7506
7507            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7508            // are envelope_size bytes.
7509            let cur_offset: usize = (4 - 1) * envelope_size;
7510
7511            // Zero reserved fields.
7512            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7513
7514            // Safety:
7515            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7516            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7517            //   envelope_size bytes, there is always sufficient room.
7518            fidl::encoding::encode_in_envelope_optional::<u8, D>(
7519                self.stable_network_data_version
7520                    .as_ref()
7521                    .map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
7522                encoder,
7523                offset + cur_offset,
7524                depth,
7525            )?;
7526
7527            _prev_end_offset = cur_offset + envelope_size;
7528            if 5 > max_ordinal {
7529                return Ok(());
7530            }
7531
7532            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7533            // are envelope_size bytes.
7534            let cur_offset: usize = (5 - 1) * envelope_size;
7535
7536            // Zero reserved fields.
7537            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7538
7539            // Safety:
7540            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7541            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7542            //   envelope_size bytes, there is always sufficient room.
7543            fidl::encoding::encode_in_envelope_optional::<u8, D>(
7544                self.router_id.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
7545                encoder,
7546                offset + cur_offset,
7547                depth,
7548            )?;
7549
7550            _prev_end_offset = cur_offset + envelope_size;
7551
7552            Ok(())
7553        }
7554    }
7555
7556    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for LeaderData {
7557        #[inline(always)]
7558        fn new_empty() -> Self {
7559            Self::default()
7560        }
7561
7562        unsafe fn decode(
7563            &mut self,
7564            decoder: &mut fidl::encoding::Decoder<'_, D>,
7565            offset: usize,
7566            mut depth: fidl::encoding::Depth,
7567        ) -> fidl::Result<()> {
7568            decoder.debug_check_bounds::<Self>(offset);
7569            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
7570                None => return Err(fidl::Error::NotNullable),
7571                Some(len) => len,
7572            };
7573            // Calling decoder.out_of_line_offset(0) is not allowed.
7574            if len == 0 {
7575                return Ok(());
7576            };
7577            depth.increment()?;
7578            let envelope_size = 8;
7579            let bytes_len = len * envelope_size;
7580            let offset = decoder.out_of_line_offset(bytes_len)?;
7581            // Decode the envelope for each type.
7582            let mut _next_ordinal_to_read = 0;
7583            let mut next_offset = offset;
7584            let end_offset = offset + bytes_len;
7585            _next_ordinal_to_read += 1;
7586            if next_offset >= end_offset {
7587                return Ok(());
7588            }
7589
7590            // Decode unknown envelopes for gaps in ordinals.
7591            while _next_ordinal_to_read < 1 {
7592                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7593                _next_ordinal_to_read += 1;
7594                next_offset += envelope_size;
7595            }
7596
7597            let next_out_of_line = decoder.next_out_of_line();
7598            let handles_before = decoder.remaining_handles();
7599            if let Some((inlined, num_bytes, num_handles)) =
7600                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7601            {
7602                let member_inline_size =
7603                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7604                if inlined != (member_inline_size <= 4) {
7605                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7606                }
7607                let inner_offset;
7608                let mut inner_depth = depth.clone();
7609                if inlined {
7610                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7611                    inner_offset = next_offset;
7612                } else {
7613                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7614                    inner_depth.increment()?;
7615                }
7616                let val_ref = self.partition_id.get_or_insert_with(|| fidl::new_empty!(u32, D));
7617                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
7618                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7619                {
7620                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7621                }
7622                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7623                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7624                }
7625            }
7626
7627            next_offset += envelope_size;
7628            _next_ordinal_to_read += 1;
7629            if next_offset >= end_offset {
7630                return Ok(());
7631            }
7632
7633            // Decode unknown envelopes for gaps in ordinals.
7634            while _next_ordinal_to_read < 2 {
7635                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7636                _next_ordinal_to_read += 1;
7637                next_offset += envelope_size;
7638            }
7639
7640            let next_out_of_line = decoder.next_out_of_line();
7641            let handles_before = decoder.remaining_handles();
7642            if let Some((inlined, num_bytes, num_handles)) =
7643                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7644            {
7645                let member_inline_size =
7646                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7647                if inlined != (member_inline_size <= 4) {
7648                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7649                }
7650                let inner_offset;
7651                let mut inner_depth = depth.clone();
7652                if inlined {
7653                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7654                    inner_offset = next_offset;
7655                } else {
7656                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7657                    inner_depth.increment()?;
7658                }
7659                let val_ref = self.weight.get_or_insert_with(|| fidl::new_empty!(u8, D));
7660                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
7661                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7662                {
7663                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7664                }
7665                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7666                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7667                }
7668            }
7669
7670            next_offset += envelope_size;
7671            _next_ordinal_to_read += 1;
7672            if next_offset >= end_offset {
7673                return Ok(());
7674            }
7675
7676            // Decode unknown envelopes for gaps in ordinals.
7677            while _next_ordinal_to_read < 3 {
7678                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7679                _next_ordinal_to_read += 1;
7680                next_offset += envelope_size;
7681            }
7682
7683            let next_out_of_line = decoder.next_out_of_line();
7684            let handles_before = decoder.remaining_handles();
7685            if let Some((inlined, num_bytes, num_handles)) =
7686                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7687            {
7688                let member_inline_size =
7689                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7690                if inlined != (member_inline_size <= 4) {
7691                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7692                }
7693                let inner_offset;
7694                let mut inner_depth = depth.clone();
7695                if inlined {
7696                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7697                    inner_offset = next_offset;
7698                } else {
7699                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7700                    inner_depth.increment()?;
7701                }
7702                let val_ref =
7703                    self.network_data_version.get_or_insert_with(|| fidl::new_empty!(u8, D));
7704                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
7705                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7706                {
7707                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7708                }
7709                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7710                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7711                }
7712            }
7713
7714            next_offset += envelope_size;
7715            _next_ordinal_to_read += 1;
7716            if next_offset >= end_offset {
7717                return Ok(());
7718            }
7719
7720            // Decode unknown envelopes for gaps in ordinals.
7721            while _next_ordinal_to_read < 4 {
7722                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7723                _next_ordinal_to_read += 1;
7724                next_offset += envelope_size;
7725            }
7726
7727            let next_out_of_line = decoder.next_out_of_line();
7728            let handles_before = decoder.remaining_handles();
7729            if let Some((inlined, num_bytes, num_handles)) =
7730                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7731            {
7732                let member_inline_size =
7733                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7734                if inlined != (member_inline_size <= 4) {
7735                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7736                }
7737                let inner_offset;
7738                let mut inner_depth = depth.clone();
7739                if inlined {
7740                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7741                    inner_offset = next_offset;
7742                } else {
7743                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7744                    inner_depth.increment()?;
7745                }
7746                let val_ref =
7747                    self.stable_network_data_version.get_or_insert_with(|| fidl::new_empty!(u8, D));
7748                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
7749                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7750                {
7751                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7752                }
7753                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7754                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7755                }
7756            }
7757
7758            next_offset += envelope_size;
7759            _next_ordinal_to_read += 1;
7760            if next_offset >= end_offset {
7761                return Ok(());
7762            }
7763
7764            // Decode unknown envelopes for gaps in ordinals.
7765            while _next_ordinal_to_read < 5 {
7766                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7767                _next_ordinal_to_read += 1;
7768                next_offset += envelope_size;
7769            }
7770
7771            let next_out_of_line = decoder.next_out_of_line();
7772            let handles_before = decoder.remaining_handles();
7773            if let Some((inlined, num_bytes, num_handles)) =
7774                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7775            {
7776                let member_inline_size =
7777                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7778                if inlined != (member_inline_size <= 4) {
7779                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7780                }
7781                let inner_offset;
7782                let mut inner_depth = depth.clone();
7783                if inlined {
7784                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7785                    inner_offset = next_offset;
7786                } else {
7787                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7788                    inner_depth.increment()?;
7789                }
7790                let val_ref = self.router_id.get_or_insert_with(|| fidl::new_empty!(u8, D));
7791                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
7792                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7793                {
7794                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7795                }
7796                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7797                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7798                }
7799            }
7800
7801            next_offset += envelope_size;
7802
7803            // Decode the remaining unknown envelopes.
7804            while next_offset < end_offset {
7805                _next_ordinal_to_read += 1;
7806                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7807                next_offset += envelope_size;
7808            }
7809
7810            Ok(())
7811        }
7812    }
7813
7814    impl LinkMetricsEntry {
7815        #[inline(always)]
7816        fn max_ordinal_present(&self) -> u64 {
7817            if let Some(_) = self.rssi {
7818                return 2;
7819            }
7820            if let Some(_) = self.link_margin {
7821                return 1;
7822            }
7823            0
7824        }
7825    }
7826
7827    impl fidl::encoding::ValueTypeMarker for LinkMetricsEntry {
7828        type Borrowed<'a> = &'a Self;
7829        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
7830            value
7831        }
7832    }
7833
7834    unsafe impl fidl::encoding::TypeMarker for LinkMetricsEntry {
7835        type Owned = Self;
7836
7837        #[inline(always)]
7838        fn inline_align(_context: fidl::encoding::Context) -> usize {
7839            8
7840        }
7841
7842        #[inline(always)]
7843        fn inline_size(_context: fidl::encoding::Context) -> usize {
7844            16
7845        }
7846    }
7847
7848    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<LinkMetricsEntry, D>
7849        for &LinkMetricsEntry
7850    {
7851        unsafe fn encode(
7852            self,
7853            encoder: &mut fidl::encoding::Encoder<'_, D>,
7854            offset: usize,
7855            mut depth: fidl::encoding::Depth,
7856        ) -> fidl::Result<()> {
7857            encoder.debug_check_bounds::<LinkMetricsEntry>(offset);
7858            // Vector header
7859            let max_ordinal: u64 = self.max_ordinal_present();
7860            encoder.write_num(max_ordinal, offset);
7861            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
7862            // Calling encoder.out_of_line_offset(0) is not allowed.
7863            if max_ordinal == 0 {
7864                return Ok(());
7865            }
7866            depth.increment()?;
7867            let envelope_size = 8;
7868            let bytes_len = max_ordinal as usize * envelope_size;
7869            #[allow(unused_variables)]
7870            let offset = encoder.out_of_line_offset(bytes_len);
7871            let mut _prev_end_offset: usize = 0;
7872            if 1 > max_ordinal {
7873                return Ok(());
7874            }
7875
7876            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7877            // are envelope_size bytes.
7878            let cur_offset: usize = (1 - 1) * envelope_size;
7879
7880            // Zero reserved fields.
7881            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7882
7883            // Safety:
7884            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7885            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7886            //   envelope_size bytes, there is always sufficient room.
7887            fidl::encoding::encode_in_envelope_optional::<u8, D>(
7888                self.link_margin.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
7889                encoder,
7890                offset + cur_offset,
7891                depth,
7892            )?;
7893
7894            _prev_end_offset = cur_offset + envelope_size;
7895            if 2 > max_ordinal {
7896                return Ok(());
7897            }
7898
7899            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7900            // are envelope_size bytes.
7901            let cur_offset: usize = (2 - 1) * envelope_size;
7902
7903            // Zero reserved fields.
7904            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7905
7906            // Safety:
7907            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7908            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7909            //   envelope_size bytes, there is always sufficient room.
7910            fidl::encoding::encode_in_envelope_optional::<i8, D>(
7911                self.rssi.as_ref().map(<i8 as fidl::encoding::ValueTypeMarker>::borrow),
7912                encoder,
7913                offset + cur_offset,
7914                depth,
7915            )?;
7916
7917            _prev_end_offset = cur_offset + envelope_size;
7918
7919            Ok(())
7920        }
7921    }
7922
7923    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for LinkMetricsEntry {
7924        #[inline(always)]
7925        fn new_empty() -> Self {
7926            Self::default()
7927        }
7928
7929        unsafe fn decode(
7930            &mut self,
7931            decoder: &mut fidl::encoding::Decoder<'_, D>,
7932            offset: usize,
7933            mut depth: fidl::encoding::Depth,
7934        ) -> fidl::Result<()> {
7935            decoder.debug_check_bounds::<Self>(offset);
7936            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
7937                None => return Err(fidl::Error::NotNullable),
7938                Some(len) => len,
7939            };
7940            // Calling decoder.out_of_line_offset(0) is not allowed.
7941            if len == 0 {
7942                return Ok(());
7943            };
7944            depth.increment()?;
7945            let envelope_size = 8;
7946            let bytes_len = len * envelope_size;
7947            let offset = decoder.out_of_line_offset(bytes_len)?;
7948            // Decode the envelope for each type.
7949            let mut _next_ordinal_to_read = 0;
7950            let mut next_offset = offset;
7951            let end_offset = offset + bytes_len;
7952            _next_ordinal_to_read += 1;
7953            if next_offset >= end_offset {
7954                return Ok(());
7955            }
7956
7957            // Decode unknown envelopes for gaps in ordinals.
7958            while _next_ordinal_to_read < 1 {
7959                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7960                _next_ordinal_to_read += 1;
7961                next_offset += envelope_size;
7962            }
7963
7964            let next_out_of_line = decoder.next_out_of_line();
7965            let handles_before = decoder.remaining_handles();
7966            if let Some((inlined, num_bytes, num_handles)) =
7967                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7968            {
7969                let member_inline_size =
7970                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7971                if inlined != (member_inline_size <= 4) {
7972                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7973                }
7974                let inner_offset;
7975                let mut inner_depth = depth.clone();
7976                if inlined {
7977                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7978                    inner_offset = next_offset;
7979                } else {
7980                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7981                    inner_depth.increment()?;
7982                }
7983                let val_ref = self.link_margin.get_or_insert_with(|| fidl::new_empty!(u8, D));
7984                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
7985                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7986                {
7987                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7988                }
7989                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7990                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7991                }
7992            }
7993
7994            next_offset += envelope_size;
7995            _next_ordinal_to_read += 1;
7996            if next_offset >= end_offset {
7997                return Ok(());
7998            }
7999
8000            // Decode unknown envelopes for gaps in ordinals.
8001            while _next_ordinal_to_read < 2 {
8002                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8003                _next_ordinal_to_read += 1;
8004                next_offset += envelope_size;
8005            }
8006
8007            let next_out_of_line = decoder.next_out_of_line();
8008            let handles_before = decoder.remaining_handles();
8009            if let Some((inlined, num_bytes, num_handles)) =
8010                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8011            {
8012                let member_inline_size =
8013                    <i8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
8014                if inlined != (member_inline_size <= 4) {
8015                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8016                }
8017                let inner_offset;
8018                let mut inner_depth = depth.clone();
8019                if inlined {
8020                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8021                    inner_offset = next_offset;
8022                } else {
8023                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8024                    inner_depth.increment()?;
8025                }
8026                let val_ref = self.rssi.get_or_insert_with(|| fidl::new_empty!(i8, D));
8027                fidl::decode!(i8, D, val_ref, decoder, inner_offset, inner_depth)?;
8028                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8029                {
8030                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8031                }
8032                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8033                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8034                }
8035            }
8036
8037            next_offset += envelope_size;
8038
8039            // Decode the remaining unknown envelopes.
8040            while next_offset < end_offset {
8041                _next_ordinal_to_read += 1;
8042                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8043                next_offset += envelope_size;
8044            }
8045
8046            Ok(())
8047        }
8048    }
8049
8050    impl Nat64ErrorCounters {
8051        #[inline(always)]
8052        fn max_ordinal_present(&self) -> u64 {
8053            if let Some(_) = self.no_mapping {
8054                return 4;
8055            }
8056            if let Some(_) = self.unsupported_protocol {
8057                return 3;
8058            }
8059            if let Some(_) = self.illegal_packet {
8060                return 2;
8061            }
8062            if let Some(_) = self.unknown {
8063                return 1;
8064            }
8065            0
8066        }
8067    }
8068
8069    impl fidl::encoding::ValueTypeMarker for Nat64ErrorCounters {
8070        type Borrowed<'a> = &'a Self;
8071        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
8072            value
8073        }
8074    }
8075
8076    unsafe impl fidl::encoding::TypeMarker for Nat64ErrorCounters {
8077        type Owned = Self;
8078
8079        #[inline(always)]
8080        fn inline_align(_context: fidl::encoding::Context) -> usize {
8081            8
8082        }
8083
8084        #[inline(always)]
8085        fn inline_size(_context: fidl::encoding::Context) -> usize {
8086            16
8087        }
8088    }
8089
8090    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Nat64ErrorCounters, D>
8091        for &Nat64ErrorCounters
8092    {
8093        unsafe fn encode(
8094            self,
8095            encoder: &mut fidl::encoding::Encoder<'_, D>,
8096            offset: usize,
8097            mut depth: fidl::encoding::Depth,
8098        ) -> fidl::Result<()> {
8099            encoder.debug_check_bounds::<Nat64ErrorCounters>(offset);
8100            // Vector header
8101            let max_ordinal: u64 = self.max_ordinal_present();
8102            encoder.write_num(max_ordinal, offset);
8103            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
8104            // Calling encoder.out_of_line_offset(0) is not allowed.
8105            if max_ordinal == 0 {
8106                return Ok(());
8107            }
8108            depth.increment()?;
8109            let envelope_size = 8;
8110            let bytes_len = max_ordinal as usize * envelope_size;
8111            #[allow(unused_variables)]
8112            let offset = encoder.out_of_line_offset(bytes_len);
8113            let mut _prev_end_offset: usize = 0;
8114            if 1 > max_ordinal {
8115                return Ok(());
8116            }
8117
8118            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8119            // are envelope_size bytes.
8120            let cur_offset: usize = (1 - 1) * envelope_size;
8121
8122            // Zero reserved fields.
8123            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8124
8125            // Safety:
8126            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8127            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8128            //   envelope_size bytes, there is always sufficient room.
8129            fidl::encoding::encode_in_envelope_optional::<Nat64PacketCounters, D>(
8130                self.unknown
8131                    .as_ref()
8132                    .map(<Nat64PacketCounters as fidl::encoding::ValueTypeMarker>::borrow),
8133                encoder,
8134                offset + cur_offset,
8135                depth,
8136            )?;
8137
8138            _prev_end_offset = cur_offset + envelope_size;
8139            if 2 > max_ordinal {
8140                return Ok(());
8141            }
8142
8143            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8144            // are envelope_size bytes.
8145            let cur_offset: usize = (2 - 1) * envelope_size;
8146
8147            // Zero reserved fields.
8148            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8149
8150            // Safety:
8151            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8152            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8153            //   envelope_size bytes, there is always sufficient room.
8154            fidl::encoding::encode_in_envelope_optional::<Nat64PacketCounters, D>(
8155                self.illegal_packet
8156                    .as_ref()
8157                    .map(<Nat64PacketCounters as fidl::encoding::ValueTypeMarker>::borrow),
8158                encoder,
8159                offset + cur_offset,
8160                depth,
8161            )?;
8162
8163            _prev_end_offset = cur_offset + envelope_size;
8164            if 3 > max_ordinal {
8165                return Ok(());
8166            }
8167
8168            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8169            // are envelope_size bytes.
8170            let cur_offset: usize = (3 - 1) * envelope_size;
8171
8172            // Zero reserved fields.
8173            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8174
8175            // Safety:
8176            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8177            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8178            //   envelope_size bytes, there is always sufficient room.
8179            fidl::encoding::encode_in_envelope_optional::<Nat64PacketCounters, D>(
8180                self.unsupported_protocol
8181                    .as_ref()
8182                    .map(<Nat64PacketCounters as fidl::encoding::ValueTypeMarker>::borrow),
8183                encoder,
8184                offset + cur_offset,
8185                depth,
8186            )?;
8187
8188            _prev_end_offset = cur_offset + envelope_size;
8189            if 4 > max_ordinal {
8190                return Ok(());
8191            }
8192
8193            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8194            // are envelope_size bytes.
8195            let cur_offset: usize = (4 - 1) * envelope_size;
8196
8197            // Zero reserved fields.
8198            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8199
8200            // Safety:
8201            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8202            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8203            //   envelope_size bytes, there is always sufficient room.
8204            fidl::encoding::encode_in_envelope_optional::<Nat64PacketCounters, D>(
8205                self.no_mapping
8206                    .as_ref()
8207                    .map(<Nat64PacketCounters as fidl::encoding::ValueTypeMarker>::borrow),
8208                encoder,
8209                offset + cur_offset,
8210                depth,
8211            )?;
8212
8213            _prev_end_offset = cur_offset + envelope_size;
8214
8215            Ok(())
8216        }
8217    }
8218
8219    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Nat64ErrorCounters {
8220        #[inline(always)]
8221        fn new_empty() -> Self {
8222            Self::default()
8223        }
8224
8225        unsafe fn decode(
8226            &mut self,
8227            decoder: &mut fidl::encoding::Decoder<'_, D>,
8228            offset: usize,
8229            mut depth: fidl::encoding::Depth,
8230        ) -> fidl::Result<()> {
8231            decoder.debug_check_bounds::<Self>(offset);
8232            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
8233                None => return Err(fidl::Error::NotNullable),
8234                Some(len) => len,
8235            };
8236            // Calling decoder.out_of_line_offset(0) is not allowed.
8237            if len == 0 {
8238                return Ok(());
8239            };
8240            depth.increment()?;
8241            let envelope_size = 8;
8242            let bytes_len = len * envelope_size;
8243            let offset = decoder.out_of_line_offset(bytes_len)?;
8244            // Decode the envelope for each type.
8245            let mut _next_ordinal_to_read = 0;
8246            let mut next_offset = offset;
8247            let end_offset = offset + bytes_len;
8248            _next_ordinal_to_read += 1;
8249            if next_offset >= end_offset {
8250                return Ok(());
8251            }
8252
8253            // Decode unknown envelopes for gaps in ordinals.
8254            while _next_ordinal_to_read < 1 {
8255                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8256                _next_ordinal_to_read += 1;
8257                next_offset += envelope_size;
8258            }
8259
8260            let next_out_of_line = decoder.next_out_of_line();
8261            let handles_before = decoder.remaining_handles();
8262            if let Some((inlined, num_bytes, num_handles)) =
8263                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8264            {
8265                let member_inline_size =
8266                    <Nat64PacketCounters as fidl::encoding::TypeMarker>::inline_size(
8267                        decoder.context,
8268                    );
8269                if inlined != (member_inline_size <= 4) {
8270                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8271                }
8272                let inner_offset;
8273                let mut inner_depth = depth.clone();
8274                if inlined {
8275                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8276                    inner_offset = next_offset;
8277                } else {
8278                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8279                    inner_depth.increment()?;
8280                }
8281                let val_ref =
8282                    self.unknown.get_or_insert_with(|| fidl::new_empty!(Nat64PacketCounters, D));
8283                fidl::decode!(Nat64PacketCounters, D, val_ref, decoder, inner_offset, inner_depth)?;
8284                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8285                {
8286                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8287                }
8288                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8289                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8290                }
8291            }
8292
8293            next_offset += envelope_size;
8294            _next_ordinal_to_read += 1;
8295            if next_offset >= end_offset {
8296                return Ok(());
8297            }
8298
8299            // Decode unknown envelopes for gaps in ordinals.
8300            while _next_ordinal_to_read < 2 {
8301                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8302                _next_ordinal_to_read += 1;
8303                next_offset += envelope_size;
8304            }
8305
8306            let next_out_of_line = decoder.next_out_of_line();
8307            let handles_before = decoder.remaining_handles();
8308            if let Some((inlined, num_bytes, num_handles)) =
8309                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8310            {
8311                let member_inline_size =
8312                    <Nat64PacketCounters as fidl::encoding::TypeMarker>::inline_size(
8313                        decoder.context,
8314                    );
8315                if inlined != (member_inline_size <= 4) {
8316                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8317                }
8318                let inner_offset;
8319                let mut inner_depth = depth.clone();
8320                if inlined {
8321                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8322                    inner_offset = next_offset;
8323                } else {
8324                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8325                    inner_depth.increment()?;
8326                }
8327                let val_ref = self
8328                    .illegal_packet
8329                    .get_or_insert_with(|| fidl::new_empty!(Nat64PacketCounters, D));
8330                fidl::decode!(Nat64PacketCounters, D, val_ref, decoder, inner_offset, inner_depth)?;
8331                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8332                {
8333                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8334                }
8335                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8336                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8337                }
8338            }
8339
8340            next_offset += envelope_size;
8341            _next_ordinal_to_read += 1;
8342            if next_offset >= end_offset {
8343                return Ok(());
8344            }
8345
8346            // Decode unknown envelopes for gaps in ordinals.
8347            while _next_ordinal_to_read < 3 {
8348                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8349                _next_ordinal_to_read += 1;
8350                next_offset += envelope_size;
8351            }
8352
8353            let next_out_of_line = decoder.next_out_of_line();
8354            let handles_before = decoder.remaining_handles();
8355            if let Some((inlined, num_bytes, num_handles)) =
8356                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8357            {
8358                let member_inline_size =
8359                    <Nat64PacketCounters as fidl::encoding::TypeMarker>::inline_size(
8360                        decoder.context,
8361                    );
8362                if inlined != (member_inline_size <= 4) {
8363                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8364                }
8365                let inner_offset;
8366                let mut inner_depth = depth.clone();
8367                if inlined {
8368                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8369                    inner_offset = next_offset;
8370                } else {
8371                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8372                    inner_depth.increment()?;
8373                }
8374                let val_ref = self
8375                    .unsupported_protocol
8376                    .get_or_insert_with(|| fidl::new_empty!(Nat64PacketCounters, D));
8377                fidl::decode!(Nat64PacketCounters, D, val_ref, decoder, inner_offset, inner_depth)?;
8378                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8379                {
8380                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8381                }
8382                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8383                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8384                }
8385            }
8386
8387            next_offset += envelope_size;
8388            _next_ordinal_to_read += 1;
8389            if next_offset >= end_offset {
8390                return Ok(());
8391            }
8392
8393            // Decode unknown envelopes for gaps in ordinals.
8394            while _next_ordinal_to_read < 4 {
8395                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8396                _next_ordinal_to_read += 1;
8397                next_offset += envelope_size;
8398            }
8399
8400            let next_out_of_line = decoder.next_out_of_line();
8401            let handles_before = decoder.remaining_handles();
8402            if let Some((inlined, num_bytes, num_handles)) =
8403                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8404            {
8405                let member_inline_size =
8406                    <Nat64PacketCounters as fidl::encoding::TypeMarker>::inline_size(
8407                        decoder.context,
8408                    );
8409                if inlined != (member_inline_size <= 4) {
8410                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8411                }
8412                let inner_offset;
8413                let mut inner_depth = depth.clone();
8414                if inlined {
8415                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8416                    inner_offset = next_offset;
8417                } else {
8418                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8419                    inner_depth.increment()?;
8420                }
8421                let val_ref =
8422                    self.no_mapping.get_or_insert_with(|| fidl::new_empty!(Nat64PacketCounters, D));
8423                fidl::decode!(Nat64PacketCounters, D, val_ref, decoder, inner_offset, inner_depth)?;
8424                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8425                {
8426                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8427                }
8428                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8429                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8430                }
8431            }
8432
8433            next_offset += envelope_size;
8434
8435            // Decode the remaining unknown envelopes.
8436            while next_offset < end_offset {
8437                _next_ordinal_to_read += 1;
8438                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8439                next_offset += envelope_size;
8440            }
8441
8442            Ok(())
8443        }
8444    }
8445
8446    impl Nat64Info {
8447        #[inline(always)]
8448        fn max_ordinal_present(&self) -> u64 {
8449            if let Some(_) = self.nat64_protocol_counters {
8450                return 4;
8451            }
8452            if let Some(_) = self.nat64_error_counters {
8453                return 3;
8454            }
8455            if let Some(_) = self.nat64_mappings {
8456                return 2;
8457            }
8458            if let Some(_) = self.nat64_state {
8459                return 1;
8460            }
8461            0
8462        }
8463    }
8464
8465    impl fidl::encoding::ValueTypeMarker for Nat64Info {
8466        type Borrowed<'a> = &'a Self;
8467        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
8468            value
8469        }
8470    }
8471
8472    unsafe impl fidl::encoding::TypeMarker for Nat64Info {
8473        type Owned = Self;
8474
8475        #[inline(always)]
8476        fn inline_align(_context: fidl::encoding::Context) -> usize {
8477            8
8478        }
8479
8480        #[inline(always)]
8481        fn inline_size(_context: fidl::encoding::Context) -> usize {
8482            16
8483        }
8484    }
8485
8486    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Nat64Info, D>
8487        for &Nat64Info
8488    {
8489        unsafe fn encode(
8490            self,
8491            encoder: &mut fidl::encoding::Encoder<'_, D>,
8492            offset: usize,
8493            mut depth: fidl::encoding::Depth,
8494        ) -> fidl::Result<()> {
8495            encoder.debug_check_bounds::<Nat64Info>(offset);
8496            // Vector header
8497            let max_ordinal: u64 = self.max_ordinal_present();
8498            encoder.write_num(max_ordinal, offset);
8499            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
8500            // Calling encoder.out_of_line_offset(0) is not allowed.
8501            if max_ordinal == 0 {
8502                return Ok(());
8503            }
8504            depth.increment()?;
8505            let envelope_size = 8;
8506            let bytes_len = max_ordinal as usize * envelope_size;
8507            #[allow(unused_variables)]
8508            let offset = encoder.out_of_line_offset(bytes_len);
8509            let mut _prev_end_offset: usize = 0;
8510            if 1 > max_ordinal {
8511                return Ok(());
8512            }
8513
8514            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8515            // are envelope_size bytes.
8516            let cur_offset: usize = (1 - 1) * envelope_size;
8517
8518            // Zero reserved fields.
8519            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8520
8521            // Safety:
8522            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8523            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8524            //   envelope_size bytes, there is always sufficient room.
8525            fidl::encoding::encode_in_envelope_optional::<BorderRoutingNat64State, D>(
8526                self.nat64_state
8527                    .as_ref()
8528                    .map(<BorderRoutingNat64State as fidl::encoding::ValueTypeMarker>::borrow),
8529                encoder,
8530                offset + cur_offset,
8531                depth,
8532            )?;
8533
8534            _prev_end_offset = cur_offset + envelope_size;
8535            if 2 > max_ordinal {
8536                return Ok(());
8537            }
8538
8539            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8540            // are envelope_size bytes.
8541            let cur_offset: usize = (2 - 1) * envelope_size;
8542
8543            // Zero reserved fields.
8544            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8545
8546            // Safety:
8547            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8548            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8549            //   envelope_size bytes, there is always sufficient room.
8550            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<Nat64Mapping>, D>(
8551            self.nat64_mappings.as_ref().map(<fidl::encoding::UnboundedVector<Nat64Mapping> as fidl::encoding::ValueTypeMarker>::borrow),
8552            encoder, offset + cur_offset, depth
8553        )?;
8554
8555            _prev_end_offset = cur_offset + envelope_size;
8556            if 3 > max_ordinal {
8557                return Ok(());
8558            }
8559
8560            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8561            // are envelope_size bytes.
8562            let cur_offset: usize = (3 - 1) * envelope_size;
8563
8564            // Zero reserved fields.
8565            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8566
8567            // Safety:
8568            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8569            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8570            //   envelope_size bytes, there is always sufficient room.
8571            fidl::encoding::encode_in_envelope_optional::<Nat64ErrorCounters, D>(
8572                self.nat64_error_counters
8573                    .as_ref()
8574                    .map(<Nat64ErrorCounters as fidl::encoding::ValueTypeMarker>::borrow),
8575                encoder,
8576                offset + cur_offset,
8577                depth,
8578            )?;
8579
8580            _prev_end_offset = cur_offset + envelope_size;
8581            if 4 > max_ordinal {
8582                return Ok(());
8583            }
8584
8585            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8586            // are envelope_size bytes.
8587            let cur_offset: usize = (4 - 1) * envelope_size;
8588
8589            // Zero reserved fields.
8590            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8591
8592            // Safety:
8593            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8594            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8595            //   envelope_size bytes, there is always sufficient room.
8596            fidl::encoding::encode_in_envelope_optional::<Nat64ProtocolCounters, D>(
8597                self.nat64_protocol_counters
8598                    .as_ref()
8599                    .map(<Nat64ProtocolCounters as fidl::encoding::ValueTypeMarker>::borrow),
8600                encoder,
8601                offset + cur_offset,
8602                depth,
8603            )?;
8604
8605            _prev_end_offset = cur_offset + envelope_size;
8606
8607            Ok(())
8608        }
8609    }
8610
8611    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Nat64Info {
8612        #[inline(always)]
8613        fn new_empty() -> Self {
8614            Self::default()
8615        }
8616
8617        unsafe fn decode(
8618            &mut self,
8619            decoder: &mut fidl::encoding::Decoder<'_, D>,
8620            offset: usize,
8621            mut depth: fidl::encoding::Depth,
8622        ) -> fidl::Result<()> {
8623            decoder.debug_check_bounds::<Self>(offset);
8624            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
8625                None => return Err(fidl::Error::NotNullable),
8626                Some(len) => len,
8627            };
8628            // Calling decoder.out_of_line_offset(0) is not allowed.
8629            if len == 0 {
8630                return Ok(());
8631            };
8632            depth.increment()?;
8633            let envelope_size = 8;
8634            let bytes_len = len * envelope_size;
8635            let offset = decoder.out_of_line_offset(bytes_len)?;
8636            // Decode the envelope for each type.
8637            let mut _next_ordinal_to_read = 0;
8638            let mut next_offset = offset;
8639            let end_offset = offset + bytes_len;
8640            _next_ordinal_to_read += 1;
8641            if next_offset >= end_offset {
8642                return Ok(());
8643            }
8644
8645            // Decode unknown envelopes for gaps in ordinals.
8646            while _next_ordinal_to_read < 1 {
8647                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8648                _next_ordinal_to_read += 1;
8649                next_offset += envelope_size;
8650            }
8651
8652            let next_out_of_line = decoder.next_out_of_line();
8653            let handles_before = decoder.remaining_handles();
8654            if let Some((inlined, num_bytes, num_handles)) =
8655                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8656            {
8657                let member_inline_size =
8658                    <BorderRoutingNat64State as fidl::encoding::TypeMarker>::inline_size(
8659                        decoder.context,
8660                    );
8661                if inlined != (member_inline_size <= 4) {
8662                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8663                }
8664                let inner_offset;
8665                let mut inner_depth = depth.clone();
8666                if inlined {
8667                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8668                    inner_offset = next_offset;
8669                } else {
8670                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8671                    inner_depth.increment()?;
8672                }
8673                let val_ref = self
8674                    .nat64_state
8675                    .get_or_insert_with(|| fidl::new_empty!(BorderRoutingNat64State, D));
8676                fidl::decode!(
8677                    BorderRoutingNat64State,
8678                    D,
8679                    val_ref,
8680                    decoder,
8681                    inner_offset,
8682                    inner_depth
8683                )?;
8684                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8685                {
8686                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8687                }
8688                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8689                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8690                }
8691            }
8692
8693            next_offset += envelope_size;
8694            _next_ordinal_to_read += 1;
8695            if next_offset >= end_offset {
8696                return Ok(());
8697            }
8698
8699            // Decode unknown envelopes for gaps in ordinals.
8700            while _next_ordinal_to_read < 2 {
8701                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8702                _next_ordinal_to_read += 1;
8703                next_offset += envelope_size;
8704            }
8705
8706            let next_out_of_line = decoder.next_out_of_line();
8707            let handles_before = decoder.remaining_handles();
8708            if let Some((inlined, num_bytes, num_handles)) =
8709                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8710            {
8711                let member_inline_size = <fidl::encoding::UnboundedVector<Nat64Mapping> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
8712                if inlined != (member_inline_size <= 4) {
8713                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8714                }
8715                let inner_offset;
8716                let mut inner_depth = depth.clone();
8717                if inlined {
8718                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8719                    inner_offset = next_offset;
8720                } else {
8721                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8722                    inner_depth.increment()?;
8723                }
8724                let val_ref = self.nat64_mappings.get_or_insert_with(|| {
8725                    fidl::new_empty!(fidl::encoding::UnboundedVector<Nat64Mapping>, D)
8726                });
8727                fidl::decode!(
8728                    fidl::encoding::UnboundedVector<Nat64Mapping>,
8729                    D,
8730                    val_ref,
8731                    decoder,
8732                    inner_offset,
8733                    inner_depth
8734                )?;
8735                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8736                {
8737                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8738                }
8739                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8740                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8741                }
8742            }
8743
8744            next_offset += envelope_size;
8745            _next_ordinal_to_read += 1;
8746            if next_offset >= end_offset {
8747                return Ok(());
8748            }
8749
8750            // Decode unknown envelopes for gaps in ordinals.
8751            while _next_ordinal_to_read < 3 {
8752                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8753                _next_ordinal_to_read += 1;
8754                next_offset += envelope_size;
8755            }
8756
8757            let next_out_of_line = decoder.next_out_of_line();
8758            let handles_before = decoder.remaining_handles();
8759            if let Some((inlined, num_bytes, num_handles)) =
8760                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8761            {
8762                let member_inline_size =
8763                    <Nat64ErrorCounters as fidl::encoding::TypeMarker>::inline_size(
8764                        decoder.context,
8765                    );
8766                if inlined != (member_inline_size <= 4) {
8767                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8768                }
8769                let inner_offset;
8770                let mut inner_depth = depth.clone();
8771                if inlined {
8772                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8773                    inner_offset = next_offset;
8774                } else {
8775                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8776                    inner_depth.increment()?;
8777                }
8778                let val_ref = self
8779                    .nat64_error_counters
8780                    .get_or_insert_with(|| fidl::new_empty!(Nat64ErrorCounters, D));
8781                fidl::decode!(Nat64ErrorCounters, D, val_ref, decoder, inner_offset, inner_depth)?;
8782                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8783                {
8784                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8785                }
8786                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8787                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8788                }
8789            }
8790
8791            next_offset += envelope_size;
8792            _next_ordinal_to_read += 1;
8793            if next_offset >= end_offset {
8794                return Ok(());
8795            }
8796
8797            // Decode unknown envelopes for gaps in ordinals.
8798            while _next_ordinal_to_read < 4 {
8799                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8800                _next_ordinal_to_read += 1;
8801                next_offset += envelope_size;
8802            }
8803
8804            let next_out_of_line = decoder.next_out_of_line();
8805            let handles_before = decoder.remaining_handles();
8806            if let Some((inlined, num_bytes, num_handles)) =
8807                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8808            {
8809                let member_inline_size =
8810                    <Nat64ProtocolCounters as fidl::encoding::TypeMarker>::inline_size(
8811                        decoder.context,
8812                    );
8813                if inlined != (member_inline_size <= 4) {
8814                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8815                }
8816                let inner_offset;
8817                let mut inner_depth = depth.clone();
8818                if inlined {
8819                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8820                    inner_offset = next_offset;
8821                } else {
8822                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8823                    inner_depth.increment()?;
8824                }
8825                let val_ref = self
8826                    .nat64_protocol_counters
8827                    .get_or_insert_with(|| fidl::new_empty!(Nat64ProtocolCounters, D));
8828                fidl::decode!(
8829                    Nat64ProtocolCounters,
8830                    D,
8831                    val_ref,
8832                    decoder,
8833                    inner_offset,
8834                    inner_depth
8835                )?;
8836                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8837                {
8838                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8839                }
8840                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8841                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8842                }
8843            }
8844
8845            next_offset += envelope_size;
8846
8847            // Decode the remaining unknown envelopes.
8848            while next_offset < end_offset {
8849                _next_ordinal_to_read += 1;
8850                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8851                next_offset += envelope_size;
8852            }
8853
8854            Ok(())
8855        }
8856    }
8857
8858    impl Nat64Mapping {
8859        #[inline(always)]
8860        fn max_ordinal_present(&self) -> u64 {
8861            if let Some(_) = self.counters {
8862                return 5;
8863            }
8864            if let Some(_) = self.remaining_time_ms {
8865                return 4;
8866            }
8867            if let Some(_) = self.ip6_addr {
8868                return 3;
8869            }
8870            if let Some(_) = self.ip4_addr {
8871                return 2;
8872            }
8873            if let Some(_) = self.mapping_id {
8874                return 1;
8875            }
8876            0
8877        }
8878    }
8879
8880    impl fidl::encoding::ValueTypeMarker for Nat64Mapping {
8881        type Borrowed<'a> = &'a Self;
8882        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
8883            value
8884        }
8885    }
8886
8887    unsafe impl fidl::encoding::TypeMarker for Nat64Mapping {
8888        type Owned = Self;
8889
8890        #[inline(always)]
8891        fn inline_align(_context: fidl::encoding::Context) -> usize {
8892            8
8893        }
8894
8895        #[inline(always)]
8896        fn inline_size(_context: fidl::encoding::Context) -> usize {
8897            16
8898        }
8899    }
8900
8901    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Nat64Mapping, D>
8902        for &Nat64Mapping
8903    {
8904        unsafe fn encode(
8905            self,
8906            encoder: &mut fidl::encoding::Encoder<'_, D>,
8907            offset: usize,
8908            mut depth: fidl::encoding::Depth,
8909        ) -> fidl::Result<()> {
8910            encoder.debug_check_bounds::<Nat64Mapping>(offset);
8911            // Vector header
8912            let max_ordinal: u64 = self.max_ordinal_present();
8913            encoder.write_num(max_ordinal, offset);
8914            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
8915            // Calling encoder.out_of_line_offset(0) is not allowed.
8916            if max_ordinal == 0 {
8917                return Ok(());
8918            }
8919            depth.increment()?;
8920            let envelope_size = 8;
8921            let bytes_len = max_ordinal as usize * envelope_size;
8922            #[allow(unused_variables)]
8923            let offset = encoder.out_of_line_offset(bytes_len);
8924            let mut _prev_end_offset: usize = 0;
8925            if 1 > max_ordinal {
8926                return Ok(());
8927            }
8928
8929            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8930            // are envelope_size bytes.
8931            let cur_offset: usize = (1 - 1) * envelope_size;
8932
8933            // Zero reserved fields.
8934            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8935
8936            // Safety:
8937            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8938            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8939            //   envelope_size bytes, there is always sufficient room.
8940            fidl::encoding::encode_in_envelope_optional::<u64, D>(
8941                self.mapping_id.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
8942                encoder,
8943                offset + cur_offset,
8944                depth,
8945            )?;
8946
8947            _prev_end_offset = cur_offset + envelope_size;
8948            if 2 > max_ordinal {
8949                return Ok(());
8950            }
8951
8952            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8953            // are envelope_size bytes.
8954            let cur_offset: usize = (2 - 1) * envelope_size;
8955
8956            // Zero reserved fields.
8957            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8958
8959            // Safety:
8960            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8961            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8962            //   envelope_size bytes, there is always sufficient room.
8963            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<u8>, D>(
8964            self.ip4_addr.as_ref().map(<fidl::encoding::UnboundedVector<u8> as fidl::encoding::ValueTypeMarker>::borrow),
8965            encoder, offset + cur_offset, depth
8966        )?;
8967
8968            _prev_end_offset = cur_offset + envelope_size;
8969            if 3 > max_ordinal {
8970                return Ok(());
8971            }
8972
8973            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8974            // are envelope_size bytes.
8975            let cur_offset: usize = (3 - 1) * envelope_size;
8976
8977            // Zero reserved fields.
8978            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8979
8980            // Safety:
8981            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8982            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8983            //   envelope_size bytes, there is always sufficient room.
8984            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<u8>, D>(
8985            self.ip6_addr.as_ref().map(<fidl::encoding::UnboundedVector<u8> as fidl::encoding::ValueTypeMarker>::borrow),
8986            encoder, offset + cur_offset, depth
8987        )?;
8988
8989            _prev_end_offset = cur_offset + envelope_size;
8990            if 4 > max_ordinal {
8991                return Ok(());
8992            }
8993
8994            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8995            // are envelope_size bytes.
8996            let cur_offset: usize = (4 - 1) * envelope_size;
8997
8998            // Zero reserved fields.
8999            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9000
9001            // Safety:
9002            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9003            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9004            //   envelope_size bytes, there is always sufficient room.
9005            fidl::encoding::encode_in_envelope_optional::<u32, D>(
9006                self.remaining_time_ms
9007                    .as_ref()
9008                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
9009                encoder,
9010                offset + cur_offset,
9011                depth,
9012            )?;
9013
9014            _prev_end_offset = cur_offset + envelope_size;
9015            if 5 > max_ordinal {
9016                return Ok(());
9017            }
9018
9019            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9020            // are envelope_size bytes.
9021            let cur_offset: usize = (5 - 1) * envelope_size;
9022
9023            // Zero reserved fields.
9024            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9025
9026            // Safety:
9027            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9028            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9029            //   envelope_size bytes, there is always sufficient room.
9030            fidl::encoding::encode_in_envelope_optional::<Nat64ProtocolCounters, D>(
9031                self.counters
9032                    .as_ref()
9033                    .map(<Nat64ProtocolCounters as fidl::encoding::ValueTypeMarker>::borrow),
9034                encoder,
9035                offset + cur_offset,
9036                depth,
9037            )?;
9038
9039            _prev_end_offset = cur_offset + envelope_size;
9040
9041            Ok(())
9042        }
9043    }
9044
9045    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Nat64Mapping {
9046        #[inline(always)]
9047        fn new_empty() -> Self {
9048            Self::default()
9049        }
9050
9051        unsafe fn decode(
9052            &mut self,
9053            decoder: &mut fidl::encoding::Decoder<'_, D>,
9054            offset: usize,
9055            mut depth: fidl::encoding::Depth,
9056        ) -> fidl::Result<()> {
9057            decoder.debug_check_bounds::<Self>(offset);
9058            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
9059                None => return Err(fidl::Error::NotNullable),
9060                Some(len) => len,
9061            };
9062            // Calling decoder.out_of_line_offset(0) is not allowed.
9063            if len == 0 {
9064                return Ok(());
9065            };
9066            depth.increment()?;
9067            let envelope_size = 8;
9068            let bytes_len = len * envelope_size;
9069            let offset = decoder.out_of_line_offset(bytes_len)?;
9070            // Decode the envelope for each type.
9071            let mut _next_ordinal_to_read = 0;
9072            let mut next_offset = offset;
9073            let end_offset = offset + bytes_len;
9074            _next_ordinal_to_read += 1;
9075            if next_offset >= end_offset {
9076                return Ok(());
9077            }
9078
9079            // Decode unknown envelopes for gaps in ordinals.
9080            while _next_ordinal_to_read < 1 {
9081                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9082                _next_ordinal_to_read += 1;
9083                next_offset += envelope_size;
9084            }
9085
9086            let next_out_of_line = decoder.next_out_of_line();
9087            let handles_before = decoder.remaining_handles();
9088            if let Some((inlined, num_bytes, num_handles)) =
9089                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9090            {
9091                let member_inline_size =
9092                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
9093                if inlined != (member_inline_size <= 4) {
9094                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9095                }
9096                let inner_offset;
9097                let mut inner_depth = depth.clone();
9098                if inlined {
9099                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9100                    inner_offset = next_offset;
9101                } else {
9102                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9103                    inner_depth.increment()?;
9104                }
9105                let val_ref = self.mapping_id.get_or_insert_with(|| fidl::new_empty!(u64, D));
9106                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
9107                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9108                {
9109                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9110                }
9111                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9112                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9113                }
9114            }
9115
9116            next_offset += envelope_size;
9117            _next_ordinal_to_read += 1;
9118            if next_offset >= end_offset {
9119                return Ok(());
9120            }
9121
9122            // Decode unknown envelopes for gaps in ordinals.
9123            while _next_ordinal_to_read < 2 {
9124                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9125                _next_ordinal_to_read += 1;
9126                next_offset += envelope_size;
9127            }
9128
9129            let next_out_of_line = decoder.next_out_of_line();
9130            let handles_before = decoder.remaining_handles();
9131            if let Some((inlined, num_bytes, num_handles)) =
9132                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9133            {
9134                let member_inline_size = <fidl::encoding::UnboundedVector<u8> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
9135                if inlined != (member_inline_size <= 4) {
9136                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9137                }
9138                let inner_offset;
9139                let mut inner_depth = depth.clone();
9140                if inlined {
9141                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9142                    inner_offset = next_offset;
9143                } else {
9144                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9145                    inner_depth.increment()?;
9146                }
9147                let val_ref = self.ip4_addr.get_or_insert_with(|| {
9148                    fidl::new_empty!(fidl::encoding::UnboundedVector<u8>, D)
9149                });
9150                fidl::decode!(
9151                    fidl::encoding::UnboundedVector<u8>,
9152                    D,
9153                    val_ref,
9154                    decoder,
9155                    inner_offset,
9156                    inner_depth
9157                )?;
9158                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9159                {
9160                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9161                }
9162                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9163                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9164                }
9165            }
9166
9167            next_offset += envelope_size;
9168            _next_ordinal_to_read += 1;
9169            if next_offset >= end_offset {
9170                return Ok(());
9171            }
9172
9173            // Decode unknown envelopes for gaps in ordinals.
9174            while _next_ordinal_to_read < 3 {
9175                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9176                _next_ordinal_to_read += 1;
9177                next_offset += envelope_size;
9178            }
9179
9180            let next_out_of_line = decoder.next_out_of_line();
9181            let handles_before = decoder.remaining_handles();
9182            if let Some((inlined, num_bytes, num_handles)) =
9183                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9184            {
9185                let member_inline_size = <fidl::encoding::UnboundedVector<u8> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
9186                if inlined != (member_inline_size <= 4) {
9187                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9188                }
9189                let inner_offset;
9190                let mut inner_depth = depth.clone();
9191                if inlined {
9192                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9193                    inner_offset = next_offset;
9194                } else {
9195                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9196                    inner_depth.increment()?;
9197                }
9198                let val_ref = self.ip6_addr.get_or_insert_with(|| {
9199                    fidl::new_empty!(fidl::encoding::UnboundedVector<u8>, D)
9200                });
9201                fidl::decode!(
9202                    fidl::encoding::UnboundedVector<u8>,
9203                    D,
9204                    val_ref,
9205                    decoder,
9206                    inner_offset,
9207                    inner_depth
9208                )?;
9209                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9210                {
9211                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9212                }
9213                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9214                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9215                }
9216            }
9217
9218            next_offset += envelope_size;
9219            _next_ordinal_to_read += 1;
9220            if next_offset >= end_offset {
9221                return Ok(());
9222            }
9223
9224            // Decode unknown envelopes for gaps in ordinals.
9225            while _next_ordinal_to_read < 4 {
9226                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9227                _next_ordinal_to_read += 1;
9228                next_offset += envelope_size;
9229            }
9230
9231            let next_out_of_line = decoder.next_out_of_line();
9232            let handles_before = decoder.remaining_handles();
9233            if let Some((inlined, num_bytes, num_handles)) =
9234                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9235            {
9236                let member_inline_size =
9237                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
9238                if inlined != (member_inline_size <= 4) {
9239                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9240                }
9241                let inner_offset;
9242                let mut inner_depth = depth.clone();
9243                if inlined {
9244                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9245                    inner_offset = next_offset;
9246                } else {
9247                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9248                    inner_depth.increment()?;
9249                }
9250                let val_ref =
9251                    self.remaining_time_ms.get_or_insert_with(|| fidl::new_empty!(u32, D));
9252                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
9253                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9254                {
9255                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9256                }
9257                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9258                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9259                }
9260            }
9261
9262            next_offset += envelope_size;
9263            _next_ordinal_to_read += 1;
9264            if next_offset >= end_offset {
9265                return Ok(());
9266            }
9267
9268            // Decode unknown envelopes for gaps in ordinals.
9269            while _next_ordinal_to_read < 5 {
9270                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9271                _next_ordinal_to_read += 1;
9272                next_offset += envelope_size;
9273            }
9274
9275            let next_out_of_line = decoder.next_out_of_line();
9276            let handles_before = decoder.remaining_handles();
9277            if let Some((inlined, num_bytes, num_handles)) =
9278                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9279            {
9280                let member_inline_size =
9281                    <Nat64ProtocolCounters as fidl::encoding::TypeMarker>::inline_size(
9282                        decoder.context,
9283                    );
9284                if inlined != (member_inline_size <= 4) {
9285                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9286                }
9287                let inner_offset;
9288                let mut inner_depth = depth.clone();
9289                if inlined {
9290                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9291                    inner_offset = next_offset;
9292                } else {
9293                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9294                    inner_depth.increment()?;
9295                }
9296                let val_ref =
9297                    self.counters.get_or_insert_with(|| fidl::new_empty!(Nat64ProtocolCounters, D));
9298                fidl::decode!(
9299                    Nat64ProtocolCounters,
9300                    D,
9301                    val_ref,
9302                    decoder,
9303                    inner_offset,
9304                    inner_depth
9305                )?;
9306                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9307                {
9308                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9309                }
9310                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9311                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9312                }
9313            }
9314
9315            next_offset += envelope_size;
9316
9317            // Decode the remaining unknown envelopes.
9318            while next_offset < end_offset {
9319                _next_ordinal_to_read += 1;
9320                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9321                next_offset += envelope_size;
9322            }
9323
9324            Ok(())
9325        }
9326    }
9327
9328    impl Nat64PacketCounters {
9329        #[inline(always)]
9330        fn max_ordinal_present(&self) -> u64 {
9331            if let Some(_) = self.ipv6_to_ipv4_packets {
9332                return 2;
9333            }
9334            if let Some(_) = self.ipv4_to_ipv6_packets {
9335                return 1;
9336            }
9337            0
9338        }
9339    }
9340
9341    impl fidl::encoding::ValueTypeMarker for Nat64PacketCounters {
9342        type Borrowed<'a> = &'a Self;
9343        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
9344            value
9345        }
9346    }
9347
9348    unsafe impl fidl::encoding::TypeMarker for Nat64PacketCounters {
9349        type Owned = Self;
9350
9351        #[inline(always)]
9352        fn inline_align(_context: fidl::encoding::Context) -> usize {
9353            8
9354        }
9355
9356        #[inline(always)]
9357        fn inline_size(_context: fidl::encoding::Context) -> usize {
9358            16
9359        }
9360    }
9361
9362    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Nat64PacketCounters, D>
9363        for &Nat64PacketCounters
9364    {
9365        unsafe fn encode(
9366            self,
9367            encoder: &mut fidl::encoding::Encoder<'_, D>,
9368            offset: usize,
9369            mut depth: fidl::encoding::Depth,
9370        ) -> fidl::Result<()> {
9371            encoder.debug_check_bounds::<Nat64PacketCounters>(offset);
9372            // Vector header
9373            let max_ordinal: u64 = self.max_ordinal_present();
9374            encoder.write_num(max_ordinal, offset);
9375            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
9376            // Calling encoder.out_of_line_offset(0) is not allowed.
9377            if max_ordinal == 0 {
9378                return Ok(());
9379            }
9380            depth.increment()?;
9381            let envelope_size = 8;
9382            let bytes_len = max_ordinal as usize * envelope_size;
9383            #[allow(unused_variables)]
9384            let offset = encoder.out_of_line_offset(bytes_len);
9385            let mut _prev_end_offset: usize = 0;
9386            if 1 > max_ordinal {
9387                return Ok(());
9388            }
9389
9390            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9391            // are envelope_size bytes.
9392            let cur_offset: usize = (1 - 1) * envelope_size;
9393
9394            // Zero reserved fields.
9395            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9396
9397            // Safety:
9398            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9399            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9400            //   envelope_size bytes, there is always sufficient room.
9401            fidl::encoding::encode_in_envelope_optional::<u64, D>(
9402                self.ipv4_to_ipv6_packets
9403                    .as_ref()
9404                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
9405                encoder,
9406                offset + cur_offset,
9407                depth,
9408            )?;
9409
9410            _prev_end_offset = cur_offset + envelope_size;
9411            if 2 > max_ordinal {
9412                return Ok(());
9413            }
9414
9415            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9416            // are envelope_size bytes.
9417            let cur_offset: usize = (2 - 1) * envelope_size;
9418
9419            // Zero reserved fields.
9420            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9421
9422            // Safety:
9423            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9424            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9425            //   envelope_size bytes, there is always sufficient room.
9426            fidl::encoding::encode_in_envelope_optional::<u64, D>(
9427                self.ipv6_to_ipv4_packets
9428                    .as_ref()
9429                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
9430                encoder,
9431                offset + cur_offset,
9432                depth,
9433            )?;
9434
9435            _prev_end_offset = cur_offset + envelope_size;
9436
9437            Ok(())
9438        }
9439    }
9440
9441    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Nat64PacketCounters {
9442        #[inline(always)]
9443        fn new_empty() -> Self {
9444            Self::default()
9445        }
9446
9447        unsafe fn decode(
9448            &mut self,
9449            decoder: &mut fidl::encoding::Decoder<'_, D>,
9450            offset: usize,
9451            mut depth: fidl::encoding::Depth,
9452        ) -> fidl::Result<()> {
9453            decoder.debug_check_bounds::<Self>(offset);
9454            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
9455                None => return Err(fidl::Error::NotNullable),
9456                Some(len) => len,
9457            };
9458            // Calling decoder.out_of_line_offset(0) is not allowed.
9459            if len == 0 {
9460                return Ok(());
9461            };
9462            depth.increment()?;
9463            let envelope_size = 8;
9464            let bytes_len = len * envelope_size;
9465            let offset = decoder.out_of_line_offset(bytes_len)?;
9466            // Decode the envelope for each type.
9467            let mut _next_ordinal_to_read = 0;
9468            let mut next_offset = offset;
9469            let end_offset = offset + bytes_len;
9470            _next_ordinal_to_read += 1;
9471            if next_offset >= end_offset {
9472                return Ok(());
9473            }
9474
9475            // Decode unknown envelopes for gaps in ordinals.
9476            while _next_ordinal_to_read < 1 {
9477                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9478                _next_ordinal_to_read += 1;
9479                next_offset += envelope_size;
9480            }
9481
9482            let next_out_of_line = decoder.next_out_of_line();
9483            let handles_before = decoder.remaining_handles();
9484            if let Some((inlined, num_bytes, num_handles)) =
9485                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9486            {
9487                let member_inline_size =
9488                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
9489                if inlined != (member_inline_size <= 4) {
9490                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9491                }
9492                let inner_offset;
9493                let mut inner_depth = depth.clone();
9494                if inlined {
9495                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9496                    inner_offset = next_offset;
9497                } else {
9498                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9499                    inner_depth.increment()?;
9500                }
9501                let val_ref =
9502                    self.ipv4_to_ipv6_packets.get_or_insert_with(|| fidl::new_empty!(u64, D));
9503                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
9504                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9505                {
9506                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9507                }
9508                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9509                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9510                }
9511            }
9512
9513            next_offset += envelope_size;
9514            _next_ordinal_to_read += 1;
9515            if next_offset >= end_offset {
9516                return Ok(());
9517            }
9518
9519            // Decode unknown envelopes for gaps in ordinals.
9520            while _next_ordinal_to_read < 2 {
9521                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9522                _next_ordinal_to_read += 1;
9523                next_offset += envelope_size;
9524            }
9525
9526            let next_out_of_line = decoder.next_out_of_line();
9527            let handles_before = decoder.remaining_handles();
9528            if let Some((inlined, num_bytes, num_handles)) =
9529                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9530            {
9531                let member_inline_size =
9532                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
9533                if inlined != (member_inline_size <= 4) {
9534                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9535                }
9536                let inner_offset;
9537                let mut inner_depth = depth.clone();
9538                if inlined {
9539                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9540                    inner_offset = next_offset;
9541                } else {
9542                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9543                    inner_depth.increment()?;
9544                }
9545                let val_ref =
9546                    self.ipv6_to_ipv4_packets.get_or_insert_with(|| fidl::new_empty!(u64, D));
9547                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
9548                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9549                {
9550                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9551                }
9552                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9553                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9554                }
9555            }
9556
9557            next_offset += envelope_size;
9558
9559            // Decode the remaining unknown envelopes.
9560            while next_offset < end_offset {
9561                _next_ordinal_to_read += 1;
9562                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9563                next_offset += envelope_size;
9564            }
9565
9566            Ok(())
9567        }
9568    }
9569
9570    impl Nat64ProtocolCounters {
9571        #[inline(always)]
9572        fn max_ordinal_present(&self) -> u64 {
9573            if let Some(_) = self.total {
9574                return 4;
9575            }
9576            if let Some(_) = self.icmp {
9577                return 3;
9578            }
9579            if let Some(_) = self.udp {
9580                return 2;
9581            }
9582            if let Some(_) = self.tcp {
9583                return 1;
9584            }
9585            0
9586        }
9587    }
9588
9589    impl fidl::encoding::ValueTypeMarker for Nat64ProtocolCounters {
9590        type Borrowed<'a> = &'a Self;
9591        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
9592            value
9593        }
9594    }
9595
9596    unsafe impl fidl::encoding::TypeMarker for Nat64ProtocolCounters {
9597        type Owned = Self;
9598
9599        #[inline(always)]
9600        fn inline_align(_context: fidl::encoding::Context) -> usize {
9601            8
9602        }
9603
9604        #[inline(always)]
9605        fn inline_size(_context: fidl::encoding::Context) -> usize {
9606            16
9607        }
9608    }
9609
9610    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Nat64ProtocolCounters, D>
9611        for &Nat64ProtocolCounters
9612    {
9613        unsafe fn encode(
9614            self,
9615            encoder: &mut fidl::encoding::Encoder<'_, D>,
9616            offset: usize,
9617            mut depth: fidl::encoding::Depth,
9618        ) -> fidl::Result<()> {
9619            encoder.debug_check_bounds::<Nat64ProtocolCounters>(offset);
9620            // Vector header
9621            let max_ordinal: u64 = self.max_ordinal_present();
9622            encoder.write_num(max_ordinal, offset);
9623            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
9624            // Calling encoder.out_of_line_offset(0) is not allowed.
9625            if max_ordinal == 0 {
9626                return Ok(());
9627            }
9628            depth.increment()?;
9629            let envelope_size = 8;
9630            let bytes_len = max_ordinal as usize * envelope_size;
9631            #[allow(unused_variables)]
9632            let offset = encoder.out_of_line_offset(bytes_len);
9633            let mut _prev_end_offset: usize = 0;
9634            if 1 > max_ordinal {
9635                return Ok(());
9636            }
9637
9638            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9639            // are envelope_size bytes.
9640            let cur_offset: usize = (1 - 1) * envelope_size;
9641
9642            // Zero reserved fields.
9643            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9644
9645            // Safety:
9646            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9647            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9648            //   envelope_size bytes, there is always sufficient room.
9649            fidl::encoding::encode_in_envelope_optional::<Nat64TrafficCounters, D>(
9650                self.tcp
9651                    .as_ref()
9652                    .map(<Nat64TrafficCounters as fidl::encoding::ValueTypeMarker>::borrow),
9653                encoder,
9654                offset + cur_offset,
9655                depth,
9656            )?;
9657
9658            _prev_end_offset = cur_offset + envelope_size;
9659            if 2 > max_ordinal {
9660                return Ok(());
9661            }
9662
9663            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9664            // are envelope_size bytes.
9665            let cur_offset: usize = (2 - 1) * envelope_size;
9666
9667            // Zero reserved fields.
9668            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9669
9670            // Safety:
9671            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9672            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9673            //   envelope_size bytes, there is always sufficient room.
9674            fidl::encoding::encode_in_envelope_optional::<Nat64TrafficCounters, D>(
9675                self.udp
9676                    .as_ref()
9677                    .map(<Nat64TrafficCounters as fidl::encoding::ValueTypeMarker>::borrow),
9678                encoder,
9679                offset + cur_offset,
9680                depth,
9681            )?;
9682
9683            _prev_end_offset = cur_offset + envelope_size;
9684            if 3 > max_ordinal {
9685                return Ok(());
9686            }
9687
9688            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9689            // are envelope_size bytes.
9690            let cur_offset: usize = (3 - 1) * envelope_size;
9691
9692            // Zero reserved fields.
9693            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9694
9695            // Safety:
9696            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9697            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9698            //   envelope_size bytes, there is always sufficient room.
9699            fidl::encoding::encode_in_envelope_optional::<Nat64TrafficCounters, D>(
9700                self.icmp
9701                    .as_ref()
9702                    .map(<Nat64TrafficCounters as fidl::encoding::ValueTypeMarker>::borrow),
9703                encoder,
9704                offset + cur_offset,
9705                depth,
9706            )?;
9707
9708            _prev_end_offset = cur_offset + envelope_size;
9709            if 4 > max_ordinal {
9710                return Ok(());
9711            }
9712
9713            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9714            // are envelope_size bytes.
9715            let cur_offset: usize = (4 - 1) * envelope_size;
9716
9717            // Zero reserved fields.
9718            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9719
9720            // Safety:
9721            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9722            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9723            //   envelope_size bytes, there is always sufficient room.
9724            fidl::encoding::encode_in_envelope_optional::<Nat64TrafficCounters, D>(
9725                self.total
9726                    .as_ref()
9727                    .map(<Nat64TrafficCounters as fidl::encoding::ValueTypeMarker>::borrow),
9728                encoder,
9729                offset + cur_offset,
9730                depth,
9731            )?;
9732
9733            _prev_end_offset = cur_offset + envelope_size;
9734
9735            Ok(())
9736        }
9737    }
9738
9739    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Nat64ProtocolCounters {
9740        #[inline(always)]
9741        fn new_empty() -> Self {
9742            Self::default()
9743        }
9744
9745        unsafe fn decode(
9746            &mut self,
9747            decoder: &mut fidl::encoding::Decoder<'_, D>,
9748            offset: usize,
9749            mut depth: fidl::encoding::Depth,
9750        ) -> fidl::Result<()> {
9751            decoder.debug_check_bounds::<Self>(offset);
9752            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
9753                None => return Err(fidl::Error::NotNullable),
9754                Some(len) => len,
9755            };
9756            // Calling decoder.out_of_line_offset(0) is not allowed.
9757            if len == 0 {
9758                return Ok(());
9759            };
9760            depth.increment()?;
9761            let envelope_size = 8;
9762            let bytes_len = len * envelope_size;
9763            let offset = decoder.out_of_line_offset(bytes_len)?;
9764            // Decode the envelope for each type.
9765            let mut _next_ordinal_to_read = 0;
9766            let mut next_offset = offset;
9767            let end_offset = offset + bytes_len;
9768            _next_ordinal_to_read += 1;
9769            if next_offset >= end_offset {
9770                return Ok(());
9771            }
9772
9773            // Decode unknown envelopes for gaps in ordinals.
9774            while _next_ordinal_to_read < 1 {
9775                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9776                _next_ordinal_to_read += 1;
9777                next_offset += envelope_size;
9778            }
9779
9780            let next_out_of_line = decoder.next_out_of_line();
9781            let handles_before = decoder.remaining_handles();
9782            if let Some((inlined, num_bytes, num_handles)) =
9783                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9784            {
9785                let member_inline_size =
9786                    <Nat64TrafficCounters as fidl::encoding::TypeMarker>::inline_size(
9787                        decoder.context,
9788                    );
9789                if inlined != (member_inline_size <= 4) {
9790                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9791                }
9792                let inner_offset;
9793                let mut inner_depth = depth.clone();
9794                if inlined {
9795                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9796                    inner_offset = next_offset;
9797                } else {
9798                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9799                    inner_depth.increment()?;
9800                }
9801                let val_ref =
9802                    self.tcp.get_or_insert_with(|| fidl::new_empty!(Nat64TrafficCounters, D));
9803                fidl::decode!(
9804                    Nat64TrafficCounters,
9805                    D,
9806                    val_ref,
9807                    decoder,
9808                    inner_offset,
9809                    inner_depth
9810                )?;
9811                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9812                {
9813                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9814                }
9815                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9816                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9817                }
9818            }
9819
9820            next_offset += envelope_size;
9821            _next_ordinal_to_read += 1;
9822            if next_offset >= end_offset {
9823                return Ok(());
9824            }
9825
9826            // Decode unknown envelopes for gaps in ordinals.
9827            while _next_ordinal_to_read < 2 {
9828                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9829                _next_ordinal_to_read += 1;
9830                next_offset += envelope_size;
9831            }
9832
9833            let next_out_of_line = decoder.next_out_of_line();
9834            let handles_before = decoder.remaining_handles();
9835            if let Some((inlined, num_bytes, num_handles)) =
9836                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9837            {
9838                let member_inline_size =
9839                    <Nat64TrafficCounters as fidl::encoding::TypeMarker>::inline_size(
9840                        decoder.context,
9841                    );
9842                if inlined != (member_inline_size <= 4) {
9843                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9844                }
9845                let inner_offset;
9846                let mut inner_depth = depth.clone();
9847                if inlined {
9848                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9849                    inner_offset = next_offset;
9850                } else {
9851                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9852                    inner_depth.increment()?;
9853                }
9854                let val_ref =
9855                    self.udp.get_or_insert_with(|| fidl::new_empty!(Nat64TrafficCounters, D));
9856                fidl::decode!(
9857                    Nat64TrafficCounters,
9858                    D,
9859                    val_ref,
9860                    decoder,
9861                    inner_offset,
9862                    inner_depth
9863                )?;
9864                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9865                {
9866                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9867                }
9868                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9869                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9870                }
9871            }
9872
9873            next_offset += envelope_size;
9874            _next_ordinal_to_read += 1;
9875            if next_offset >= end_offset {
9876                return Ok(());
9877            }
9878
9879            // Decode unknown envelopes for gaps in ordinals.
9880            while _next_ordinal_to_read < 3 {
9881                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9882                _next_ordinal_to_read += 1;
9883                next_offset += envelope_size;
9884            }
9885
9886            let next_out_of_line = decoder.next_out_of_line();
9887            let handles_before = decoder.remaining_handles();
9888            if let Some((inlined, num_bytes, num_handles)) =
9889                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9890            {
9891                let member_inline_size =
9892                    <Nat64TrafficCounters as fidl::encoding::TypeMarker>::inline_size(
9893                        decoder.context,
9894                    );
9895                if inlined != (member_inline_size <= 4) {
9896                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9897                }
9898                let inner_offset;
9899                let mut inner_depth = depth.clone();
9900                if inlined {
9901                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9902                    inner_offset = next_offset;
9903                } else {
9904                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9905                    inner_depth.increment()?;
9906                }
9907                let val_ref =
9908                    self.icmp.get_or_insert_with(|| fidl::new_empty!(Nat64TrafficCounters, D));
9909                fidl::decode!(
9910                    Nat64TrafficCounters,
9911                    D,
9912                    val_ref,
9913                    decoder,
9914                    inner_offset,
9915                    inner_depth
9916                )?;
9917                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9918                {
9919                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9920                }
9921                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9922                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9923                }
9924            }
9925
9926            next_offset += envelope_size;
9927            _next_ordinal_to_read += 1;
9928            if next_offset >= end_offset {
9929                return Ok(());
9930            }
9931
9932            // Decode unknown envelopes for gaps in ordinals.
9933            while _next_ordinal_to_read < 4 {
9934                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9935                _next_ordinal_to_read += 1;
9936                next_offset += envelope_size;
9937            }
9938
9939            let next_out_of_line = decoder.next_out_of_line();
9940            let handles_before = decoder.remaining_handles();
9941            if let Some((inlined, num_bytes, num_handles)) =
9942                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9943            {
9944                let member_inline_size =
9945                    <Nat64TrafficCounters as fidl::encoding::TypeMarker>::inline_size(
9946                        decoder.context,
9947                    );
9948                if inlined != (member_inline_size <= 4) {
9949                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9950                }
9951                let inner_offset;
9952                let mut inner_depth = depth.clone();
9953                if inlined {
9954                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9955                    inner_offset = next_offset;
9956                } else {
9957                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9958                    inner_depth.increment()?;
9959                }
9960                let val_ref =
9961                    self.total.get_or_insert_with(|| fidl::new_empty!(Nat64TrafficCounters, D));
9962                fidl::decode!(
9963                    Nat64TrafficCounters,
9964                    D,
9965                    val_ref,
9966                    decoder,
9967                    inner_offset,
9968                    inner_depth
9969                )?;
9970                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9971                {
9972                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9973                }
9974                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9975                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9976                }
9977            }
9978
9979            next_offset += envelope_size;
9980
9981            // Decode the remaining unknown envelopes.
9982            while next_offset < end_offset {
9983                _next_ordinal_to_read += 1;
9984                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9985                next_offset += envelope_size;
9986            }
9987
9988            Ok(())
9989        }
9990    }
9991
9992    impl Nat64TrafficCounters {
9993        #[inline(always)]
9994        fn max_ordinal_present(&self) -> u64 {
9995            if let Some(_) = self.ipv6_to_ipv4_bytes {
9996                return 4;
9997            }
9998            if let Some(_) = self.ipv6_to_ipv4_packets {
9999                return 3;
10000            }
10001            if let Some(_) = self.ipv4_to_ipv6_bytes {
10002                return 2;
10003            }
10004            if let Some(_) = self.ipv4_to_ipv6_packets {
10005                return 1;
10006            }
10007            0
10008        }
10009    }
10010
10011    impl fidl::encoding::ValueTypeMarker for Nat64TrafficCounters {
10012        type Borrowed<'a> = &'a Self;
10013        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
10014            value
10015        }
10016    }
10017
10018    unsafe impl fidl::encoding::TypeMarker for Nat64TrafficCounters {
10019        type Owned = Self;
10020
10021        #[inline(always)]
10022        fn inline_align(_context: fidl::encoding::Context) -> usize {
10023            8
10024        }
10025
10026        #[inline(always)]
10027        fn inline_size(_context: fidl::encoding::Context) -> usize {
10028            16
10029        }
10030    }
10031
10032    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Nat64TrafficCounters, D>
10033        for &Nat64TrafficCounters
10034    {
10035        unsafe fn encode(
10036            self,
10037            encoder: &mut fidl::encoding::Encoder<'_, D>,
10038            offset: usize,
10039            mut depth: fidl::encoding::Depth,
10040        ) -> fidl::Result<()> {
10041            encoder.debug_check_bounds::<Nat64TrafficCounters>(offset);
10042            // Vector header
10043            let max_ordinal: u64 = self.max_ordinal_present();
10044            encoder.write_num(max_ordinal, offset);
10045            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
10046            // Calling encoder.out_of_line_offset(0) is not allowed.
10047            if max_ordinal == 0 {
10048                return Ok(());
10049            }
10050            depth.increment()?;
10051            let envelope_size = 8;
10052            let bytes_len = max_ordinal as usize * envelope_size;
10053            #[allow(unused_variables)]
10054            let offset = encoder.out_of_line_offset(bytes_len);
10055            let mut _prev_end_offset: usize = 0;
10056            if 1 > max_ordinal {
10057                return Ok(());
10058            }
10059
10060            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10061            // are envelope_size bytes.
10062            let cur_offset: usize = (1 - 1) * envelope_size;
10063
10064            // Zero reserved fields.
10065            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10066
10067            // Safety:
10068            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10069            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10070            //   envelope_size bytes, there is always sufficient room.
10071            fidl::encoding::encode_in_envelope_optional::<u64, D>(
10072                self.ipv4_to_ipv6_packets
10073                    .as_ref()
10074                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
10075                encoder,
10076                offset + cur_offset,
10077                depth,
10078            )?;
10079
10080            _prev_end_offset = cur_offset + envelope_size;
10081            if 2 > max_ordinal {
10082                return Ok(());
10083            }
10084
10085            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10086            // are envelope_size bytes.
10087            let cur_offset: usize = (2 - 1) * envelope_size;
10088
10089            // Zero reserved fields.
10090            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10091
10092            // Safety:
10093            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10094            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10095            //   envelope_size bytes, there is always sufficient room.
10096            fidl::encoding::encode_in_envelope_optional::<u64, D>(
10097                self.ipv4_to_ipv6_bytes
10098                    .as_ref()
10099                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
10100                encoder,
10101                offset + cur_offset,
10102                depth,
10103            )?;
10104
10105            _prev_end_offset = cur_offset + envelope_size;
10106            if 3 > max_ordinal {
10107                return Ok(());
10108            }
10109
10110            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10111            // are envelope_size bytes.
10112            let cur_offset: usize = (3 - 1) * envelope_size;
10113
10114            // Zero reserved fields.
10115            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10116
10117            // Safety:
10118            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10119            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10120            //   envelope_size bytes, there is always sufficient room.
10121            fidl::encoding::encode_in_envelope_optional::<u64, D>(
10122                self.ipv6_to_ipv4_packets
10123                    .as_ref()
10124                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
10125                encoder,
10126                offset + cur_offset,
10127                depth,
10128            )?;
10129
10130            _prev_end_offset = cur_offset + envelope_size;
10131            if 4 > max_ordinal {
10132                return Ok(());
10133            }
10134
10135            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10136            // are envelope_size bytes.
10137            let cur_offset: usize = (4 - 1) * envelope_size;
10138
10139            // Zero reserved fields.
10140            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10141
10142            // Safety:
10143            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10144            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10145            //   envelope_size bytes, there is always sufficient room.
10146            fidl::encoding::encode_in_envelope_optional::<u64, D>(
10147                self.ipv6_to_ipv4_bytes
10148                    .as_ref()
10149                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
10150                encoder,
10151                offset + cur_offset,
10152                depth,
10153            )?;
10154
10155            _prev_end_offset = cur_offset + envelope_size;
10156
10157            Ok(())
10158        }
10159    }
10160
10161    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Nat64TrafficCounters {
10162        #[inline(always)]
10163        fn new_empty() -> Self {
10164            Self::default()
10165        }
10166
10167        unsafe fn decode(
10168            &mut self,
10169            decoder: &mut fidl::encoding::Decoder<'_, D>,
10170            offset: usize,
10171            mut depth: fidl::encoding::Depth,
10172        ) -> fidl::Result<()> {
10173            decoder.debug_check_bounds::<Self>(offset);
10174            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
10175                None => return Err(fidl::Error::NotNullable),
10176                Some(len) => len,
10177            };
10178            // Calling decoder.out_of_line_offset(0) is not allowed.
10179            if len == 0 {
10180                return Ok(());
10181            };
10182            depth.increment()?;
10183            let envelope_size = 8;
10184            let bytes_len = len * envelope_size;
10185            let offset = decoder.out_of_line_offset(bytes_len)?;
10186            // Decode the envelope for each type.
10187            let mut _next_ordinal_to_read = 0;
10188            let mut next_offset = offset;
10189            let end_offset = offset + bytes_len;
10190            _next_ordinal_to_read += 1;
10191            if next_offset >= end_offset {
10192                return Ok(());
10193            }
10194
10195            // Decode unknown envelopes for gaps in ordinals.
10196            while _next_ordinal_to_read < 1 {
10197                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10198                _next_ordinal_to_read += 1;
10199                next_offset += envelope_size;
10200            }
10201
10202            let next_out_of_line = decoder.next_out_of_line();
10203            let handles_before = decoder.remaining_handles();
10204            if let Some((inlined, num_bytes, num_handles)) =
10205                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10206            {
10207                let member_inline_size =
10208                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
10209                if inlined != (member_inline_size <= 4) {
10210                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10211                }
10212                let inner_offset;
10213                let mut inner_depth = depth.clone();
10214                if inlined {
10215                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10216                    inner_offset = next_offset;
10217                } else {
10218                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10219                    inner_depth.increment()?;
10220                }
10221                let val_ref =
10222                    self.ipv4_to_ipv6_packets.get_or_insert_with(|| fidl::new_empty!(u64, D));
10223                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
10224                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10225                {
10226                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10227                }
10228                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10229                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10230                }
10231            }
10232
10233            next_offset += envelope_size;
10234            _next_ordinal_to_read += 1;
10235            if next_offset >= end_offset {
10236                return Ok(());
10237            }
10238
10239            // Decode unknown envelopes for gaps in ordinals.
10240            while _next_ordinal_to_read < 2 {
10241                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10242                _next_ordinal_to_read += 1;
10243                next_offset += envelope_size;
10244            }
10245
10246            let next_out_of_line = decoder.next_out_of_line();
10247            let handles_before = decoder.remaining_handles();
10248            if let Some((inlined, num_bytes, num_handles)) =
10249                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10250            {
10251                let member_inline_size =
10252                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
10253                if inlined != (member_inline_size <= 4) {
10254                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10255                }
10256                let inner_offset;
10257                let mut inner_depth = depth.clone();
10258                if inlined {
10259                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10260                    inner_offset = next_offset;
10261                } else {
10262                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10263                    inner_depth.increment()?;
10264                }
10265                let val_ref =
10266                    self.ipv4_to_ipv6_bytes.get_or_insert_with(|| fidl::new_empty!(u64, D));
10267                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
10268                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10269                {
10270                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10271                }
10272                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10273                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10274                }
10275            }
10276
10277            next_offset += envelope_size;
10278            _next_ordinal_to_read += 1;
10279            if next_offset >= end_offset {
10280                return Ok(());
10281            }
10282
10283            // Decode unknown envelopes for gaps in ordinals.
10284            while _next_ordinal_to_read < 3 {
10285                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10286                _next_ordinal_to_read += 1;
10287                next_offset += envelope_size;
10288            }
10289
10290            let next_out_of_line = decoder.next_out_of_line();
10291            let handles_before = decoder.remaining_handles();
10292            if let Some((inlined, num_bytes, num_handles)) =
10293                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10294            {
10295                let member_inline_size =
10296                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
10297                if inlined != (member_inline_size <= 4) {
10298                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10299                }
10300                let inner_offset;
10301                let mut inner_depth = depth.clone();
10302                if inlined {
10303                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10304                    inner_offset = next_offset;
10305                } else {
10306                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10307                    inner_depth.increment()?;
10308                }
10309                let val_ref =
10310                    self.ipv6_to_ipv4_packets.get_or_insert_with(|| fidl::new_empty!(u64, D));
10311                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
10312                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10313                {
10314                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10315                }
10316                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10317                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10318                }
10319            }
10320
10321            next_offset += envelope_size;
10322            _next_ordinal_to_read += 1;
10323            if next_offset >= end_offset {
10324                return Ok(());
10325            }
10326
10327            // Decode unknown envelopes for gaps in ordinals.
10328            while _next_ordinal_to_read < 4 {
10329                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10330                _next_ordinal_to_read += 1;
10331                next_offset += envelope_size;
10332            }
10333
10334            let next_out_of_line = decoder.next_out_of_line();
10335            let handles_before = decoder.remaining_handles();
10336            if let Some((inlined, num_bytes, num_handles)) =
10337                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10338            {
10339                let member_inline_size =
10340                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
10341                if inlined != (member_inline_size <= 4) {
10342                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10343                }
10344                let inner_offset;
10345                let mut inner_depth = depth.clone();
10346                if inlined {
10347                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10348                    inner_offset = next_offset;
10349                } else {
10350                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10351                    inner_depth.increment()?;
10352                }
10353                let val_ref =
10354                    self.ipv6_to_ipv4_bytes.get_or_insert_with(|| fidl::new_empty!(u64, D));
10355                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
10356                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10357                {
10358                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10359                }
10360                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10361                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10362                }
10363            }
10364
10365            next_offset += envelope_size;
10366
10367            // Decode the remaining unknown envelopes.
10368            while next_offset < end_offset {
10369                _next_ordinal_to_read += 1;
10370                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10371                next_offset += envelope_size;
10372            }
10373
10374            Ok(())
10375        }
10376    }
10377
10378    impl NetworkScanParameters {
10379        #[inline(always)]
10380        fn max_ordinal_present(&self) -> u64 {
10381            if let Some(_) = self.tx_power_dbm {
10382                return 2;
10383            }
10384            if let Some(_) = self.channels {
10385                return 1;
10386            }
10387            0
10388        }
10389    }
10390
10391    impl fidl::encoding::ValueTypeMarker for NetworkScanParameters {
10392        type Borrowed<'a> = &'a Self;
10393        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
10394            value
10395        }
10396    }
10397
10398    unsafe impl fidl::encoding::TypeMarker for NetworkScanParameters {
10399        type Owned = Self;
10400
10401        #[inline(always)]
10402        fn inline_align(_context: fidl::encoding::Context) -> usize {
10403            8
10404        }
10405
10406        #[inline(always)]
10407        fn inline_size(_context: fidl::encoding::Context) -> usize {
10408            16
10409        }
10410    }
10411
10412    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<NetworkScanParameters, D>
10413        for &NetworkScanParameters
10414    {
10415        unsafe fn encode(
10416            self,
10417            encoder: &mut fidl::encoding::Encoder<'_, D>,
10418            offset: usize,
10419            mut depth: fidl::encoding::Depth,
10420        ) -> fidl::Result<()> {
10421            encoder.debug_check_bounds::<NetworkScanParameters>(offset);
10422            // Vector header
10423            let max_ordinal: u64 = self.max_ordinal_present();
10424            encoder.write_num(max_ordinal, offset);
10425            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
10426            // Calling encoder.out_of_line_offset(0) is not allowed.
10427            if max_ordinal == 0 {
10428                return Ok(());
10429            }
10430            depth.increment()?;
10431            let envelope_size = 8;
10432            let bytes_len = max_ordinal as usize * envelope_size;
10433            #[allow(unused_variables)]
10434            let offset = encoder.out_of_line_offset(bytes_len);
10435            let mut _prev_end_offset: usize = 0;
10436            if 1 > max_ordinal {
10437                return Ok(());
10438            }
10439
10440            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10441            // are envelope_size bytes.
10442            let cur_offset: usize = (1 - 1) * envelope_size;
10443
10444            // Zero reserved fields.
10445            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10446
10447            // Safety:
10448            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10449            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10450            //   envelope_size bytes, there is always sufficient room.
10451            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u16, 200>, D>(
10452                self.channels.as_ref().map(
10453                    <fidl::encoding::Vector<u16, 200> as fidl::encoding::ValueTypeMarker>::borrow,
10454                ),
10455                encoder,
10456                offset + cur_offset,
10457                depth,
10458            )?;
10459
10460            _prev_end_offset = cur_offset + envelope_size;
10461            if 2 > max_ordinal {
10462                return Ok(());
10463            }
10464
10465            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10466            // are envelope_size bytes.
10467            let cur_offset: usize = (2 - 1) * envelope_size;
10468
10469            // Zero reserved fields.
10470            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10471
10472            // Safety:
10473            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10474            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10475            //   envelope_size bytes, there is always sufficient room.
10476            fidl::encoding::encode_in_envelope_optional::<i8, D>(
10477                self.tx_power_dbm.as_ref().map(<i8 as fidl::encoding::ValueTypeMarker>::borrow),
10478                encoder,
10479                offset + cur_offset,
10480                depth,
10481            )?;
10482
10483            _prev_end_offset = cur_offset + envelope_size;
10484
10485            Ok(())
10486        }
10487    }
10488
10489    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for NetworkScanParameters {
10490        #[inline(always)]
10491        fn new_empty() -> Self {
10492            Self::default()
10493        }
10494
10495        unsafe fn decode(
10496            &mut self,
10497            decoder: &mut fidl::encoding::Decoder<'_, D>,
10498            offset: usize,
10499            mut depth: fidl::encoding::Depth,
10500        ) -> fidl::Result<()> {
10501            decoder.debug_check_bounds::<Self>(offset);
10502            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
10503                None => return Err(fidl::Error::NotNullable),
10504                Some(len) => len,
10505            };
10506            // Calling decoder.out_of_line_offset(0) is not allowed.
10507            if len == 0 {
10508                return Ok(());
10509            };
10510            depth.increment()?;
10511            let envelope_size = 8;
10512            let bytes_len = len * envelope_size;
10513            let offset = decoder.out_of_line_offset(bytes_len)?;
10514            // Decode the envelope for each type.
10515            let mut _next_ordinal_to_read = 0;
10516            let mut next_offset = offset;
10517            let end_offset = offset + bytes_len;
10518            _next_ordinal_to_read += 1;
10519            if next_offset >= end_offset {
10520                return Ok(());
10521            }
10522
10523            // Decode unknown envelopes for gaps in ordinals.
10524            while _next_ordinal_to_read < 1 {
10525                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10526                _next_ordinal_to_read += 1;
10527                next_offset += envelope_size;
10528            }
10529
10530            let next_out_of_line = decoder.next_out_of_line();
10531            let handles_before = decoder.remaining_handles();
10532            if let Some((inlined, num_bytes, num_handles)) =
10533                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10534            {
10535                let member_inline_size =
10536                    <fidl::encoding::Vector<u16, 200> as fidl::encoding::TypeMarker>::inline_size(
10537                        decoder.context,
10538                    );
10539                if inlined != (member_inline_size <= 4) {
10540                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10541                }
10542                let inner_offset;
10543                let mut inner_depth = depth.clone();
10544                if inlined {
10545                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10546                    inner_offset = next_offset;
10547                } else {
10548                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10549                    inner_depth.increment()?;
10550                }
10551                let val_ref = self
10552                    .channels
10553                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u16, 200>, D));
10554                fidl::decode!(fidl::encoding::Vector<u16, 200>, D, val_ref, decoder, inner_offset, inner_depth)?;
10555                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10556                {
10557                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10558                }
10559                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10560                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10561                }
10562            }
10563
10564            next_offset += envelope_size;
10565            _next_ordinal_to_read += 1;
10566            if next_offset >= end_offset {
10567                return Ok(());
10568            }
10569
10570            // Decode unknown envelopes for gaps in ordinals.
10571            while _next_ordinal_to_read < 2 {
10572                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10573                _next_ordinal_to_read += 1;
10574                next_offset += envelope_size;
10575            }
10576
10577            let next_out_of_line = decoder.next_out_of_line();
10578            let handles_before = decoder.remaining_handles();
10579            if let Some((inlined, num_bytes, num_handles)) =
10580                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10581            {
10582                let member_inline_size =
10583                    <i8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
10584                if inlined != (member_inline_size <= 4) {
10585                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10586                }
10587                let inner_offset;
10588                let mut inner_depth = depth.clone();
10589                if inlined {
10590                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10591                    inner_offset = next_offset;
10592                } else {
10593                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10594                    inner_depth.increment()?;
10595                }
10596                let val_ref = self.tx_power_dbm.get_or_insert_with(|| fidl::new_empty!(i8, D));
10597                fidl::decode!(i8, D, val_ref, decoder, inner_offset, inner_depth)?;
10598                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10599                {
10600                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10601                }
10602                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10603                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10604                }
10605            }
10606
10607            next_offset += envelope_size;
10608
10609            // Decode the remaining unknown envelopes.
10610            while next_offset < end_offset {
10611                _next_ordinal_to_read += 1;
10612                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10613                next_offset += envelope_size;
10614            }
10615
10616            Ok(())
10617        }
10618    }
10619
10620    impl OnMeshPrefix {
10621        #[inline(always)]
10622        fn max_ordinal_present(&self) -> u64 {
10623            if let Some(_) = self.slaac_valid {
10624                return 5;
10625            }
10626            if let Some(_) = self.slaac_preferred {
10627                return 4;
10628            }
10629            if let Some(_) = self.stable {
10630                return 3;
10631            }
10632            if let Some(_) = self.default_route_preference {
10633                return 2;
10634            }
10635            if let Some(_) = self.subnet {
10636                return 1;
10637            }
10638            0
10639        }
10640    }
10641
10642    impl fidl::encoding::ValueTypeMarker for OnMeshPrefix {
10643        type Borrowed<'a> = &'a Self;
10644        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
10645            value
10646        }
10647    }
10648
10649    unsafe impl fidl::encoding::TypeMarker for OnMeshPrefix {
10650        type Owned = Self;
10651
10652        #[inline(always)]
10653        fn inline_align(_context: fidl::encoding::Context) -> usize {
10654            8
10655        }
10656
10657        #[inline(always)]
10658        fn inline_size(_context: fidl::encoding::Context) -> usize {
10659            16
10660        }
10661    }
10662
10663    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<OnMeshPrefix, D>
10664        for &OnMeshPrefix
10665    {
10666        unsafe fn encode(
10667            self,
10668            encoder: &mut fidl::encoding::Encoder<'_, D>,
10669            offset: usize,
10670            mut depth: fidl::encoding::Depth,
10671        ) -> fidl::Result<()> {
10672            encoder.debug_check_bounds::<OnMeshPrefix>(offset);
10673            // Vector header
10674            let max_ordinal: u64 = self.max_ordinal_present();
10675            encoder.write_num(max_ordinal, offset);
10676            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
10677            // Calling encoder.out_of_line_offset(0) is not allowed.
10678            if max_ordinal == 0 {
10679                return Ok(());
10680            }
10681            depth.increment()?;
10682            let envelope_size = 8;
10683            let bytes_len = max_ordinal as usize * envelope_size;
10684            #[allow(unused_variables)]
10685            let offset = encoder.out_of_line_offset(bytes_len);
10686            let mut _prev_end_offset: usize = 0;
10687            if 1 > max_ordinal {
10688                return Ok(());
10689            }
10690
10691            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10692            // are envelope_size bytes.
10693            let cur_offset: usize = (1 - 1) * envelope_size;
10694
10695            // Zero reserved fields.
10696            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10697
10698            // Safety:
10699            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10700            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10701            //   envelope_size bytes, there is always sufficient room.
10702            fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_net__common::Ipv6AddressWithPrefix, D>(
10703            self.subnet.as_ref().map(<fidl_fuchsia_net__common::Ipv6AddressWithPrefix as fidl::encoding::ValueTypeMarker>::borrow),
10704            encoder, offset + cur_offset, depth
10705        )?;
10706
10707            _prev_end_offset = cur_offset + envelope_size;
10708            if 2 > max_ordinal {
10709                return Ok(());
10710            }
10711
10712            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10713            // are envelope_size bytes.
10714            let cur_offset: usize = (2 - 1) * envelope_size;
10715
10716            // Zero reserved fields.
10717            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10718
10719            // Safety:
10720            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10721            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10722            //   envelope_size bytes, there is always sufficient room.
10723            fidl::encoding::encode_in_envelope_optional::<RoutePreference, D>(
10724                self.default_route_preference
10725                    .as_ref()
10726                    .map(<RoutePreference as fidl::encoding::ValueTypeMarker>::borrow),
10727                encoder,
10728                offset + cur_offset,
10729                depth,
10730            )?;
10731
10732            _prev_end_offset = cur_offset + envelope_size;
10733            if 3 > max_ordinal {
10734                return Ok(());
10735            }
10736
10737            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10738            // are envelope_size bytes.
10739            let cur_offset: usize = (3 - 1) * envelope_size;
10740
10741            // Zero reserved fields.
10742            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10743
10744            // Safety:
10745            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10746            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10747            //   envelope_size bytes, there is always sufficient room.
10748            fidl::encoding::encode_in_envelope_optional::<bool, D>(
10749                self.stable.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
10750                encoder,
10751                offset + cur_offset,
10752                depth,
10753            )?;
10754
10755            _prev_end_offset = cur_offset + envelope_size;
10756            if 4 > max_ordinal {
10757                return Ok(());
10758            }
10759
10760            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10761            // are envelope_size bytes.
10762            let cur_offset: usize = (4 - 1) * envelope_size;
10763
10764            // Zero reserved fields.
10765            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10766
10767            // Safety:
10768            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10769            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10770            //   envelope_size bytes, there is always sufficient room.
10771            fidl::encoding::encode_in_envelope_optional::<bool, D>(
10772                self.slaac_preferred
10773                    .as_ref()
10774                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
10775                encoder,
10776                offset + cur_offset,
10777                depth,
10778            )?;
10779
10780            _prev_end_offset = cur_offset + envelope_size;
10781            if 5 > max_ordinal {
10782                return Ok(());
10783            }
10784
10785            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10786            // are envelope_size bytes.
10787            let cur_offset: usize = (5 - 1) * envelope_size;
10788
10789            // Zero reserved fields.
10790            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10791
10792            // Safety:
10793            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10794            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10795            //   envelope_size bytes, there is always sufficient room.
10796            fidl::encoding::encode_in_envelope_optional::<bool, D>(
10797                self.slaac_valid.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
10798                encoder,
10799                offset + cur_offset,
10800                depth,
10801            )?;
10802
10803            _prev_end_offset = cur_offset + envelope_size;
10804
10805            Ok(())
10806        }
10807    }
10808
10809    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for OnMeshPrefix {
10810        #[inline(always)]
10811        fn new_empty() -> Self {
10812            Self::default()
10813        }
10814
10815        unsafe fn decode(
10816            &mut self,
10817            decoder: &mut fidl::encoding::Decoder<'_, D>,
10818            offset: usize,
10819            mut depth: fidl::encoding::Depth,
10820        ) -> fidl::Result<()> {
10821            decoder.debug_check_bounds::<Self>(offset);
10822            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
10823                None => return Err(fidl::Error::NotNullable),
10824                Some(len) => len,
10825            };
10826            // Calling decoder.out_of_line_offset(0) is not allowed.
10827            if len == 0 {
10828                return Ok(());
10829            };
10830            depth.increment()?;
10831            let envelope_size = 8;
10832            let bytes_len = len * envelope_size;
10833            let offset = decoder.out_of_line_offset(bytes_len)?;
10834            // Decode the envelope for each type.
10835            let mut _next_ordinal_to_read = 0;
10836            let mut next_offset = offset;
10837            let end_offset = offset + bytes_len;
10838            _next_ordinal_to_read += 1;
10839            if next_offset >= end_offset {
10840                return Ok(());
10841            }
10842
10843            // Decode unknown envelopes for gaps in ordinals.
10844            while _next_ordinal_to_read < 1 {
10845                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10846                _next_ordinal_to_read += 1;
10847                next_offset += envelope_size;
10848            }
10849
10850            let next_out_of_line = decoder.next_out_of_line();
10851            let handles_before = decoder.remaining_handles();
10852            if let Some((inlined, num_bytes, num_handles)) =
10853                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10854            {
10855                let member_inline_size = <fidl_fuchsia_net__common::Ipv6AddressWithPrefix as fidl::encoding::TypeMarker>::inline_size(decoder.context);
10856                if inlined != (member_inline_size <= 4) {
10857                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10858                }
10859                let inner_offset;
10860                let mut inner_depth = depth.clone();
10861                if inlined {
10862                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10863                    inner_offset = next_offset;
10864                } else {
10865                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10866                    inner_depth.increment()?;
10867                }
10868                let val_ref = self.subnet.get_or_insert_with(|| {
10869                    fidl::new_empty!(fidl_fuchsia_net__common::Ipv6AddressWithPrefix, D)
10870                });
10871                fidl::decode!(
10872                    fidl_fuchsia_net__common::Ipv6AddressWithPrefix,
10873                    D,
10874                    val_ref,
10875                    decoder,
10876                    inner_offset,
10877                    inner_depth
10878                )?;
10879                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10880                {
10881                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10882                }
10883                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10884                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10885                }
10886            }
10887
10888            next_offset += envelope_size;
10889            _next_ordinal_to_read += 1;
10890            if next_offset >= end_offset {
10891                return Ok(());
10892            }
10893
10894            // Decode unknown envelopes for gaps in ordinals.
10895            while _next_ordinal_to_read < 2 {
10896                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10897                _next_ordinal_to_read += 1;
10898                next_offset += envelope_size;
10899            }
10900
10901            let next_out_of_line = decoder.next_out_of_line();
10902            let handles_before = decoder.remaining_handles();
10903            if let Some((inlined, num_bytes, num_handles)) =
10904                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10905            {
10906                let member_inline_size =
10907                    <RoutePreference as fidl::encoding::TypeMarker>::inline_size(decoder.context);
10908                if inlined != (member_inline_size <= 4) {
10909                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10910                }
10911                let inner_offset;
10912                let mut inner_depth = depth.clone();
10913                if inlined {
10914                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10915                    inner_offset = next_offset;
10916                } else {
10917                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10918                    inner_depth.increment()?;
10919                }
10920                let val_ref = self
10921                    .default_route_preference
10922                    .get_or_insert_with(|| fidl::new_empty!(RoutePreference, D));
10923                fidl::decode!(RoutePreference, D, val_ref, decoder, inner_offset, inner_depth)?;
10924                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10925                {
10926                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10927                }
10928                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10929                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10930                }
10931            }
10932
10933            next_offset += envelope_size;
10934            _next_ordinal_to_read += 1;
10935            if next_offset >= end_offset {
10936                return Ok(());
10937            }
10938
10939            // Decode unknown envelopes for gaps in ordinals.
10940            while _next_ordinal_to_read < 3 {
10941                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10942                _next_ordinal_to_read += 1;
10943                next_offset += envelope_size;
10944            }
10945
10946            let next_out_of_line = decoder.next_out_of_line();
10947            let handles_before = decoder.remaining_handles();
10948            if let Some((inlined, num_bytes, num_handles)) =
10949                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10950            {
10951                let member_inline_size =
10952                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
10953                if inlined != (member_inline_size <= 4) {
10954                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10955                }
10956                let inner_offset;
10957                let mut inner_depth = depth.clone();
10958                if inlined {
10959                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10960                    inner_offset = next_offset;
10961                } else {
10962                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10963                    inner_depth.increment()?;
10964                }
10965                let val_ref = self.stable.get_or_insert_with(|| fidl::new_empty!(bool, D));
10966                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
10967                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10968                {
10969                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10970                }
10971                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10972                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10973                }
10974            }
10975
10976            next_offset += envelope_size;
10977            _next_ordinal_to_read += 1;
10978            if next_offset >= end_offset {
10979                return Ok(());
10980            }
10981
10982            // Decode unknown envelopes for gaps in ordinals.
10983            while _next_ordinal_to_read < 4 {
10984                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10985                _next_ordinal_to_read += 1;
10986                next_offset += envelope_size;
10987            }
10988
10989            let next_out_of_line = decoder.next_out_of_line();
10990            let handles_before = decoder.remaining_handles();
10991            if let Some((inlined, num_bytes, num_handles)) =
10992                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10993            {
10994                let member_inline_size =
10995                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
10996                if inlined != (member_inline_size <= 4) {
10997                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10998                }
10999                let inner_offset;
11000                let mut inner_depth = depth.clone();
11001                if inlined {
11002                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11003                    inner_offset = next_offset;
11004                } else {
11005                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11006                    inner_depth.increment()?;
11007                }
11008                let val_ref = self.slaac_preferred.get_or_insert_with(|| fidl::new_empty!(bool, D));
11009                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
11010                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11011                {
11012                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11013                }
11014                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11015                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11016                }
11017            }
11018
11019            next_offset += envelope_size;
11020            _next_ordinal_to_read += 1;
11021            if next_offset >= end_offset {
11022                return Ok(());
11023            }
11024
11025            // Decode unknown envelopes for gaps in ordinals.
11026            while _next_ordinal_to_read < 5 {
11027                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11028                _next_ordinal_to_read += 1;
11029                next_offset += envelope_size;
11030            }
11031
11032            let next_out_of_line = decoder.next_out_of_line();
11033            let handles_before = decoder.remaining_handles();
11034            if let Some((inlined, num_bytes, num_handles)) =
11035                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11036            {
11037                let member_inline_size =
11038                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
11039                if inlined != (member_inline_size <= 4) {
11040                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11041                }
11042                let inner_offset;
11043                let mut inner_depth = depth.clone();
11044                if inlined {
11045                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11046                    inner_offset = next_offset;
11047                } else {
11048                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11049                    inner_depth.increment()?;
11050                }
11051                let val_ref = self.slaac_valid.get_or_insert_with(|| fidl::new_empty!(bool, D));
11052                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
11053                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11054                {
11055                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11056                }
11057                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11058                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11059                }
11060            }
11061
11062            next_offset += envelope_size;
11063
11064            // Decode the remaining unknown envelopes.
11065            while next_offset < end_offset {
11066                _next_ordinal_to_read += 1;
11067                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11068                next_offset += envelope_size;
11069            }
11070
11071            Ok(())
11072        }
11073    }
11074
11075    impl PdProcessedRaInfo {
11076        #[inline(always)]
11077        fn max_ordinal_present(&self) -> u64 {
11078            if let Some(_) = self.last_platform_ra_msec {
11079                return 3;
11080            }
11081            if let Some(_) = self.num_platform_pio_processed {
11082                return 2;
11083            }
11084            if let Some(_) = self.num_platform_ra_received {
11085                return 1;
11086            }
11087            0
11088        }
11089    }
11090
11091    impl fidl::encoding::ValueTypeMarker for PdProcessedRaInfo {
11092        type Borrowed<'a> = &'a Self;
11093        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
11094            value
11095        }
11096    }
11097
11098    unsafe impl fidl::encoding::TypeMarker for PdProcessedRaInfo {
11099        type Owned = Self;
11100
11101        #[inline(always)]
11102        fn inline_align(_context: fidl::encoding::Context) -> usize {
11103            8
11104        }
11105
11106        #[inline(always)]
11107        fn inline_size(_context: fidl::encoding::Context) -> usize {
11108            16
11109        }
11110    }
11111
11112    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<PdProcessedRaInfo, D>
11113        for &PdProcessedRaInfo
11114    {
11115        unsafe fn encode(
11116            self,
11117            encoder: &mut fidl::encoding::Encoder<'_, D>,
11118            offset: usize,
11119            mut depth: fidl::encoding::Depth,
11120        ) -> fidl::Result<()> {
11121            encoder.debug_check_bounds::<PdProcessedRaInfo>(offset);
11122            // Vector header
11123            let max_ordinal: u64 = self.max_ordinal_present();
11124            encoder.write_num(max_ordinal, offset);
11125            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
11126            // Calling encoder.out_of_line_offset(0) is not allowed.
11127            if max_ordinal == 0 {
11128                return Ok(());
11129            }
11130            depth.increment()?;
11131            let envelope_size = 8;
11132            let bytes_len = max_ordinal as usize * envelope_size;
11133            #[allow(unused_variables)]
11134            let offset = encoder.out_of_line_offset(bytes_len);
11135            let mut _prev_end_offset: usize = 0;
11136            if 1 > max_ordinal {
11137                return Ok(());
11138            }
11139
11140            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11141            // are envelope_size bytes.
11142            let cur_offset: usize = (1 - 1) * envelope_size;
11143
11144            // Zero reserved fields.
11145            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11146
11147            // Safety:
11148            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11149            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11150            //   envelope_size bytes, there is always sufficient room.
11151            fidl::encoding::encode_in_envelope_optional::<u32, D>(
11152                self.num_platform_ra_received
11153                    .as_ref()
11154                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
11155                encoder,
11156                offset + cur_offset,
11157                depth,
11158            )?;
11159
11160            _prev_end_offset = cur_offset + envelope_size;
11161            if 2 > max_ordinal {
11162                return Ok(());
11163            }
11164
11165            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11166            // are envelope_size bytes.
11167            let cur_offset: usize = (2 - 1) * envelope_size;
11168
11169            // Zero reserved fields.
11170            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11171
11172            // Safety:
11173            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11174            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11175            //   envelope_size bytes, there is always sufficient room.
11176            fidl::encoding::encode_in_envelope_optional::<u32, D>(
11177                self.num_platform_pio_processed
11178                    .as_ref()
11179                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
11180                encoder,
11181                offset + cur_offset,
11182                depth,
11183            )?;
11184
11185            _prev_end_offset = cur_offset + envelope_size;
11186            if 3 > max_ordinal {
11187                return Ok(());
11188            }
11189
11190            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11191            // are envelope_size bytes.
11192            let cur_offset: usize = (3 - 1) * envelope_size;
11193
11194            // Zero reserved fields.
11195            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11196
11197            // Safety:
11198            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11199            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11200            //   envelope_size bytes, there is always sufficient room.
11201            fidl::encoding::encode_in_envelope_optional::<u32, D>(
11202                self.last_platform_ra_msec
11203                    .as_ref()
11204                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
11205                encoder,
11206                offset + cur_offset,
11207                depth,
11208            )?;
11209
11210            _prev_end_offset = cur_offset + envelope_size;
11211
11212            Ok(())
11213        }
11214    }
11215
11216    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for PdProcessedRaInfo {
11217        #[inline(always)]
11218        fn new_empty() -> Self {
11219            Self::default()
11220        }
11221
11222        unsafe fn decode(
11223            &mut self,
11224            decoder: &mut fidl::encoding::Decoder<'_, D>,
11225            offset: usize,
11226            mut depth: fidl::encoding::Depth,
11227        ) -> fidl::Result<()> {
11228            decoder.debug_check_bounds::<Self>(offset);
11229            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
11230                None => return Err(fidl::Error::NotNullable),
11231                Some(len) => len,
11232            };
11233            // Calling decoder.out_of_line_offset(0) is not allowed.
11234            if len == 0 {
11235                return Ok(());
11236            };
11237            depth.increment()?;
11238            let envelope_size = 8;
11239            let bytes_len = len * envelope_size;
11240            let offset = decoder.out_of_line_offset(bytes_len)?;
11241            // Decode the envelope for each type.
11242            let mut _next_ordinal_to_read = 0;
11243            let mut next_offset = offset;
11244            let end_offset = offset + bytes_len;
11245            _next_ordinal_to_read += 1;
11246            if next_offset >= end_offset {
11247                return Ok(());
11248            }
11249
11250            // Decode unknown envelopes for gaps in ordinals.
11251            while _next_ordinal_to_read < 1 {
11252                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11253                _next_ordinal_to_read += 1;
11254                next_offset += envelope_size;
11255            }
11256
11257            let next_out_of_line = decoder.next_out_of_line();
11258            let handles_before = decoder.remaining_handles();
11259            if let Some((inlined, num_bytes, num_handles)) =
11260                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11261            {
11262                let member_inline_size =
11263                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
11264                if inlined != (member_inline_size <= 4) {
11265                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11266                }
11267                let inner_offset;
11268                let mut inner_depth = depth.clone();
11269                if inlined {
11270                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11271                    inner_offset = next_offset;
11272                } else {
11273                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11274                    inner_depth.increment()?;
11275                }
11276                let val_ref =
11277                    self.num_platform_ra_received.get_or_insert_with(|| fidl::new_empty!(u32, D));
11278                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
11279                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11280                {
11281                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11282                }
11283                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11284                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11285                }
11286            }
11287
11288            next_offset += envelope_size;
11289            _next_ordinal_to_read += 1;
11290            if next_offset >= end_offset {
11291                return Ok(());
11292            }
11293
11294            // Decode unknown envelopes for gaps in ordinals.
11295            while _next_ordinal_to_read < 2 {
11296                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11297                _next_ordinal_to_read += 1;
11298                next_offset += envelope_size;
11299            }
11300
11301            let next_out_of_line = decoder.next_out_of_line();
11302            let handles_before = decoder.remaining_handles();
11303            if let Some((inlined, num_bytes, num_handles)) =
11304                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11305            {
11306                let member_inline_size =
11307                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
11308                if inlined != (member_inline_size <= 4) {
11309                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11310                }
11311                let inner_offset;
11312                let mut inner_depth = depth.clone();
11313                if inlined {
11314                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11315                    inner_offset = next_offset;
11316                } else {
11317                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11318                    inner_depth.increment()?;
11319                }
11320                let val_ref =
11321                    self.num_platform_pio_processed.get_or_insert_with(|| fidl::new_empty!(u32, D));
11322                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
11323                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11324                {
11325                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11326                }
11327                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11328                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11329                }
11330            }
11331
11332            next_offset += envelope_size;
11333            _next_ordinal_to_read += 1;
11334            if next_offset >= end_offset {
11335                return Ok(());
11336            }
11337
11338            // Decode unknown envelopes for gaps in ordinals.
11339            while _next_ordinal_to_read < 3 {
11340                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11341                _next_ordinal_to_read += 1;
11342                next_offset += envelope_size;
11343            }
11344
11345            let next_out_of_line = decoder.next_out_of_line();
11346            let handles_before = decoder.remaining_handles();
11347            if let Some((inlined, num_bytes, num_handles)) =
11348                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11349            {
11350                let member_inline_size =
11351                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
11352                if inlined != (member_inline_size <= 4) {
11353                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11354                }
11355                let inner_offset;
11356                let mut inner_depth = depth.clone();
11357                if inlined {
11358                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11359                    inner_offset = next_offset;
11360                } else {
11361                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11362                    inner_depth.increment()?;
11363                }
11364                let val_ref =
11365                    self.last_platform_ra_msec.get_or_insert_with(|| fidl::new_empty!(u32, D));
11366                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
11367                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11368                {
11369                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11370                }
11371                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11372                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11373                }
11374            }
11375
11376            next_offset += envelope_size;
11377
11378            // Decode the remaining unknown envelopes.
11379            while next_offset < end_offset {
11380                _next_ordinal_to_read += 1;
11381                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11382                next_offset += envelope_size;
11383            }
11384
11385            Ok(())
11386        }
11387    }
11388
11389    impl SrpServerInfo {
11390        #[inline(always)]
11391        fn max_ordinal_present(&self) -> u64 {
11392            if let Some(_) = self.services_registration {
11393                return 6;
11394            }
11395            if let Some(_) = self.hosts_registration {
11396                return 5;
11397            }
11398            if let Some(_) = self.response_counters {
11399                return 4;
11400            }
11401            if let Some(_) = self.address_mode {
11402                return 3;
11403            }
11404            if let Some(_) = self.port {
11405                return 2;
11406            }
11407            if let Some(_) = self.state {
11408                return 1;
11409            }
11410            0
11411        }
11412    }
11413
11414    impl fidl::encoding::ValueTypeMarker for SrpServerInfo {
11415        type Borrowed<'a> = &'a Self;
11416        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
11417            value
11418        }
11419    }
11420
11421    unsafe impl fidl::encoding::TypeMarker for SrpServerInfo {
11422        type Owned = Self;
11423
11424        #[inline(always)]
11425        fn inline_align(_context: fidl::encoding::Context) -> usize {
11426            8
11427        }
11428
11429        #[inline(always)]
11430        fn inline_size(_context: fidl::encoding::Context) -> usize {
11431            16
11432        }
11433    }
11434
11435    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<SrpServerInfo, D>
11436        for &SrpServerInfo
11437    {
11438        unsafe fn encode(
11439            self,
11440            encoder: &mut fidl::encoding::Encoder<'_, D>,
11441            offset: usize,
11442            mut depth: fidl::encoding::Depth,
11443        ) -> fidl::Result<()> {
11444            encoder.debug_check_bounds::<SrpServerInfo>(offset);
11445            // Vector header
11446            let max_ordinal: u64 = self.max_ordinal_present();
11447            encoder.write_num(max_ordinal, offset);
11448            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
11449            // Calling encoder.out_of_line_offset(0) is not allowed.
11450            if max_ordinal == 0 {
11451                return Ok(());
11452            }
11453            depth.increment()?;
11454            let envelope_size = 8;
11455            let bytes_len = max_ordinal as usize * envelope_size;
11456            #[allow(unused_variables)]
11457            let offset = encoder.out_of_line_offset(bytes_len);
11458            let mut _prev_end_offset: usize = 0;
11459            if 1 > max_ordinal {
11460                return Ok(());
11461            }
11462
11463            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11464            // are envelope_size bytes.
11465            let cur_offset: usize = (1 - 1) * envelope_size;
11466
11467            // Zero reserved fields.
11468            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11469
11470            // Safety:
11471            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11472            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11473            //   envelope_size bytes, there is always sufficient room.
11474            fidl::encoding::encode_in_envelope_optional::<SrpServerState, D>(
11475                self.state
11476                    .as_ref()
11477                    .map(<SrpServerState as fidl::encoding::ValueTypeMarker>::borrow),
11478                encoder,
11479                offset + cur_offset,
11480                depth,
11481            )?;
11482
11483            _prev_end_offset = cur_offset + envelope_size;
11484            if 2 > max_ordinal {
11485                return Ok(());
11486            }
11487
11488            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11489            // are envelope_size bytes.
11490            let cur_offset: usize = (2 - 1) * envelope_size;
11491
11492            // Zero reserved fields.
11493            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11494
11495            // Safety:
11496            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11497            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11498            //   envelope_size bytes, there is always sufficient room.
11499            fidl::encoding::encode_in_envelope_optional::<u16, D>(
11500                self.port.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
11501                encoder,
11502                offset + cur_offset,
11503                depth,
11504            )?;
11505
11506            _prev_end_offset = cur_offset + envelope_size;
11507            if 3 > max_ordinal {
11508                return Ok(());
11509            }
11510
11511            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11512            // are envelope_size bytes.
11513            let cur_offset: usize = (3 - 1) * envelope_size;
11514
11515            // Zero reserved fields.
11516            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11517
11518            // Safety:
11519            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11520            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11521            //   envelope_size bytes, there is always sufficient room.
11522            fidl::encoding::encode_in_envelope_optional::<SrpServerAddressMode, D>(
11523                self.address_mode
11524                    .as_ref()
11525                    .map(<SrpServerAddressMode as fidl::encoding::ValueTypeMarker>::borrow),
11526                encoder,
11527                offset + cur_offset,
11528                depth,
11529            )?;
11530
11531            _prev_end_offset = cur_offset + envelope_size;
11532            if 4 > max_ordinal {
11533                return Ok(());
11534            }
11535
11536            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11537            // are envelope_size bytes.
11538            let cur_offset: usize = (4 - 1) * envelope_size;
11539
11540            // Zero reserved fields.
11541            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11542
11543            // Safety:
11544            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11545            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11546            //   envelope_size bytes, there is always sufficient room.
11547            fidl::encoding::encode_in_envelope_optional::<SrpServerResponseCounters, D>(
11548                self.response_counters
11549                    .as_ref()
11550                    .map(<SrpServerResponseCounters as fidl::encoding::ValueTypeMarker>::borrow),
11551                encoder,
11552                offset + cur_offset,
11553                depth,
11554            )?;
11555
11556            _prev_end_offset = cur_offset + envelope_size;
11557            if 5 > max_ordinal {
11558                return Ok(());
11559            }
11560
11561            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11562            // are envelope_size bytes.
11563            let cur_offset: usize = (5 - 1) * envelope_size;
11564
11565            // Zero reserved fields.
11566            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11567
11568            // Safety:
11569            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11570            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11571            //   envelope_size bytes, there is always sufficient room.
11572            fidl::encoding::encode_in_envelope_optional::<SrpServerRegistration, D>(
11573                self.hosts_registration
11574                    .as_ref()
11575                    .map(<SrpServerRegistration as fidl::encoding::ValueTypeMarker>::borrow),
11576                encoder,
11577                offset + cur_offset,
11578                depth,
11579            )?;
11580
11581            _prev_end_offset = cur_offset + envelope_size;
11582            if 6 > max_ordinal {
11583                return Ok(());
11584            }
11585
11586            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11587            // are envelope_size bytes.
11588            let cur_offset: usize = (6 - 1) * envelope_size;
11589
11590            // Zero reserved fields.
11591            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11592
11593            // Safety:
11594            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11595            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11596            //   envelope_size bytes, there is always sufficient room.
11597            fidl::encoding::encode_in_envelope_optional::<SrpServerRegistration, D>(
11598                self.services_registration
11599                    .as_ref()
11600                    .map(<SrpServerRegistration as fidl::encoding::ValueTypeMarker>::borrow),
11601                encoder,
11602                offset + cur_offset,
11603                depth,
11604            )?;
11605
11606            _prev_end_offset = cur_offset + envelope_size;
11607
11608            Ok(())
11609        }
11610    }
11611
11612    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SrpServerInfo {
11613        #[inline(always)]
11614        fn new_empty() -> Self {
11615            Self::default()
11616        }
11617
11618        unsafe fn decode(
11619            &mut self,
11620            decoder: &mut fidl::encoding::Decoder<'_, D>,
11621            offset: usize,
11622            mut depth: fidl::encoding::Depth,
11623        ) -> fidl::Result<()> {
11624            decoder.debug_check_bounds::<Self>(offset);
11625            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
11626                None => return Err(fidl::Error::NotNullable),
11627                Some(len) => len,
11628            };
11629            // Calling decoder.out_of_line_offset(0) is not allowed.
11630            if len == 0 {
11631                return Ok(());
11632            };
11633            depth.increment()?;
11634            let envelope_size = 8;
11635            let bytes_len = len * envelope_size;
11636            let offset = decoder.out_of_line_offset(bytes_len)?;
11637            // Decode the envelope for each type.
11638            let mut _next_ordinal_to_read = 0;
11639            let mut next_offset = offset;
11640            let end_offset = offset + bytes_len;
11641            _next_ordinal_to_read += 1;
11642            if next_offset >= end_offset {
11643                return Ok(());
11644            }
11645
11646            // Decode unknown envelopes for gaps in ordinals.
11647            while _next_ordinal_to_read < 1 {
11648                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11649                _next_ordinal_to_read += 1;
11650                next_offset += envelope_size;
11651            }
11652
11653            let next_out_of_line = decoder.next_out_of_line();
11654            let handles_before = decoder.remaining_handles();
11655            if let Some((inlined, num_bytes, num_handles)) =
11656                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11657            {
11658                let member_inline_size =
11659                    <SrpServerState as fidl::encoding::TypeMarker>::inline_size(decoder.context);
11660                if inlined != (member_inline_size <= 4) {
11661                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11662                }
11663                let inner_offset;
11664                let mut inner_depth = depth.clone();
11665                if inlined {
11666                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11667                    inner_offset = next_offset;
11668                } else {
11669                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11670                    inner_depth.increment()?;
11671                }
11672                let val_ref = self.state.get_or_insert_with(|| fidl::new_empty!(SrpServerState, D));
11673                fidl::decode!(SrpServerState, D, val_ref, decoder, inner_offset, inner_depth)?;
11674                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11675                {
11676                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11677                }
11678                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11679                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11680                }
11681            }
11682
11683            next_offset += envelope_size;
11684            _next_ordinal_to_read += 1;
11685            if next_offset >= end_offset {
11686                return Ok(());
11687            }
11688
11689            // Decode unknown envelopes for gaps in ordinals.
11690            while _next_ordinal_to_read < 2 {
11691                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11692                _next_ordinal_to_read += 1;
11693                next_offset += envelope_size;
11694            }
11695
11696            let next_out_of_line = decoder.next_out_of_line();
11697            let handles_before = decoder.remaining_handles();
11698            if let Some((inlined, num_bytes, num_handles)) =
11699                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11700            {
11701                let member_inline_size =
11702                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
11703                if inlined != (member_inline_size <= 4) {
11704                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11705                }
11706                let inner_offset;
11707                let mut inner_depth = depth.clone();
11708                if inlined {
11709                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11710                    inner_offset = next_offset;
11711                } else {
11712                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11713                    inner_depth.increment()?;
11714                }
11715                let val_ref = self.port.get_or_insert_with(|| fidl::new_empty!(u16, D));
11716                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
11717                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11718                {
11719                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11720                }
11721                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11722                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11723                }
11724            }
11725
11726            next_offset += envelope_size;
11727            _next_ordinal_to_read += 1;
11728            if next_offset >= end_offset {
11729                return Ok(());
11730            }
11731
11732            // Decode unknown envelopes for gaps in ordinals.
11733            while _next_ordinal_to_read < 3 {
11734                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11735                _next_ordinal_to_read += 1;
11736                next_offset += envelope_size;
11737            }
11738
11739            let next_out_of_line = decoder.next_out_of_line();
11740            let handles_before = decoder.remaining_handles();
11741            if let Some((inlined, num_bytes, num_handles)) =
11742                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11743            {
11744                let member_inline_size =
11745                    <SrpServerAddressMode as fidl::encoding::TypeMarker>::inline_size(
11746                        decoder.context,
11747                    );
11748                if inlined != (member_inline_size <= 4) {
11749                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11750                }
11751                let inner_offset;
11752                let mut inner_depth = depth.clone();
11753                if inlined {
11754                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11755                    inner_offset = next_offset;
11756                } else {
11757                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11758                    inner_depth.increment()?;
11759                }
11760                let val_ref = self
11761                    .address_mode
11762                    .get_or_insert_with(|| fidl::new_empty!(SrpServerAddressMode, D));
11763                fidl::decode!(
11764                    SrpServerAddressMode,
11765                    D,
11766                    val_ref,
11767                    decoder,
11768                    inner_offset,
11769                    inner_depth
11770                )?;
11771                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11772                {
11773                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11774                }
11775                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11776                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11777                }
11778            }
11779
11780            next_offset += envelope_size;
11781            _next_ordinal_to_read += 1;
11782            if next_offset >= end_offset {
11783                return Ok(());
11784            }
11785
11786            // Decode unknown envelopes for gaps in ordinals.
11787            while _next_ordinal_to_read < 4 {
11788                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11789                _next_ordinal_to_read += 1;
11790                next_offset += envelope_size;
11791            }
11792
11793            let next_out_of_line = decoder.next_out_of_line();
11794            let handles_before = decoder.remaining_handles();
11795            if let Some((inlined, num_bytes, num_handles)) =
11796                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11797            {
11798                let member_inline_size =
11799                    <SrpServerResponseCounters as fidl::encoding::TypeMarker>::inline_size(
11800                        decoder.context,
11801                    );
11802                if inlined != (member_inline_size <= 4) {
11803                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11804                }
11805                let inner_offset;
11806                let mut inner_depth = depth.clone();
11807                if inlined {
11808                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11809                    inner_offset = next_offset;
11810                } else {
11811                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11812                    inner_depth.increment()?;
11813                }
11814                let val_ref = self
11815                    .response_counters
11816                    .get_or_insert_with(|| fidl::new_empty!(SrpServerResponseCounters, D));
11817                fidl::decode!(
11818                    SrpServerResponseCounters,
11819                    D,
11820                    val_ref,
11821                    decoder,
11822                    inner_offset,
11823                    inner_depth
11824                )?;
11825                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11826                {
11827                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11828                }
11829                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11830                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11831                }
11832            }
11833
11834            next_offset += envelope_size;
11835            _next_ordinal_to_read += 1;
11836            if next_offset >= end_offset {
11837                return Ok(());
11838            }
11839
11840            // Decode unknown envelopes for gaps in ordinals.
11841            while _next_ordinal_to_read < 5 {
11842                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11843                _next_ordinal_to_read += 1;
11844                next_offset += envelope_size;
11845            }
11846
11847            let next_out_of_line = decoder.next_out_of_line();
11848            let handles_before = decoder.remaining_handles();
11849            if let Some((inlined, num_bytes, num_handles)) =
11850                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11851            {
11852                let member_inline_size =
11853                    <SrpServerRegistration as fidl::encoding::TypeMarker>::inline_size(
11854                        decoder.context,
11855                    );
11856                if inlined != (member_inline_size <= 4) {
11857                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11858                }
11859                let inner_offset;
11860                let mut inner_depth = depth.clone();
11861                if inlined {
11862                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11863                    inner_offset = next_offset;
11864                } else {
11865                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11866                    inner_depth.increment()?;
11867                }
11868                let val_ref = self
11869                    .hosts_registration
11870                    .get_or_insert_with(|| fidl::new_empty!(SrpServerRegistration, D));
11871                fidl::decode!(
11872                    SrpServerRegistration,
11873                    D,
11874                    val_ref,
11875                    decoder,
11876                    inner_offset,
11877                    inner_depth
11878                )?;
11879                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11880                {
11881                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11882                }
11883                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11884                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11885                }
11886            }
11887
11888            next_offset += envelope_size;
11889            _next_ordinal_to_read += 1;
11890            if next_offset >= end_offset {
11891                return Ok(());
11892            }
11893
11894            // Decode unknown envelopes for gaps in ordinals.
11895            while _next_ordinal_to_read < 6 {
11896                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11897                _next_ordinal_to_read += 1;
11898                next_offset += envelope_size;
11899            }
11900
11901            let next_out_of_line = decoder.next_out_of_line();
11902            let handles_before = decoder.remaining_handles();
11903            if let Some((inlined, num_bytes, num_handles)) =
11904                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11905            {
11906                let member_inline_size =
11907                    <SrpServerRegistration as fidl::encoding::TypeMarker>::inline_size(
11908                        decoder.context,
11909                    );
11910                if inlined != (member_inline_size <= 4) {
11911                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11912                }
11913                let inner_offset;
11914                let mut inner_depth = depth.clone();
11915                if inlined {
11916                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11917                    inner_offset = next_offset;
11918                } else {
11919                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11920                    inner_depth.increment()?;
11921                }
11922                let val_ref = self
11923                    .services_registration
11924                    .get_or_insert_with(|| fidl::new_empty!(SrpServerRegistration, D));
11925                fidl::decode!(
11926                    SrpServerRegistration,
11927                    D,
11928                    val_ref,
11929                    decoder,
11930                    inner_offset,
11931                    inner_depth
11932                )?;
11933                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11934                {
11935                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11936                }
11937                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11938                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11939                }
11940            }
11941
11942            next_offset += envelope_size;
11943
11944            // Decode the remaining unknown envelopes.
11945            while next_offset < end_offset {
11946                _next_ordinal_to_read += 1;
11947                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11948                next_offset += envelope_size;
11949            }
11950
11951            Ok(())
11952        }
11953    }
11954
11955    impl SrpServerRegistration {
11956        #[inline(always)]
11957        fn max_ordinal_present(&self) -> u64 {
11958            if let Some(_) = self.remaining_key_lease_time_total {
11959                return 6;
11960            }
11961            if let Some(_) = self.remaining_lease_time_total {
11962                return 5;
11963            }
11964            if let Some(_) = self.key_lease_time_total {
11965                return 4;
11966            }
11967            if let Some(_) = self.lease_time_total {
11968                return 3;
11969            }
11970            if let Some(_) = self.deleted_count {
11971                return 2;
11972            }
11973            if let Some(_) = self.fresh_count {
11974                return 1;
11975            }
11976            0
11977        }
11978    }
11979
11980    impl fidl::encoding::ValueTypeMarker for SrpServerRegistration {
11981        type Borrowed<'a> = &'a Self;
11982        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
11983            value
11984        }
11985    }
11986
11987    unsafe impl fidl::encoding::TypeMarker for SrpServerRegistration {
11988        type Owned = Self;
11989
11990        #[inline(always)]
11991        fn inline_align(_context: fidl::encoding::Context) -> usize {
11992            8
11993        }
11994
11995        #[inline(always)]
11996        fn inline_size(_context: fidl::encoding::Context) -> usize {
11997            16
11998        }
11999    }
12000
12001    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<SrpServerRegistration, D>
12002        for &SrpServerRegistration
12003    {
12004        unsafe fn encode(
12005            self,
12006            encoder: &mut fidl::encoding::Encoder<'_, D>,
12007            offset: usize,
12008            mut depth: fidl::encoding::Depth,
12009        ) -> fidl::Result<()> {
12010            encoder.debug_check_bounds::<SrpServerRegistration>(offset);
12011            // Vector header
12012            let max_ordinal: u64 = self.max_ordinal_present();
12013            encoder.write_num(max_ordinal, offset);
12014            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
12015            // Calling encoder.out_of_line_offset(0) is not allowed.
12016            if max_ordinal == 0 {
12017                return Ok(());
12018            }
12019            depth.increment()?;
12020            let envelope_size = 8;
12021            let bytes_len = max_ordinal as usize * envelope_size;
12022            #[allow(unused_variables)]
12023            let offset = encoder.out_of_line_offset(bytes_len);
12024            let mut _prev_end_offset: usize = 0;
12025            if 1 > max_ordinal {
12026                return Ok(());
12027            }
12028
12029            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
12030            // are envelope_size bytes.
12031            let cur_offset: usize = (1 - 1) * envelope_size;
12032
12033            // Zero reserved fields.
12034            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
12035
12036            // Safety:
12037            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
12038            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
12039            //   envelope_size bytes, there is always sufficient room.
12040            fidl::encoding::encode_in_envelope_optional::<u32, D>(
12041                self.fresh_count.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
12042                encoder,
12043                offset + cur_offset,
12044                depth,
12045            )?;
12046
12047            _prev_end_offset = cur_offset + envelope_size;
12048            if 2 > max_ordinal {
12049                return Ok(());
12050            }
12051
12052            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
12053            // are envelope_size bytes.
12054            let cur_offset: usize = (2 - 1) * envelope_size;
12055
12056            // Zero reserved fields.
12057            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
12058
12059            // Safety:
12060            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
12061            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
12062            //   envelope_size bytes, there is always sufficient room.
12063            fidl::encoding::encode_in_envelope_optional::<u32, D>(
12064                self.deleted_count.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
12065                encoder,
12066                offset + cur_offset,
12067                depth,
12068            )?;
12069
12070            _prev_end_offset = cur_offset + envelope_size;
12071            if 3 > max_ordinal {
12072                return Ok(());
12073            }
12074
12075            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
12076            // are envelope_size bytes.
12077            let cur_offset: usize = (3 - 1) * envelope_size;
12078
12079            // Zero reserved fields.
12080            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
12081
12082            // Safety:
12083            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
12084            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
12085            //   envelope_size bytes, there is always sufficient room.
12086            fidl::encoding::encode_in_envelope_optional::<i64, D>(
12087                self.lease_time_total
12088                    .as_ref()
12089                    .map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
12090                encoder,
12091                offset + cur_offset,
12092                depth,
12093            )?;
12094
12095            _prev_end_offset = cur_offset + envelope_size;
12096            if 4 > max_ordinal {
12097                return Ok(());
12098            }
12099
12100            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
12101            // are envelope_size bytes.
12102            let cur_offset: usize = (4 - 1) * envelope_size;
12103
12104            // Zero reserved fields.
12105            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
12106
12107            // Safety:
12108            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
12109            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
12110            //   envelope_size bytes, there is always sufficient room.
12111            fidl::encoding::encode_in_envelope_optional::<i64, D>(
12112                self.key_lease_time_total
12113                    .as_ref()
12114                    .map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
12115                encoder,
12116                offset + cur_offset,
12117                depth,
12118            )?;
12119
12120            _prev_end_offset = cur_offset + envelope_size;
12121            if 5 > max_ordinal {
12122                return Ok(());
12123            }
12124
12125            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
12126            // are envelope_size bytes.
12127            let cur_offset: usize = (5 - 1) * envelope_size;
12128
12129            // Zero reserved fields.
12130            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
12131
12132            // Safety:
12133            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
12134            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
12135            //   envelope_size bytes, there is always sufficient room.
12136            fidl::encoding::encode_in_envelope_optional::<i64, D>(
12137                self.remaining_lease_time_total
12138                    .as_ref()
12139                    .map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
12140                encoder,
12141                offset + cur_offset,
12142                depth,
12143            )?;
12144
12145            _prev_end_offset = cur_offset + envelope_size;
12146            if 6 > max_ordinal {
12147                return Ok(());
12148            }
12149
12150            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
12151            // are envelope_size bytes.
12152            let cur_offset: usize = (6 - 1) * envelope_size;
12153
12154            // Zero reserved fields.
12155            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
12156
12157            // Safety:
12158            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
12159            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
12160            //   envelope_size bytes, there is always sufficient room.
12161            fidl::encoding::encode_in_envelope_optional::<i64, D>(
12162                self.remaining_key_lease_time_total
12163                    .as_ref()
12164                    .map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
12165                encoder,
12166                offset + cur_offset,
12167                depth,
12168            )?;
12169
12170            _prev_end_offset = cur_offset + envelope_size;
12171
12172            Ok(())
12173        }
12174    }
12175
12176    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SrpServerRegistration {
12177        #[inline(always)]
12178        fn new_empty() -> Self {
12179            Self::default()
12180        }
12181
12182        unsafe fn decode(
12183            &mut self,
12184            decoder: &mut fidl::encoding::Decoder<'_, D>,
12185            offset: usize,
12186            mut depth: fidl::encoding::Depth,
12187        ) -> fidl::Result<()> {
12188            decoder.debug_check_bounds::<Self>(offset);
12189            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
12190                None => return Err(fidl::Error::NotNullable),
12191                Some(len) => len,
12192            };
12193            // Calling decoder.out_of_line_offset(0) is not allowed.
12194            if len == 0 {
12195                return Ok(());
12196            };
12197            depth.increment()?;
12198            let envelope_size = 8;
12199            let bytes_len = len * envelope_size;
12200            let offset = decoder.out_of_line_offset(bytes_len)?;
12201            // Decode the envelope for each type.
12202            let mut _next_ordinal_to_read = 0;
12203            let mut next_offset = offset;
12204            let end_offset = offset + bytes_len;
12205            _next_ordinal_to_read += 1;
12206            if next_offset >= end_offset {
12207                return Ok(());
12208            }
12209
12210            // Decode unknown envelopes for gaps in ordinals.
12211            while _next_ordinal_to_read < 1 {
12212                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12213                _next_ordinal_to_read += 1;
12214                next_offset += envelope_size;
12215            }
12216
12217            let next_out_of_line = decoder.next_out_of_line();
12218            let handles_before = decoder.remaining_handles();
12219            if let Some((inlined, num_bytes, num_handles)) =
12220                fidl::encoding::decode_envelope_header(decoder, next_offset)?
12221            {
12222                let member_inline_size =
12223                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
12224                if inlined != (member_inline_size <= 4) {
12225                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
12226                }
12227                let inner_offset;
12228                let mut inner_depth = depth.clone();
12229                if inlined {
12230                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
12231                    inner_offset = next_offset;
12232                } else {
12233                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
12234                    inner_depth.increment()?;
12235                }
12236                let val_ref = self.fresh_count.get_or_insert_with(|| fidl::new_empty!(u32, D));
12237                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
12238                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
12239                {
12240                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
12241                }
12242                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
12243                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
12244                }
12245            }
12246
12247            next_offset += envelope_size;
12248            _next_ordinal_to_read += 1;
12249            if next_offset >= end_offset {
12250                return Ok(());
12251            }
12252
12253            // Decode unknown envelopes for gaps in ordinals.
12254            while _next_ordinal_to_read < 2 {
12255                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12256                _next_ordinal_to_read += 1;
12257                next_offset += envelope_size;
12258            }
12259
12260            let next_out_of_line = decoder.next_out_of_line();
12261            let handles_before = decoder.remaining_handles();
12262            if let Some((inlined, num_bytes, num_handles)) =
12263                fidl::encoding::decode_envelope_header(decoder, next_offset)?
12264            {
12265                let member_inline_size =
12266                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
12267                if inlined != (member_inline_size <= 4) {
12268                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
12269                }
12270                let inner_offset;
12271                let mut inner_depth = depth.clone();
12272                if inlined {
12273                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
12274                    inner_offset = next_offset;
12275                } else {
12276                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
12277                    inner_depth.increment()?;
12278                }
12279                let val_ref = self.deleted_count.get_or_insert_with(|| fidl::new_empty!(u32, D));
12280                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
12281                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
12282                {
12283                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
12284                }
12285                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
12286                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
12287                }
12288            }
12289
12290            next_offset += envelope_size;
12291            _next_ordinal_to_read += 1;
12292            if next_offset >= end_offset {
12293                return Ok(());
12294            }
12295
12296            // Decode unknown envelopes for gaps in ordinals.
12297            while _next_ordinal_to_read < 3 {
12298                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12299                _next_ordinal_to_read += 1;
12300                next_offset += envelope_size;
12301            }
12302
12303            let next_out_of_line = decoder.next_out_of_line();
12304            let handles_before = decoder.remaining_handles();
12305            if let Some((inlined, num_bytes, num_handles)) =
12306                fidl::encoding::decode_envelope_header(decoder, next_offset)?
12307            {
12308                let member_inline_size =
12309                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
12310                if inlined != (member_inline_size <= 4) {
12311                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
12312                }
12313                let inner_offset;
12314                let mut inner_depth = depth.clone();
12315                if inlined {
12316                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
12317                    inner_offset = next_offset;
12318                } else {
12319                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
12320                    inner_depth.increment()?;
12321                }
12322                let val_ref = self.lease_time_total.get_or_insert_with(|| fidl::new_empty!(i64, D));
12323                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
12324                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
12325                {
12326                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
12327                }
12328                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
12329                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
12330                }
12331            }
12332
12333            next_offset += envelope_size;
12334            _next_ordinal_to_read += 1;
12335            if next_offset >= end_offset {
12336                return Ok(());
12337            }
12338
12339            // Decode unknown envelopes for gaps in ordinals.
12340            while _next_ordinal_to_read < 4 {
12341                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12342                _next_ordinal_to_read += 1;
12343                next_offset += envelope_size;
12344            }
12345
12346            let next_out_of_line = decoder.next_out_of_line();
12347            let handles_before = decoder.remaining_handles();
12348            if let Some((inlined, num_bytes, num_handles)) =
12349                fidl::encoding::decode_envelope_header(decoder, next_offset)?
12350            {
12351                let member_inline_size =
12352                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
12353                if inlined != (member_inline_size <= 4) {
12354                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
12355                }
12356                let inner_offset;
12357                let mut inner_depth = depth.clone();
12358                if inlined {
12359                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
12360                    inner_offset = next_offset;
12361                } else {
12362                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
12363                    inner_depth.increment()?;
12364                }
12365                let val_ref =
12366                    self.key_lease_time_total.get_or_insert_with(|| fidl::new_empty!(i64, D));
12367                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
12368                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
12369                {
12370                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
12371                }
12372                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
12373                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
12374                }
12375            }
12376
12377            next_offset += envelope_size;
12378            _next_ordinal_to_read += 1;
12379            if next_offset >= end_offset {
12380                return Ok(());
12381            }
12382
12383            // Decode unknown envelopes for gaps in ordinals.
12384            while _next_ordinal_to_read < 5 {
12385                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12386                _next_ordinal_to_read += 1;
12387                next_offset += envelope_size;
12388            }
12389
12390            let next_out_of_line = decoder.next_out_of_line();
12391            let handles_before = decoder.remaining_handles();
12392            if let Some((inlined, num_bytes, num_handles)) =
12393                fidl::encoding::decode_envelope_header(decoder, next_offset)?
12394            {
12395                let member_inline_size =
12396                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
12397                if inlined != (member_inline_size <= 4) {
12398                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
12399                }
12400                let inner_offset;
12401                let mut inner_depth = depth.clone();
12402                if inlined {
12403                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
12404                    inner_offset = next_offset;
12405                } else {
12406                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
12407                    inner_depth.increment()?;
12408                }
12409                let val_ref =
12410                    self.remaining_lease_time_total.get_or_insert_with(|| fidl::new_empty!(i64, D));
12411                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
12412                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
12413                {
12414                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
12415                }
12416                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
12417                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
12418                }
12419            }
12420
12421            next_offset += envelope_size;
12422            _next_ordinal_to_read += 1;
12423            if next_offset >= end_offset {
12424                return Ok(());
12425            }
12426
12427            // Decode unknown envelopes for gaps in ordinals.
12428            while _next_ordinal_to_read < 6 {
12429                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12430                _next_ordinal_to_read += 1;
12431                next_offset += envelope_size;
12432            }
12433
12434            let next_out_of_line = decoder.next_out_of_line();
12435            let handles_before = decoder.remaining_handles();
12436            if let Some((inlined, num_bytes, num_handles)) =
12437                fidl::encoding::decode_envelope_header(decoder, next_offset)?
12438            {
12439                let member_inline_size =
12440                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
12441                if inlined != (member_inline_size <= 4) {
12442                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
12443                }
12444                let inner_offset;
12445                let mut inner_depth = depth.clone();
12446                if inlined {
12447                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
12448                    inner_offset = next_offset;
12449                } else {
12450                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
12451                    inner_depth.increment()?;
12452                }
12453                let val_ref = self
12454                    .remaining_key_lease_time_total
12455                    .get_or_insert_with(|| fidl::new_empty!(i64, D));
12456                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
12457                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
12458                {
12459                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
12460                }
12461                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
12462                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
12463                }
12464            }
12465
12466            next_offset += envelope_size;
12467
12468            // Decode the remaining unknown envelopes.
12469            while next_offset < end_offset {
12470                _next_ordinal_to_read += 1;
12471                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12472                next_offset += envelope_size;
12473            }
12474
12475            Ok(())
12476        }
12477    }
12478
12479    impl SrpServerResponseCounters {
12480        #[inline(always)]
12481        fn max_ordinal_present(&self) -> u64 {
12482            if let Some(_) = self.other_response {
12483                return 6;
12484            }
12485            if let Some(_) = self.refused_response {
12486                return 5;
12487            }
12488            if let Some(_) = self.name_exists_response {
12489                return 4;
12490            }
12491            if let Some(_) = self.format_error_response {
12492                return 3;
12493            }
12494            if let Some(_) = self.server_failure_response {
12495                return 2;
12496            }
12497            if let Some(_) = self.success_response {
12498                return 1;
12499            }
12500            0
12501        }
12502    }
12503
12504    impl fidl::encoding::ValueTypeMarker for SrpServerResponseCounters {
12505        type Borrowed<'a> = &'a Self;
12506        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
12507            value
12508        }
12509    }
12510
12511    unsafe impl fidl::encoding::TypeMarker for SrpServerResponseCounters {
12512        type Owned = Self;
12513
12514        #[inline(always)]
12515        fn inline_align(_context: fidl::encoding::Context) -> usize {
12516            8
12517        }
12518
12519        #[inline(always)]
12520        fn inline_size(_context: fidl::encoding::Context) -> usize {
12521            16
12522        }
12523    }
12524
12525    unsafe impl<D: fidl::encoding::ResourceDialect>
12526        fidl::encoding::Encode<SrpServerResponseCounters, D> for &SrpServerResponseCounters
12527    {
12528        unsafe fn encode(
12529            self,
12530            encoder: &mut fidl::encoding::Encoder<'_, D>,
12531            offset: usize,
12532            mut depth: fidl::encoding::Depth,
12533        ) -> fidl::Result<()> {
12534            encoder.debug_check_bounds::<SrpServerResponseCounters>(offset);
12535            // Vector header
12536            let max_ordinal: u64 = self.max_ordinal_present();
12537            encoder.write_num(max_ordinal, offset);
12538            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
12539            // Calling encoder.out_of_line_offset(0) is not allowed.
12540            if max_ordinal == 0 {
12541                return Ok(());
12542            }
12543            depth.increment()?;
12544            let envelope_size = 8;
12545            let bytes_len = max_ordinal as usize * envelope_size;
12546            #[allow(unused_variables)]
12547            let offset = encoder.out_of_line_offset(bytes_len);
12548            let mut _prev_end_offset: usize = 0;
12549            if 1 > max_ordinal {
12550                return Ok(());
12551            }
12552
12553            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
12554            // are envelope_size bytes.
12555            let cur_offset: usize = (1 - 1) * envelope_size;
12556
12557            // Zero reserved fields.
12558            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
12559
12560            // Safety:
12561            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
12562            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
12563            //   envelope_size bytes, there is always sufficient room.
12564            fidl::encoding::encode_in_envelope_optional::<u32, D>(
12565                self.success_response
12566                    .as_ref()
12567                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
12568                encoder,
12569                offset + cur_offset,
12570                depth,
12571            )?;
12572
12573            _prev_end_offset = cur_offset + envelope_size;
12574            if 2 > max_ordinal {
12575                return Ok(());
12576            }
12577
12578            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
12579            // are envelope_size bytes.
12580            let cur_offset: usize = (2 - 1) * envelope_size;
12581
12582            // Zero reserved fields.
12583            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
12584
12585            // Safety:
12586            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
12587            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
12588            //   envelope_size bytes, there is always sufficient room.
12589            fidl::encoding::encode_in_envelope_optional::<u32, D>(
12590                self.server_failure_response
12591                    .as_ref()
12592                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
12593                encoder,
12594                offset + cur_offset,
12595                depth,
12596            )?;
12597
12598            _prev_end_offset = cur_offset + envelope_size;
12599            if 3 > max_ordinal {
12600                return Ok(());
12601            }
12602
12603            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
12604            // are envelope_size bytes.
12605            let cur_offset: usize = (3 - 1) * envelope_size;
12606
12607            // Zero reserved fields.
12608            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
12609
12610            // Safety:
12611            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
12612            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
12613            //   envelope_size bytes, there is always sufficient room.
12614            fidl::encoding::encode_in_envelope_optional::<u32, D>(
12615                self.format_error_response
12616                    .as_ref()
12617                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
12618                encoder,
12619                offset + cur_offset,
12620                depth,
12621            )?;
12622
12623            _prev_end_offset = cur_offset + envelope_size;
12624            if 4 > max_ordinal {
12625                return Ok(());
12626            }
12627
12628            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
12629            // are envelope_size bytes.
12630            let cur_offset: usize = (4 - 1) * envelope_size;
12631
12632            // Zero reserved fields.
12633            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
12634
12635            // Safety:
12636            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
12637            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
12638            //   envelope_size bytes, there is always sufficient room.
12639            fidl::encoding::encode_in_envelope_optional::<u32, D>(
12640                self.name_exists_response
12641                    .as_ref()
12642                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
12643                encoder,
12644                offset + cur_offset,
12645                depth,
12646            )?;
12647
12648            _prev_end_offset = cur_offset + envelope_size;
12649            if 5 > max_ordinal {
12650                return Ok(());
12651            }
12652
12653            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
12654            // are envelope_size bytes.
12655            let cur_offset: usize = (5 - 1) * envelope_size;
12656
12657            // Zero reserved fields.
12658            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
12659
12660            // Safety:
12661            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
12662            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
12663            //   envelope_size bytes, there is always sufficient room.
12664            fidl::encoding::encode_in_envelope_optional::<u32, D>(
12665                self.refused_response
12666                    .as_ref()
12667                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
12668                encoder,
12669                offset + cur_offset,
12670                depth,
12671            )?;
12672
12673            _prev_end_offset = cur_offset + envelope_size;
12674            if 6 > max_ordinal {
12675                return Ok(());
12676            }
12677
12678            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
12679            // are envelope_size bytes.
12680            let cur_offset: usize = (6 - 1) * envelope_size;
12681
12682            // Zero reserved fields.
12683            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
12684
12685            // Safety:
12686            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
12687            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
12688            //   envelope_size bytes, there is always sufficient room.
12689            fidl::encoding::encode_in_envelope_optional::<u32, D>(
12690                self.other_response.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
12691                encoder,
12692                offset + cur_offset,
12693                depth,
12694            )?;
12695
12696            _prev_end_offset = cur_offset + envelope_size;
12697
12698            Ok(())
12699        }
12700    }
12701
12702    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
12703        for SrpServerResponseCounters
12704    {
12705        #[inline(always)]
12706        fn new_empty() -> Self {
12707            Self::default()
12708        }
12709
12710        unsafe fn decode(
12711            &mut self,
12712            decoder: &mut fidl::encoding::Decoder<'_, D>,
12713            offset: usize,
12714            mut depth: fidl::encoding::Depth,
12715        ) -> fidl::Result<()> {
12716            decoder.debug_check_bounds::<Self>(offset);
12717            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
12718                None => return Err(fidl::Error::NotNullable),
12719                Some(len) => len,
12720            };
12721            // Calling decoder.out_of_line_offset(0) is not allowed.
12722            if len == 0 {
12723                return Ok(());
12724            };
12725            depth.increment()?;
12726            let envelope_size = 8;
12727            let bytes_len = len * envelope_size;
12728            let offset = decoder.out_of_line_offset(bytes_len)?;
12729            // Decode the envelope for each type.
12730            let mut _next_ordinal_to_read = 0;
12731            let mut next_offset = offset;
12732            let end_offset = offset + bytes_len;
12733            _next_ordinal_to_read += 1;
12734            if next_offset >= end_offset {
12735                return Ok(());
12736            }
12737
12738            // Decode unknown envelopes for gaps in ordinals.
12739            while _next_ordinal_to_read < 1 {
12740                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12741                _next_ordinal_to_read += 1;
12742                next_offset += envelope_size;
12743            }
12744
12745            let next_out_of_line = decoder.next_out_of_line();
12746            let handles_before = decoder.remaining_handles();
12747            if let Some((inlined, num_bytes, num_handles)) =
12748                fidl::encoding::decode_envelope_header(decoder, next_offset)?
12749            {
12750                let member_inline_size =
12751                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
12752                if inlined != (member_inline_size <= 4) {
12753                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
12754                }
12755                let inner_offset;
12756                let mut inner_depth = depth.clone();
12757                if inlined {
12758                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
12759                    inner_offset = next_offset;
12760                } else {
12761                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
12762                    inner_depth.increment()?;
12763                }
12764                let val_ref = self.success_response.get_or_insert_with(|| fidl::new_empty!(u32, D));
12765                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
12766                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
12767                {
12768                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
12769                }
12770                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
12771                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
12772                }
12773            }
12774
12775            next_offset += envelope_size;
12776            _next_ordinal_to_read += 1;
12777            if next_offset >= end_offset {
12778                return Ok(());
12779            }
12780
12781            // Decode unknown envelopes for gaps in ordinals.
12782            while _next_ordinal_to_read < 2 {
12783                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12784                _next_ordinal_to_read += 1;
12785                next_offset += envelope_size;
12786            }
12787
12788            let next_out_of_line = decoder.next_out_of_line();
12789            let handles_before = decoder.remaining_handles();
12790            if let Some((inlined, num_bytes, num_handles)) =
12791                fidl::encoding::decode_envelope_header(decoder, next_offset)?
12792            {
12793                let member_inline_size =
12794                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
12795                if inlined != (member_inline_size <= 4) {
12796                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
12797                }
12798                let inner_offset;
12799                let mut inner_depth = depth.clone();
12800                if inlined {
12801                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
12802                    inner_offset = next_offset;
12803                } else {
12804                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
12805                    inner_depth.increment()?;
12806                }
12807                let val_ref =
12808                    self.server_failure_response.get_or_insert_with(|| fidl::new_empty!(u32, D));
12809                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
12810                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
12811                {
12812                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
12813                }
12814                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
12815                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
12816                }
12817            }
12818
12819            next_offset += envelope_size;
12820            _next_ordinal_to_read += 1;
12821            if next_offset >= end_offset {
12822                return Ok(());
12823            }
12824
12825            // Decode unknown envelopes for gaps in ordinals.
12826            while _next_ordinal_to_read < 3 {
12827                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12828                _next_ordinal_to_read += 1;
12829                next_offset += envelope_size;
12830            }
12831
12832            let next_out_of_line = decoder.next_out_of_line();
12833            let handles_before = decoder.remaining_handles();
12834            if let Some((inlined, num_bytes, num_handles)) =
12835                fidl::encoding::decode_envelope_header(decoder, next_offset)?
12836            {
12837                let member_inline_size =
12838                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
12839                if inlined != (member_inline_size <= 4) {
12840                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
12841                }
12842                let inner_offset;
12843                let mut inner_depth = depth.clone();
12844                if inlined {
12845                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
12846                    inner_offset = next_offset;
12847                } else {
12848                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
12849                    inner_depth.increment()?;
12850                }
12851                let val_ref =
12852                    self.format_error_response.get_or_insert_with(|| fidl::new_empty!(u32, D));
12853                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
12854                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
12855                {
12856                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
12857                }
12858                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
12859                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
12860                }
12861            }
12862
12863            next_offset += envelope_size;
12864            _next_ordinal_to_read += 1;
12865            if next_offset >= end_offset {
12866                return Ok(());
12867            }
12868
12869            // Decode unknown envelopes for gaps in ordinals.
12870            while _next_ordinal_to_read < 4 {
12871                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12872                _next_ordinal_to_read += 1;
12873                next_offset += envelope_size;
12874            }
12875
12876            let next_out_of_line = decoder.next_out_of_line();
12877            let handles_before = decoder.remaining_handles();
12878            if let Some((inlined, num_bytes, num_handles)) =
12879                fidl::encoding::decode_envelope_header(decoder, next_offset)?
12880            {
12881                let member_inline_size =
12882                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
12883                if inlined != (member_inline_size <= 4) {
12884                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
12885                }
12886                let inner_offset;
12887                let mut inner_depth = depth.clone();
12888                if inlined {
12889                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
12890                    inner_offset = next_offset;
12891                } else {
12892                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
12893                    inner_depth.increment()?;
12894                }
12895                let val_ref =
12896                    self.name_exists_response.get_or_insert_with(|| fidl::new_empty!(u32, D));
12897                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
12898                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
12899                {
12900                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
12901                }
12902                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
12903                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
12904                }
12905            }
12906
12907            next_offset += envelope_size;
12908            _next_ordinal_to_read += 1;
12909            if next_offset >= end_offset {
12910                return Ok(());
12911            }
12912
12913            // Decode unknown envelopes for gaps in ordinals.
12914            while _next_ordinal_to_read < 5 {
12915                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12916                _next_ordinal_to_read += 1;
12917                next_offset += envelope_size;
12918            }
12919
12920            let next_out_of_line = decoder.next_out_of_line();
12921            let handles_before = decoder.remaining_handles();
12922            if let Some((inlined, num_bytes, num_handles)) =
12923                fidl::encoding::decode_envelope_header(decoder, next_offset)?
12924            {
12925                let member_inline_size =
12926                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
12927                if inlined != (member_inline_size <= 4) {
12928                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
12929                }
12930                let inner_offset;
12931                let mut inner_depth = depth.clone();
12932                if inlined {
12933                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
12934                    inner_offset = next_offset;
12935                } else {
12936                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
12937                    inner_depth.increment()?;
12938                }
12939                let val_ref = self.refused_response.get_or_insert_with(|| fidl::new_empty!(u32, D));
12940                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
12941                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
12942                {
12943                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
12944                }
12945                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
12946                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
12947                }
12948            }
12949
12950            next_offset += envelope_size;
12951            _next_ordinal_to_read += 1;
12952            if next_offset >= end_offset {
12953                return Ok(());
12954            }
12955
12956            // Decode unknown envelopes for gaps in ordinals.
12957            while _next_ordinal_to_read < 6 {
12958                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12959                _next_ordinal_to_read += 1;
12960                next_offset += envelope_size;
12961            }
12962
12963            let next_out_of_line = decoder.next_out_of_line();
12964            let handles_before = decoder.remaining_handles();
12965            if let Some((inlined, num_bytes, num_handles)) =
12966                fidl::encoding::decode_envelope_header(decoder, next_offset)?
12967            {
12968                let member_inline_size =
12969                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
12970                if inlined != (member_inline_size <= 4) {
12971                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
12972                }
12973                let inner_offset;
12974                let mut inner_depth = depth.clone();
12975                if inlined {
12976                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
12977                    inner_offset = next_offset;
12978                } else {
12979                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
12980                    inner_depth.increment()?;
12981                }
12982                let val_ref = self.other_response.get_or_insert_with(|| fidl::new_empty!(u32, D));
12983                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
12984                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
12985                {
12986                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
12987                }
12988                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
12989                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
12990                }
12991            }
12992
12993            next_offset += envelope_size;
12994
12995            // Decode the remaining unknown envelopes.
12996            while next_offset < end_offset {
12997                _next_ordinal_to_read += 1;
12998                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12999                next_offset += envelope_size;
13000            }
13001
13002            Ok(())
13003        }
13004    }
13005
13006    impl Telemetry {
13007        #[inline(always)]
13008        fn max_ordinal_present(&self) -> u64 {
13009            if let Some(_) = self.multi_ail_detected {
13010                return 26;
13011            }
13012            if let Some(_) = self.border_agent_counters {
13013                return 25;
13014            }
13015            if let Some(_) = self.link_metrics_entries {
13016                return 24;
13017            }
13018            if let Some(_) = self.dhcp6pd_info {
13019                return 23;
13020            }
13021            if let Some(_) = self.upstream_dns_info {
13022                return 22;
13023            }
13024            if let Some(_) = self.trel_peers_info {
13025                return 21;
13026            }
13027            if let Some(_) = self.trel_counters {
13028                return 20;
13029            }
13030            if let Some(_) = self.nat64_info {
13031                return 19;
13032            }
13033            if let Some(_) = self.uptime {
13034                return 18;
13035            }
13036            if let Some(_) = self.leader_data {
13037                return 17;
13038            }
13039            if let Some(_) = self.dnssd_counters {
13040                return 16;
13041            }
13042            if let Some(_) = self.srp_server_info {
13043                return 15;
13044            }
13045            if let Some(_) = self.thread_border_routing_counters {
13046                return 14;
13047            }
13048            if let Some(_) = self.thread_stable_network_data {
13049                return 13;
13050            }
13051            if let Some(_) = self.thread_network_data {
13052                return 12;
13053            }
13054            if let Some(_) = self.thread_stable_network_data_version {
13055                return 11;
13056            }
13057            if let Some(_) = self.thread_network_data_version {
13058                return 10;
13059            }
13060            if let Some(_) = self.thread_rloc {
13061                return 9;
13062            }
13063            if let Some(_) = self.thread_router_id {
13064                return 8;
13065            }
13066            if let Some(_) = self.thread_link_mode {
13067                return 7;
13068            }
13069            if let Some(_) = self.rcp_version {
13070                return 6;
13071            }
13072            if let Some(_) = self.stack_version {
13073                return 5;
13074            }
13075            if let Some(_) = self.partition_id {
13076                return 4;
13077            }
13078            if let Some(_) = self.channel_index {
13079                return 3;
13080            }
13081            if let Some(_) = self.tx_power {
13082                return 2;
13083            }
13084            if let Some(_) = self.rssi {
13085                return 1;
13086            }
13087            0
13088        }
13089    }
13090
13091    impl fidl::encoding::ValueTypeMarker for Telemetry {
13092        type Borrowed<'a> = &'a Self;
13093        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
13094            value
13095        }
13096    }
13097
13098    unsafe impl fidl::encoding::TypeMarker for Telemetry {
13099        type Owned = Self;
13100
13101        #[inline(always)]
13102        fn inline_align(_context: fidl::encoding::Context) -> usize {
13103            8
13104        }
13105
13106        #[inline(always)]
13107        fn inline_size(_context: fidl::encoding::Context) -> usize {
13108            16
13109        }
13110    }
13111
13112    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Telemetry, D>
13113        for &Telemetry
13114    {
13115        unsafe fn encode(
13116            self,
13117            encoder: &mut fidl::encoding::Encoder<'_, D>,
13118            offset: usize,
13119            mut depth: fidl::encoding::Depth,
13120        ) -> fidl::Result<()> {
13121            encoder.debug_check_bounds::<Telemetry>(offset);
13122            // Vector header
13123            let max_ordinal: u64 = self.max_ordinal_present();
13124            encoder.write_num(max_ordinal, offset);
13125            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
13126            // Calling encoder.out_of_line_offset(0) is not allowed.
13127            if max_ordinal == 0 {
13128                return Ok(());
13129            }
13130            depth.increment()?;
13131            let envelope_size = 8;
13132            let bytes_len = max_ordinal as usize * envelope_size;
13133            #[allow(unused_variables)]
13134            let offset = encoder.out_of_line_offset(bytes_len);
13135            let mut _prev_end_offset: usize = 0;
13136            if 1 > max_ordinal {
13137                return Ok(());
13138            }
13139
13140            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13141            // are envelope_size bytes.
13142            let cur_offset: usize = (1 - 1) * envelope_size;
13143
13144            // Zero reserved fields.
13145            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13146
13147            // Safety:
13148            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13149            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13150            //   envelope_size bytes, there is always sufficient room.
13151            fidl::encoding::encode_in_envelope_optional::<i8, D>(
13152                self.rssi.as_ref().map(<i8 as fidl::encoding::ValueTypeMarker>::borrow),
13153                encoder,
13154                offset + cur_offset,
13155                depth,
13156            )?;
13157
13158            _prev_end_offset = cur_offset + envelope_size;
13159            if 2 > max_ordinal {
13160                return Ok(());
13161            }
13162
13163            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13164            // are envelope_size bytes.
13165            let cur_offset: usize = (2 - 1) * envelope_size;
13166
13167            // Zero reserved fields.
13168            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13169
13170            // Safety:
13171            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13172            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13173            //   envelope_size bytes, there is always sufficient room.
13174            fidl::encoding::encode_in_envelope_optional::<i8, D>(
13175                self.tx_power.as_ref().map(<i8 as fidl::encoding::ValueTypeMarker>::borrow),
13176                encoder,
13177                offset + cur_offset,
13178                depth,
13179            )?;
13180
13181            _prev_end_offset = cur_offset + envelope_size;
13182            if 3 > max_ordinal {
13183                return Ok(());
13184            }
13185
13186            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13187            // are envelope_size bytes.
13188            let cur_offset: usize = (3 - 1) * envelope_size;
13189
13190            // Zero reserved fields.
13191            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13192
13193            // Safety:
13194            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13195            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13196            //   envelope_size bytes, there is always sufficient room.
13197            fidl::encoding::encode_in_envelope_optional::<u16, D>(
13198                self.channel_index.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
13199                encoder,
13200                offset + cur_offset,
13201                depth,
13202            )?;
13203
13204            _prev_end_offset = cur_offset + envelope_size;
13205            if 4 > max_ordinal {
13206                return Ok(());
13207            }
13208
13209            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13210            // are envelope_size bytes.
13211            let cur_offset: usize = (4 - 1) * envelope_size;
13212
13213            // Zero reserved fields.
13214            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13215
13216            // Safety:
13217            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13218            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13219            //   envelope_size bytes, there is always sufficient room.
13220            fidl::encoding::encode_in_envelope_optional::<u32, D>(
13221                self.partition_id.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
13222                encoder,
13223                offset + cur_offset,
13224                depth,
13225            )?;
13226
13227            _prev_end_offset = cur_offset + envelope_size;
13228            if 5 > max_ordinal {
13229                return Ok(());
13230            }
13231
13232            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13233            // are envelope_size bytes.
13234            let cur_offset: usize = (5 - 1) * envelope_size;
13235
13236            // Zero reserved fields.
13237            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13238
13239            // Safety:
13240            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13241            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13242            //   envelope_size bytes, there is always sufficient room.
13243            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<256>, D>(
13244                self.stack_version.as_ref().map(
13245                    <fidl::encoding::BoundedString<256> as fidl::encoding::ValueTypeMarker>::borrow,
13246                ),
13247                encoder,
13248                offset + cur_offset,
13249                depth,
13250            )?;
13251
13252            _prev_end_offset = cur_offset + envelope_size;
13253            if 6 > max_ordinal {
13254                return Ok(());
13255            }
13256
13257            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13258            // are envelope_size bytes.
13259            let cur_offset: usize = (6 - 1) * envelope_size;
13260
13261            // Zero reserved fields.
13262            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13263
13264            // Safety:
13265            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13266            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13267            //   envelope_size bytes, there is always sufficient room.
13268            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<256>, D>(
13269                self.rcp_version.as_ref().map(
13270                    <fidl::encoding::BoundedString<256> as fidl::encoding::ValueTypeMarker>::borrow,
13271                ),
13272                encoder,
13273                offset + cur_offset,
13274                depth,
13275            )?;
13276
13277            _prev_end_offset = cur_offset + envelope_size;
13278            if 7 > max_ordinal {
13279                return Ok(());
13280            }
13281
13282            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13283            // are envelope_size bytes.
13284            let cur_offset: usize = (7 - 1) * envelope_size;
13285
13286            // Zero reserved fields.
13287            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13288
13289            // Safety:
13290            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13291            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13292            //   envelope_size bytes, there is always sufficient room.
13293            fidl::encoding::encode_in_envelope_optional::<u8, D>(
13294                self.thread_link_mode.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
13295                encoder,
13296                offset + cur_offset,
13297                depth,
13298            )?;
13299
13300            _prev_end_offset = cur_offset + envelope_size;
13301            if 8 > max_ordinal {
13302                return Ok(());
13303            }
13304
13305            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13306            // are envelope_size bytes.
13307            let cur_offset: usize = (8 - 1) * envelope_size;
13308
13309            // Zero reserved fields.
13310            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13311
13312            // Safety:
13313            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13314            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13315            //   envelope_size bytes, there is always sufficient room.
13316            fidl::encoding::encode_in_envelope_optional::<u8, D>(
13317                self.thread_router_id.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
13318                encoder,
13319                offset + cur_offset,
13320                depth,
13321            )?;
13322
13323            _prev_end_offset = cur_offset + envelope_size;
13324            if 9 > max_ordinal {
13325                return Ok(());
13326            }
13327
13328            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13329            // are envelope_size bytes.
13330            let cur_offset: usize = (9 - 1) * envelope_size;
13331
13332            // Zero reserved fields.
13333            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13334
13335            // Safety:
13336            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13337            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13338            //   envelope_size bytes, there is always sufficient room.
13339            fidl::encoding::encode_in_envelope_optional::<u16, D>(
13340                self.thread_rloc.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
13341                encoder,
13342                offset + cur_offset,
13343                depth,
13344            )?;
13345
13346            _prev_end_offset = cur_offset + envelope_size;
13347            if 10 > max_ordinal {
13348                return Ok(());
13349            }
13350
13351            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13352            // are envelope_size bytes.
13353            let cur_offset: usize = (10 - 1) * envelope_size;
13354
13355            // Zero reserved fields.
13356            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13357
13358            // Safety:
13359            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13360            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13361            //   envelope_size bytes, there is always sufficient room.
13362            fidl::encoding::encode_in_envelope_optional::<u8, D>(
13363                self.thread_network_data_version
13364                    .as_ref()
13365                    .map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
13366                encoder,
13367                offset + cur_offset,
13368                depth,
13369            )?;
13370
13371            _prev_end_offset = cur_offset + envelope_size;
13372            if 11 > max_ordinal {
13373                return Ok(());
13374            }
13375
13376            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13377            // are envelope_size bytes.
13378            let cur_offset: usize = (11 - 1) * envelope_size;
13379
13380            // Zero reserved fields.
13381            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13382
13383            // Safety:
13384            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13385            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13386            //   envelope_size bytes, there is always sufficient room.
13387            fidl::encoding::encode_in_envelope_optional::<u8, D>(
13388                self.thread_stable_network_data_version
13389                    .as_ref()
13390                    .map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
13391                encoder,
13392                offset + cur_offset,
13393                depth,
13394            )?;
13395
13396            _prev_end_offset = cur_offset + envelope_size;
13397            if 12 > max_ordinal {
13398                return Ok(());
13399            }
13400
13401            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13402            // are envelope_size bytes.
13403            let cur_offset: usize = (12 - 1) * envelope_size;
13404
13405            // Zero reserved fields.
13406            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13407
13408            // Safety:
13409            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13410            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13411            //   envelope_size bytes, there is always sufficient room.
13412            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u8, 255>, D>(
13413                self.thread_network_data.as_ref().map(
13414                    <fidl::encoding::Vector<u8, 255> as fidl::encoding::ValueTypeMarker>::borrow,
13415                ),
13416                encoder,
13417                offset + cur_offset,
13418                depth,
13419            )?;
13420
13421            _prev_end_offset = cur_offset + envelope_size;
13422            if 13 > max_ordinal {
13423                return Ok(());
13424            }
13425
13426            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13427            // are envelope_size bytes.
13428            let cur_offset: usize = (13 - 1) * envelope_size;
13429
13430            // Zero reserved fields.
13431            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13432
13433            // Safety:
13434            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13435            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13436            //   envelope_size bytes, there is always sufficient room.
13437            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u8, 255>, D>(
13438                self.thread_stable_network_data.as_ref().map(
13439                    <fidl::encoding::Vector<u8, 255> as fidl::encoding::ValueTypeMarker>::borrow,
13440                ),
13441                encoder,
13442                offset + cur_offset,
13443                depth,
13444            )?;
13445
13446            _prev_end_offset = cur_offset + envelope_size;
13447            if 14 > max_ordinal {
13448                return Ok(());
13449            }
13450
13451            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13452            // are envelope_size bytes.
13453            let cur_offset: usize = (14 - 1) * envelope_size;
13454
13455            // Zero reserved fields.
13456            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13457
13458            // Safety:
13459            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13460            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13461            //   envelope_size bytes, there is always sufficient room.
13462            fidl::encoding::encode_in_envelope_optional::<BorderRoutingCounters, D>(
13463                self.thread_border_routing_counters
13464                    .as_ref()
13465                    .map(<BorderRoutingCounters as fidl::encoding::ValueTypeMarker>::borrow),
13466                encoder,
13467                offset + cur_offset,
13468                depth,
13469            )?;
13470
13471            _prev_end_offset = cur_offset + envelope_size;
13472            if 15 > max_ordinal {
13473                return Ok(());
13474            }
13475
13476            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13477            // are envelope_size bytes.
13478            let cur_offset: usize = (15 - 1) * envelope_size;
13479
13480            // Zero reserved fields.
13481            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13482
13483            // Safety:
13484            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13485            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13486            //   envelope_size bytes, there is always sufficient room.
13487            fidl::encoding::encode_in_envelope_optional::<SrpServerInfo, D>(
13488                self.srp_server_info
13489                    .as_ref()
13490                    .map(<SrpServerInfo as fidl::encoding::ValueTypeMarker>::borrow),
13491                encoder,
13492                offset + cur_offset,
13493                depth,
13494            )?;
13495
13496            _prev_end_offset = cur_offset + envelope_size;
13497            if 16 > max_ordinal {
13498                return Ok(());
13499            }
13500
13501            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13502            // are envelope_size bytes.
13503            let cur_offset: usize = (16 - 1) * envelope_size;
13504
13505            // Zero reserved fields.
13506            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13507
13508            // Safety:
13509            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13510            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13511            //   envelope_size bytes, there is always sufficient room.
13512            fidl::encoding::encode_in_envelope_optional::<DnssdCounters, D>(
13513                self.dnssd_counters
13514                    .as_ref()
13515                    .map(<DnssdCounters as fidl::encoding::ValueTypeMarker>::borrow),
13516                encoder,
13517                offset + cur_offset,
13518                depth,
13519            )?;
13520
13521            _prev_end_offset = cur_offset + envelope_size;
13522            if 17 > max_ordinal {
13523                return Ok(());
13524            }
13525
13526            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13527            // are envelope_size bytes.
13528            let cur_offset: usize = (17 - 1) * envelope_size;
13529
13530            // Zero reserved fields.
13531            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13532
13533            // Safety:
13534            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13535            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13536            //   envelope_size bytes, there is always sufficient room.
13537            fidl::encoding::encode_in_envelope_optional::<LeaderData, D>(
13538                self.leader_data
13539                    .as_ref()
13540                    .map(<LeaderData as fidl::encoding::ValueTypeMarker>::borrow),
13541                encoder,
13542                offset + cur_offset,
13543                depth,
13544            )?;
13545
13546            _prev_end_offset = cur_offset + envelope_size;
13547            if 18 > max_ordinal {
13548                return Ok(());
13549            }
13550
13551            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13552            // are envelope_size bytes.
13553            let cur_offset: usize = (18 - 1) * envelope_size;
13554
13555            // Zero reserved fields.
13556            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13557
13558            // Safety:
13559            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13560            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13561            //   envelope_size bytes, there is always sufficient room.
13562            fidl::encoding::encode_in_envelope_optional::<i64, D>(
13563                self.uptime.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
13564                encoder,
13565                offset + cur_offset,
13566                depth,
13567            )?;
13568
13569            _prev_end_offset = cur_offset + envelope_size;
13570            if 19 > max_ordinal {
13571                return Ok(());
13572            }
13573
13574            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13575            // are envelope_size bytes.
13576            let cur_offset: usize = (19 - 1) * envelope_size;
13577
13578            // Zero reserved fields.
13579            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13580
13581            // Safety:
13582            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13583            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13584            //   envelope_size bytes, there is always sufficient room.
13585            fidl::encoding::encode_in_envelope_optional::<Nat64Info, D>(
13586                self.nat64_info
13587                    .as_ref()
13588                    .map(<Nat64Info as fidl::encoding::ValueTypeMarker>::borrow),
13589                encoder,
13590                offset + cur_offset,
13591                depth,
13592            )?;
13593
13594            _prev_end_offset = cur_offset + envelope_size;
13595            if 20 > max_ordinal {
13596                return Ok(());
13597            }
13598
13599            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13600            // are envelope_size bytes.
13601            let cur_offset: usize = (20 - 1) * envelope_size;
13602
13603            // Zero reserved fields.
13604            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13605
13606            // Safety:
13607            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13608            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13609            //   envelope_size bytes, there is always sufficient room.
13610            fidl::encoding::encode_in_envelope_optional::<TrelCounters, D>(
13611                self.trel_counters
13612                    .as_ref()
13613                    .map(<TrelCounters as fidl::encoding::ValueTypeMarker>::borrow),
13614                encoder,
13615                offset + cur_offset,
13616                depth,
13617            )?;
13618
13619            _prev_end_offset = cur_offset + envelope_size;
13620            if 21 > max_ordinal {
13621                return Ok(());
13622            }
13623
13624            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13625            // are envelope_size bytes.
13626            let cur_offset: usize = (21 - 1) * envelope_size;
13627
13628            // Zero reserved fields.
13629            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13630
13631            // Safety:
13632            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13633            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13634            //   envelope_size bytes, there is always sufficient room.
13635            fidl::encoding::encode_in_envelope_optional::<TrelPeersInfo, D>(
13636                self.trel_peers_info
13637                    .as_ref()
13638                    .map(<TrelPeersInfo as fidl::encoding::ValueTypeMarker>::borrow),
13639                encoder,
13640                offset + cur_offset,
13641                depth,
13642            )?;
13643
13644            _prev_end_offset = cur_offset + envelope_size;
13645            if 22 > max_ordinal {
13646                return Ok(());
13647            }
13648
13649            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13650            // are envelope_size bytes.
13651            let cur_offset: usize = (22 - 1) * envelope_size;
13652
13653            // Zero reserved fields.
13654            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13655
13656            // Safety:
13657            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13658            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13659            //   envelope_size bytes, there is always sufficient room.
13660            fidl::encoding::encode_in_envelope_optional::<UpstreamDnsInfo, D>(
13661                self.upstream_dns_info
13662                    .as_ref()
13663                    .map(<UpstreamDnsInfo as fidl::encoding::ValueTypeMarker>::borrow),
13664                encoder,
13665                offset + cur_offset,
13666                depth,
13667            )?;
13668
13669            _prev_end_offset = cur_offset + envelope_size;
13670            if 23 > max_ordinal {
13671                return Ok(());
13672            }
13673
13674            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13675            // are envelope_size bytes.
13676            let cur_offset: usize = (23 - 1) * envelope_size;
13677
13678            // Zero reserved fields.
13679            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13680
13681            // Safety:
13682            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13683            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13684            //   envelope_size bytes, there is always sufficient room.
13685            fidl::encoding::encode_in_envelope_optional::<Dhcp6PdInfo, D>(
13686                self.dhcp6pd_info
13687                    .as_ref()
13688                    .map(<Dhcp6PdInfo as fidl::encoding::ValueTypeMarker>::borrow),
13689                encoder,
13690                offset + cur_offset,
13691                depth,
13692            )?;
13693
13694            _prev_end_offset = cur_offset + envelope_size;
13695            if 24 > max_ordinal {
13696                return Ok(());
13697            }
13698
13699            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13700            // are envelope_size bytes.
13701            let cur_offset: usize = (24 - 1) * envelope_size;
13702
13703            // Zero reserved fields.
13704            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13705
13706            // Safety:
13707            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13708            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13709            //   envelope_size bytes, there is always sufficient room.
13710            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<LinkMetricsEntry, 64>, D>(
13711            self.link_metrics_entries.as_ref().map(<fidl::encoding::Vector<LinkMetricsEntry, 64> as fidl::encoding::ValueTypeMarker>::borrow),
13712            encoder, offset + cur_offset, depth
13713        )?;
13714
13715            _prev_end_offset = cur_offset + envelope_size;
13716            if 25 > max_ordinal {
13717                return Ok(());
13718            }
13719
13720            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13721            // are envelope_size bytes.
13722            let cur_offset: usize = (25 - 1) * envelope_size;
13723
13724            // Zero reserved fields.
13725            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13726
13727            // Safety:
13728            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13729            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13730            //   envelope_size bytes, there is always sufficient room.
13731            fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_lowpan_device__common::BorderAgentCounters, D>(
13732            self.border_agent_counters.as_ref().map(<fidl_fuchsia_lowpan_device__common::BorderAgentCounters as fidl::encoding::ValueTypeMarker>::borrow),
13733            encoder, offset + cur_offset, depth
13734        )?;
13735
13736            _prev_end_offset = cur_offset + envelope_size;
13737            if 26 > max_ordinal {
13738                return Ok(());
13739            }
13740
13741            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13742            // are envelope_size bytes.
13743            let cur_offset: usize = (26 - 1) * envelope_size;
13744
13745            // Zero reserved fields.
13746            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13747
13748            // Safety:
13749            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13750            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13751            //   envelope_size bytes, there is always sufficient room.
13752            fidl::encoding::encode_in_envelope_optional::<bool, D>(
13753                self.multi_ail_detected
13754                    .as_ref()
13755                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
13756                encoder,
13757                offset + cur_offset,
13758                depth,
13759            )?;
13760
13761            _prev_end_offset = cur_offset + envelope_size;
13762
13763            Ok(())
13764        }
13765    }
13766
13767    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Telemetry {
13768        #[inline(always)]
13769        fn new_empty() -> Self {
13770            Self::default()
13771        }
13772
13773        unsafe fn decode(
13774            &mut self,
13775            decoder: &mut fidl::encoding::Decoder<'_, D>,
13776            offset: usize,
13777            mut depth: fidl::encoding::Depth,
13778        ) -> fidl::Result<()> {
13779            decoder.debug_check_bounds::<Self>(offset);
13780            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
13781                None => return Err(fidl::Error::NotNullable),
13782                Some(len) => len,
13783            };
13784            // Calling decoder.out_of_line_offset(0) is not allowed.
13785            if len == 0 {
13786                return Ok(());
13787            };
13788            depth.increment()?;
13789            let envelope_size = 8;
13790            let bytes_len = len * envelope_size;
13791            let offset = decoder.out_of_line_offset(bytes_len)?;
13792            // Decode the envelope for each type.
13793            let mut _next_ordinal_to_read = 0;
13794            let mut next_offset = offset;
13795            let end_offset = offset + bytes_len;
13796            _next_ordinal_to_read += 1;
13797            if next_offset >= end_offset {
13798                return Ok(());
13799            }
13800
13801            // Decode unknown envelopes for gaps in ordinals.
13802            while _next_ordinal_to_read < 1 {
13803                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
13804                _next_ordinal_to_read += 1;
13805                next_offset += envelope_size;
13806            }
13807
13808            let next_out_of_line = decoder.next_out_of_line();
13809            let handles_before = decoder.remaining_handles();
13810            if let Some((inlined, num_bytes, num_handles)) =
13811                fidl::encoding::decode_envelope_header(decoder, next_offset)?
13812            {
13813                let member_inline_size =
13814                    <i8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
13815                if inlined != (member_inline_size <= 4) {
13816                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
13817                }
13818                let inner_offset;
13819                let mut inner_depth = depth.clone();
13820                if inlined {
13821                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
13822                    inner_offset = next_offset;
13823                } else {
13824                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
13825                    inner_depth.increment()?;
13826                }
13827                let val_ref = self.rssi.get_or_insert_with(|| fidl::new_empty!(i8, D));
13828                fidl::decode!(i8, D, val_ref, decoder, inner_offset, inner_depth)?;
13829                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
13830                {
13831                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
13832                }
13833                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
13834                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
13835                }
13836            }
13837
13838            next_offset += envelope_size;
13839            _next_ordinal_to_read += 1;
13840            if next_offset >= end_offset {
13841                return Ok(());
13842            }
13843
13844            // Decode unknown envelopes for gaps in ordinals.
13845            while _next_ordinal_to_read < 2 {
13846                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
13847                _next_ordinal_to_read += 1;
13848                next_offset += envelope_size;
13849            }
13850
13851            let next_out_of_line = decoder.next_out_of_line();
13852            let handles_before = decoder.remaining_handles();
13853            if let Some((inlined, num_bytes, num_handles)) =
13854                fidl::encoding::decode_envelope_header(decoder, next_offset)?
13855            {
13856                let member_inline_size =
13857                    <i8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
13858                if inlined != (member_inline_size <= 4) {
13859                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
13860                }
13861                let inner_offset;
13862                let mut inner_depth = depth.clone();
13863                if inlined {
13864                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
13865                    inner_offset = next_offset;
13866                } else {
13867                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
13868                    inner_depth.increment()?;
13869                }
13870                let val_ref = self.tx_power.get_or_insert_with(|| fidl::new_empty!(i8, D));
13871                fidl::decode!(i8, D, val_ref, decoder, inner_offset, inner_depth)?;
13872                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
13873                {
13874                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
13875                }
13876                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
13877                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
13878                }
13879            }
13880
13881            next_offset += envelope_size;
13882            _next_ordinal_to_read += 1;
13883            if next_offset >= end_offset {
13884                return Ok(());
13885            }
13886
13887            // Decode unknown envelopes for gaps in ordinals.
13888            while _next_ordinal_to_read < 3 {
13889                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
13890                _next_ordinal_to_read += 1;
13891                next_offset += envelope_size;
13892            }
13893
13894            let next_out_of_line = decoder.next_out_of_line();
13895            let handles_before = decoder.remaining_handles();
13896            if let Some((inlined, num_bytes, num_handles)) =
13897                fidl::encoding::decode_envelope_header(decoder, next_offset)?
13898            {
13899                let member_inline_size =
13900                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
13901                if inlined != (member_inline_size <= 4) {
13902                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
13903                }
13904                let inner_offset;
13905                let mut inner_depth = depth.clone();
13906                if inlined {
13907                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
13908                    inner_offset = next_offset;
13909                } else {
13910                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
13911                    inner_depth.increment()?;
13912                }
13913                let val_ref = self.channel_index.get_or_insert_with(|| fidl::new_empty!(u16, D));
13914                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
13915                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
13916                {
13917                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
13918                }
13919                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
13920                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
13921                }
13922            }
13923
13924            next_offset += envelope_size;
13925            _next_ordinal_to_read += 1;
13926            if next_offset >= end_offset {
13927                return Ok(());
13928            }
13929
13930            // Decode unknown envelopes for gaps in ordinals.
13931            while _next_ordinal_to_read < 4 {
13932                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
13933                _next_ordinal_to_read += 1;
13934                next_offset += envelope_size;
13935            }
13936
13937            let next_out_of_line = decoder.next_out_of_line();
13938            let handles_before = decoder.remaining_handles();
13939            if let Some((inlined, num_bytes, num_handles)) =
13940                fidl::encoding::decode_envelope_header(decoder, next_offset)?
13941            {
13942                let member_inline_size =
13943                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
13944                if inlined != (member_inline_size <= 4) {
13945                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
13946                }
13947                let inner_offset;
13948                let mut inner_depth = depth.clone();
13949                if inlined {
13950                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
13951                    inner_offset = next_offset;
13952                } else {
13953                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
13954                    inner_depth.increment()?;
13955                }
13956                let val_ref = self.partition_id.get_or_insert_with(|| fidl::new_empty!(u32, D));
13957                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
13958                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
13959                {
13960                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
13961                }
13962                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
13963                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
13964                }
13965            }
13966
13967            next_offset += envelope_size;
13968            _next_ordinal_to_read += 1;
13969            if next_offset >= end_offset {
13970                return Ok(());
13971            }
13972
13973            // Decode unknown envelopes for gaps in ordinals.
13974            while _next_ordinal_to_read < 5 {
13975                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
13976                _next_ordinal_to_read += 1;
13977                next_offset += envelope_size;
13978            }
13979
13980            let next_out_of_line = decoder.next_out_of_line();
13981            let handles_before = decoder.remaining_handles();
13982            if let Some((inlined, num_bytes, num_handles)) =
13983                fidl::encoding::decode_envelope_header(decoder, next_offset)?
13984            {
13985                let member_inline_size =
13986                    <fidl::encoding::BoundedString<256> as fidl::encoding::TypeMarker>::inline_size(
13987                        decoder.context,
13988                    );
13989                if inlined != (member_inline_size <= 4) {
13990                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
13991                }
13992                let inner_offset;
13993                let mut inner_depth = depth.clone();
13994                if inlined {
13995                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
13996                    inner_offset = next_offset;
13997                } else {
13998                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
13999                    inner_depth.increment()?;
14000                }
14001                let val_ref = self
14002                    .stack_version
14003                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<256>, D));
14004                fidl::decode!(
14005                    fidl::encoding::BoundedString<256>,
14006                    D,
14007                    val_ref,
14008                    decoder,
14009                    inner_offset,
14010                    inner_depth
14011                )?;
14012                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14013                {
14014                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
14015                }
14016                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14017                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14018                }
14019            }
14020
14021            next_offset += envelope_size;
14022            _next_ordinal_to_read += 1;
14023            if next_offset >= end_offset {
14024                return Ok(());
14025            }
14026
14027            // Decode unknown envelopes for gaps in ordinals.
14028            while _next_ordinal_to_read < 6 {
14029                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14030                _next_ordinal_to_read += 1;
14031                next_offset += envelope_size;
14032            }
14033
14034            let next_out_of_line = decoder.next_out_of_line();
14035            let handles_before = decoder.remaining_handles();
14036            if let Some((inlined, num_bytes, num_handles)) =
14037                fidl::encoding::decode_envelope_header(decoder, next_offset)?
14038            {
14039                let member_inline_size =
14040                    <fidl::encoding::BoundedString<256> as fidl::encoding::TypeMarker>::inline_size(
14041                        decoder.context,
14042                    );
14043                if inlined != (member_inline_size <= 4) {
14044                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
14045                }
14046                let inner_offset;
14047                let mut inner_depth = depth.clone();
14048                if inlined {
14049                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
14050                    inner_offset = next_offset;
14051                } else {
14052                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
14053                    inner_depth.increment()?;
14054                }
14055                let val_ref = self
14056                    .rcp_version
14057                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<256>, D));
14058                fidl::decode!(
14059                    fidl::encoding::BoundedString<256>,
14060                    D,
14061                    val_ref,
14062                    decoder,
14063                    inner_offset,
14064                    inner_depth
14065                )?;
14066                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14067                {
14068                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
14069                }
14070                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14071                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14072                }
14073            }
14074
14075            next_offset += envelope_size;
14076            _next_ordinal_to_read += 1;
14077            if next_offset >= end_offset {
14078                return Ok(());
14079            }
14080
14081            // Decode unknown envelopes for gaps in ordinals.
14082            while _next_ordinal_to_read < 7 {
14083                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14084                _next_ordinal_to_read += 1;
14085                next_offset += envelope_size;
14086            }
14087
14088            let next_out_of_line = decoder.next_out_of_line();
14089            let handles_before = decoder.remaining_handles();
14090            if let Some((inlined, num_bytes, num_handles)) =
14091                fidl::encoding::decode_envelope_header(decoder, next_offset)?
14092            {
14093                let member_inline_size =
14094                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
14095                if inlined != (member_inline_size <= 4) {
14096                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
14097                }
14098                let inner_offset;
14099                let mut inner_depth = depth.clone();
14100                if inlined {
14101                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
14102                    inner_offset = next_offset;
14103                } else {
14104                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
14105                    inner_depth.increment()?;
14106                }
14107                let val_ref = self.thread_link_mode.get_or_insert_with(|| fidl::new_empty!(u8, D));
14108                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
14109                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14110                {
14111                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
14112                }
14113                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14114                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14115                }
14116            }
14117
14118            next_offset += envelope_size;
14119            _next_ordinal_to_read += 1;
14120            if next_offset >= end_offset {
14121                return Ok(());
14122            }
14123
14124            // Decode unknown envelopes for gaps in ordinals.
14125            while _next_ordinal_to_read < 8 {
14126                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14127                _next_ordinal_to_read += 1;
14128                next_offset += envelope_size;
14129            }
14130
14131            let next_out_of_line = decoder.next_out_of_line();
14132            let handles_before = decoder.remaining_handles();
14133            if let Some((inlined, num_bytes, num_handles)) =
14134                fidl::encoding::decode_envelope_header(decoder, next_offset)?
14135            {
14136                let member_inline_size =
14137                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
14138                if inlined != (member_inline_size <= 4) {
14139                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
14140                }
14141                let inner_offset;
14142                let mut inner_depth = depth.clone();
14143                if inlined {
14144                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
14145                    inner_offset = next_offset;
14146                } else {
14147                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
14148                    inner_depth.increment()?;
14149                }
14150                let val_ref = self.thread_router_id.get_or_insert_with(|| fidl::new_empty!(u8, D));
14151                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
14152                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14153                {
14154                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
14155                }
14156                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14157                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14158                }
14159            }
14160
14161            next_offset += envelope_size;
14162            _next_ordinal_to_read += 1;
14163            if next_offset >= end_offset {
14164                return Ok(());
14165            }
14166
14167            // Decode unknown envelopes for gaps in ordinals.
14168            while _next_ordinal_to_read < 9 {
14169                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14170                _next_ordinal_to_read += 1;
14171                next_offset += envelope_size;
14172            }
14173
14174            let next_out_of_line = decoder.next_out_of_line();
14175            let handles_before = decoder.remaining_handles();
14176            if let Some((inlined, num_bytes, num_handles)) =
14177                fidl::encoding::decode_envelope_header(decoder, next_offset)?
14178            {
14179                let member_inline_size =
14180                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
14181                if inlined != (member_inline_size <= 4) {
14182                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
14183                }
14184                let inner_offset;
14185                let mut inner_depth = depth.clone();
14186                if inlined {
14187                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
14188                    inner_offset = next_offset;
14189                } else {
14190                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
14191                    inner_depth.increment()?;
14192                }
14193                let val_ref = self.thread_rloc.get_or_insert_with(|| fidl::new_empty!(u16, D));
14194                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
14195                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14196                {
14197                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
14198                }
14199                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14200                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14201                }
14202            }
14203
14204            next_offset += envelope_size;
14205            _next_ordinal_to_read += 1;
14206            if next_offset >= end_offset {
14207                return Ok(());
14208            }
14209
14210            // Decode unknown envelopes for gaps in ordinals.
14211            while _next_ordinal_to_read < 10 {
14212                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14213                _next_ordinal_to_read += 1;
14214                next_offset += envelope_size;
14215            }
14216
14217            let next_out_of_line = decoder.next_out_of_line();
14218            let handles_before = decoder.remaining_handles();
14219            if let Some((inlined, num_bytes, num_handles)) =
14220                fidl::encoding::decode_envelope_header(decoder, next_offset)?
14221            {
14222                let member_inline_size =
14223                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
14224                if inlined != (member_inline_size <= 4) {
14225                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
14226                }
14227                let inner_offset;
14228                let mut inner_depth = depth.clone();
14229                if inlined {
14230                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
14231                    inner_offset = next_offset;
14232                } else {
14233                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
14234                    inner_depth.increment()?;
14235                }
14236                let val_ref =
14237                    self.thread_network_data_version.get_or_insert_with(|| fidl::new_empty!(u8, D));
14238                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
14239                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14240                {
14241                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
14242                }
14243                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14244                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14245                }
14246            }
14247
14248            next_offset += envelope_size;
14249            _next_ordinal_to_read += 1;
14250            if next_offset >= end_offset {
14251                return Ok(());
14252            }
14253
14254            // Decode unknown envelopes for gaps in ordinals.
14255            while _next_ordinal_to_read < 11 {
14256                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14257                _next_ordinal_to_read += 1;
14258                next_offset += envelope_size;
14259            }
14260
14261            let next_out_of_line = decoder.next_out_of_line();
14262            let handles_before = decoder.remaining_handles();
14263            if let Some((inlined, num_bytes, num_handles)) =
14264                fidl::encoding::decode_envelope_header(decoder, next_offset)?
14265            {
14266                let member_inline_size =
14267                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
14268                if inlined != (member_inline_size <= 4) {
14269                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
14270                }
14271                let inner_offset;
14272                let mut inner_depth = depth.clone();
14273                if inlined {
14274                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
14275                    inner_offset = next_offset;
14276                } else {
14277                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
14278                    inner_depth.increment()?;
14279                }
14280                let val_ref = self
14281                    .thread_stable_network_data_version
14282                    .get_or_insert_with(|| fidl::new_empty!(u8, D));
14283                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
14284                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14285                {
14286                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
14287                }
14288                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14289                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14290                }
14291            }
14292
14293            next_offset += envelope_size;
14294            _next_ordinal_to_read += 1;
14295            if next_offset >= end_offset {
14296                return Ok(());
14297            }
14298
14299            // Decode unknown envelopes for gaps in ordinals.
14300            while _next_ordinal_to_read < 12 {
14301                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14302                _next_ordinal_to_read += 1;
14303                next_offset += envelope_size;
14304            }
14305
14306            let next_out_of_line = decoder.next_out_of_line();
14307            let handles_before = decoder.remaining_handles();
14308            if let Some((inlined, num_bytes, num_handles)) =
14309                fidl::encoding::decode_envelope_header(decoder, next_offset)?
14310            {
14311                let member_inline_size =
14312                    <fidl::encoding::Vector<u8, 255> as fidl::encoding::TypeMarker>::inline_size(
14313                        decoder.context,
14314                    );
14315                if inlined != (member_inline_size <= 4) {
14316                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
14317                }
14318                let inner_offset;
14319                let mut inner_depth = depth.clone();
14320                if inlined {
14321                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
14322                    inner_offset = next_offset;
14323                } else {
14324                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
14325                    inner_depth.increment()?;
14326                }
14327                let val_ref = self
14328                    .thread_network_data
14329                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u8, 255>, D));
14330                fidl::decode!(fidl::encoding::Vector<u8, 255>, D, val_ref, decoder, inner_offset, inner_depth)?;
14331                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14332                {
14333                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
14334                }
14335                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14336                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14337                }
14338            }
14339
14340            next_offset += envelope_size;
14341            _next_ordinal_to_read += 1;
14342            if next_offset >= end_offset {
14343                return Ok(());
14344            }
14345
14346            // Decode unknown envelopes for gaps in ordinals.
14347            while _next_ordinal_to_read < 13 {
14348                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14349                _next_ordinal_to_read += 1;
14350                next_offset += envelope_size;
14351            }
14352
14353            let next_out_of_line = decoder.next_out_of_line();
14354            let handles_before = decoder.remaining_handles();
14355            if let Some((inlined, num_bytes, num_handles)) =
14356                fidl::encoding::decode_envelope_header(decoder, next_offset)?
14357            {
14358                let member_inline_size =
14359                    <fidl::encoding::Vector<u8, 255> as fidl::encoding::TypeMarker>::inline_size(
14360                        decoder.context,
14361                    );
14362                if inlined != (member_inline_size <= 4) {
14363                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
14364                }
14365                let inner_offset;
14366                let mut inner_depth = depth.clone();
14367                if inlined {
14368                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
14369                    inner_offset = next_offset;
14370                } else {
14371                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
14372                    inner_depth.increment()?;
14373                }
14374                let val_ref = self
14375                    .thread_stable_network_data
14376                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u8, 255>, D));
14377                fidl::decode!(fidl::encoding::Vector<u8, 255>, D, val_ref, decoder, inner_offset, inner_depth)?;
14378                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14379                {
14380                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
14381                }
14382                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14383                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14384                }
14385            }
14386
14387            next_offset += envelope_size;
14388            _next_ordinal_to_read += 1;
14389            if next_offset >= end_offset {
14390                return Ok(());
14391            }
14392
14393            // Decode unknown envelopes for gaps in ordinals.
14394            while _next_ordinal_to_read < 14 {
14395                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14396                _next_ordinal_to_read += 1;
14397                next_offset += envelope_size;
14398            }
14399
14400            let next_out_of_line = decoder.next_out_of_line();
14401            let handles_before = decoder.remaining_handles();
14402            if let Some((inlined, num_bytes, num_handles)) =
14403                fidl::encoding::decode_envelope_header(decoder, next_offset)?
14404            {
14405                let member_inline_size =
14406                    <BorderRoutingCounters as fidl::encoding::TypeMarker>::inline_size(
14407                        decoder.context,
14408                    );
14409                if inlined != (member_inline_size <= 4) {
14410                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
14411                }
14412                let inner_offset;
14413                let mut inner_depth = depth.clone();
14414                if inlined {
14415                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
14416                    inner_offset = next_offset;
14417                } else {
14418                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
14419                    inner_depth.increment()?;
14420                }
14421                let val_ref = self
14422                    .thread_border_routing_counters
14423                    .get_or_insert_with(|| fidl::new_empty!(BorderRoutingCounters, D));
14424                fidl::decode!(
14425                    BorderRoutingCounters,
14426                    D,
14427                    val_ref,
14428                    decoder,
14429                    inner_offset,
14430                    inner_depth
14431                )?;
14432                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14433                {
14434                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
14435                }
14436                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14437                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14438                }
14439            }
14440
14441            next_offset += envelope_size;
14442            _next_ordinal_to_read += 1;
14443            if next_offset >= end_offset {
14444                return Ok(());
14445            }
14446
14447            // Decode unknown envelopes for gaps in ordinals.
14448            while _next_ordinal_to_read < 15 {
14449                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14450                _next_ordinal_to_read += 1;
14451                next_offset += envelope_size;
14452            }
14453
14454            let next_out_of_line = decoder.next_out_of_line();
14455            let handles_before = decoder.remaining_handles();
14456            if let Some((inlined, num_bytes, num_handles)) =
14457                fidl::encoding::decode_envelope_header(decoder, next_offset)?
14458            {
14459                let member_inline_size =
14460                    <SrpServerInfo as fidl::encoding::TypeMarker>::inline_size(decoder.context);
14461                if inlined != (member_inline_size <= 4) {
14462                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
14463                }
14464                let inner_offset;
14465                let mut inner_depth = depth.clone();
14466                if inlined {
14467                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
14468                    inner_offset = next_offset;
14469                } else {
14470                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
14471                    inner_depth.increment()?;
14472                }
14473                let val_ref =
14474                    self.srp_server_info.get_or_insert_with(|| fidl::new_empty!(SrpServerInfo, D));
14475                fidl::decode!(SrpServerInfo, D, val_ref, decoder, inner_offset, inner_depth)?;
14476                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14477                {
14478                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
14479                }
14480                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14481                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14482                }
14483            }
14484
14485            next_offset += envelope_size;
14486            _next_ordinal_to_read += 1;
14487            if next_offset >= end_offset {
14488                return Ok(());
14489            }
14490
14491            // Decode unknown envelopes for gaps in ordinals.
14492            while _next_ordinal_to_read < 16 {
14493                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14494                _next_ordinal_to_read += 1;
14495                next_offset += envelope_size;
14496            }
14497
14498            let next_out_of_line = decoder.next_out_of_line();
14499            let handles_before = decoder.remaining_handles();
14500            if let Some((inlined, num_bytes, num_handles)) =
14501                fidl::encoding::decode_envelope_header(decoder, next_offset)?
14502            {
14503                let member_inline_size =
14504                    <DnssdCounters as fidl::encoding::TypeMarker>::inline_size(decoder.context);
14505                if inlined != (member_inline_size <= 4) {
14506                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
14507                }
14508                let inner_offset;
14509                let mut inner_depth = depth.clone();
14510                if inlined {
14511                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
14512                    inner_offset = next_offset;
14513                } else {
14514                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
14515                    inner_depth.increment()?;
14516                }
14517                let val_ref =
14518                    self.dnssd_counters.get_or_insert_with(|| fidl::new_empty!(DnssdCounters, D));
14519                fidl::decode!(DnssdCounters, D, val_ref, decoder, inner_offset, inner_depth)?;
14520                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14521                {
14522                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
14523                }
14524                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14525                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14526                }
14527            }
14528
14529            next_offset += envelope_size;
14530            _next_ordinal_to_read += 1;
14531            if next_offset >= end_offset {
14532                return Ok(());
14533            }
14534
14535            // Decode unknown envelopes for gaps in ordinals.
14536            while _next_ordinal_to_read < 17 {
14537                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14538                _next_ordinal_to_read += 1;
14539                next_offset += envelope_size;
14540            }
14541
14542            let next_out_of_line = decoder.next_out_of_line();
14543            let handles_before = decoder.remaining_handles();
14544            if let Some((inlined, num_bytes, num_handles)) =
14545                fidl::encoding::decode_envelope_header(decoder, next_offset)?
14546            {
14547                let member_inline_size =
14548                    <LeaderData as fidl::encoding::TypeMarker>::inline_size(decoder.context);
14549                if inlined != (member_inline_size <= 4) {
14550                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
14551                }
14552                let inner_offset;
14553                let mut inner_depth = depth.clone();
14554                if inlined {
14555                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
14556                    inner_offset = next_offset;
14557                } else {
14558                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
14559                    inner_depth.increment()?;
14560                }
14561                let val_ref =
14562                    self.leader_data.get_or_insert_with(|| fidl::new_empty!(LeaderData, D));
14563                fidl::decode!(LeaderData, D, val_ref, decoder, inner_offset, inner_depth)?;
14564                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14565                {
14566                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
14567                }
14568                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14569                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14570                }
14571            }
14572
14573            next_offset += envelope_size;
14574            _next_ordinal_to_read += 1;
14575            if next_offset >= end_offset {
14576                return Ok(());
14577            }
14578
14579            // Decode unknown envelopes for gaps in ordinals.
14580            while _next_ordinal_to_read < 18 {
14581                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14582                _next_ordinal_to_read += 1;
14583                next_offset += envelope_size;
14584            }
14585
14586            let next_out_of_line = decoder.next_out_of_line();
14587            let handles_before = decoder.remaining_handles();
14588            if let Some((inlined, num_bytes, num_handles)) =
14589                fidl::encoding::decode_envelope_header(decoder, next_offset)?
14590            {
14591                let member_inline_size =
14592                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
14593                if inlined != (member_inline_size <= 4) {
14594                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
14595                }
14596                let inner_offset;
14597                let mut inner_depth = depth.clone();
14598                if inlined {
14599                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
14600                    inner_offset = next_offset;
14601                } else {
14602                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
14603                    inner_depth.increment()?;
14604                }
14605                let val_ref = self.uptime.get_or_insert_with(|| fidl::new_empty!(i64, D));
14606                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
14607                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14608                {
14609                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
14610                }
14611                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14612                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14613                }
14614            }
14615
14616            next_offset += envelope_size;
14617            _next_ordinal_to_read += 1;
14618            if next_offset >= end_offset {
14619                return Ok(());
14620            }
14621
14622            // Decode unknown envelopes for gaps in ordinals.
14623            while _next_ordinal_to_read < 19 {
14624                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14625                _next_ordinal_to_read += 1;
14626                next_offset += envelope_size;
14627            }
14628
14629            let next_out_of_line = decoder.next_out_of_line();
14630            let handles_before = decoder.remaining_handles();
14631            if let Some((inlined, num_bytes, num_handles)) =
14632                fidl::encoding::decode_envelope_header(decoder, next_offset)?
14633            {
14634                let member_inline_size =
14635                    <Nat64Info as fidl::encoding::TypeMarker>::inline_size(decoder.context);
14636                if inlined != (member_inline_size <= 4) {
14637                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
14638                }
14639                let inner_offset;
14640                let mut inner_depth = depth.clone();
14641                if inlined {
14642                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
14643                    inner_offset = next_offset;
14644                } else {
14645                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
14646                    inner_depth.increment()?;
14647                }
14648                let val_ref = self.nat64_info.get_or_insert_with(|| fidl::new_empty!(Nat64Info, D));
14649                fidl::decode!(Nat64Info, D, val_ref, decoder, inner_offset, inner_depth)?;
14650                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14651                {
14652                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
14653                }
14654                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14655                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14656                }
14657            }
14658
14659            next_offset += envelope_size;
14660            _next_ordinal_to_read += 1;
14661            if next_offset >= end_offset {
14662                return Ok(());
14663            }
14664
14665            // Decode unknown envelopes for gaps in ordinals.
14666            while _next_ordinal_to_read < 20 {
14667                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14668                _next_ordinal_to_read += 1;
14669                next_offset += envelope_size;
14670            }
14671
14672            let next_out_of_line = decoder.next_out_of_line();
14673            let handles_before = decoder.remaining_handles();
14674            if let Some((inlined, num_bytes, num_handles)) =
14675                fidl::encoding::decode_envelope_header(decoder, next_offset)?
14676            {
14677                let member_inline_size =
14678                    <TrelCounters as fidl::encoding::TypeMarker>::inline_size(decoder.context);
14679                if inlined != (member_inline_size <= 4) {
14680                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
14681                }
14682                let inner_offset;
14683                let mut inner_depth = depth.clone();
14684                if inlined {
14685                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
14686                    inner_offset = next_offset;
14687                } else {
14688                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
14689                    inner_depth.increment()?;
14690                }
14691                let val_ref =
14692                    self.trel_counters.get_or_insert_with(|| fidl::new_empty!(TrelCounters, D));
14693                fidl::decode!(TrelCounters, D, val_ref, decoder, inner_offset, inner_depth)?;
14694                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14695                {
14696                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
14697                }
14698                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14699                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14700                }
14701            }
14702
14703            next_offset += envelope_size;
14704            _next_ordinal_to_read += 1;
14705            if next_offset >= end_offset {
14706                return Ok(());
14707            }
14708
14709            // Decode unknown envelopes for gaps in ordinals.
14710            while _next_ordinal_to_read < 21 {
14711                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14712                _next_ordinal_to_read += 1;
14713                next_offset += envelope_size;
14714            }
14715
14716            let next_out_of_line = decoder.next_out_of_line();
14717            let handles_before = decoder.remaining_handles();
14718            if let Some((inlined, num_bytes, num_handles)) =
14719                fidl::encoding::decode_envelope_header(decoder, next_offset)?
14720            {
14721                let member_inline_size =
14722                    <TrelPeersInfo as fidl::encoding::TypeMarker>::inline_size(decoder.context);
14723                if inlined != (member_inline_size <= 4) {
14724                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
14725                }
14726                let inner_offset;
14727                let mut inner_depth = depth.clone();
14728                if inlined {
14729                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
14730                    inner_offset = next_offset;
14731                } else {
14732                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
14733                    inner_depth.increment()?;
14734                }
14735                let val_ref =
14736                    self.trel_peers_info.get_or_insert_with(|| fidl::new_empty!(TrelPeersInfo, D));
14737                fidl::decode!(TrelPeersInfo, D, val_ref, decoder, inner_offset, inner_depth)?;
14738                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14739                {
14740                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
14741                }
14742                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14743                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14744                }
14745            }
14746
14747            next_offset += envelope_size;
14748            _next_ordinal_to_read += 1;
14749            if next_offset >= end_offset {
14750                return Ok(());
14751            }
14752
14753            // Decode unknown envelopes for gaps in ordinals.
14754            while _next_ordinal_to_read < 22 {
14755                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14756                _next_ordinal_to_read += 1;
14757                next_offset += envelope_size;
14758            }
14759
14760            let next_out_of_line = decoder.next_out_of_line();
14761            let handles_before = decoder.remaining_handles();
14762            if let Some((inlined, num_bytes, num_handles)) =
14763                fidl::encoding::decode_envelope_header(decoder, next_offset)?
14764            {
14765                let member_inline_size =
14766                    <UpstreamDnsInfo as fidl::encoding::TypeMarker>::inline_size(decoder.context);
14767                if inlined != (member_inline_size <= 4) {
14768                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
14769                }
14770                let inner_offset;
14771                let mut inner_depth = depth.clone();
14772                if inlined {
14773                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
14774                    inner_offset = next_offset;
14775                } else {
14776                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
14777                    inner_depth.increment()?;
14778                }
14779                let val_ref = self
14780                    .upstream_dns_info
14781                    .get_or_insert_with(|| fidl::new_empty!(UpstreamDnsInfo, D));
14782                fidl::decode!(UpstreamDnsInfo, D, val_ref, decoder, inner_offset, inner_depth)?;
14783                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14784                {
14785                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
14786                }
14787                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14788                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14789                }
14790            }
14791
14792            next_offset += envelope_size;
14793            _next_ordinal_to_read += 1;
14794            if next_offset >= end_offset {
14795                return Ok(());
14796            }
14797
14798            // Decode unknown envelopes for gaps in ordinals.
14799            while _next_ordinal_to_read < 23 {
14800                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14801                _next_ordinal_to_read += 1;
14802                next_offset += envelope_size;
14803            }
14804
14805            let next_out_of_line = decoder.next_out_of_line();
14806            let handles_before = decoder.remaining_handles();
14807            if let Some((inlined, num_bytes, num_handles)) =
14808                fidl::encoding::decode_envelope_header(decoder, next_offset)?
14809            {
14810                let member_inline_size =
14811                    <Dhcp6PdInfo as fidl::encoding::TypeMarker>::inline_size(decoder.context);
14812                if inlined != (member_inline_size <= 4) {
14813                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
14814                }
14815                let inner_offset;
14816                let mut inner_depth = depth.clone();
14817                if inlined {
14818                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
14819                    inner_offset = next_offset;
14820                } else {
14821                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
14822                    inner_depth.increment()?;
14823                }
14824                let val_ref =
14825                    self.dhcp6pd_info.get_or_insert_with(|| fidl::new_empty!(Dhcp6PdInfo, D));
14826                fidl::decode!(Dhcp6PdInfo, D, val_ref, decoder, inner_offset, inner_depth)?;
14827                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14828                {
14829                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
14830                }
14831                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14832                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14833                }
14834            }
14835
14836            next_offset += envelope_size;
14837            _next_ordinal_to_read += 1;
14838            if next_offset >= end_offset {
14839                return Ok(());
14840            }
14841
14842            // Decode unknown envelopes for gaps in ordinals.
14843            while _next_ordinal_to_read < 24 {
14844                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14845                _next_ordinal_to_read += 1;
14846                next_offset += envelope_size;
14847            }
14848
14849            let next_out_of_line = decoder.next_out_of_line();
14850            let handles_before = decoder.remaining_handles();
14851            if let Some((inlined, num_bytes, num_handles)) =
14852                fidl::encoding::decode_envelope_header(decoder, next_offset)?
14853            {
14854                let member_inline_size = <fidl::encoding::Vector<LinkMetricsEntry, 64> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
14855                if inlined != (member_inline_size <= 4) {
14856                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
14857                }
14858                let inner_offset;
14859                let mut inner_depth = depth.clone();
14860                if inlined {
14861                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
14862                    inner_offset = next_offset;
14863                } else {
14864                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
14865                    inner_depth.increment()?;
14866                }
14867                let val_ref = self.link_metrics_entries.get_or_insert_with(
14868                    || fidl::new_empty!(fidl::encoding::Vector<LinkMetricsEntry, 64>, D),
14869                );
14870                fidl::decode!(fidl::encoding::Vector<LinkMetricsEntry, 64>, D, val_ref, decoder, inner_offset, inner_depth)?;
14871                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14872                {
14873                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
14874                }
14875                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14876                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14877                }
14878            }
14879
14880            next_offset += envelope_size;
14881            _next_ordinal_to_read += 1;
14882            if next_offset >= end_offset {
14883                return Ok(());
14884            }
14885
14886            // Decode unknown envelopes for gaps in ordinals.
14887            while _next_ordinal_to_read < 25 {
14888                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14889                _next_ordinal_to_read += 1;
14890                next_offset += envelope_size;
14891            }
14892
14893            let next_out_of_line = decoder.next_out_of_line();
14894            let handles_before = decoder.remaining_handles();
14895            if let Some((inlined, num_bytes, num_handles)) =
14896                fidl::encoding::decode_envelope_header(decoder, next_offset)?
14897            {
14898                let member_inline_size = <fidl_fuchsia_lowpan_device__common::BorderAgentCounters as fidl::encoding::TypeMarker>::inline_size(decoder.context);
14899                if inlined != (member_inline_size <= 4) {
14900                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
14901                }
14902                let inner_offset;
14903                let mut inner_depth = depth.clone();
14904                if inlined {
14905                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
14906                    inner_offset = next_offset;
14907                } else {
14908                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
14909                    inner_depth.increment()?;
14910                }
14911                let val_ref = self.border_agent_counters.get_or_insert_with(|| {
14912                    fidl::new_empty!(fidl_fuchsia_lowpan_device__common::BorderAgentCounters, D)
14913                });
14914                fidl::decode!(
14915                    fidl_fuchsia_lowpan_device__common::BorderAgentCounters,
14916                    D,
14917                    val_ref,
14918                    decoder,
14919                    inner_offset,
14920                    inner_depth
14921                )?;
14922                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14923                {
14924                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
14925                }
14926                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14927                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14928                }
14929            }
14930
14931            next_offset += envelope_size;
14932            _next_ordinal_to_read += 1;
14933            if next_offset >= end_offset {
14934                return Ok(());
14935            }
14936
14937            // Decode unknown envelopes for gaps in ordinals.
14938            while _next_ordinal_to_read < 26 {
14939                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14940                _next_ordinal_to_read += 1;
14941                next_offset += envelope_size;
14942            }
14943
14944            let next_out_of_line = decoder.next_out_of_line();
14945            let handles_before = decoder.remaining_handles();
14946            if let Some((inlined, num_bytes, num_handles)) =
14947                fidl::encoding::decode_envelope_header(decoder, next_offset)?
14948            {
14949                let member_inline_size =
14950                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
14951                if inlined != (member_inline_size <= 4) {
14952                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
14953                }
14954                let inner_offset;
14955                let mut inner_depth = depth.clone();
14956                if inlined {
14957                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
14958                    inner_offset = next_offset;
14959                } else {
14960                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
14961                    inner_depth.increment()?;
14962                }
14963                let val_ref =
14964                    self.multi_ail_detected.get_or_insert_with(|| fidl::new_empty!(bool, D));
14965                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
14966                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14967                {
14968                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
14969                }
14970                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14971                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14972                }
14973            }
14974
14975            next_offset += envelope_size;
14976
14977            // Decode the remaining unknown envelopes.
14978            while next_offset < end_offset {
14979                _next_ordinal_to_read += 1;
14980                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14981                next_offset += envelope_size;
14982            }
14983
14984            Ok(())
14985        }
14986    }
14987
14988    impl TrelCounters {
14989        #[inline(always)]
14990        fn max_ordinal_present(&self) -> u64 {
14991            if let Some(_) = self.tx_packets {
14992                return 5;
14993            }
14994            if let Some(_) = self.tx_failure {
14995                return 4;
14996            }
14997            if let Some(_) = self.tx_bytes {
14998                return 3;
14999            }
15000            if let Some(_) = self.rx_packets {
15001                return 2;
15002            }
15003            if let Some(_) = self.rx_bytes {
15004                return 1;
15005            }
15006            0
15007        }
15008    }
15009
15010    impl fidl::encoding::ValueTypeMarker for TrelCounters {
15011        type Borrowed<'a> = &'a Self;
15012        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
15013            value
15014        }
15015    }
15016
15017    unsafe impl fidl::encoding::TypeMarker for TrelCounters {
15018        type Owned = Self;
15019
15020        #[inline(always)]
15021        fn inline_align(_context: fidl::encoding::Context) -> usize {
15022            8
15023        }
15024
15025        #[inline(always)]
15026        fn inline_size(_context: fidl::encoding::Context) -> usize {
15027            16
15028        }
15029    }
15030
15031    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<TrelCounters, D>
15032        for &TrelCounters
15033    {
15034        unsafe fn encode(
15035            self,
15036            encoder: &mut fidl::encoding::Encoder<'_, D>,
15037            offset: usize,
15038            mut depth: fidl::encoding::Depth,
15039        ) -> fidl::Result<()> {
15040            encoder.debug_check_bounds::<TrelCounters>(offset);
15041            // Vector header
15042            let max_ordinal: u64 = self.max_ordinal_present();
15043            encoder.write_num(max_ordinal, offset);
15044            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
15045            // Calling encoder.out_of_line_offset(0) is not allowed.
15046            if max_ordinal == 0 {
15047                return Ok(());
15048            }
15049            depth.increment()?;
15050            let envelope_size = 8;
15051            let bytes_len = max_ordinal as usize * envelope_size;
15052            #[allow(unused_variables)]
15053            let offset = encoder.out_of_line_offset(bytes_len);
15054            let mut _prev_end_offset: usize = 0;
15055            if 1 > max_ordinal {
15056                return Ok(());
15057            }
15058
15059            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
15060            // are envelope_size bytes.
15061            let cur_offset: usize = (1 - 1) * envelope_size;
15062
15063            // Zero reserved fields.
15064            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
15065
15066            // Safety:
15067            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
15068            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
15069            //   envelope_size bytes, there is always sufficient room.
15070            fidl::encoding::encode_in_envelope_optional::<u64, D>(
15071                self.rx_bytes.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
15072                encoder,
15073                offset + cur_offset,
15074                depth,
15075            )?;
15076
15077            _prev_end_offset = cur_offset + envelope_size;
15078            if 2 > max_ordinal {
15079                return Ok(());
15080            }
15081
15082            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
15083            // are envelope_size bytes.
15084            let cur_offset: usize = (2 - 1) * envelope_size;
15085
15086            // Zero reserved fields.
15087            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
15088
15089            // Safety:
15090            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
15091            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
15092            //   envelope_size bytes, there is always sufficient room.
15093            fidl::encoding::encode_in_envelope_optional::<u64, D>(
15094                self.rx_packets.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
15095                encoder,
15096                offset + cur_offset,
15097                depth,
15098            )?;
15099
15100            _prev_end_offset = cur_offset + envelope_size;
15101            if 3 > max_ordinal {
15102                return Ok(());
15103            }
15104
15105            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
15106            // are envelope_size bytes.
15107            let cur_offset: usize = (3 - 1) * envelope_size;
15108
15109            // Zero reserved fields.
15110            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
15111
15112            // Safety:
15113            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
15114            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
15115            //   envelope_size bytes, there is always sufficient room.
15116            fidl::encoding::encode_in_envelope_optional::<u64, D>(
15117                self.tx_bytes.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
15118                encoder,
15119                offset + cur_offset,
15120                depth,
15121            )?;
15122
15123            _prev_end_offset = cur_offset + envelope_size;
15124            if 4 > 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 = (4 - 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::<u64, D>(
15140                self.tx_failure.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
15141                encoder,
15142                offset + cur_offset,
15143                depth,
15144            )?;
15145
15146            _prev_end_offset = cur_offset + envelope_size;
15147            if 5 > max_ordinal {
15148                return Ok(());
15149            }
15150
15151            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
15152            // are envelope_size bytes.
15153            let cur_offset: usize = (5 - 1) * envelope_size;
15154
15155            // Zero reserved fields.
15156            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
15157
15158            // Safety:
15159            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
15160            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
15161            //   envelope_size bytes, there is always sufficient room.
15162            fidl::encoding::encode_in_envelope_optional::<u64, D>(
15163                self.tx_packets.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
15164                encoder,
15165                offset + cur_offset,
15166                depth,
15167            )?;
15168
15169            _prev_end_offset = cur_offset + envelope_size;
15170
15171            Ok(())
15172        }
15173    }
15174
15175    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for TrelCounters {
15176        #[inline(always)]
15177        fn new_empty() -> Self {
15178            Self::default()
15179        }
15180
15181        unsafe fn decode(
15182            &mut self,
15183            decoder: &mut fidl::encoding::Decoder<'_, D>,
15184            offset: usize,
15185            mut depth: fidl::encoding::Depth,
15186        ) -> fidl::Result<()> {
15187            decoder.debug_check_bounds::<Self>(offset);
15188            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
15189                None => return Err(fidl::Error::NotNullable),
15190                Some(len) => len,
15191            };
15192            // Calling decoder.out_of_line_offset(0) is not allowed.
15193            if len == 0 {
15194                return Ok(());
15195            };
15196            depth.increment()?;
15197            let envelope_size = 8;
15198            let bytes_len = len * envelope_size;
15199            let offset = decoder.out_of_line_offset(bytes_len)?;
15200            // Decode the envelope for each type.
15201            let mut _next_ordinal_to_read = 0;
15202            let mut next_offset = offset;
15203            let end_offset = offset + bytes_len;
15204            _next_ordinal_to_read += 1;
15205            if next_offset >= end_offset {
15206                return Ok(());
15207            }
15208
15209            // Decode unknown envelopes for gaps in ordinals.
15210            while _next_ordinal_to_read < 1 {
15211                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15212                _next_ordinal_to_read += 1;
15213                next_offset += envelope_size;
15214            }
15215
15216            let next_out_of_line = decoder.next_out_of_line();
15217            let handles_before = decoder.remaining_handles();
15218            if let Some((inlined, num_bytes, num_handles)) =
15219                fidl::encoding::decode_envelope_header(decoder, next_offset)?
15220            {
15221                let member_inline_size =
15222                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
15223                if inlined != (member_inline_size <= 4) {
15224                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
15225                }
15226                let inner_offset;
15227                let mut inner_depth = depth.clone();
15228                if inlined {
15229                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
15230                    inner_offset = next_offset;
15231                } else {
15232                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
15233                    inner_depth.increment()?;
15234                }
15235                let val_ref = self.rx_bytes.get_or_insert_with(|| fidl::new_empty!(u64, D));
15236                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
15237                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
15238                {
15239                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
15240                }
15241                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
15242                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
15243                }
15244            }
15245
15246            next_offset += envelope_size;
15247            _next_ordinal_to_read += 1;
15248            if next_offset >= end_offset {
15249                return Ok(());
15250            }
15251
15252            // Decode unknown envelopes for gaps in ordinals.
15253            while _next_ordinal_to_read < 2 {
15254                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15255                _next_ordinal_to_read += 1;
15256                next_offset += envelope_size;
15257            }
15258
15259            let next_out_of_line = decoder.next_out_of_line();
15260            let handles_before = decoder.remaining_handles();
15261            if let Some((inlined, num_bytes, num_handles)) =
15262                fidl::encoding::decode_envelope_header(decoder, next_offset)?
15263            {
15264                let member_inline_size =
15265                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
15266                if inlined != (member_inline_size <= 4) {
15267                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
15268                }
15269                let inner_offset;
15270                let mut inner_depth = depth.clone();
15271                if inlined {
15272                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
15273                    inner_offset = next_offset;
15274                } else {
15275                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
15276                    inner_depth.increment()?;
15277                }
15278                let val_ref = self.rx_packets.get_or_insert_with(|| fidl::new_empty!(u64, D));
15279                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
15280                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
15281                {
15282                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
15283                }
15284                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
15285                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
15286                }
15287            }
15288
15289            next_offset += envelope_size;
15290            _next_ordinal_to_read += 1;
15291            if next_offset >= end_offset {
15292                return Ok(());
15293            }
15294
15295            // Decode unknown envelopes for gaps in ordinals.
15296            while _next_ordinal_to_read < 3 {
15297                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15298                _next_ordinal_to_read += 1;
15299                next_offset += envelope_size;
15300            }
15301
15302            let next_out_of_line = decoder.next_out_of_line();
15303            let handles_before = decoder.remaining_handles();
15304            if let Some((inlined, num_bytes, num_handles)) =
15305                fidl::encoding::decode_envelope_header(decoder, next_offset)?
15306            {
15307                let member_inline_size =
15308                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
15309                if inlined != (member_inline_size <= 4) {
15310                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
15311                }
15312                let inner_offset;
15313                let mut inner_depth = depth.clone();
15314                if inlined {
15315                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
15316                    inner_offset = next_offset;
15317                } else {
15318                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
15319                    inner_depth.increment()?;
15320                }
15321                let val_ref = self.tx_bytes.get_or_insert_with(|| fidl::new_empty!(u64, D));
15322                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
15323                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
15324                {
15325                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
15326                }
15327                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
15328                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
15329                }
15330            }
15331
15332            next_offset += envelope_size;
15333            _next_ordinal_to_read += 1;
15334            if next_offset >= end_offset {
15335                return Ok(());
15336            }
15337
15338            // Decode unknown envelopes for gaps in ordinals.
15339            while _next_ordinal_to_read < 4 {
15340                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15341                _next_ordinal_to_read += 1;
15342                next_offset += envelope_size;
15343            }
15344
15345            let next_out_of_line = decoder.next_out_of_line();
15346            let handles_before = decoder.remaining_handles();
15347            if let Some((inlined, num_bytes, num_handles)) =
15348                fidl::encoding::decode_envelope_header(decoder, next_offset)?
15349            {
15350                let member_inline_size =
15351                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
15352                if inlined != (member_inline_size <= 4) {
15353                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
15354                }
15355                let inner_offset;
15356                let mut inner_depth = depth.clone();
15357                if inlined {
15358                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
15359                    inner_offset = next_offset;
15360                } else {
15361                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
15362                    inner_depth.increment()?;
15363                }
15364                let val_ref = self.tx_failure.get_or_insert_with(|| fidl::new_empty!(u64, D));
15365                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
15366                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
15367                {
15368                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
15369                }
15370                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
15371                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
15372                }
15373            }
15374
15375            next_offset += envelope_size;
15376            _next_ordinal_to_read += 1;
15377            if next_offset >= end_offset {
15378                return Ok(());
15379            }
15380
15381            // Decode unknown envelopes for gaps in ordinals.
15382            while _next_ordinal_to_read < 5 {
15383                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15384                _next_ordinal_to_read += 1;
15385                next_offset += envelope_size;
15386            }
15387
15388            let next_out_of_line = decoder.next_out_of_line();
15389            let handles_before = decoder.remaining_handles();
15390            if let Some((inlined, num_bytes, num_handles)) =
15391                fidl::encoding::decode_envelope_header(decoder, next_offset)?
15392            {
15393                let member_inline_size =
15394                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
15395                if inlined != (member_inline_size <= 4) {
15396                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
15397                }
15398                let inner_offset;
15399                let mut inner_depth = depth.clone();
15400                if inlined {
15401                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
15402                    inner_offset = next_offset;
15403                } else {
15404                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
15405                    inner_depth.increment()?;
15406                }
15407                let val_ref = self.tx_packets.get_or_insert_with(|| fidl::new_empty!(u64, D));
15408                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
15409                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
15410                {
15411                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
15412                }
15413                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
15414                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
15415                }
15416            }
15417
15418            next_offset += envelope_size;
15419
15420            // Decode the remaining unknown envelopes.
15421            while next_offset < end_offset {
15422                _next_ordinal_to_read += 1;
15423                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15424                next_offset += envelope_size;
15425            }
15426
15427            Ok(())
15428        }
15429    }
15430
15431    impl TrelPeersInfo {
15432        #[inline(always)]
15433        fn max_ordinal_present(&self) -> u64 {
15434            if let Some(_) = self.num_trel_peers {
15435                return 1;
15436            }
15437            0
15438        }
15439    }
15440
15441    impl fidl::encoding::ValueTypeMarker for TrelPeersInfo {
15442        type Borrowed<'a> = &'a Self;
15443        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
15444            value
15445        }
15446    }
15447
15448    unsafe impl fidl::encoding::TypeMarker for TrelPeersInfo {
15449        type Owned = Self;
15450
15451        #[inline(always)]
15452        fn inline_align(_context: fidl::encoding::Context) -> usize {
15453            8
15454        }
15455
15456        #[inline(always)]
15457        fn inline_size(_context: fidl::encoding::Context) -> usize {
15458            16
15459        }
15460    }
15461
15462    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<TrelPeersInfo, D>
15463        for &TrelPeersInfo
15464    {
15465        unsafe fn encode(
15466            self,
15467            encoder: &mut fidl::encoding::Encoder<'_, D>,
15468            offset: usize,
15469            mut depth: fidl::encoding::Depth,
15470        ) -> fidl::Result<()> {
15471            encoder.debug_check_bounds::<TrelPeersInfo>(offset);
15472            // Vector header
15473            let max_ordinal: u64 = self.max_ordinal_present();
15474            encoder.write_num(max_ordinal, offset);
15475            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
15476            // Calling encoder.out_of_line_offset(0) is not allowed.
15477            if max_ordinal == 0 {
15478                return Ok(());
15479            }
15480            depth.increment()?;
15481            let envelope_size = 8;
15482            let bytes_len = max_ordinal as usize * envelope_size;
15483            #[allow(unused_variables)]
15484            let offset = encoder.out_of_line_offset(bytes_len);
15485            let mut _prev_end_offset: usize = 0;
15486            if 1 > max_ordinal {
15487                return Ok(());
15488            }
15489
15490            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
15491            // are envelope_size bytes.
15492            let cur_offset: usize = (1 - 1) * envelope_size;
15493
15494            // Zero reserved fields.
15495            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
15496
15497            // Safety:
15498            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
15499            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
15500            //   envelope_size bytes, there is always sufficient room.
15501            fidl::encoding::encode_in_envelope_optional::<u16, D>(
15502                self.num_trel_peers.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
15503                encoder,
15504                offset + cur_offset,
15505                depth,
15506            )?;
15507
15508            _prev_end_offset = cur_offset + envelope_size;
15509
15510            Ok(())
15511        }
15512    }
15513
15514    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for TrelPeersInfo {
15515        #[inline(always)]
15516        fn new_empty() -> Self {
15517            Self::default()
15518        }
15519
15520        unsafe fn decode(
15521            &mut self,
15522            decoder: &mut fidl::encoding::Decoder<'_, D>,
15523            offset: usize,
15524            mut depth: fidl::encoding::Depth,
15525        ) -> fidl::Result<()> {
15526            decoder.debug_check_bounds::<Self>(offset);
15527            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
15528                None => return Err(fidl::Error::NotNullable),
15529                Some(len) => len,
15530            };
15531            // Calling decoder.out_of_line_offset(0) is not allowed.
15532            if len == 0 {
15533                return Ok(());
15534            };
15535            depth.increment()?;
15536            let envelope_size = 8;
15537            let bytes_len = len * envelope_size;
15538            let offset = decoder.out_of_line_offset(bytes_len)?;
15539            // Decode the envelope for each type.
15540            let mut _next_ordinal_to_read = 0;
15541            let mut next_offset = offset;
15542            let end_offset = offset + bytes_len;
15543            _next_ordinal_to_read += 1;
15544            if next_offset >= end_offset {
15545                return Ok(());
15546            }
15547
15548            // Decode unknown envelopes for gaps in ordinals.
15549            while _next_ordinal_to_read < 1 {
15550                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15551                _next_ordinal_to_read += 1;
15552                next_offset += envelope_size;
15553            }
15554
15555            let next_out_of_line = decoder.next_out_of_line();
15556            let handles_before = decoder.remaining_handles();
15557            if let Some((inlined, num_bytes, num_handles)) =
15558                fidl::encoding::decode_envelope_header(decoder, next_offset)?
15559            {
15560                let member_inline_size =
15561                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
15562                if inlined != (member_inline_size <= 4) {
15563                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
15564                }
15565                let inner_offset;
15566                let mut inner_depth = depth.clone();
15567                if inlined {
15568                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
15569                    inner_offset = next_offset;
15570                } else {
15571                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
15572                    inner_depth.increment()?;
15573                }
15574                let val_ref = self.num_trel_peers.get_or_insert_with(|| fidl::new_empty!(u16, D));
15575                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
15576                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
15577                {
15578                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
15579                }
15580                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
15581                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
15582                }
15583            }
15584
15585            next_offset += envelope_size;
15586
15587            // Decode the remaining unknown envelopes.
15588            while next_offset < end_offset {
15589                _next_ordinal_to_read += 1;
15590                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15591                next_offset += envelope_size;
15592            }
15593
15594            Ok(())
15595        }
15596    }
15597
15598    impl UpstreamDnsCounters {
15599        #[inline(always)]
15600        fn max_ordinal_present(&self) -> u64 {
15601            if let Some(_) = self.failures {
15602                return 3;
15603            }
15604            if let Some(_) = self.responses {
15605                return 2;
15606            }
15607            if let Some(_) = self.queries {
15608                return 1;
15609            }
15610            0
15611        }
15612    }
15613
15614    impl fidl::encoding::ValueTypeMarker for UpstreamDnsCounters {
15615        type Borrowed<'a> = &'a Self;
15616        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
15617            value
15618        }
15619    }
15620
15621    unsafe impl fidl::encoding::TypeMarker for UpstreamDnsCounters {
15622        type Owned = Self;
15623
15624        #[inline(always)]
15625        fn inline_align(_context: fidl::encoding::Context) -> usize {
15626            8
15627        }
15628
15629        #[inline(always)]
15630        fn inline_size(_context: fidl::encoding::Context) -> usize {
15631            16
15632        }
15633    }
15634
15635    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<UpstreamDnsCounters, D>
15636        for &UpstreamDnsCounters
15637    {
15638        unsafe fn encode(
15639            self,
15640            encoder: &mut fidl::encoding::Encoder<'_, D>,
15641            offset: usize,
15642            mut depth: fidl::encoding::Depth,
15643        ) -> fidl::Result<()> {
15644            encoder.debug_check_bounds::<UpstreamDnsCounters>(offset);
15645            // Vector header
15646            let max_ordinal: u64 = self.max_ordinal_present();
15647            encoder.write_num(max_ordinal, offset);
15648            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
15649            // Calling encoder.out_of_line_offset(0) is not allowed.
15650            if max_ordinal == 0 {
15651                return Ok(());
15652            }
15653            depth.increment()?;
15654            let envelope_size = 8;
15655            let bytes_len = max_ordinal as usize * envelope_size;
15656            #[allow(unused_variables)]
15657            let offset = encoder.out_of_line_offset(bytes_len);
15658            let mut _prev_end_offset: usize = 0;
15659            if 1 > 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 = (1 - 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::<u32, D>(
15675                self.queries.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
15676                encoder,
15677                offset + cur_offset,
15678                depth,
15679            )?;
15680
15681            _prev_end_offset = cur_offset + envelope_size;
15682            if 2 > max_ordinal {
15683                return Ok(());
15684            }
15685
15686            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
15687            // are envelope_size bytes.
15688            let cur_offset: usize = (2 - 1) * envelope_size;
15689
15690            // Zero reserved fields.
15691            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
15692
15693            // Safety:
15694            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
15695            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
15696            //   envelope_size bytes, there is always sufficient room.
15697            fidl::encoding::encode_in_envelope_optional::<u32, D>(
15698                self.responses.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
15699                encoder,
15700                offset + cur_offset,
15701                depth,
15702            )?;
15703
15704            _prev_end_offset = cur_offset + envelope_size;
15705            if 3 > max_ordinal {
15706                return Ok(());
15707            }
15708
15709            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
15710            // are envelope_size bytes.
15711            let cur_offset: usize = (3 - 1) * envelope_size;
15712
15713            // Zero reserved fields.
15714            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
15715
15716            // Safety:
15717            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
15718            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
15719            //   envelope_size bytes, there is always sufficient room.
15720            fidl::encoding::encode_in_envelope_optional::<u32, D>(
15721                self.failures.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
15722                encoder,
15723                offset + cur_offset,
15724                depth,
15725            )?;
15726
15727            _prev_end_offset = cur_offset + envelope_size;
15728
15729            Ok(())
15730        }
15731    }
15732
15733    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for UpstreamDnsCounters {
15734        #[inline(always)]
15735        fn new_empty() -> Self {
15736            Self::default()
15737        }
15738
15739        unsafe fn decode(
15740            &mut self,
15741            decoder: &mut fidl::encoding::Decoder<'_, D>,
15742            offset: usize,
15743            mut depth: fidl::encoding::Depth,
15744        ) -> fidl::Result<()> {
15745            decoder.debug_check_bounds::<Self>(offset);
15746            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
15747                None => return Err(fidl::Error::NotNullable),
15748                Some(len) => len,
15749            };
15750            // Calling decoder.out_of_line_offset(0) is not allowed.
15751            if len == 0 {
15752                return Ok(());
15753            };
15754            depth.increment()?;
15755            let envelope_size = 8;
15756            let bytes_len = len * envelope_size;
15757            let offset = decoder.out_of_line_offset(bytes_len)?;
15758            // Decode the envelope for each type.
15759            let mut _next_ordinal_to_read = 0;
15760            let mut next_offset = offset;
15761            let end_offset = offset + bytes_len;
15762            _next_ordinal_to_read += 1;
15763            if next_offset >= end_offset {
15764                return Ok(());
15765            }
15766
15767            // Decode unknown envelopes for gaps in ordinals.
15768            while _next_ordinal_to_read < 1 {
15769                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15770                _next_ordinal_to_read += 1;
15771                next_offset += envelope_size;
15772            }
15773
15774            let next_out_of_line = decoder.next_out_of_line();
15775            let handles_before = decoder.remaining_handles();
15776            if let Some((inlined, num_bytes, num_handles)) =
15777                fidl::encoding::decode_envelope_header(decoder, next_offset)?
15778            {
15779                let member_inline_size =
15780                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
15781                if inlined != (member_inline_size <= 4) {
15782                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
15783                }
15784                let inner_offset;
15785                let mut inner_depth = depth.clone();
15786                if inlined {
15787                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
15788                    inner_offset = next_offset;
15789                } else {
15790                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
15791                    inner_depth.increment()?;
15792                }
15793                let val_ref = self.queries.get_or_insert_with(|| fidl::new_empty!(u32, D));
15794                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
15795                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
15796                {
15797                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
15798                }
15799                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
15800                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
15801                }
15802            }
15803
15804            next_offset += envelope_size;
15805            _next_ordinal_to_read += 1;
15806            if next_offset >= end_offset {
15807                return Ok(());
15808            }
15809
15810            // Decode unknown envelopes for gaps in ordinals.
15811            while _next_ordinal_to_read < 2 {
15812                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15813                _next_ordinal_to_read += 1;
15814                next_offset += envelope_size;
15815            }
15816
15817            let next_out_of_line = decoder.next_out_of_line();
15818            let handles_before = decoder.remaining_handles();
15819            if let Some((inlined, num_bytes, num_handles)) =
15820                fidl::encoding::decode_envelope_header(decoder, next_offset)?
15821            {
15822                let member_inline_size =
15823                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
15824                if inlined != (member_inline_size <= 4) {
15825                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
15826                }
15827                let inner_offset;
15828                let mut inner_depth = depth.clone();
15829                if inlined {
15830                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
15831                    inner_offset = next_offset;
15832                } else {
15833                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
15834                    inner_depth.increment()?;
15835                }
15836                let val_ref = self.responses.get_or_insert_with(|| fidl::new_empty!(u32, D));
15837                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
15838                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
15839                {
15840                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
15841                }
15842                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
15843                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
15844                }
15845            }
15846
15847            next_offset += envelope_size;
15848            _next_ordinal_to_read += 1;
15849            if next_offset >= end_offset {
15850                return Ok(());
15851            }
15852
15853            // Decode unknown envelopes for gaps in ordinals.
15854            while _next_ordinal_to_read < 3 {
15855                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15856                _next_ordinal_to_read += 1;
15857                next_offset += envelope_size;
15858            }
15859
15860            let next_out_of_line = decoder.next_out_of_line();
15861            let handles_before = decoder.remaining_handles();
15862            if let Some((inlined, num_bytes, num_handles)) =
15863                fidl::encoding::decode_envelope_header(decoder, next_offset)?
15864            {
15865                let member_inline_size =
15866                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
15867                if inlined != (member_inline_size <= 4) {
15868                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
15869                }
15870                let inner_offset;
15871                let mut inner_depth = depth.clone();
15872                if inlined {
15873                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
15874                    inner_offset = next_offset;
15875                } else {
15876                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
15877                    inner_depth.increment()?;
15878                }
15879                let val_ref = self.failures.get_or_insert_with(|| fidl::new_empty!(u32, D));
15880                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
15881                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
15882                {
15883                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
15884                }
15885                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
15886                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
15887                }
15888            }
15889
15890            next_offset += envelope_size;
15891
15892            // Decode the remaining unknown envelopes.
15893            while next_offset < end_offset {
15894                _next_ordinal_to_read += 1;
15895                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15896                next_offset += envelope_size;
15897            }
15898
15899            Ok(())
15900        }
15901    }
15902
15903    impl UpstreamDnsInfo {
15904        #[inline(always)]
15905        fn max_ordinal_present(&self) -> u64 {
15906            if let Some(_) = self.upstream_dns_query_state {
15907                return 1;
15908            }
15909            0
15910        }
15911    }
15912
15913    impl fidl::encoding::ValueTypeMarker for UpstreamDnsInfo {
15914        type Borrowed<'a> = &'a Self;
15915        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
15916            value
15917        }
15918    }
15919
15920    unsafe impl fidl::encoding::TypeMarker for UpstreamDnsInfo {
15921        type Owned = Self;
15922
15923        #[inline(always)]
15924        fn inline_align(_context: fidl::encoding::Context) -> usize {
15925            8
15926        }
15927
15928        #[inline(always)]
15929        fn inline_size(_context: fidl::encoding::Context) -> usize {
15930            16
15931        }
15932    }
15933
15934    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<UpstreamDnsInfo, D>
15935        for &UpstreamDnsInfo
15936    {
15937        unsafe fn encode(
15938            self,
15939            encoder: &mut fidl::encoding::Encoder<'_, D>,
15940            offset: usize,
15941            mut depth: fidl::encoding::Depth,
15942        ) -> fidl::Result<()> {
15943            encoder.debug_check_bounds::<UpstreamDnsInfo>(offset);
15944            // Vector header
15945            let max_ordinal: u64 = self.max_ordinal_present();
15946            encoder.write_num(max_ordinal, offset);
15947            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
15948            // Calling encoder.out_of_line_offset(0) is not allowed.
15949            if max_ordinal == 0 {
15950                return Ok(());
15951            }
15952            depth.increment()?;
15953            let envelope_size = 8;
15954            let bytes_len = max_ordinal as usize * envelope_size;
15955            #[allow(unused_variables)]
15956            let offset = encoder.out_of_line_offset(bytes_len);
15957            let mut _prev_end_offset: usize = 0;
15958            if 1 > max_ordinal {
15959                return Ok(());
15960            }
15961
15962            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
15963            // are envelope_size bytes.
15964            let cur_offset: usize = (1 - 1) * envelope_size;
15965
15966            // Zero reserved fields.
15967            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
15968
15969            // Safety:
15970            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
15971            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
15972            //   envelope_size bytes, there is always sufficient room.
15973            fidl::encoding::encode_in_envelope_optional::<UpstreamDnsQueryState, D>(
15974                self.upstream_dns_query_state
15975                    .as_ref()
15976                    .map(<UpstreamDnsQueryState as fidl::encoding::ValueTypeMarker>::borrow),
15977                encoder,
15978                offset + cur_offset,
15979                depth,
15980            )?;
15981
15982            _prev_end_offset = cur_offset + envelope_size;
15983
15984            Ok(())
15985        }
15986    }
15987
15988    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for UpstreamDnsInfo {
15989        #[inline(always)]
15990        fn new_empty() -> Self {
15991            Self::default()
15992        }
15993
15994        unsafe fn decode(
15995            &mut self,
15996            decoder: &mut fidl::encoding::Decoder<'_, D>,
15997            offset: usize,
15998            mut depth: fidl::encoding::Depth,
15999        ) -> fidl::Result<()> {
16000            decoder.debug_check_bounds::<Self>(offset);
16001            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
16002                None => return Err(fidl::Error::NotNullable),
16003                Some(len) => len,
16004            };
16005            // Calling decoder.out_of_line_offset(0) is not allowed.
16006            if len == 0 {
16007                return Ok(());
16008            };
16009            depth.increment()?;
16010            let envelope_size = 8;
16011            let bytes_len = len * envelope_size;
16012            let offset = decoder.out_of_line_offset(bytes_len)?;
16013            // Decode the envelope for each type.
16014            let mut _next_ordinal_to_read = 0;
16015            let mut next_offset = offset;
16016            let end_offset = offset + bytes_len;
16017            _next_ordinal_to_read += 1;
16018            if next_offset >= end_offset {
16019                return Ok(());
16020            }
16021
16022            // Decode unknown envelopes for gaps in ordinals.
16023            while _next_ordinal_to_read < 1 {
16024                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
16025                _next_ordinal_to_read += 1;
16026                next_offset += envelope_size;
16027            }
16028
16029            let next_out_of_line = decoder.next_out_of_line();
16030            let handles_before = decoder.remaining_handles();
16031            if let Some((inlined, num_bytes, num_handles)) =
16032                fidl::encoding::decode_envelope_header(decoder, next_offset)?
16033            {
16034                let member_inline_size =
16035                    <UpstreamDnsQueryState as fidl::encoding::TypeMarker>::inline_size(
16036                        decoder.context,
16037                    );
16038                if inlined != (member_inline_size <= 4) {
16039                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
16040                }
16041                let inner_offset;
16042                let mut inner_depth = depth.clone();
16043                if inlined {
16044                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
16045                    inner_offset = next_offset;
16046                } else {
16047                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
16048                    inner_depth.increment()?;
16049                }
16050                let val_ref = self
16051                    .upstream_dns_query_state
16052                    .get_or_insert_with(|| fidl::new_empty!(UpstreamDnsQueryState, D));
16053                fidl::decode!(
16054                    UpstreamDnsQueryState,
16055                    D,
16056                    val_ref,
16057                    decoder,
16058                    inner_offset,
16059                    inner_depth
16060                )?;
16061                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
16062                {
16063                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
16064                }
16065                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
16066                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
16067                }
16068            }
16069
16070            next_offset += envelope_size;
16071
16072            // Decode the remaining unknown envelopes.
16073            while next_offset < end_offset {
16074                _next_ordinal_to_read += 1;
16075                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
16076                next_offset += envelope_size;
16077            }
16078
16079            Ok(())
16080        }
16081    }
16082
16083    impl fidl::encoding::ValueTypeMarker for JoinParams {
16084        type Borrowed<'a> = &'a Self;
16085        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
16086            value
16087        }
16088    }
16089
16090    unsafe impl fidl::encoding::TypeMarker for JoinParams {
16091        type Owned = Self;
16092
16093        #[inline(always)]
16094        fn inline_align(_context: fidl::encoding::Context) -> usize {
16095            8
16096        }
16097
16098        #[inline(always)]
16099        fn inline_size(_context: fidl::encoding::Context) -> usize {
16100            16
16101        }
16102    }
16103
16104    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<JoinParams, D>
16105        for &JoinParams
16106    {
16107        #[inline]
16108        unsafe fn encode(
16109            self,
16110            encoder: &mut fidl::encoding::Encoder<'_, D>,
16111            offset: usize,
16112            _depth: fidl::encoding::Depth,
16113        ) -> fidl::Result<()> {
16114            encoder.debug_check_bounds::<JoinParams>(offset);
16115            encoder.write_num::<u64>(self.ordinal(), offset);
16116            match self {
16117            JoinParams::ProvisioningParameter(ref val) => {
16118                fidl::encoding::encode_in_envelope::<fidl_fuchsia_lowpan_device__common::ProvisioningParams, D>(
16119                    <fidl_fuchsia_lowpan_device__common::ProvisioningParams as fidl::encoding::ValueTypeMarker>::borrow(val),
16120                    encoder, offset + 8, _depth
16121                )
16122            }
16123            JoinParams::JoinerParameter(ref val) => {
16124                fidl::encoding::encode_in_envelope::<JoinerCommissioningParams, D>(
16125                    <JoinerCommissioningParams as fidl::encoding::ValueTypeMarker>::borrow(val),
16126                    encoder, offset + 8, _depth
16127                )
16128            }
16129            JoinParams::__SourceBreaking { .. } => Err(fidl::Error::UnknownUnionTag),
16130        }
16131        }
16132    }
16133
16134    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for JoinParams {
16135        #[inline(always)]
16136        fn new_empty() -> Self {
16137            Self::__SourceBreaking { unknown_ordinal: 0 }
16138        }
16139
16140        #[inline]
16141        unsafe fn decode(
16142            &mut self,
16143            decoder: &mut fidl::encoding::Decoder<'_, D>,
16144            offset: usize,
16145            mut depth: fidl::encoding::Depth,
16146        ) -> fidl::Result<()> {
16147            decoder.debug_check_bounds::<Self>(offset);
16148            #[allow(unused_variables)]
16149            let next_out_of_line = decoder.next_out_of_line();
16150            let handles_before = decoder.remaining_handles();
16151            let (ordinal, inlined, num_bytes, num_handles) =
16152                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
16153
16154            let member_inline_size = match ordinal {
16155            1 => <fidl_fuchsia_lowpan_device__common::ProvisioningParams as fidl::encoding::TypeMarker>::inline_size(decoder.context),
16156            2 => <JoinerCommissioningParams as fidl::encoding::TypeMarker>::inline_size(decoder.context),
16157            0 => return Err(fidl::Error::UnknownUnionTag),
16158            _ => num_bytes as usize,
16159        };
16160
16161            if inlined != (member_inline_size <= 4) {
16162                return Err(fidl::Error::InvalidInlineBitInEnvelope);
16163            }
16164            let _inner_offset;
16165            if inlined {
16166                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
16167                _inner_offset = offset + 8;
16168            } else {
16169                depth.increment()?;
16170                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
16171            }
16172            match ordinal {
16173                1 => {
16174                    #[allow(irrefutable_let_patterns)]
16175                    if let JoinParams::ProvisioningParameter(_) = self {
16176                        // Do nothing, read the value into the object
16177                    } else {
16178                        // Initialize `self` to the right variant
16179                        *self = JoinParams::ProvisioningParameter(fidl::new_empty!(
16180                            fidl_fuchsia_lowpan_device__common::ProvisioningParams,
16181                            D
16182                        ));
16183                    }
16184                    #[allow(irrefutable_let_patterns)]
16185                    if let JoinParams::ProvisioningParameter(ref mut val) = self {
16186                        fidl::decode!(
16187                            fidl_fuchsia_lowpan_device__common::ProvisioningParams,
16188                            D,
16189                            val,
16190                            decoder,
16191                            _inner_offset,
16192                            depth
16193                        )?;
16194                    } else {
16195                        unreachable!()
16196                    }
16197                }
16198                2 => {
16199                    #[allow(irrefutable_let_patterns)]
16200                    if let JoinParams::JoinerParameter(_) = self {
16201                        // Do nothing, read the value into the object
16202                    } else {
16203                        // Initialize `self` to the right variant
16204                        *self = JoinParams::JoinerParameter(fidl::new_empty!(
16205                            JoinerCommissioningParams,
16206                            D
16207                        ));
16208                    }
16209                    #[allow(irrefutable_let_patterns)]
16210                    if let JoinParams::JoinerParameter(ref mut val) = self {
16211                        fidl::decode!(
16212                            JoinerCommissioningParams,
16213                            D,
16214                            val,
16215                            decoder,
16216                            _inner_offset,
16217                            depth
16218                        )?;
16219                    } else {
16220                        unreachable!()
16221                    }
16222                }
16223                #[allow(deprecated)]
16224                ordinal => {
16225                    for _ in 0..num_handles {
16226                        decoder.drop_next_handle()?;
16227                    }
16228                    *self = JoinParams::__SourceBreaking { unknown_ordinal: ordinal };
16229                }
16230            }
16231            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
16232                return Err(fidl::Error::InvalidNumBytesInEnvelope);
16233            }
16234            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
16235                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
16236            }
16237            Ok(())
16238        }
16239    }
16240
16241    impl fidl::encoding::ValueTypeMarker for ProvisioningProgress {
16242        type Borrowed<'a> = &'a Self;
16243        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
16244            value
16245        }
16246    }
16247
16248    unsafe impl fidl::encoding::TypeMarker for ProvisioningProgress {
16249        type Owned = Self;
16250
16251        #[inline(always)]
16252        fn inline_align(_context: fidl::encoding::Context) -> usize {
16253            8
16254        }
16255
16256        #[inline(always)]
16257        fn inline_size(_context: fidl::encoding::Context) -> usize {
16258            16
16259        }
16260    }
16261
16262    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<ProvisioningProgress, D>
16263        for &ProvisioningProgress
16264    {
16265        #[inline]
16266        unsafe fn encode(
16267            self,
16268            encoder: &mut fidl::encoding::Encoder<'_, D>,
16269            offset: usize,
16270            _depth: fidl::encoding::Depth,
16271        ) -> fidl::Result<()> {
16272            encoder.debug_check_bounds::<ProvisioningProgress>(offset);
16273            encoder.write_num::<u64>(self.ordinal(), offset);
16274            match self {
16275            ProvisioningProgress::Progress(ref val) => {
16276                fidl::encoding::encode_in_envelope::<f32, D>(
16277                    <f32 as fidl::encoding::ValueTypeMarker>::borrow(val),
16278                    encoder, offset + 8, _depth
16279                )
16280            }
16281            ProvisioningProgress::Identity(ref val) => {
16282                fidl::encoding::encode_in_envelope::<fidl_fuchsia_lowpan_device__common::Identity, D>(
16283                    <fidl_fuchsia_lowpan_device__common::Identity as fidl::encoding::ValueTypeMarker>::borrow(val),
16284                    encoder, offset + 8, _depth
16285                )
16286            }
16287            ProvisioningProgress::__SourceBreaking { .. } => Err(fidl::Error::UnknownUnionTag),
16288        }
16289        }
16290    }
16291
16292    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ProvisioningProgress {
16293        #[inline(always)]
16294        fn new_empty() -> Self {
16295            Self::__SourceBreaking { unknown_ordinal: 0 }
16296        }
16297
16298        #[inline]
16299        unsafe fn decode(
16300            &mut self,
16301            decoder: &mut fidl::encoding::Decoder<'_, D>,
16302            offset: usize,
16303            mut depth: fidl::encoding::Depth,
16304        ) -> fidl::Result<()> {
16305            decoder.debug_check_bounds::<Self>(offset);
16306            #[allow(unused_variables)]
16307            let next_out_of_line = decoder.next_out_of_line();
16308            let handles_before = decoder.remaining_handles();
16309            let (ordinal, inlined, num_bytes, num_handles) =
16310                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
16311
16312            let member_inline_size = match ordinal {
16313            1 => <f32 as fidl::encoding::TypeMarker>::inline_size(decoder.context),
16314            2 => <fidl_fuchsia_lowpan_device__common::Identity as fidl::encoding::TypeMarker>::inline_size(decoder.context),
16315            0 => return Err(fidl::Error::UnknownUnionTag),
16316            _ => num_bytes as usize,
16317        };
16318
16319            if inlined != (member_inline_size <= 4) {
16320                return Err(fidl::Error::InvalidInlineBitInEnvelope);
16321            }
16322            let _inner_offset;
16323            if inlined {
16324                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
16325                _inner_offset = offset + 8;
16326            } else {
16327                depth.increment()?;
16328                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
16329            }
16330            match ordinal {
16331                1 => {
16332                    #[allow(irrefutable_let_patterns)]
16333                    if let ProvisioningProgress::Progress(_) = self {
16334                        // Do nothing, read the value into the object
16335                    } else {
16336                        // Initialize `self` to the right variant
16337                        *self = ProvisioningProgress::Progress(fidl::new_empty!(f32, D));
16338                    }
16339                    #[allow(irrefutable_let_patterns)]
16340                    if let ProvisioningProgress::Progress(ref mut val) = self {
16341                        fidl::decode!(f32, D, val, decoder, _inner_offset, depth)?;
16342                    } else {
16343                        unreachable!()
16344                    }
16345                }
16346                2 => {
16347                    #[allow(irrefutable_let_patterns)]
16348                    if let ProvisioningProgress::Identity(_) = self {
16349                        // Do nothing, read the value into the object
16350                    } else {
16351                        // Initialize `self` to the right variant
16352                        *self = ProvisioningProgress::Identity(fidl::new_empty!(
16353                            fidl_fuchsia_lowpan_device__common::Identity,
16354                            D
16355                        ));
16356                    }
16357                    #[allow(irrefutable_let_patterns)]
16358                    if let ProvisioningProgress::Identity(ref mut val) = self {
16359                        fidl::decode!(
16360                            fidl_fuchsia_lowpan_device__common::Identity,
16361                            D,
16362                            val,
16363                            decoder,
16364                            _inner_offset,
16365                            depth
16366                        )?;
16367                    } else {
16368                        unreachable!()
16369                    }
16370                }
16371                #[allow(deprecated)]
16372                ordinal => {
16373                    for _ in 0..num_handles {
16374                        decoder.drop_next_handle()?;
16375                    }
16376                    *self = ProvisioningProgress::__SourceBreaking { unknown_ordinal: ordinal };
16377                }
16378            }
16379            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
16380                return Err(fidl::Error::InvalidNumBytesInEnvelope);
16381            }
16382            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
16383                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
16384            }
16385            Ok(())
16386        }
16387    }
16388}